public inbox for gnats-prs@sourceware.org
help / color / mirror / Atom feed
* gnats/229: gcc-3.0 reports segmentation fault
@ 2001-08-02 12:04 rrp
  0 siblings, 0 replies; only message in thread
From: rrp @ 2001-08-02 12:04 UTC (permalink / raw)
  To: gnats-gnats

>Number:         229
>Category:       gnats
>Synopsis:       gcc-3.0 reports segmentation fault
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Aug 02 12:04:01 PDT 2001
>Closed-Date:
>Last-Modified:
>Originator:     rrp@mipl.jpl.nasa.gov
>Release:        gcc-3.0
>Organization:
>Environment:
RedHat Linux 7.1
>Description:
gcc-3.0 gives segmentation fault error. The exact error is

 g++ -W -Wall -Wpointer-arith -pipe -O3 -g -Wno-uninitialized -fno-implicit-templates -D_POSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -D_REENTRANT -DACE_HAS_AIO_CALLS -I/home/rrp/school/thesis/proj/ACE_wrappers -DACE_HAS_EXCEPTIONS -D__ACE_INLINE__ -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO/orbsvcs -I/home/rrp/school/thesis/proj/ACE_wrappers/TAO/orbsvcs/orbsvcs/ESF -c -fPIC -o .shobj/EC_ProxyConsumer.o Event/EC_ProxyConsumer.cpp
Event/EC_ProxyConsumer.cpp: In member function `virtual void
   TAO_EC_ProxyPushConsumer::push(const RtecEventComm::EventSet&,
   CORBA::Environment&)':
Event/EC_ProxyConsumer.cpp:333: Internal error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL: http://www.gnu.org/software/gcc/bugs.html > for instructions.
>How-To-Repeat:
I am not able to come up with a smaller testcase. To
repeate the error, you have to build ACE+TAO on the above
mentioned environment with inline and exceptions turned on.
>Fix:

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

IyAzICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIKIyAxICJFdmVudC9FQ19Qcm94eUNvbnN1
bWVyLmgiIDEKIyAxNyAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICJFdmVudC9F
Q19Qcm94eUNvbnN1bWVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgi
IDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIiAxCiMg
MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz
L29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5o
IiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlUy5oIgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQoj
IDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj
cy9vcmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlUy5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVC
YXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9UaW1lQmFzZUMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3
ZC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vY29yYmFmd2QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIiAxCiMgMzEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDMy
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2Uu
aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
Y29uZmlnLWFsbC5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9jb25maWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy5oIiAxCiMgOSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDEw
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLmgi
IDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2Nv
bmZpZy1saW51eC1jb21tb24uaCIgMQojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1vbi5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDEzICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1v
bi5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9jb25maWctbGludXgtY29tbW9uLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lz
L2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgi
IDEgMwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWxpbnV4LWNvbW1vbi5o
IiAyCiMgMTE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
Y29uZmlnLWxpbnV4LWNvbW1vbi5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9jb25maWctZysrLWNvbW1vbi5oIiAxCiMgMTEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctZysrLWNvbW1vbi5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg
MQojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29u
ZmlnLWcrKy1jb21tb24uaCIgMgojIDExMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1nKystY29tbW9uLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDExMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1nKystY29tbW9uLmgi
IDIKIyAxMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9j
b25maWctbGludXgtY29tbW9uLmgiIDIKIyAyODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctbGludXgtY29tbW9uLmgiCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI4OCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1saW51eC1j
b21tb24uaCIgMgojIDEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvY29uZmlnLmgiIDIKIyA1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL2NvbmZpZy5oIgojIDEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDEgMwoj
IDE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVz
LmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL3NjaGVkLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx
OTkgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgMzAgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf
Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBf
X2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRf
dCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2lu
dCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lu
b190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7
CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlw
ZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25n
IF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50
IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lk
X3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlw
ZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190
Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Js
a190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lk
X3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoK
CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcg
aW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVm
IF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsK
dHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m
c2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBf
X3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBl
ZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3Rf
dXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgX19zb2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5o
IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu
aCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog
IH07CiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2Nr
OwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9k
ZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRh
Y2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3Nj
aGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBf
X2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwog
IHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QK
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBf
X2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf
X2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhy
ZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGlu
dCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsK
ICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRy
X3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0
aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAg
aW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVh
ZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dh
aXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcnds
b2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hh
cmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRo
cmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFz
dGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7
CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5
cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsK
CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgi
IDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQg
dHZfbnNlYzsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQu
aCIgMwpzdHJ1Y3Qgc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0eTsKICB9
OwoKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiBpbnQgY2xvbmUgKGludCAoKl9fZm4pICh2b2lkICpf
X2FyZyksIHZvaWQgKl9fY2hpbGRfc3RhY2ssCiAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdz
LCB2b2lkICpfX2FyZykgdGhyb3cgKCk7CgoKfQojIDMzICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MiAzCgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtIChfX3BpZF90
IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBzdHJ1Y3Qgc2No
ZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1
bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2No
ZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19waWQsIHN0cnVjdCB0
aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMu
MC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAz
CiMgMzkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3RpbWUuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU2ICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNTcg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CgoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZV90IHRpbWVfdDsKIyA3OSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDgwICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsK
IyA5MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgp0eXBlZGVmIF9fdGltZXJf
dCB0aW1lcl90OwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdG0KewogIGlu
dCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQgdG1fbWRheTsKICBp
bnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGludCB0bV95ZGF5Owog
IGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2NvbnN0IGNoYXIgKnRt
X3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNw
ZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1
Y3Qgc2lnZXZlbnQ7CgoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgoKZXh0ZXJuIGNs
b2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZSAodGltZV90
ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QgX190
aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp
OwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRt
ICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAgIHRocm93ICgp
OwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIp
IHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUgKF9fY29uc3QgdGltZV90
ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2Nv
bnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0
IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190
cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1l
cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChfX2NvbnN0IHRp
bWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y
ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4
dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRl
cm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpl
eHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0aHJvdyAoKTsKIyAyNzEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1lZ20gKHN0cnVjdCB0bSAq
X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwgKHN0cnVjdCB0bSAqX190
cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19j
b25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9f
cmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCBfX2Ns
b2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xv
Y2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVj
ICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2NrX25hbm9zbGVlcCAoY2xv
Y2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9j
a19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19pZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX2V2
cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1lcmlk
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCBfX3RpbWVyaWQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQs
IGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGl0
aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMg
Kl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRvdmVycnVuICh0
aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAz
CmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAo
X19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGlt
ZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
dHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX19yZXNi
dWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdz
ZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50
IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25n
IGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAg
fSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDQ4ICIvdXNy
L2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwojIDM3MSAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5o
IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMg
NTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9J
TkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9J
TkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRI
UkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0Kewog
IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAg
UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK
CiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQ
VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU
SFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQ
VEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVB
RF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0Kewog
IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoK
CmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xP
Q0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJF
Q1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tf
UFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1
Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop
OwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2Ns
ZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJM
RSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxf
REVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90
ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAoKTsKCgpleHRlcm4gcHRo
cmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQyKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0dmFsKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBpbnQgcHRocmVh
ZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3JldHVybikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90IF9fdGgpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3QgKl9f
YXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZGVzdHJveSAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19k
ZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRw
YXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0
cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3BhcmFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0
aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJp
Y3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0
aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq
X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0
ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fc2Nv
cGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fZ3VhcmRz
aXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAg
ICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChw
dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0
cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3RyaWN0
IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpfX3N0YWNrYWRkciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YWNrc2l6ZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9fY29uc3QgcHRocmVhZF9h
dHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRocmVhZF9hdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFj
a3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZSAo
X19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKQog
ICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVhZF90
IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9f
cG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19w
YXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNvbmN1cnJlbmN5
ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y29uY3VycmVuY3kgKGlu
dCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p
ZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF9pbml0IChwdGhyZWFk
X211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211
dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9t
dXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3Rp
bWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3Ry
aWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5p
dCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0
IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19h
dHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFy
ZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSAo
cHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19jb25zdCBwdGhyZWFkX211
dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29u
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRy
X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ryb3kgKHB0aHJlYWRfY29u
ZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3NpZ25hbCAo
cHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25k
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJp
Y3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfdGltZWR3
YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0
dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfY29uZGF0
dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19y
ZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0
cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry
aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRo
cmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfZGVzdHJv
eSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3Qg
Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHJk
bG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz
dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxvY2sgKHB0aHJlYWRfcnds
b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3Ry
eXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry
aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCgoK
CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJlYWRfcndsb2NrYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ry
b3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRy
X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0
IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9ucCAoX19jb25zdCBwdGhy
ZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3
bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgdGhyb3cgKCk7
CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu
X2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVkKQogICAgIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJlYWRfc3Bpbmxv
Y2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw
dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9i
YXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFy
cmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJh
dHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJhdHRyX3Qg
Kl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNo
YXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hhcmVkIChwdGhy
ZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk
X2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhyb3cgKCk7CiMg
NTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfY3Jl
YXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgdGhyb3cg
KCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19r
ZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50
IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9sLAogICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQg
Kl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2VsdHlw
ZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9p
ZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYxMCAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2ggKHN0cnVjdCBf
cHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZv
aWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAq
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRl
KSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQg
X3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZm
ZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3BfcmVzdG9yZSAoc3RydWN0
IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cg
KCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5oIiAxIDMKIyAzMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX3NpZ21hc2sg
KGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgX19zaWdzZXRf
dCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Np
Z3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl
YWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjU2
ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhy
b3cgKCk7Cgp9CiMgNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9jb25maWcuaCIgMgojIDY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvY29uZmlnLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLmgiIDIKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDE0OSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFX2V4cG9y
dC5oIiAxCiMgMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9BQ0VfZXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvQUNFX2V4cG9ydC5oIiAyCiMgMTUwICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAyCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N2Y19leHBvcnQuaCIg
MQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3Zj
X2V4cG9ydC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9jb25maWctYWxsLmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3N2Y19leHBvcnQuaCIgMgojIDE1MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDMwNyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvYWNlX3djaGFy
LmgiIDEKIyAxMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9hY2Vfd2NoYXIuaCIKdHlwZWRlZiBjaGFyIEFDRV9UQ0hBUjsKdHlwZWRlZiB3Y2hhcl90IEFD
RV9BTlRJX1RDSEFSOwojIDI5NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL2FjZV93Y2hhci5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9hY2Vfd2NoYXIuaW5sIiAxCiMgMjk1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvYWNlX3djaGFyLmgiIDIKIyAzMDggIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIK
IyAzMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25m
aWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TX0Vycm5vLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWcuaCIgMQojIDIwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQu
aCIgMQojIDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1NfRXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0LmgiIDIKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiIDIKIyAzMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiCiMgMSAiL3Vz
ci9pbmNsdWRlL2Vycm5vLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Vycm5vLmgi
IDIgMwoKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEg
MwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xp
bnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMg
NSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0
cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4g
aW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgi
IDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9p
bnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5
ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90OwojIDMyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgoj
IDEwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vy
cm5vLmgiCmNsYXNzIEFDRV9FcnJub19HdWFyZAp7CnB1YmxpYzoKCgogIEFDRV9FcnJub19HdWFy
ZCAoaW50ICZlcnJub19yZWYsCiAgICAgICAgICAgICAgICAgICBpbnQgZXJyb3IpOwoKCgogIEFD
RV9FcnJub19HdWFyZCAoaW50ICZlcnJub19yZWYpOwoKCiAgfkFDRV9FcnJub19HdWFyZCAodm9p
ZCk7CgoKCgoKCgogIGludCBvcGVyYXRvcj0gKGludCBlcnJvcik7CgoKICBpbnQgb3BlcmF0b3I9
PSAoaW50IGVycm9yKTsKCgogIGludCBvcGVyYXRvciE9IChpbnQgZXJyb3IpOwoKcHJpdmF0ZToK
CiAgaW50ICplcnJub19wdHJfOwoKICBpbnQgZXJyb3JfOwp9OwoKCgoKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5pbmwiIDEKIyAy
OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5v
LmlubCIKaW5saW5lCkFDRV9FcnJub19HdWFyZDo6QUNFX0Vycm5vX0d1YXJkIChpbnQgJmVycm5v
X3JlZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlcnJvcikKICA6Cgog
ICAgZXJybm9fcHRyXyAoJmVycm5vX3JlZiksCgogICAgZXJyb3JfIChlcnJvcikKewoKCgp9Cgpp
bmxpbmUKQUNFX0Vycm5vX0d1YXJkOjpBQ0VfRXJybm9fR3VhcmQgKGludCAmZXJybm9fcmVmKQog
IDoKCiAgICBlcnJub19wdHJfICgmZXJybm9fcmVmKSwKCiAgICBlcnJvcl8gKGVycm5vX3JlZikK
ewp9CgppbmxpbmUKQUNFX0Vycm5vX0d1YXJkOjp+QUNFX0Vycm5vX0d1YXJkICh2b2lkKQp7Cgog
ICplcnJub19wdHJfID0gdGhpcy0+ZXJyb3JfOwoKCgp9CiMgNzEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5pbmwiCmlubGluZSBpbnQKQUNF
X0Vycm5vX0d1YXJkOjpvcGVyYXRvcj0gKGludCBlcnJvcikKewogIHJldHVybiB0aGlzLT5lcnJv
cl8gPSBlcnJvcjsKfQoKaW5saW5lIGludApBQ0VfRXJybm9fR3VhcmQ6Om9wZXJhdG9yPT0gKGlu
dCBlcnJvcikKewogIHJldHVybiB0aGlzLT5lcnJvcl8gPT0gZXJyb3I7Cn0KCmlubGluZSBpbnQK
QUNFX0Vycm5vX0d1YXJkOjpvcGVyYXRvciE9IChpbnQgZXJyb3IpCnsKICByZXR1cm4gdGhpcy0+
ZXJyb3JfICE9IGVycm9yOwp9CiMgMTQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1NfRXJybm8uaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE0NiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0Vycm5vLmgiIDIKIyAzMzggIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDIK
IyAzNjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25m
aWctYWxsLmgiCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgMzEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDE0NyAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRpZmZf
dDsKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRk
ZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6
OnNpemVfdDsKfQojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGRl
ZiIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM0
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAzCmV4dGVybiAi
QysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgog
ICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93
KCk7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwogIH07Cgog
IGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg
IGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigp
IHRocm93KCk7CiAgfTsKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwog
IHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgogIHRlcm1pbmF0ZV9oYW5k
bGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB0ZXJt
aW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgogIHVuZXhwZWN0ZWRfaGFu
ZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CiAgdm9pZCB1
bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKICBib29sIHVuY2F1
Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CiAg
Y2xhc3MgYmFkX2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf
YWxsb2MoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9
OwoKICBzdHJ1Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhy
b3c7CiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25l
d19oYW5kbGVyKG5ld19oYW5kbGVyKTsKfQoKCnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVf
dCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXpl
X3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQgKikg
dGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICopIHRocm93KCk7CnZvaWQgKm9w
ZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2
b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0
aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNvbnN0IHN0ZDo6bm90aHJvd190
JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICosIGNvbnN0IHN0ZDo6bm90
aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90
LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQppbmxpbmUgdm9pZCAqb3Bl
cmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJuIHBs
YWNlOyB9Cn0KIyAzNjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9jb25maWctYWxsLmgiIDIKIyA0OTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiCmV4dGVybiBpbnQgYWNlX2V4aXRfaG9va19t
YXJrZXI7CgoKZXh0ZXJuICJDIgp7CiAgdHlwZWRlZiB2b2lkICgqQUNFX0VYSVRfSE9PSykgKHZv
aWQpOwp9CiMgNTExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvY29uZmlnLWFsbC5oIgpjbGFzcyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3I7CmNsYXNzIEFD
RV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXM7CnR5cGVkZWYgdm9pZCAoKkFDRV9JTklUX0xPR19NU0df
SE9PSykgKEFDRV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMgJmF0dHIKCgoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICk7CnR5cGVkZWYgdm9pZCAoKkFDRV9JTkhFUklUX0xP
R19NU0dfSE9PSykgKEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMgJik7Cgp0
eXBlZGVmIHZvaWQgKCpBQ0VfQ0xPU0VfTE9HX01TR19IT09LKSAodm9pZCk7Cgp0eXBlZGVmIHZv
aWQgKCpBQ0VfU1lOQ19MT0dfTVNHX0hPT0spIChjb25zdCBBQ0VfVENIQVIgKnByb2dfbmFtZSk7
Cgp0eXBlZGVmIEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciAqKCpBQ0VfVEhSX0RFU0NfTE9HX01T
R19IT09LKSAodm9pZCk7CiMgNTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIgp0eXBlZGVmIGludCBBQ0VfSEFORExFOwp0eXBlZGVm
IEFDRV9IQU5ETEUgQUNFX1NPQ0tFVDsKCgoKCnR5cGVkZWYgdm9pZCAqKCpBQ0VfVEhSX0ZVTkMp
KHZvaWQgKik7CiMgNTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvY29uZmlnLWFsbC5oIgpleHRlcm4gIkMiCnsKCgoKCgoKCnR5cGVkZWYgdm9pZCAqKCpB
Q0VfVEhSX0NfRlVOQykodm9pZCAqKTsKCn0KIyA2MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDYwMyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMgojIDM0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2Uu
aCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL0Jhc2ljX1R5cGVzLmgiIDEKIyA0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgNDkgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5oIiAyCgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEK
IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2lj
X1R5cGVzLmgiIDIKCgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvdXNyL2xvY2Fs
L2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRz
LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1pdHMuaCIg
MSAzCiMgMTMwICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDEg
MwojIDI2ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgMTQ0ICIvdXNyL2lu
Y2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDEg
MwojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvbG9jYWxfbGltLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9s
aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9saW1pdHMuaCIgMSAzCiMgMzcgIi91c3Iv
aW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAyIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9iaXRzL3Bv
c2l4MV9saW0uaCIgMiAzCiMgMTQ1ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4Ml9saW0uaCIgMSAzCiMgMTQ5ICIvdXNyL2luY2x1ZGUv
bGltaXRzLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMK
IyAzNCAiL3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zdGRpb19saW0uaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o
IiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMTM3ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl
bl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvdXNyL2xvY2Fs
L2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvbGltaXRz
LmgiIDIgMwojIDU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvQmFzaWNfVHlwZXMuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyA1OSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyAx
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMiAzCgoKCgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy93YWl0ZmxhZ3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRl
L2JpdHMvd2FpdHN0YXR1cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMKIyAy
MiAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDIzICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUv
ZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4uaCIgMSAzCiMgMzggIi91
c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0
dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAg
ICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWdu
ZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4
OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0
ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6
ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBp
bnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMKIyA5NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCnR5cGVkZWYg
c3RydWN0CiAgewogICAgaW50IHF1b3Q7CiAgICBpbnQgcmVtOwogIH0gZGl2X3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CiAgewogICAgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgaW50IHJlbTsKICB9IGxk
aXZfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25n
IGludCBxdW90OwogICAgbG9uZyBsb25nIGludCByZW07CiAgfSBsbGRpdl90OwojIDEzMyAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21h
eCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBh
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBs
b25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0
b2xkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAy
MTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9fbG9j
YWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNv
bnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90
b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90OwojIDIx
MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s
X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4g
bG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2Fs
ZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRl
cm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3Vw
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNp
Z25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpfX2V4
dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3Vs
bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKIyAyOTQgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMwpleHRlcm4gX19pbmxpbmUgZG91YmxlCnN0cnRvZCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
CnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CmV4
dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgIGludCBfX2Jhc2UpIHRo
cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9f
YmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgaW50CnN0cnRvdWwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBm
bG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9mX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBkb3VibGUKc3RydG9s
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xkX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSBsb25nIGxvbmcg
aW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBf
X3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KX19leHRl
bnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGludApzdHJ0b3VxIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvdWxsX2lu
dGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xsX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3QgY2hhciAqIF9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgIGludCBfX2Jhc2UpIHRo
cm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwg
X19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3VibGUKYXRvZiAoX19jb25zdCBjaGFy
ICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9kIChfX25wdHIsIChjaGFyICoqKSBf
X251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIp
IHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251
bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQKYXRvbCAoX19jb25zdCBjaGFyICpf
X25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChfX25wdHIsIChjaGFyICoqKSBfX251
bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQK
YXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHN0cnRvbGwg
KF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMgMzg1ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCmV4dGVybiAiQyIg
ewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vf
c2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVf
bG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRf
dDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoK
CnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsK
CgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK
CnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsK
CgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoK
CgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXpl
X3Q7CgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRk
cl90OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoK
CnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu
aCIgMSAzCiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1c2hvcnQ7
CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTg0ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f
KSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9f
KSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f
KSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9f
KSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJf
dCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBp
bnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRl
ZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoj
IDIwNiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlh
bi5oIiAxIDMKIyAyMDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3Qu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl
L3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5o
IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2MyAiL3Vzci9pbmNs
dWRlL2JpdHMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
NjQgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewog
ICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDYg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRf
bWFzazsKCgoKCgoKCnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRz
WzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoK
CnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CiMgODkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0
LmgiIDMKZXh0ZXJuICJDIiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBm
ZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpf
X3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJp
Y3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0
cmljdCBfX3RpbWVvdXQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9f
bmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBm
ZF9zZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQg
Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IHRpbWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25z
dCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxMCAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lz
bWFjcm9zLmgiIDEgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5
cGVkZWYgX19ibGtzaXplX3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxr
Y250X3Q7CgoKCnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19m
c2ZpbGNudF90IGZzZmlsY250X3Q7CiMgMjUxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK
dHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBm
c2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAz
OTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5k
b20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBf
X3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGlu
dCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpf
X3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGlu
dDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBp
bnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50
MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jl
c3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25l
ZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3Qg
X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1
ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z
dGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz
dHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcmFuZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoK
CgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVy
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgbHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg
aW50IG1yYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5k
NDggKGxvbmcgaW50IF9fc2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBp
bnQgKnNlZWQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4
dGVybiB2b2lkIGxjb25nNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAo
KTsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9f
eFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hv
cnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBs
b25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91
YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3Ig
KHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBs
cmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0
cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBz
aG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4
X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGlu
dCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3Ig
KGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAg
dGhyb3cgKCk7CgpleHRlcm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVk
MTZ2WzNdLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl
cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9f
cGFyYW1bN10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1
ZmZlcikgdGhyb3cgKCk7CiMgNTI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZv
aWQgKm1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCmV4dGVybiB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z
aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0
ZXJuIHZvaWQgKnJlYWxsb2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19w
dHIpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgp
OwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9h
bGxvY2EuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9p
bmNsdWRlL2FsbG9jYS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9pZCAqYWxs
b2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ4ICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDIgMwoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhf
bWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19z
aXplKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVy
biB2b2lkIGFib3J0ICh2b2lkKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKCmV4dGVybiBpbnQgYXRleGl0ICh2b2lkICgqX19mdW5jKSAodm9pZCkpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2
b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk
IGV4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zZWN1cmVfZ2V0ZW52
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdXRlbnYg
KGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoX19jb25z
dCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50IF9fcmVwbGFjZSkKICAg
ICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQpIHRocm93ICgpOwojIDYy
NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9f
dGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3Rl
bXBsYXRlKSB0aHJvdyAoKTsKIyA2NDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
aW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjUxICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9fY29uc3QgY2hhciAqX19jb21tYW5k
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKF9f
Y29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKIyA2NzMgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gY2hhciAqcmVhbHBhdGggKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX3Jlc29sdmVkKSB0
aHJvdyAoKTsKCgoKCgoKdHlwZWRlZiBpbnQgKCpfX2NvbXBhcl9mbl90KSAoX19jb25zdCB2b2lk
ICosIF9fY29uc3Qgdm9pZCAqKTsKCgp0eXBlZGVmIF9fY29tcGFyX2ZuX3QgY29tcGFyaXNvbl9m
bl90OwoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2Nv
bnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBz
aXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNv
cnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg
ICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGlu
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcg
aW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBsbGFicyAobG9uZyBsb25n
IGludCBfX3gpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoK
CgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcg
aW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9u
ZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwojIDcyOSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICplY3Z0
IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwK
ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
bikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChs
b25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50
ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpl
eHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVj
dnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVj
cHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19y
ZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2ln
biwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xl
bikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxv
bmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAg
ICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2No
YXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoK
CmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBjaGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsK
IyA4MDkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hh
ciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19j
b25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9f
Y29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVu
cHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50
IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZs
ZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRo
cm93ICgpOwoKCgoKCn0KIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90
eXBlcy5oIiAxIDMKIyA2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0VfZXhwb3J0LmgiIDEKIyA3MSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyAxNjggIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5o
IgogICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBBQ0VfVUlOVDY0OwojIDE3OSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVz
LmgiCiAgdHlwZWRlZiBzaG9ydCBBQ0VfSU5UMTY7CiAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBB
Q0VfVUlOVDE2OwojIDIwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL0Jhc2ljX1R5cGVzLmgiCnR5cGVkZWYgQUNFX1VJTlQxNiBBQ0VfVVNIT1JUMTY7CgoK
ICB0eXBlZGVmIGludCBBQ0VfSU5UMzI7CiAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgQUNFX1VJTlQz
MjsKIyAyMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9C
YXNpY19UeXBlcy5oIgogICAgdHlwZWRlZiB1X2ludCBwdHJfYXJpdGhfdDsKIyA1ODYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19UeXBlcy5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNpY19U
eXBlcy5pIiAxCiMgNTg3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvQmFzaWNfVHlwZXMuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDIKIyA0MCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiIDIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9j
ay5oIiAxCiMgMTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9NZXNzYWdlX0Jsb2NrLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMg
MzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJl
bnQuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1NfRGlyZW50LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIgMgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQuaCIg
MQojIDIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf
RGlyZW50LmgiIDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI5
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50
LmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNy
L2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUv
dW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vu
dmlyb25tZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs
dWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5o
IiAyIDMKIyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDEgMwojIDE5MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTkg
Ii91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAz
CnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRlZiBfX3NvY2tsZW5fdCBz
b2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBhY2Nl
c3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIHRocm93
ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZl90IGxzZWVr
IChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKIyAz
MDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGlu
dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNzaXplX3QgcmVh
ZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93ICgpOwoKCmV4
dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19mZCwgdm9pZCAq
X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0aHJvdyAoKTsK
ZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6
ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSB0aHJvdyAo
KTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVhZDY0
IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBw
d3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAzNjIgIi91c3Iv
aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1bnNpZ25lZCBp
bnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl
eHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNfdCBfX3ZhbHVl
LCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1
c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19jb25zdCBjaGFy
ICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRf
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIg
Kl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1
ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBf
X3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFtZSAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAqX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICoq
X19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBpbnQgZXhlY3Zl
IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwKICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGlu
dCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hhciAqX19jb25z
dCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKF9fY29uc3Qg
Y2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAu
Li4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwg
X19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBleGVjdnAg
KF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBjaGFy
ICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1l
LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVudW0KICB7CiAg
ICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFYX0lOUFVULAoK
ICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJUEVfQlVGLAoK
ICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAgICBfUENfVkRJ
U0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAgIF9QQ19QUklP
X0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRTLAoKICAgIF9Q
Q19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpFLAoKICAgIF9Q
Q19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04KCiAgfTsKCgplbnVt
CiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RD
SywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJF
QU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBf
U0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklU
WV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywK
CiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBf
U0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBf
U0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01F
U1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9S
WV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAg
ICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBf
U0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoK
ICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1T
X01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAg
IF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1f
TUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAg
X1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0Nf
RVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgog
ICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0Nf
Ml9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1ND
XzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgog
ICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBf
U0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9T
Q19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlP
X01BWElPViwKCiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVS
TkVUX0RHUkFNLAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywK
CiAgICBfU0NfUElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFE
UywKCiAgICBfU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVf
TUFYLAoKICAgIF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwK
CiAgICBfU0NfVFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJ
T05TLAoKICAgIF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4s
CgogICAgX1NDX1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tB
RERSLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklP
UklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19U
SFJFQURfUFJJT19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAg
IF9TQ19OUFJPQ0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9T
Q19QSFlTX1BBR0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgs
CgogICAgX1NDX1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9Q
RU5fWENVX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBU
LAoKICAgIF9TQ19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0Nf
Ml9DSEFSX1RFUk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAg
X1NDX1hPUEVOX1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQs
CgoKICAgIF9TQ19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlO
LAoKICAgIF9TQ19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwK
CiAgICBfU0NfV09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoK
ICAgIF9TQ19TU0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlO
LAoKICAgIF9TQ19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01B
WCwKCiAgICBfU0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRf
TUFYLAoKCiAgICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19O
TF9NU0dNQVgsCgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0Nf
TkxfVEVYVE1BWCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQ
MzJfT0ZGQklHLAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdf
T0ZGQklHLAoKCiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwK
CiAgICBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8s
CgogICAgX1NDX0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9S
VCwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoK
ICAgIF9TQ19DUFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNF
X0lPLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19S
LAoKICAgIF9TQ19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9T
Q19GSUxFX0FUVFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9T
WVNURU0sCgogICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElQTEVfUFJPQ0VT
UywKCiAgICBfU0NfU0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1ND
X1JFQURFUl9XUklURVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VY
UCwKCiAgICBfU0NfUkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05B
TFMsCgogICAgX1NDX1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RI
UkVBRF9TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0Nf
U1lTVEVNX0RBVEFCQVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1P
UllfT0JKRUNUUywKCiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1Is
CgogICAgX1NDXzJfUEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BC
U19MT0NBVEUsCgogICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoK
ICAgIF9TQ19TWU1MT09QLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BP
SU5UCgogIH07CgoKCgoKZW51bQogIHsKICAgIF9DU19QQVRICgoKCgogICAgLAogICAgX0NTX0xG
U19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJQlMs
CgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBfQ1Nf
TEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElOVEZM
QUdTCgoKCgogICAgLAogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAg
ICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMy
X0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1
X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1Ms
CgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG
QklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1Nf
WEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoK
ICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09G
RkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NT
X1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRG
TEFHUwoKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKZXh0ZXJuIGxv
bmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFtZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50
IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
X19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQg
KHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgdGhyb3cg
KCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlkX3QgX19nZXRw
Z2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdldHBnaWQgKF9f
cGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQgKF9fcGlkX3Qg
X19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4MCAiL3Vzci9p
bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0
ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lkKSB0aHJv
dyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBz
ZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf
X3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAo
dm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2ZkKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBsaW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3RvKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzeW1saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19j
b25zdCBjaGFyICpfX3RvKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3BhdGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5s
aW5rIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBybWRpciAo
X19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBn
cnAgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjc2V0cGdycCAoaW50IF9fZmQs
IF9fcGlkX3QgX19wZ3JwX2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldGxvZ2luICh2
b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBz
aXplX3QgX19uYW1lX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGxvZ2luIChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZ2V0
b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwpleHRl
cm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGlu
dCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRvcHQ7CiMg
MTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGludCBfX2Fy
Z2MsIGNoYXIgKmNvbnN0ICpfX2FyZ3YsIGNvbnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzQg
Ii91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwp9CiMgNzI3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3Qg
X19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0
aWQgKGxvbmcgaW50IF9faWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFt
ZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRv
bWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZv
a2UgKF9fY29uc3QgY2hhciAqX19maWxlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJv
ZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwK
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgYWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0
ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNl
cnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9j
aGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChf
X2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChf
X2NvbnN0IGNoYXIgKl9fcHJvbXB0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChp
bnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHN5bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBnZXRwYWdlc2l6ZSAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2Zm
X3QgX19sZW5ndGgpIHRocm93ICgpOwojIDgzNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xl
bmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2Zm
X3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1MSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4
dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODY2
ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93
ICgpOwojIDg4NyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNj
YWxsIChsb25nIGludCBfX3N5c25vLCAuLi4pIHRocm93ICgpOwojIDkwNyAiL3Vzci9pbmNsdWRl
L3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2Zm
X3QgX19sZW4pIHRocm93ICgpOwojIDkxNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVy
biBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJv
dyAoKTsKIyA5MzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3lu
YyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19j
b25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2
b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAgICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoj
IDk4MyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsg
KHZvaWQgKCpfX3ByZXBhcmUpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf
X2NoaWxkKSAodm9pZCkpIHRocm93ICgpOwoKCn0KIyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5oIiAyCgojIDEgIi91c3IvaW5jbHVk
ZS9kaXJlbnQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMK
CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAzMSAi
L3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZGlyZW50LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUv
Yml0cy9kaXJlbnQuaCIgMwpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAg
ICBfX29mZl90IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAg
IHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVj
dCBkaXJlbnQ2NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBl
OwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwojIDYzICIvdXNyL2luY2x1ZGUvZGlyZW50Lmgi
IDIgMwojIDk4ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZW51bQogIHsKICAgIERUX1VOS05P
V04gPSAwLAoKICAgIERUX0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0g
NCwKCiAgICBEVF9CTEsgPSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgog
ICAgRFRfU09DSyA9IDEyLAoKICAgIERUX1dIVCA9IDE0CgogIH07CiMgMTI4ICIvdXNyL2luY2x1
ZGUvZGlyZW50LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19kaXJzdHJlYW0gRElSOwoKCgpleHRlcm4g
RElSICpvcGVuZGlyIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgY2xvc2VkaXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9k
aXJlbnQuaCIgMwpleHRlcm4gc3RydWN0IGRpcmVudCAqcmVhZGRpciAoRElSICpfX2RpcnApIHRo
cm93ICgpOwojIDE1NiAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBzdHJ1Y3QgZGly
ZW50NjQgKnJlYWRkaXI2NCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHJlYWRkaXJfciAoRElSICpfX3Jlc3RyaWN0IF9fZGlycCwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkaXJlbnQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBkaXJlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKIyAxNzkgIi91
c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVz
dHJpY3QgX19kaXJwLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9f
cmVzdHJpY3QgX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0
ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCByZXdpbmRk
aXIgKERJUiAqX19kaXJwKSB0aHJvdyAoKTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDE5MCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKCgpleHRlcm4gdm9pZCBz
ZWVrZGlyIChESVIgKl9fZGlycCwgbG9uZyBpbnQgX19wb3MpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBk
aXJmZCAoRElSICpfX2RpcnApIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDFfbGltLmgiIDEgMwojIDIxMCAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAyIDMKIyAy
MjAgIi91c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjIx
ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDIgMwoKCgoKCgpleHRlcm4gaW50IHNjYW5kaXIgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
ZGlyZW50ICoqKl9fcmVzdHJpY3QgX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICBpbnQg
KCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50ICopLAogICAgICAgICAgICAgICAg
ICAgIGludCAoKl9fY21wKSAoX19jb25zdCB2b2lkICosIF9fY29uc3Qgdm9pZCAqKSkgdGhyb3cg
KCk7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIGludCBzY2FuZGlyNjQg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkaXJlbnQ2NCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBpbnQgKCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZv
aWQgKikpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBhbHBoYXNvcnQgKF9fY29uc3Qgdm9pZCAq
X19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwojIDI2OSAiL3Vzci9pbmNsdWRlL2RpcmVudC5oIiAzCmV4dGVybiBpbnQgYWxw
aGFzb3J0NjQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgdmVyc2lv
bnNvcnQgKF9fY29uc3Qgdm9pZCAqX19lMSwgX19jb25zdCB2b2lkICpfX2UyKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwojIDI5MCAiL3Vzci9pbmNsdWRlL2RpcmVu
dC5oIiAzCmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2Nv
bnN0IHZvaWQgKl9fZTIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CiMgMzAwICIvdXNyL2luY2x1ZGUvZGlyZW50LmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBnZXRkaXJl
bnRyaWVzIChpbnQgX19mZCwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19vZmZfdCAqX19yZXN0cmljdCBfX2Jhc2VwKSB0aHJvdyAoKTsKIyAzMTYgIi91
c3IvaW5jbHVkZS9kaXJlbnQuaCIgMwpleHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAo
aW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX29mZjY0X3QgKl9fcmVzdHJpY3QgX19iYXNlcCkgdGhyb3cgKCk7CgoKCgp9CiMgMzMg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQu
aCIgMgojIDcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1NfRGlyZW50LmgiCnR5cGVkZWYgRElSIEFDRV9ESVI7CiMgODQgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaCIKY2xhc3MgQUNFX09TX0Rp
cmVudAp7CnB1YmxpYzoKICBzdGF0aWMgQUNFX0RJUiAqb3BlbmRpciAoY29uc3QgQUNFX1RDSEFS
ICpmaWxlbmFtZSk7CiAgc3RhdGljIHZvaWQgY2xvc2VkaXIgKEFDRV9ESVIgKik7CiAgc3RhdGlj
IHN0cnVjdCBkaXJlbnQgKnJlYWRkaXIgKEFDRV9ESVIgKik7CiAgc3RhdGljIGludCByZWFkZGly
X3IgKEFDRV9ESVIgKmRpcnAsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQg
KmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqcmVzdWx0KTsK
ICBzdGF0aWMgbG9uZyB0ZWxsZGlyIChBQ0VfRElSICopOwogIHN0YXRpYyB2b2lkIHNlZWtkaXIg
KEFDRV9ESVIgKiwKICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvYyk7CiAgc3RhdGljIHZv
aWQgcmV3aW5kZGlyIChBQ0VfRElSICopOwoKcHJpdmF0ZToKCiAgc3RhdGljIEFDRV9ESVIgKm9w
ZW5kaXJfZW11bGF0aW9uIChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lKTsKICBzdGF0aWMgdm9p
ZCBjbG9zZWRpcl9lbXVsYXRpb24gKEFDRV9ESVIgKik7CiAgc3RhdGljIHN0cnVjdCBkaXJlbnQg
KnJlYWRkaXJfZW11bGF0aW9uIChBQ0VfRElSICopOwp9OwoKCgoKCgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIiAxCgoKCgoK
CmlubGluZSBBQ0VfRElSICoKQUNFX09TX0RpcmVudDo6b3BlbmRpciAoY29uc3QgQUNFX1RDSEFS
ICpmaWxlbmFtZSkKewojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1NfRGlyZW50LmlubCIKICByZXR1cm4gOjpvcGVuZGlyIChjb25zdF9jYXN0PGNo
YXIgKj4gKGZpbGVuYW1lKSk7CgoKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PU19EaXJlbnQ6OmNs
b3NlZGlyIChBQ0VfRElSICpkKQp7CiMgNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIgogIDo6Y2xvc2VkaXIgKGQpOwoKCgoKCgp9
CgppbmxpbmUgc3RydWN0IGRpcmVudCAqCkFDRV9PU19EaXJlbnQ6OnJlYWRkaXIgKEFDRV9ESVIg
KmQpCnsKIyAxMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PU19EaXJlbnQuaW5sIgogIHJldHVybiA6OnJlYWRkaXIgKGQpOwoKCgoKCgp9CgppbmxpbmUg
aW50CkFDRV9PU19EaXJlbnQ6OnJlYWRkaXJfciAoQUNFX0RJUiAqZGlycCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBkaXJlbnQgKipyZXN1bHQpCnsKIyAxNDYgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19EaXJlbnQuaW5sIgogIHJldHVybiA6OnJl
YWRkaXJfciAoZGlycCwgZW50cnksIHJlc3VsdCk7CiMgMTY1ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50LmlubCIKfQoKaW5saW5lIGxvbmcK
QUNFX09TX0RpcmVudDo6dGVsbGRpciAoQUNFX0RJUiAqZCkKewoKICByZXR1cm4gOjp0ZWxsZGly
IChkKTsKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PU19EaXJlbnQ6OnNlZWtkaXIgKEFDRV9ESVIg
KmQsIGxvbmcgbG9jKQp7CgogIDo6c2Vla2RpciAoZCwgbG9jKTsKCgoKCn0KCmlubGluZSB2b2lk
CkFDRV9PU19EaXJlbnQ6OnJld2luZGRpciAoQUNFX0RJUiAqZCkKewojIDIwNCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5pbmwiCiAgIDo6
c2Vla2RpciAoZCwgbG9uZyAoMCkpOwoKCgoKfQojIDExMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0RpcmVudC5oIiAyCgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTE0ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRGlyZW50LmgiIDIK
IyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgi
IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf
U3RyaW5nLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TX1N0cmluZy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDIxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCgoK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19F
eHBvcnQuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1NfU3RyaW5nLmgiIDIKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI4ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKIyA0
MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu
Zy5oIgpjbGFzcyBBQ0VfT1NfU3RyaW5nCnsKcHVibGljOgojIDUzICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0
IHZvaWQgKm1lbWNociAoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pOwoKCiAgc3Rh
dGljIHZvaWQgKm1lbWNociAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pOwoKCiAgc3RhdGlj
IGludCBtZW1jbXAgKGNvbnN0IHZvaWQgKnQsIGNvbnN0IHZvaWQgKnMsIHNpemVfdCBsZW4pOwoK
CiAgc3RhdGljIHZvaWQgKm1lbWNweSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxl
bik7CgoKICBzdGF0aWMgdm9pZCAqbWVtbW92ZSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6
ZV90IGxlbik7CgoKICBzdGF0aWMgdm9pZCAqbWVtc2V0ICh2b2lkICpzLCBpbnQgYywgc2l6ZV90
IGxlbik7CgoKICBzdGF0aWMgY2hhciAqc3RyY2F0IChjaGFyICpzLCBjb25zdCBjaGFyICp0KTsK
IyA4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0
cmluZy5oIgogIHN0YXRpYyBjb25zdCBjaGFyICpzdHJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBj
KTsKIyA4OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
X1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICpzdHJjaHIgKGNoYXIgKnMsIGludCBjKTsKCgoKCgoK
CiAgc3RhdGljIGludCBzdHJjbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQpOwoKCgoK
CgoKICBzdGF0aWMgY2hhciAqc3RyY3B5IChjaGFyICpzLCBjb25zdCBjaGFyICp0KTsKIyAxMTQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcu
aCIKICBzdGF0aWMgc2l6ZV90IHN0cmNzcG4gKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnJl
amVjdCk7CiMgMTIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNoYXIgKnN0cmVycm9yIChpbnQgZXJybnVtKTsKCgog
IHN0YXRpYyBzaXplX3Qgc3RybGVuIChjb25zdCBjaGFyICpzKTsKCgoKCgoKCiAgc3RhdGljIGNo
YXIgKnN0cm5jYXQgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pOwoKCgoKCgoK
ICBzdGF0aWMgaW50IHN0cm5jbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVf
dCBsZW4pOwoKCgoKCgoKICBzdGF0aWMgY2hhciAqc3RybmNweSAoY2hhciAqcywgY29uc3QgY2hh
ciAqdCwgc2l6ZV90IGxlbik7CgoKCgoKCgogIHN0YXRpYyBjb25zdCBjaGFyICpzdHJwYnJrIChj
b25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOwoKCgoKCgoKICBzdGF0aWMgY2hhciAqc3Ry
cGJyayAoY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKIyAxNzUgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgY29uc3Qg
Y2hhciAqc3RycmNociAoY29uc3QgY2hhciAqcywgaW50IGMpOwojIDE4NCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBj
aGFyICpzdHJyY2hyIChjaGFyICpzLCBpbnQgYyk7CiMgMTkzICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIHNpemVfdCBz
dHJzcG4gKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMik7CiMgMjAzICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGlj
IGNvbnN0IGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCk7CiMgMjEy
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5n
LmgiCiAgc3RhdGljIGNoYXIgKnN0cnN0ciAoY2hhciAqcywgY29uc3QgY2hhciAqdCk7CgoKCgoK
CgogIHN0YXRpYyBjaGFyICpzdHJ0b2sgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnRva2Vucyk7CiMg
MjQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3Ry
aW5nLmgiCiAgc3RhdGljIGludCBhY2VfaXNwcmludCAoY29uc3QgQUNFX1RDSEFSIGMpOwoKCiAg
c3RhdGljIGludCBhY2VfaXNzcGFjZSAoY29uc3QgQUNFX1RDSEFSIGMpOwoKCiAgc3RhdGljIGlu
dCB0b19sb3dlciAoaW50IGMpOwojIDI2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICppdG9hIChpbnQgdmFs
dWUsIGNoYXIgKnN0cmluZywgaW50IHJhZGl4KTsKCgoKCgoKCiAgc3RhdGljIGludCBzdHJjYXNl
Y21wIChjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICp0KTsKIyAyODQgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgY29u
c3QgY2hhciAqc3RybmNociAoY29uc3QgY2hhciAqcywgaW50IGMsIHNpemVfdCBsZW4pOwojIDI5
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu
Zy5oIgogIHN0YXRpYyBjaGFyICpzdHJuY2hyIChjaGFyICpzLCBpbnQgYywgc2l6ZV90IGxlbik7
CgoKCgoKCgogIHN0YXRpYyBpbnQgc3RybmNhc2VjbXAgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNo
YXIgKnQsIHNpemVfdCBsZW4pOwojIDMxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICpzdHJlY3B5IChjaGFy
ICpkZXMsIGNvbnN0IGNoYXIgKnNyYyk7CiMgMzIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0IGNoYXIgKnN0
cm5zdHIgKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pOwojIDMzMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5o
IgogIHN0YXRpYyBjaGFyICpzdHJuc3RyIChjaGFyICpzLCBjb25zdCBjaGFyICp0LCBzaXplX3Qg
bGVuKTsKCgoKCgoKCiAgc3RhdGljIGNoYXIgKnN0cmR1cCAoY29uc3QgY2hhciAqcyk7CgoKCgoK
CgogIHN0YXRpYyBjaGFyICpzdHJ0b2tfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW5zLCBj
aGFyICoqbGFzdHMpOwoKCgogIHN0YXRpYyBkb3VibGUgc3RydG9kIChjb25zdCBjaGFyICpzLCBj
aGFyICoqZW5kcHRyKTsKIyAzNjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9PU19TdHJpbmcuaCIKICBzdGF0aWMgbG9uZyBzdHJ0b2wgKGNvbnN0IGNoYXIg
KnMsIGNoYXIgKipwdHIsIGludCBiYXNlKTsKCgoKCgoKCiAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
c3RydG91bCAoY29uc3QgY2hhciAqcywgY2hhciAqKnB0ciwgaW50IGJhc2UpOwojIDM3NyAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5oIgpw
cml2YXRlOgojIDM4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TX1N0cmluZy5oIgogIHN0YXRpYyBjaGFyICppdG9hX2VtdWxhdGlvbiAoaW50IHZhbHVl
LCBjaGFyICpzdHJpbmcsIGludCByYWRpeCk7CiMgMzk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiCiAgc3RhdGljIGNvbnN0IHZvaWQg
Km1lbWNocl9lbXVsYXRpb24gKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3QgbGVuKTsKIyA1
NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJp
bmcuaCIKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1NfU3RyaW5nLmlubCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKIyAxICIvdXNyL2luY2x1ZGUvbWVt
b3J5LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvbWVtb3J5LmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9tZW1vcnkuaCIgMiAzCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZv
aWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpt
ZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQg
Km1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24p
CiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZv
aWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZv
aWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0
IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBp
bnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhm
cm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2Nv
bnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChf
X2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsK
CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVf
dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAo
X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19j
b25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3Qg
Y2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRl
cm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq
X19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4
dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f
c3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpz
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9w
dHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9f
aGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQg
Kl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVt
cGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFy
ICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpf
X2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8g
KHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChf
X2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBj
aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0
KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9u
ZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4
dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGlu
dCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
ZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNo
YXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNl
Y21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2Vw
IChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3Ry
dmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25h
bCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhy
b3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp
OwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUp
IHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyAzMSAiL3Vzci9p
bmNsdWRlL21lbW9yeS5oIiAyIDMKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAxIDMKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TX1N0cmluZy5pbmwiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDEgMwoj
IDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3Ry
aW5nLmlubCIgMgojIDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1NfU3RyaW5nLmlubCIKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIg
ewojIDQwICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lT
dXBwZXIgPSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkp
LAogIF9JU2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkp
ID4+IDgpKSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEg
PDwgKDIpKSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgp
IDogKCgxIDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0
KSkgPDwgOCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgo
MSA8PCAoNSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8
IDggPyAoKDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9
ICgoNykgPCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lT
YmxhbmsgPSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkp
LAogIF9JU2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkp
ID4+IDgpKSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgo
MSA8PCAoMTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkg
PDwgOCkgOiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5o
IiAzCmV4dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4g
X19jb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQz
Ml90ICpfX2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy
biBpbnQgaXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNk
aWdpdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpl
eHRlcm4gaW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzc3BhY2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxh
bmsgKGludCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgaXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMTY4ICIvdXNyL2luY2x1ZGUv
Y3R5cGUuaCIgMwpleHRlcm4gX19pbmxpbmUgaW50CnRvbG93ZXIgKGludCBfX2MpIHRocm93ICgp
CnsKICByZXR1cm4gX19jID49IC0xMjggJiYgX19jIDwgMjU2ID8gX19jdHlwZV90b2xvd2VyW19f
Y10gOiBfX2M7Cn0KCmV4dGVybiBfX2lubGluZSBpbnQKdG91cHBlciAoaW50IF9fYykgdGhyb3cg
KCkKewogIHJldHVybiBfX2MgPj0gLTEyOCAmJiBfX2MgPCAyNTYgPyBfX2N0eXBlX3RvdXBwZXJb
X19jXSA6IF9fYzsKfQojIDIxMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyMTIgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKIyAy
MjQgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2FscGhhX2wgKGludCwgX19sb2Nh
bGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p
c3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNl
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9f
bG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2Nh
bGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9f
bG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCn0K
IyA0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0
cmluZy5pbmwiIDIKCmlubGluZSBjb25zdCB2b2lkICoKQUNFX09TX1N0cmluZzo6bWVtY2hyIChj
b25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IGxlbikKewoKCgoKCiAgcmV0dXJuIEFDRV9PU19T
dHJpbmc6Om1lbWNocl9lbXVsYXRpb24gKHMsIGMsIGxlbik7Cgp9CgppbmxpbmUgdm9pZCAqCkFD
RV9PU19TdHJpbmc6Om1lbWNociAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pCnsKICByZXR1
cm4gY29uc3RfY2FzdDx2b2lkICo+IChBQ0VfT1NfU3RyaW5nOjptZW1jaHIgKHN0YXRpY19jYXN0
PGNvbnN0IHZvaWQgKj4gKHMpLCBjLCBsZW4pKTsKCn0KCgppbmxpbmUgaW50CkFDRV9PU19TdHJp
bmc6Om1lbWNtcCAoY29uc3Qgdm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK
CgogIHJldHVybiA6Om1lbWNtcCAodCwgcywgbGVuKTsKCn0KCgppbmxpbmUgdm9pZCAqCkFDRV9P
U19TdHJpbmc6Om1lbWNweSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK
CgogIHJldHVybiA6Om1lbWNweSAodCwgcywgbGVuKTsKCn0KCmlubGluZSB2b2lkICoKQUNFX09T
X1N0cmluZzo6bWVtbW92ZSAodm9pZCAqdCwgY29uc3Qgdm9pZCAqcywgc2l6ZV90IGxlbikKewoK
CgogIHJldHVybiA6Om1lbW1vdmUgKHQsIHMsIGxlbik7Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9P
U19TdHJpbmc6Om1lbXNldCAodm9pZCAqcywgaW50IGMsIHNpemVfdCBsZW4pCnsKCgoKICByZXR1
cm4gOjptZW1zZXQgKHMsIGMsIGxlbik7Cgp9CgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJpbmc6
OnN0cmNhdCAoY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgogIHJldHVybiA6OnN0cmNhdCAo
cywgdCk7Cgp9CiMgMTI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1NfU3RyaW5nLmlubCIKaW5saW5lIGNvbnN0IGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpz
dHJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBjKQp7CgoKCgoKICByZXR1cm4gKGNvbnN0IGNoYXIg
KikgOjpzdHJjaHIgKHMsIGMpOwoKfQojIDE0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBjaGFyICoKQUNFX09TX1N0
cmluZzo6c3RyY2hyIChjaGFyICpzLCBpbnQgYykKewoKCgoKCiAgcmV0dXJuIDo6c3RyY2hyIChz
LCBjKTsKCn0KIyAxNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgaW50CkFDRV9PU19TdHJpbmc6OnN0cmNtcCAoY29u
c3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgogIHJldHVybiA6OnN0cmNtcCAocywgdCk7
Cgp9CiMgMTkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1NfU3RyaW5nLmlubCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJjcHkgKGNoYXIg
KnMsIGNvbnN0IGNoYXIgKnQpCnsKCgoKICByZXR1cm4gOjpzdHJjcHkgKHMsIHQpOwoKfQojIDIx
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmlu
Zy5pbmwiCmlubGluZSBzaXplX3QKQUNFX09TX1N0cmluZzo6c3RyY3NwbiAoY29uc3QgY2hhciAq
cywgY29uc3QgY2hhciAqcmVqZWN0KQp7CgoKCgoKICByZXR1cm4gOjpzdHJjc3BuIChzLCByZWpl
Y3QpOwoKfQojIDIzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBjaGFyICoKQUNFX09TX1N0cmluZzo6c3RyZXJyb3Ig
KGludCBlcnJudW0pCnsKCgoKICByZXR1cm4gOjpzdHJlcnJvciAoZXJybnVtKTsKCn0KCmlubGlu
ZSBzaXplX3QKQUNFX09TX1N0cmluZzo6c3RybGVuIChjb25zdCBjaGFyICpzKQp7CgoKCiAgcmV0
dXJuIDo6c3RybGVuIChzKTsKCn0KIyAyNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJp
bmc6OnN0cm5jYXQgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pCnsKCgoKICBy
ZXR1cm4gOjpzdHJuY2F0IChzLCB0LCBsZW4pOwoKfQojIDI5MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGluZSBpbnQKQUNF
X09TX1N0cmluZzo6c3RybmNtcCAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCwgc2l6ZV90
IGxlbikKewoKCgogIHJldHVybiA6OnN0cm5jbXAgKHMsIHQsIGxlbik7Cgp9CiMgMzEzICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIK
aW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJuY3B5IChjaGFyICpzLCBjb25zdCBjaGFy
ICp0LCBzaXplX3QgbGVuKQp7CgoKCiAgcmV0dXJuIDo6c3RybmNweSAocywgdCwgbGVuKTsKCn0K
IyAzMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T
dHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hhciAqCkFDRV9PU19TdHJpbmc6OnN0cnBicmsgKGNv
bnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKewoKCgoKCiAgcmV0dXJuIChjb25zdCBjaGFy
ICopIDo6c3RycGJyayAoczEsIHMyKTsKCn0KIyAzNTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9P
U19TdHJpbmc6OnN0cnBicmsgKGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKewoKCgoKCiAgcmV0
dXJuIDo6c3RycGJyayAoczEsIHMyKTsKCn0KIyAzODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hhciAq
CkFDRV9PU19TdHJpbmc6OnN0cnJjaHIgKGNvbnN0IGNoYXIgKnMsIGludCBjKQp7CgoKCgoKICBy
ZXR1cm4gKGNvbnN0IGNoYXIgKikgOjpzdHJyY2hyIChzLCBjKTsKCn0KIyA0MDQgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxp
bmUgY2hhciAqCkFDRV9PU19TdHJpbmc6OnN0cnJjaHIgKGNoYXIgKnMsIGludCBjKQp7CgoKCgoK
ICByZXR1cm4gOjpzdHJyY2hyIChzLCBjKTsKCn0KIyA0MjUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgc2l6ZV90CkFD
RV9PU19TdHJpbmc6OnN0cnNwbiAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkKewoKCgoK
CiAgcmV0dXJuIDo6c3Ryc3BuIChzLCB0KTsKCn0KIyA0NDkgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY29uc3QgY2hh
ciAqCkFDRV9PU19TdHJpbmc6OnN0cnN0ciAoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqdCkK
ewoKCgogIHJldHVybiAoY29uc3QgY2hhciAqKSA6OnN0cnN0ciAocywgdCk7Cgp9CiMgNDcxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlu
bCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJzdHIgKGNoYXIgKnMsIGNvbnN0IGNo
YXIgKnQpCnsKCgoKICByZXR1cm4gOjpzdHJzdHIgKHMsIHQpOwoKfQojIDQ5MyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGlu
ZSBjaGFyICoKQUNFX09TX1N0cmluZzo6c3RydG9rIChjaGFyICpzLCBjb25zdCBjaGFyICp0b2tl
bnMpCnsKCgoKICByZXR1cm4gOjpzdHJ0b2sgKHMsIHRva2Vucyk7Cgp9CiMgNTExICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKaW5s
aW5lIGludApBQ0VfT1NfU3RyaW5nOjphY2VfaXNwcmludCAoY29uc3QgQUNFX1RDSEFSIGMpCnsK
CgoKCgogIHJldHVybiAoX19jdHlwZV9iWyhpbnQpICgoYykpXSAmICh1bnNpZ25lZCBzaG9ydCBp
bnQpIF9JU3ByaW50KTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1N0cmluZzo6YWNlX2lzc3BhY2Ug
KGNvbnN0IEFDRV9UQ0hBUiBjKQp7CgoKCgoKICByZXR1cm4gKF9fY3R5cGVfYlsoaW50KSAoKGMp
KV0gJiAodW5zaWduZWQgc2hvcnQgaW50KSBfSVNzcGFjZSk7Cgp9CgppbmxpbmUgaW50CkFDRV9P
U19TdHJpbmc6OnRvX2xvd2VyIChpbnQgYykKewoKCgogIHJldHVybiB0b2xvd2VyIChjKTsKCn0K
IyA1NTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T
dHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19TdHJpbmc6Oml0b2EgKGludCB2YWx1ZSwg
Y2hhciAqc3RyaW5nLCBpbnQgcmFkaXgpCnsKCiAgcmV0dXJuIEFDRV9PU19TdHJpbmc6Oml0b2Ff
ZW11bGF0aW9uICh2YWx1ZSwgc3RyaW5nLCByYWRpeCk7CgoKCgoKfQojIDU3NyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX1N0cmluZy5pbmwiCmlubGlu
ZSBpbnQKQUNFX09TX1N0cmluZzo6c3RyY2FzZWNtcCAoY29uc3QgY2hhciAqcywgY29uc3QgY2hh
ciAqdCkKewoKCgoKCiAgcmV0dXJuIDo6c3RyY2FzZWNtcCAocywgdCk7Cgp9CiMgNjAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIK
aW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpzdHJuY2hyIChjaGFyICpzLCBpbnQgYywgc2l6
ZV90IGxlbikKewoKCgoKCiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y2hhciAqPiAoQUNFX09TX1N0cmlu
Zzo6c3RybmNociAoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhciAqPiAocyksIGMsIGxlbikpOwoKCn0K
IyA2MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19T
dHJpbmcuaW5sIgppbmxpbmUgaW50CkFDRV9PU19TdHJpbmc6OnN0cm5jYXNlY21wIChjb25zdCBj
aGFyICpzLCBjb25zdCBjaGFyICp0LCBzaXplX3QgbGVuKQp7CgoKCgoKICByZXR1cm4gOjpzdHJu
Y2FzZWNtcCAocywgdCwgbGVuKTsKCn0KIyA2NDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUgY2hhciAqCkFDRV9PU19T
dHJpbmc6OnN0cm5zdHIgKGNoYXIgKnMsIGNvbnN0IGNoYXIgKnQsIHNpemVfdCBsZW4pCnsKCgoK
CiAgcmV0dXJuIChjaGFyICopIEFDRV9PU19TdHJpbmc6OnN0cm5zdHIgKChjb25zdCBjaGFyICop
IHMsIHQsIGxlbik7Cgp9CiMgNjY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1NfU3RyaW5nLmlubCIKaW5saW5lIGNoYXIgKgpBQ0VfT1NfU3RyaW5nOjpz
dHJ0b2tfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW5zLCBjaGFyICoqbGFzdHMpCnsKCgoK
ICByZXR1cm4gOjpzdHJ0b2tfciAocywgdG9rZW5zLCBsYXN0cyk7CgoKCn0KCgppbmxpbmUgZG91
YmxlCkFDRV9PU19TdHJpbmc6OnN0cnRvZCAoY29uc3QgY2hhciAqcywgY2hhciAqKmVuZHB0cikK
ewoKCgogIHJldHVybiA6OnN0cnRvZCAocywgZW5kcHRyKTsKCn0KIyA2OTkgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaW5sIgppbmxpbmUg
bG9uZwpBQ0VfT1NfU3RyaW5nOjpzdHJ0b2wgKGNvbnN0IGNoYXIgKnMsIGNoYXIgKipwdHIsIGlu
dCBiYXNlKQp7CgoKCgoKICByZXR1cm4gOjpzdHJ0b2wgKHMsIHB0ciwgYmFzZSk7Cgp9CiMgNzE5
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfU3RyaW5n
LmlubCIKaW5saW5lIHVuc2lnbmVkIGxvbmcKQUNFX09TX1N0cmluZzo6c3RydG91bCAoY29uc3Qg
Y2hhciAqcywgY2hhciAqKnB0ciwgaW50IGJhc2UpCnsKCgoKCgogIHJldHVybiA6OnN0cnRvdWwg
KHMsIHB0ciwgYmFzZSk7Cgp9CiMgNTcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1NfU3RyaW5nLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1NzQgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19TdHJpbmcuaCIgMgojIDMyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIg
MQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf
TWVtb3J5LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PU19NZW1vcnkuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIgMgoKCgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0V4cG9ydC5oIiAx
CiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19N
ZW1vcnkuaCIgMgoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmgiIDIKIyA5NiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5oIgp0
eXBlZGVmIHZvaWQgKkFDRV9NQUxMT0NfVDsKIyAxMDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIKY2xhc3MgQUNFX09TX01lbW9yeQp7
CnB1YmxpYzoKCiAgc3RhdGljIHZvaWQgKnNicmsgKGludCBicmspOwogIHN0YXRpYyB2b2lkICpj
YWxsb2MgKHNpemVfdCBlbGVtZW50cywgc2l6ZV90IHNpemVvZl9lbGVtZW50cyk7CiAgc3RhdGlj
IHZvaWQgKm1hbGxvYyAoc2l6ZV90KTsKICBzdGF0aWMgdm9pZCAqcmVhbGxvYyAodm9pZCAqLCBz
aXplX3QpOwogIHN0YXRpYyB2b2lkIGZyZWUgKHZvaWQgKik7Cn07CgoKCgoKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5pbmwiIDEK
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDEgMwojIDUgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaW5sIiAyCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmlubCIgMgoKCmlubGluZSB2b2lkICoKQUNFX09T
X01lbW9yeTo6c2JyayAoaW50IGJyaykKewoKCgoKICBkbyB7IHZvaWQgKiBhY2VfcmVzdWx0XyA9
IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNicmsgKGJyayk7IH0gd2hp
bGUgKDApOwoKfQoKaW5saW5lIHZvaWQgKgpBQ0VfT1NfTWVtb3J5OjptYWxsb2MgKHNpemVfdCBu
Ynl0ZXMpCnsKICByZXR1cm4gOjptYWxsb2MgKG5ieXRlcyk7Cn0KCmlubGluZSB2b2lkICoKQUNF
X09TX01lbW9yeTo6Y2FsbG9jIChzaXplX3QgZWxlbWVudHMsIHNpemVfdCBzaXplb2ZfZWxlbWVu
dHMpCnsKCiAgcmV0dXJuIDo6Y2FsbG9jIChlbGVtZW50cywgc2l6ZW9mX2VsZW1lbnRzKTsKCgoK
Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9PU19NZW1vcnk6OnJlYWxsb2MgKHZvaWQgKnB0ciwgc2l6
ZV90IG5ieXRlcykKewogIHJldHVybiA6OnJlYWxsb2MgKEFDRV9NQUxMT0NfVCAocHRyKSwgbmJ5
dGVzKTsKfQoKaW5saW5lIHZvaWQKQUNFX09TX01lbW9yeTo6ZnJlZSAodm9pZCAqcHRyKQp7CiAg
OjpmcmVlIChBQ0VfTUFMTE9DX1QgKHB0cikpOwp9CiMgMTI0ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTWVtb3J5LmgiIDIKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMjcgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19NZW1vcnkuaCIg
MgojIDMzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu
aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
U19UTEkuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1NfVExJLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FeHBvcnQuaCIgMQojIDIw
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfVExJLmgi
IDIKCgoKCgoKCnN0cnVjdCB0X2NhbGwgeyB9OwpzdHJ1Y3QgdF9iaW5kIHsgfTsKc3RydWN0IHRf
aW5mbyB7IH07CnN0cnVjdCB0X29wdG1nbXQgeyB9OwpzdHJ1Y3QgdF9kaXNjb24geyB9OwpzdHJ1
Y3QgdF91bml0ZGF0YSB7IH07CnN0cnVjdCB0X3VkZXJyIHsgfTsKc3RydWN0IG5ldGJ1ZiB7IH07
CiMgMTI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Nf
VExJLmgiCmNsYXNzIEFDRV9PU19UTEkKewpwdWJsaWM6CgogIHN0YXRpYyBpbnQgdF9hY2NlcHQg
KEFDRV9IQU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgIEFDRV9IQU5ETEUgcmVz
ZmQsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbAogICAgICAgICAgICAgICAg
ICAgICAgICpjYWxsKTsKICBzdGF0aWMgY2hhciAqdF9hbGxvYyAoQUNFX0hBTkRMRSBmaWxkZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdHJ1Y3RfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgaW50CiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyk7CiAgc3RhdGljIGlu
dCB0X2JpbmQgKEFDRV9IQU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dF9iaW5kICpyZXEsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdAogICAgICAgICAgICAgICAg
ICAgICB0X2JpbmQgKnJldCk7CiAgc3RhdGljIGludCB0X2Nsb3NlIChBQ0VfSEFORExFIGZpbGRl
cyk7CiAgc3RhdGljIGludCB0X2Nvbm5lY3QoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqc25kY2FsbCwKICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdF9jYWxsICpyY3ZjYWxsKTsKICBzdGF0aWMgdm9pZCB0X2Vycm9yIChjb25zdCBj
aGFyICplcnJtc2cpOwogIHN0YXRpYyBpbnQgdF9mcmVlIChjaGFyICpwdHIsCiAgICAgICAgICAg
ICAgICAgICAgIGludCBzdHJ1Y3RfdHlwZSk7CiAgc3RhdGljIGludCB0X2dldGluZm8gKEFDRV9I
QU5ETEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9pbmZvICppbmZv
KTsKICBzdGF0aWMgaW50IHRfZ2V0bmFtZSAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBuZXRidWYgKm5hbWVwLAogICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgdHlwZSk7CiAgc3RhdGljIGludCB0X2dldHN0YXRlIChBQ0VfSEFORExFIGZpbGRlcyk7
CiAgc3RhdGljIGludCB0X2xpc3RlbiAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHRfY2FsbCAqY2FsbCk7CiAgc3RhdGljIGludCB0X2xvb2sgKEFDRV9I
QU5ETEUgZmlsZGVzKTsKICBzdGF0aWMgQUNFX0hBTkRMRSB0X29wZW4gKGNoYXIgKnBhdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb2ZsYWcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdF9pbmZvICppbmZvKTsKICBzdGF0aWMgaW50IHRfb3B0bWdtdCAoQUNF
X0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X29wdG1nbXQg
KnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfb3B0bWdtdCAqcmV0KTsKICBz
dGF0aWMgaW50IHRfcmN2IChBQ0VfSEFORExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICBj
aGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywKICAgICAg
ICAgICAgICAgICAgICBpbnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IHRfcmN2ZGlzIChBQ0VfSEFO
RExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9kaXNjb24gKmRpc2Nv
bik7CiAgc3RhdGljIGludCB0X3JjdnJlbCAoQUNFX0hBTkRMRSBmaWxkZXMpOwogIHN0YXRpYyBp
bnQgdF9yY3Z1ZGF0YSAoQUNFX0hBTkRMRSBmaWxkZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdF91bml0ZGF0YSAqdW5pdGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IHRfcmN2dWRlcnIgKEFDRV9IQU5ETEUgZmlsZGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfdWRlcnIgKnVkZXJyKTsKICBzdGF0aWMg
aW50IHRfc25kIChBQ0VfSEFORExFIGZpbGRlcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywKICAgICAg
ICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBpbnQgdF9zbmRkaXMgKEFDRV9IQU5E
TEUgZmlsZGVzLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X2NhbGwgKmNhbGwpOwog
IHN0YXRpYyBpbnQgdF9zbmRyZWwgKEFDRV9IQU5ETEUgZmlsZGVzKTsKICBzdGF0aWMgaW50IHRf
c3luYyAoQUNFX0hBTkRMRSBmaWxkZXMpOwogIHN0YXRpYyBpbnQgdF91bmJpbmQgKEFDRV9IQU5E
TEUgZmlsZGVzKTsKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1NfVExJLmlubCIgMQoKCgppbmxpbmUgaW50CkFDRV9PU19UTEk6OnRf
YWNjZXB0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9IQU5E
TEUgcmVzaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqY2FsbCkK
ewoKCgogIGRvIHsgfSB3aGlsZSAoJmNhbGwgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmcmVzaGFu
ZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKCiAgZG8geyAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l
IGNoYXIgKgpBQ0VfT1NfVExJOjp0X2FsbG9jIChBQ0VfSEFORExFIGhhbmRsZSwgaW50IHN0cnVj
dF90eXBlLAogICAgICAgICAgICAgICAgICAgICBpbnQgZmllbGRzKQp7CgoKCgogIGRvIHsgfSB3
aGlsZSAoJmZpZWxkcyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZzdHJ1Y3RfdHlwZSA9PSAwKTsK
ICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1Nf
VExJOjp0X2JpbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBzdHJ1Y3QgdF9iaW5kICpyZXEsCiAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRfYmluZCAqcmV0KQp7CgoKCiAgZG8geyB9IHdoaWxlICgm
cmV0ID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnJlcSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZo
YW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu
IC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9jbG9zZSAoQUNF
X0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CgogIGRv
IHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsK
Cn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9jb25uZWN0KEFDRV9IQU5ETEUgZmlsZGVzLAog
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRfY2FsbCAqc25kY2FsbCwKICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCB0X2NhbGwgKnJjdmNhbGwpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZm
aWxkZXMgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmc25kY2FsbCA9PSAwKTsKICBkbyB7IH0gd2hp
bGUgKCZyY3ZjYWxsID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7
IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdm9pZApBQ0VfT1NfVExJOjp0X2Vy
cm9yIChjb25zdCBjaGFyICplcnJtc2cpCnsKCgoKCgoKCiAgZG8geyB9IHdoaWxlICgmZXJybXNn
ID09IDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2ZyZWUgKGNoYXIgKnB0ciwgaW50
IHN0cnVjdF90eXBlKQp7CgoKCgoKICBkbyB7IH0gd2hpbGUgKCZzdHJ1Y3RfdHlwZSA9PSAwKTsK
ICBkbyB7IH0gd2hpbGUgKCZwdHIgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RM
STo6dF9nZXRpbmZvIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IHRfaW5mbyAqaW5mbykKewoK
CgogIGRvIHsgfSB3aGlsZSAoJmluZm8gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09
IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3
aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PU19UTEk6OnRfZ2V0bmFtZSAoQUNFX0hBTkRM
RSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldGJ1ZiAqbmFtZXAsCiAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5k
bGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmbmFtZXAgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm
dHlwZSA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4g
LTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2dldHN0YXRlIChB
Q0VfSEFORExFIGhhbmRsZSkKewoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKCiAg
ZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDAp
OwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X2xpc3RlbiAoQUNFX0hBTkRMRSBoYW5kbGUs
IHN0cnVjdCB0X2NhbGwgKmNhbGwpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7
CiAgZG8geyB9IHdoaWxlICgmY2FsbCA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1Nf
VExJOjp0X2xvb2sgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFu
ZGxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAt
MTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgQUNFX0hBTkRMRQpBQ0VfT1NfVExJOjp0X29wZW4g
KGNoYXIgKnBhdGgsIGludCBvZmxhZywgc3RydWN0IHRfaW5mbyAqaW5mbykKewoKCgogIGRvIHsg
fSB3aGlsZSAoJnBhdGggPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb2ZsYWcgPT0gMCk7CiAgZG8g
eyB9IHdoaWxlICgmaW5mbyA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
OTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0
X29wdG1nbXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB0X29wdG1nbXQgKnJlcSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdF9vcHRtZ210
ICpyZXQpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CiAgZG8geyB9IHdoaWxl
ICgmcmVxID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnJldCA9PSAwKTsKCiAgZG8geyAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l
IGludApBQ0VfT1NfVExJOjp0X3JjdiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg
ICAgICBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLAog
ICAgICAgICAgICAgICAgICAgaW50ICpmbGFncykKewoKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5k
bGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYnVmID09IDApOwogIGRvIHsgfSB3aGlsZSAoJm5i
eXRlcyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFncyA9PSAwKTsKCiAgZG8geyAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5l
IGludApBQ0VfT1NfVExJOjp0X3JjdmRpcyAoQUNFX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCB0X2Rp
c2NvbiAqZGlzY29uKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwogIGRvIHsg
fSB3aGlsZSAoJmRpc2NvbiA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
OTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0
X3JjdnJlbCAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUg
PT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9
IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9yY3Z1ZGF0YSAoQUNFX0hB
TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0X3VuaXRkYXRhICp1
bml0ZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFncykKewoKCgoKICBkbyB7
IH0gd2hpbGUgKCZoYW5kbGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmdW5pdGRhdGEgPT0gMCk7
CiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09T
X1RMSTo6dF9yY3Z1ZGVyciAoQUNFX0hBTkRMRSBoYW5kbGUsIHN0cnVjdCB0X3VkZXJyICp1ZGVy
cikKewoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZ1
ZGVyciA9PSAwKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4g
LTE7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1NfVExJOjp0X3NuZCAoQUNFX0hB
TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWYsCiAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgaW50IGZs
YWdzKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAo
JmJ1ZiA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZuYnl0ZXMgPT0gMCk7CiAgZG8geyB9IHdoaWxl
ICgmZmxhZ3MgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0
dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9zbmRkaXMg
KEFDRV9IQU5ETEUgaGFuZGxlLCBzdHJ1Y3QgdF9jYWxsICpjYWxsKQp7CgoKCiAgZG8geyB9IHdo
aWxlICgmaGFuZGxlID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmNhbGwgPT0gMCk7CgogIGRvIHsg
KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0K
CmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF9zbmRyZWwgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CgoK
CiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlv
biAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9P
U19UTEk6OnRfc3luYyAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKCgoKICBkbyB7IH0gd2hpbGUgKCZo
YW5kbGUgPT0gMCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu
IC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TX1RMSTo6dF91bmJpbmQgKEFD
RV9IQU5ETEUgaGFuZGxlKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmaGFuZGxlID09IDApOwoKICBk
byB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7
Cgp9CiMgMTkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1NfVExJLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wb3N0LmgiIDEKIyAxOTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PU19UTEkuaCIgMgojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19FcnJuby5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgpjbGFzcyBBQ0VfVGltZW91
dF9NYW5hZ2VyOwoKCmVudW0gQUNFX1JlY3ljbGFibGVfU3RhdGUKewoKICBBQ0VfUkVDWUNMQUJM
RV9JRExFX0FORF9QVVJHQUJMRSwKCgogIEFDRV9SRUNZQ0xBQkxFX0lETEVfQlVUX05PVF9QVVJH
QUJMRSwKCgogIEFDRV9SRUNZQ0xBQkxFX1BVUkdBQkxFX0JVVF9OT1RfSURMRSwKCgogIEFDRV9S
RUNZQ0xBQkxFX0JVU1ksCgoKICBBQ0VfUkVDWUNMQUJMRV9DTE9TRUQsCgoKICBBQ0VfUkVDWUNM
QUJMRV9VTktOT1dOCn07CiMgNDY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWluX01heC5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9NaW5fTWF4LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NaW5fTWF4LmgiIDIKCgoKCgoKdGVtcGxhdGUg
PGNsYXNzIFQ+CmlubGluZSBjb25zdCBUICYKYWNlX21pbiAoY29uc3QgVCAmdDEsIGNvbnN0IFQg
JnQyKQp7CiAgcmV0dXJuIHQyID4gdDEgPyB0MSA6IHQyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4K
aW5saW5lIGNvbnN0IFQgJgphY2VfbWF4IChjb25zdCBUICZ0MSwgY29uc3QgVCAmdDIpCnsKICBy
ZXR1cm4gdDEgPiB0MiA/IHQxIDogdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgppbmxpbmUgY29u
c3QgVCAmCmFjZV9taW4gKGNvbnN0IFQgJnQxLCBjb25zdCBUICZ0MiwgY29uc3QgVCAmdDMpCnsK
ICByZXR1cm4gYWNlX21pbiAoYWNlX21pbiAodDEsIHQyKSwgdDMpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVD4KaW5saW5lIGNvbnN0IFQgJgphY2VfbWF4IChjb25zdCBUICZ0MSwgY29uc3QgVCAmdDIs
IGNvbnN0IFQgJnQzKQp7CiAgcmV0dXJuIGFjZV9tYXggKGFjZV9tYXggKHQxLCB0MiksIHQzKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIFQ+CmlubGluZSBjb25zdCBUICYKYWNlX3JhbmdlIChjb25zdCBU
ICZtaW4sIGNvbnN0IFQgJm1heCwgY29uc3QgVCAmdmFsKQp7CiAgcmV0dXJuIGFjZV9taW4gKGFj
ZV9tYXggKG1pbiwgdmFsKSwgbWF4KTsKfQojIDcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTWluX01heC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3MyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01pbl9NYXguaCIgMgojIDQ3MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyA5NjcgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpleHRlcm4g
IkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNy
L2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3NpZ3NldC5oIiAxIDMKIyAxMDMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAzCmV4
dGVybiBpbnQgX19zaWdpc21lbWJlciAoX19jb25zdCBfX3NpZ3NldF90ICosIGludCk7CmV4dGVy
biBpbnQgX19zaWdhZGRzZXQgKF9fc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBfX3NpZ2Rl
bHNldCAoX19zaWdzZXRfdCAqLCBpbnQpOwojIDExNyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0
LmgiIDMKZXh0ZXJuIF9faW5saW5lIGludCBfX3NpZ2lzbWVtYmVyIChfX2NvbnN0IF9fc2lnc2V0
X3QgKl9fc2V0LCBpbnQgX19zaWcpIHsgdW5zaWduZWQgbG9uZyBpbnQgX19tYXNrID0gKCgodW5z
aWduZWQgbG9uZyBpbnQpIDEpIDw8ICgoKF9fc2lnKSAtIDEpICUgKDggKiBzaXplb2YgKHVuc2ln
bmVkIGxvbmcgaW50KSkpKTsgdW5zaWduZWQgbG9uZyBpbnQgX193b3JkID0gKCgoX19zaWcpIC0g
MSkgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSk7IHJldHVybiAoX19zZXQtPl9f
dmFsW19fd29yZF0gJiBfX21hc2spID8gMSA6IDA7IH0KZXh0ZXJuIF9faW5saW5lIGludCBfX3Np
Z2FkZHNldCAoIF9fc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWcpIHsgdW5zaWduZWQgbG9uZyBp
bnQgX19tYXNrID0gKCgodW5zaWduZWQgbG9uZyBpbnQpIDEpIDw8ICgoKF9fc2lnKSAtIDEpICUg
KDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpKTsgdW5zaWduZWQgbG9uZyBpbnQgX193
b3JkID0gKCgoX19zaWcpIC0gMSkgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSk7
IHJldHVybiAoKF9fc2V0LT5fX3ZhbFtfX3dvcmRdIHw9IF9fbWFzayksIDApOyB9CmV4dGVybiBf
X2lubGluZSBpbnQgX19zaWdkZWxzZXQgKCBfX3NpZ3NldF90ICpfX3NldCwgaW50IF9fc2lnKSB7
IHVuc2lnbmVkIGxvbmcgaW50IF9fbWFzayA9ICgoKHVuc2lnbmVkIGxvbmcgaW50KSAxKSA8PCAo
KChfX3NpZykgLSAxKSAlICg4ICogc2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSk7IHVuc2ln
bmVkIGxvbmcgaW50IF9fd29yZCA9ICgoKF9fc2lnKSAtIDEpIC8gKDggKiBzaXplb2YgKHVuc2ln
bmVkIGxvbmcgaW50KSkpOyByZXR1cm4gKChfX3NldC0+X192YWxbX193b3JkXSAmPSB+X19tYXNr
KSwgMCk7IH0KIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgoKCgoKdHlwZWRlZiBf
X3NpZ19hdG9taWNfdCBzaWdfYXRvbWljX3Q7CiMgNTUgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDU2ICIvdXNyL2luY2x1ZGUv
c2lnbmFsLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ251bS5oIiAxIDMKIyA1NyAi
L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA3MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAz
CnR5cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KSAoaW50KTsKCgoKCmV4dGVybiBfX3NpZ2hh
bmRsZXJfdCBfX3N5c3Zfc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxl
cikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbCAoaW50
IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBfX3NpZ2hhbmRsZXJfdCBzaWduYWwgKGludCBfX3NpZywgX19zaWdoYW5kbGVyX3QgX19o
YW5kbGVyKSB0aHJvdyAoKTsKIyAxMDMgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4g
X19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hh
bmRsZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGtpbGwgKF9fcGlkX3QgX19waWQsIGlu
dCBfX3NpZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9fcGdy
cCwgaW50IF9fc2lnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCByYWlzZSAoaW50IF9fc2lnKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHNzaWduYWwgKGludCBfX3NpZywgX19z
aWdoYW5kbGVyX3QgX19oYW5kbGVyKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnc2lnbmFsIChpbnQg
X19zaWcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHNpZ25hbCAoaW50IF9fc2lnLCBfX2Nv
bnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTQwICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMK
ZXh0ZXJuIGludCBfX3NpZ3BhdXNlIChpbnQgX19zaWdfb3JfbWFzaywgaW50IF9faXNfc2lnKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2lncGF1c2UgKGludCBfX21hc2spIHRocm93ICgpOwoj
IDE2OCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2lnYmxvY2sgKGludCBf
X21hc2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnc2V0bWFzayAoaW50IF9fbWFzaykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzaWdnZXRtYXNrICh2b2lkKSB0aHJvdyAoKTsKIyAxODMgIi91
c3IvaW5jbHVkZS9zaWduYWwuaCIgMwp0eXBlZGVmIF9fc2lnaGFuZGxlcl90IHNpZ2hhbmRsZXJf
dDsKCgoKCnR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnX3Q7CgoKCgoKCgojIDEgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDEgMwojIDE5NyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRz
L3NpZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDIgMwoKCgoKCgoKdHlwZWRlZiB1bmlvbiBz
aWd2YWwKICB7CiAgICBpbnQgc2l2YWxfaW50OwogICAgdm9pZCAqc2l2YWxfcHRyOwogIH0gc2ln
dmFsX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwp0eXBlZGVmIHN0cnVj
dCBzaWdpbmZvCiAgewogICAgaW50IHNpX3NpZ25vOwogICAgaW50IHNpX2Vycm5vOwoKICAgIGlu
dCBzaV9jb2RlOwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBpbnQgX3BhZFsoKDEyOCAvIHNp
emVvZiAoaW50KSkgLSAzKV07CgoKICAgICAgICBzdHJ1Y3QKICAgICAgICAgIHsKICAgICAgICAg
ICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlkX3Qgc2lfdWlkOwogICAgICAgICAg
fSBfa2lsbDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgX3RpbWVyMTsKICAgICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjI7CiAgICAgICAg
ICB9IF90aW1lcjsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAgICAgICAgICBfX3Bp
ZF90IHNpX3BpZDsKICAgICAgICAgICAgX191aWRfdCBzaV91aWQ7CiAgICAgICAgICAgIHNpZ3Zh
bF90IHNpX3NpZ3ZhbDsKICAgICAgICAgIH0gX3J0OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAgICAgICAgICBfX3VpZF90IHNpX3Vp
ZDsKICAgICAgICAgICAgaW50IHNpX3N0YXR1czsKICAgICAgICAgICAgX19jbG9ja190IHNpX3V0
aW1lOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfc3RpbWU7CiAgICAgICAgICB9IF9zaWdjaGxk
OwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKnNpX2FkZHI7
CiAgICAgICAgICB9IF9zaWdmYXVsdDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAgewogICAg
ICAgICAgICBsb25nIGludCBzaV9iYW5kOwogICAgICAgICAgICBpbnQgc2lfZmQ7CiAgICAgICAg
ICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZpZWxkczsKICB9IHNpZ2luZm9fdDsKIyAxMjggIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsKICBTSV9BU1lOQ05MID0gLTYsCgog
IFNJX1NJR0lPLAoKICBTSV9BU1lOQ0lPLAoKICBTSV9NRVNHUSwKCiAgU0lfVElNRVIsCgogIFNJ
X1FVRVVFLAoKICBTSV9VU0VSLAoKICBTSV9LRVJORUwgPSAweDgwCgp9OwoKCgplbnVtCnsKICBJ
TExfSUxMT1BDID0gMSwKCiAgSUxMX0lMTE9QTiwKCiAgSUxMX0lMTEFEUiwKCiAgSUxMX0lMTFRS
UCwKCiAgSUxMX1BSVk9QQywKCiAgSUxMX1BSVlJFRywKCiAgSUxMX0NPUFJPQywKCiAgSUxMX0JB
RFNUSwoKfTsKCgplbnVtCnsKICBGUEVfSU5URElWID0gMSwKCiAgRlBFX0lOVE9WRiwKCiAgRlBF
X0ZMVERJViwKCiAgRlBFX0ZMVE9WRiwKCiAgRlBFX0ZMVFVORCwKCiAgRlBFX0ZMVFJFUywKCiAg
RlBFX0ZMVElOViwKCiAgRlBFX0ZMVFNVQgoKfTsKCgplbnVtCnsKICBTRUdWX01BUEVSUiA9IDEs
CgogIFNFR1ZfQUNDRVJSCgp9OwoKCmVudW0KewogIEJVU19BRFJBTE4gPSAxLAoKICBCVVNfQURS
RVJSLAoKICBCVVNfT0JKRVJSCgp9OwoKCmVudW0KewogIFRSQVBfQlJLUFQgPSAxLAoKICBUUkFQ
X1RSQUNFCgp9OwoKCmVudW0KewogIENMRF9FWElURUQgPSAxLAoKICBDTERfS0lMTEVELAoKICBD
TERfRFVNUEVELAoKICBDTERfVFJBUFBFRCwKCiAgQ0xEX1NUT1BQRUQsCgogIENMRF9DT05USU5V
RUQKCn07CgoKZW51bQp7CiAgUE9MTF9JTiA9IDEsCgogIFBPTExfT1VULAoKICBQT0xMX01TRywK
CiAgUE9MTF9FUlIsCgogIFBPTExfUFJJLAoKICBQT0xMX0hVUAoKfTsKIyAyNzEgIi91c3IvaW5j
bHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfczsKCnR5cGVkZWYg
c3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICBpbnQgc2ln
ZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAg
ICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMpXTsKCiAgICAgICAgc3RydWN0CiAg
ICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rpb24pIChzaWd2YWxfdCk7CiAgICAg
ICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0cmlidXRlOwogICAgICAgICAgfSBf
c2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9IHNpZ2V2ZW50X3Q7CgoKCgoKCmVu
dW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05PTkUsCgogIFNJR0VWX1RIUkVBRAoK
fTsKIyAyMDAgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCmV4dGVybiBpbnQgc2lnZW1w
dHlzZXQgKHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdmaWxsc2V0
IChzaWdzZXRfdCAqX19zZXQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lnYWRkc2V0IChzaWdz
ZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2RlbHNl
dCAoc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWdubykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
aWdpc21lbWJlciAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBzaWdpc2VtcHR5c2V0IChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNpZ3NldF90ICpfX3NldCwgX19jb25z
dCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzaWdzZXRf
dCAqX19yaWdodCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdvcnNldCAoc2lnc2V0X3QgKl9f
c2V0LCBfX2NvbnN0IHNpZ3NldF90ICpfX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgc2lnc2V0X3QgKl9fcmlnaHQpIHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zaWdhY3Rpb24uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2FjdGlvbi5oIiAz
CnN0cnVjdCBzaWdhY3Rpb24KICB7CgoKICAgIHVuaW9uCiAgICAgIHsKCiAgICAgICAgX19zaWdo
YW5kbGVyX3Qgc2FfaGFuZGxlcjsKCiAgICAgICAgdm9pZCAoKnNhX3NpZ2FjdGlvbikgKGludCwg
c2lnaW5mb190ICosIHZvaWQgKik7CiAgICAgIH0KICAgIF9fc2lnYWN0aW9uX2hhbmRsZXI7CgoK
CgoKCgogICAgX19zaWdzZXRfdCBzYV9tYXNrOwoKCiAgICBpbnQgc2FfZmxhZ3M7CgoKICAgIHZv
aWQgKCpzYV9yZXN0b3JlcikgKHZvaWQpOwogIH07CiMgMjMzICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncHJvY21hc2sgKGludCBfX2hvdywgX19jb25zdCBzaWdz
ZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgc2lnc2V0X3Qg
Kl9fcmVzdHJpY3QgX19vc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWdzdXNwZW5kIChf
X2NvbnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhY3Rpb24g
KGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpfX3Jlc3RyaWN0IF9fYWN0LAog
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiAqX19yZXN0cmljdCBfX29hY3Qp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lncGVuZGluZyAoc2lnc2V0X3QgKl9fc2V0KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0IHNpZ3NldF90ICpfX3Jlc3RyaWN0
IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc2lnd2FpdGluZm8gKF9fY29uc3Qgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19zZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IHNpZ3RpbWVkd2FpdCAoX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmlj
dCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0cmljdCBf
X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAq
X19yZXN0cmljdCBfX3RpbWVvdXQpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lncXVl
dWUgKF9fcGlkX3QgX19waWQsIGludCBfX3NpZywgX19jb25zdCB1bmlvbiBzaWd2YWwgX192YWwp
CiAgICAgdGhyb3cgKCk7CiMgMjc4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIF9f
Y29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRdOwpleHRlcm4gX19jb25zdCBjaGFy
ICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qgc2lndmVjCiAgewogICAgX19zaWdo
YW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNrOwoKICAgIGludCBzdl9mbGFnczsK
CiAgfTsKIyAzMDIgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gaW50IHNpZ3ZlYyAo
aW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWd2ZWMgKl9fdmVjLAogICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNpZ3ZlYyAqX19vdmVjKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0
LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQuaCIgMSAzCiMgMTggIi91c3Iv
aW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBfZnByZWcgewogICAgICAgIHVuc2ln
bmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50
Owp9OwoKc3RydWN0IF9mcHhyZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5k
WzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50OwogICAgICAgIHVuc2lnbmVkIHNo
b3J0IHBhZGRpbmdbM107Cn07CgpzdHJ1Y3QgX3htbXJlZyB7CiAgICAgICAgdW5zaWduZWQgbG9u
ZyBlbGVtZW50WzRdOwp9OwoKc3RydWN0IF9mcHN0YXRlIHsKCiAgICAgICAgdW5zaWduZWQgbG9u
ZyBjdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdGFn
OwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXBvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjc3Nl
bDsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk
YXRhc2VsOwogICAgICAgIHN0cnVjdCBfZnByZWcgX3N0WzhdOwogICAgICAgIHVuc2lnbmVkIHNo
b3J0IHN0YXR1czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBtYWdpYzsKCgogICAgICAgIHVuc2ln
bmVkIGxvbmcgX2Z4c3JfZW52WzZdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXhjc3I7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICAgICAgICBzdHJ1Y3QgX2ZweHJlZyBfZnhzcl9z
dFs4XTsKICAgICAgICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhdOwogICAgICAgIHVuc2lnbmVkIGxv
bmcgcGFkZGluZ1s1Nl07Cn07CgoKCnN0cnVjdCBzaWdjb250ZXh0IHsKICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAg
ICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywg
X19kc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBl
c2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlc3A7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYng7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZHg7CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBlY3g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYXg7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgICAgICAgdW5zaWduZWQgbG9uZyBlcnI7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY3MsIF9fY3NoOwog
ICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwX2F0
X3NpZ25hbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywgX19zc2g7CiAgICAgICAgc3RydWN0
IF9mcHN0YXRlICogZnBzdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG1hc2s7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyBjcjI7Cn07CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRl
eHQuaCIgMiAzCiMgMzA4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCmV4dGVybiBpbnQg
c2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3ApIHRocm93ICgpOwojIDMyMCAiL3Vz
ci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2lnaW50ZXJydXB0IChpbnQgX19zaWcs
IGludCBfX2ludGVycnVwdCkgdGhyb3cgKCk7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3N0
YWNrLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzdGFjay5oIiAzCnN0cnVjdCBz
aWdzdGFjawogIHsKICAgIHZvaWQgKnNzX3NwOwogICAgaW50IHNzX29uc3RhY2s7CiAgfTsKCgoK
ZW51bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FCTEUKCn07CiMgNTAgIi91c3IvaW5j
bHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDMKdHlwZWRlZiBzdHJ1Y3Qgc2lnYWx0c3RhY2sKICB7CiAg
ICB2b2lkICpzc19zcDsKICAgIGludCBzc19mbGFnczsKICAgIHNpemVfdCBzc19zaXplOwogIH0g
c3RhY2tfdDsKIyAzMjMgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgojIDEgIi91c3IvaW5j
bHVkZS91Y29udGV4dC5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS91Y29udGV4
dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMSAzCiMgMjIgIi91
c3IvaW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy91Y29udGV4dC5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvc2lnbmFsLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaCIgMSAzCiMgMjggIi91c3Iv
aW5jbHVkZS9zeXMvdWNvbnRleHQuaCIgMiAzCgoKCnR5cGVkZWYgaW50IGdyZWdfdDsKCgoKCgp0
eXBlZGVmIGdyZWdfdCBncmVnc2V0X3RbMTldOwoKCgplbnVtCnsKICBSRUdfR1MgPSAwLAoKICBS
RUdfRlMsCgogIFJFR19FUywKCiAgUkVHX0RTLAoKICBSRUdfRURJLAoKICBSRUdfRVNJLAoKICBS
RUdfRUJQLAoKICBSRUdfRVNQLAoKICBSRUdfRUJYLAoKICBSRUdfRURYLAoKICBSRUdfRUNYLAoK
ICBSRUdfRUFYLAoKICBSRUdfVFJBUE5PLAoKICBSRUdfRVJSLAoKICBSRUdfRUlQLAoKICBSRUdf
Q1MsCgogIFJFR19FRkwsCgogIFJFR19VRVNQLAoKICBSRUdfU1MKCn07CgoKCnN0cnVjdCBfbGli
Y19mcHJlZwp7CiAgdW5zaWduZWQgc2hvcnQgaW50IHNpZ25pZmljYW5kWzRdOwogIHVuc2lnbmVk
IHNob3J0IGludCBleHBvbmVudDsKfTsKCnN0cnVjdCBfbGliY19mcHN0YXRlCnsKICB1bnNpZ25l
ZCBsb25nIGludCBjdzsKICB1bnNpZ25lZCBsb25nIGludCBzdzsKICB1bnNpZ25lZCBsb25nIGlu
dCB0YWc7CiAgdW5zaWduZWQgbG9uZyBpbnQgaXBvZmY7CiAgdW5zaWduZWQgbG9uZyBpbnQgY3Nz
ZWw7CiAgdW5zaWduZWQgbG9uZyBpbnQgZGF0YW9mZjsKICB1bnNpZ25lZCBsb25nIGludCBkYXRh
c2VsOwogIHN0cnVjdCBfbGliY19mcHJlZyBfc3RbOF07CiAgdW5zaWduZWQgbG9uZyBpbnQgc3Rh
dHVzOwp9OwoKCnR5cGVkZWYgc3RydWN0IF9saWJjX2Zwc3RhdGUgKmZwcmVnc2V0X3Q7CgoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBncmVnc2V0X3QgZ3JlZ3M7CgoKICAgIGZwcmVnc2V0X3QgZnBy
ZWdzOwogICAgdW5zaWduZWQgbG9uZyBpbnQgb2xkbWFzazsKICAgIHVuc2lnbmVkIGxvbmcgaW50
IGNyMjsKICB9IG1jb250ZXh0X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgdWNvbnRleHQKICB7CiAgICB1
bnNpZ25lZCBsb25nIGludCB1Y19mbGFnczsKICAgIHN0cnVjdCB1Y29udGV4dCAqdWNfbGluazsK
ICAgIHN0YWNrX3QgdWNfc3RhY2s7CiAgICBtY29udGV4dF90IHVjX21jb250ZXh0OwogICAgX19z
aWdzZXRfdCB1Y19zaWdtYXNrOwogICAgc3RydWN0IF9saWJjX2Zwc3RhdGUgX19mcHJlZ3NfbWVt
OwogIH0gdWNvbnRleHRfdDsKIyAyOCAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBnZXRjb250ZXh0ICh1Y29udGV4dF90ICpfX3VjcCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzZXRjb250ZXh0IChfX2NvbnN0IHVjb250ZXh0X3QgKl9fdWNw
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzd2FwY29udGV4dCAodWNvbnRleHRfdCAqX19yZXN0
cmljdCBfX291Y3AsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdWNvbnRleHRfdCAq
X19yZXN0cmljdCBfX3VjcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBtYWtlY29udGV4
dCAodWNvbnRleHRfdCAqX191Y3AsIHZvaWQgKCpfX2Z1bmMpICh2b2lkKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2FyZ2MsIC4uLikgdGhyb3cgKCk7Cgp9CiMgMzI1ICIvdXNyL2lu
Y2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKCmV4dGVybiBpbnQgc2lnc3RhY2sgKHN0cnVjdCBzaWdz
dGFjayAqX19zcywgc3RydWN0IHNpZ3N0YWNrICpfX29zcykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgc2lnYWx0c3RhY2sgKF9fY29uc3Qgc3RydWN0IHNpZ2FsdHN0YWNrICpfX3Jlc3RyaWN0IF9f
c3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0cmlj
dCBfX29zcykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHNpZ2hvbGQgKGludCBfX3NpZykg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdyZWxzZSAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHNpZ2lnbm9yZSAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zaWdo
YW5kbGVyX3Qgc2lnc2V0IChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9fZGlzcCkgdGhyb3cg
KCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzU5ICIv
dXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCgoKCgpleHRlcm4gaW50IF9fbGliY19jdXJyZW50
X3NpZ3J0bWluICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX19saWJjX2N1cnJlbnRfc2ln
cnRtYXggKHZvaWQpIHRocm93ICgpOwoKCgp9CiMgOTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVh
ZC5oIiAxIDMKIyA5NzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PUy5oIiAyCgoKCgp9CiMgMTAxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgMTAx
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIK
IyAxMDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu
aCIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9z
eXMvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNy
L2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3lzL3RpbWUuaCIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o
IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5j
bHVkZS9zeXMvdGltZS5oIiAyIDMKCgoKCgoKCmV4dGVybiAiQyIgewojIDU2ICIvdXNyL2luY2x1
ZGUvc3lzL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXpvbmUKICB7CiAgICBpbnQgdHpfbWludXRlc3dl
c3Q7CiAgICBpbnQgdHpfZHN0dGltZTsKICB9OwoKdHlwZWRlZiBzdHJ1Y3QgdGltZXpvbmUgKl9f
cmVzdHJpY3QgX190aW1lem9uZV9wdHJfdDsKIyA3MiAiL3Vzci9pbmNsdWRlL3N5cy90aW1lLmgi
IDMKZXh0ZXJuIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9f
dHYsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWV6b25lX3B0cl90IF9fdHopIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBzZXR0aW1lb2ZkYXkgKF9fY29uc3Qgc3RydWN0IHRpbWV2YWwg
Kl9fdHYsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lem9uZSAq
X190eikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBhZGp0aW1lIChfX2NvbnN0IHN0cnVjdCB0
aW1ldmFsICpfX2RlbHRhLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX29s
ZGRlbHRhKSB0aHJvdyAoKTsKCgoKCmVudW0gX19pdGltZXJfd2hpY2gKICB7CgogICAgSVRJTUVS
X1JFQUwgPSAwLAoKCiAgICBJVElNRVJfVklSVFVBTCA9IDEsCgoKCiAgICBJVElNRVJfUFJPRiA9
IDIKCiAgfTsKCgoKc3RydWN0IGl0aW1lcnZhbAogIHsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF9p
bnRlcnZhbDsKCiAgICBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKICB9OwoKCnR5cGVkZWYgZW51
bSBfX2l0aW1lcl93aGljaCBfX2l0aW1lcl93aGljaF90OwoKCgoKCgpleHRlcm4gaW50IGdldGl0
aW1lciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IGl0aW1lcnZhbCAqX192YWx1ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGl0aW1l
ciAoX19pdGltZXJfd2hpY2hfdCBfX3doaWNoLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBzdHJ1Y3QgaXRpbWVydmFsICpfX3Jlc3RyaWN0IF9fbmV3LAogICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGl0aW1lcnZhbCAqX19yZXN0cmljdCBfX29sZCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgdXRpbWVzIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19jb25zdCBzdHJ1Y3QgdGltZXZh
bCBfX3R2cFsyXSkKICAgICB0aHJvdyAoKTsKIyAxNjkgIi91c3IvaW5jbHVkZS9zeXMvdGltZS5o
IiAzCn0KIyAxMDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaCIgMgojIDEwNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5oIgp0eXBlZGVmIHN0cnVjdCB0aW1lc3BlYyB0aW1lc3BlY190OwoKCgp0eXBl
ZGVmIGludCBjbG9ja2lkX3Q7CiMgMTA2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCmNsYXNzIEFDRV9UaW1lX1ZhbHVlOwogICAgICAgICAgICAg
IEFDRV9UaW1lX1ZhbHVlIG9wZXJhdG9yICsgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs
dWUgJnR2Mik7CgogICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlIG9wZXJhdG9yIC0gKGNvbnN0
IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2Mik7CiMgMTA5MiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmNsYXNzIEFDRV9UaW1lX1ZhbHVl
CnsKcHVibGljOgoKCgogIHN0YXRpYyBjb25zdCBBQ0VfVGltZV9WYWx1ZSB6ZXJvOwojIDExMDgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0
YXRpYyBjb25zdCBBQ0VfVGltZV9WYWx1ZSBtYXhfdGltZTsKCgoKCiAgQUNFX1RpbWVfVmFsdWUg
KHZvaWQpOwoKCiAgQUNFX1RpbWVfVmFsdWUgKGxvbmcgc2VjLCBsb25nIHVzZWMgPSAwKTsKCgoK
ICBBQ0VfVGltZV9WYWx1ZSAoY29uc3Qgc3RydWN0IHRpbWV2YWwgJnQpOwoKCiAgQUNFX1RpbWVf
VmFsdWUgKGNvbnN0IHRpbWVzcGVjX3QgJnQpOwoKCiAgQUNFX1RpbWVfVmFsdWUgKGNvbnN0IEFD
RV9UaW1lX1ZhbHVlICZ0dik7CgoKCgoKCgogIHZvaWQgc2V0IChsb25nIHNlYywgbG9uZyB1c2Vj
KTsKCgoKICB2b2lkIHNldCAoZG91YmxlIGQpOwoKCiAgdm9pZCBzZXQgKGNvbnN0IHRpbWV2YWwg
JnQpOwoKCiAgdm9pZCBzZXQgKGNvbnN0IHRpbWVzcGVjX3QgJnQpOwoKCgoKCgoKICBsb25nIG1z
ZWMgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBtc2VjIChsb25nKTsKCgogIG9wZXJhdG9yIHRpbWVz
cGVjX3QgKCkgY29uc3Q7CgoKICBvcGVyYXRvciB0aW1ldmFsICgpIGNvbnN0OwoKCiAgb3BlcmF0
b3IgY29uc3QgdGltZXZhbCAqKCkgY29uc3Q7CiMgMTE3NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgbG9uZyBzZWMgKHZvaWQpIGNvbnN0OwoK
CiAgdm9pZCBzZWMgKGxvbmcgc2VjKTsKCgogIGxvbmcgdXNlYyAodm9pZCkgY29uc3Q7CgoKICB2
b2lkIHVzZWMgKGxvbmcgdXNlYyk7CgoKCgogIHZvaWQgb3BlcmF0b3IgKz0gKGNvbnN0IEFDRV9U
aW1lX1ZhbHVlICZ0dik7CgoKICB2b2lkIG9wZXJhdG9yIC09IChjb25zdCBBQ0VfVGltZV9WYWx1
ZSAmdHYpOwoKCiAgQUNFX1RpbWVfVmFsdWUgJm9wZXJhdG9yICo9IChkb3VibGUgZCk7CgoKICBm
cmllbmQgQUNFX1RpbWVfVmFsdWUgb3BlcmF0b3IgKyAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
Q0VfVGltZV9WYWx1ZSAmdHYyKTsKCgogIGZyaWVuZCBBQ0VfVGltZV9WYWx1ZSBvcGVyYXRvciAt
IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djIpOwoKCiAgZnJpZW5k
IGludCBvcGVyYXRvciA8IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYyKTsKCgogIGZy
aWVuZCBpbnQgb3BlcmF0b3IgPiAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2Mik7CgoK
ICBmcmllbmQgaW50IG9wZXJhdG9yIDw9IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2
Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yID49IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs
dWUgJnR2Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yID09IChjb25zdCBBQ0VfVGltZV9WYWx1
ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Rp
bWVfVmFsdWUgJnR2Mik7CgoKICBmcmllbmQgaW50IG9wZXJhdG9yICE9IChjb25zdCBBQ0VfVGlt
ZV9WYWx1ZSAmdHYxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QUNFX1RpbWVfVmFsdWUgJnR2Mik7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwojIDEyNDAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpwcml2
YXRlOgoKICB2b2lkIG5vcm1hbGl6ZSAodm9pZCk7CgoKICB0aW1ldmFsIHR2XzsKfTsKIyAxMjU3
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKY2xh
c3MgQUNFX0NvdW50ZG93bl9UaW1lCnsKcHVibGljOgoKCiAgQUNFX0NvdW50ZG93bl9UaW1lIChB
Q0VfVGltZV9WYWx1ZSAqbWF4X3dhaXRfdGltZSk7CgoKICB+QUNFX0NvdW50ZG93bl9UaW1lICh2
b2lkKTsKCgogIGludCBzdGFydCAodm9pZCk7CgoKCiAgaW50IHN0b3AgKHZvaWQpOwoKCgogIGlu
dCB1cGRhdGUgKHZvaWQpOwoKcHJpdmF0ZTogQUNFX1RpbWVfVmFsdWUgKm1heF93YWl0X3RpbWVf
OwoKCgogIEFDRV9UaW1lX1ZhbHVlIHN0YXJ0X3RpbWVfOwoKCiAgaW50IHN0b3BwZWRfOwp9Owoj
IDE1MTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o
IgpleHRlcm4gIkMiIHsKdHlwZWRlZiB2b2lkICgqQUNFX1NlcnZpY2VfT2JqZWN0X0V4dGVybWlu
YXRvcikodm9pZCAqKTsKfQojIDE3NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5oIgpzdHJ1Y3Qgc3RycmVjdmZkIHt9OwojIDE3ODAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgp0eXBlZGVmIGNvbnN0
IHN0cnVjdCBpb3ZlYyBBQ0VfV1JJVEVWX1RZUEU7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgaW92ZWMg
QUNFX1JFQURWX1RZUEU7CgoKCnR5cGVkZWYgc3RydWN0IHJsaW1pdCBBQ0VfU0VUUkxJTUlUX1RZ
UEU7CiMgMTg3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmgiCnN0cnVjdCBjYW5jZWxfc3RhdGUKewogIGludCBjYW5jZWxzdGF0ZTsKCgoKICBpbnQg
Y2FuY2VsdHlwZTsKCn07CiMgMTkyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAx
OTIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIg
MgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl
L3N5cy9zdGF0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvdGltZS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDk2
ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNs
dWRlL2JpdHMvc3RhdC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvc3RhdC5oIiAzCnN0
cnVjdCBzdGF0CiAgewogICAgX19kZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQg
X19wYWQxOwoKICAgIF9faW5vX3Qgc3RfaW5vOwoKCgogICAgX19tb2RlX3Qgc3RfbW9kZTsKICAg
IF9fbmxpbmtfdCBzdF9ubGluazsKICAgIF9fdWlkX3Qgc3RfdWlkOwogICAgX19naWRfdCBzdF9n
aWQ7CiAgICBfX2Rldl90IHN0X3JkZXY7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19wYWQyOwoK
ICAgIF9fb2ZmX3Qgc3Rfc2l6ZTsKCgoKICAgIF9fYmxrc2l6ZV90IHN0X2Jsa3NpemU7CgoKICAg
IF9fYmxrY250X3Qgc3RfYmxvY2tzOwoKCgogICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNp
Z25lZCBsb25nIGludCBfX3VudXNlZDE7CiAgICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2ln
bmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAgIF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWdu
ZWQgbG9uZyBpbnQgX191bnVzZWQzOwoKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNDsK
ICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkNTsKCgoKICB9OwoKCnN0cnVjdCBzdGF0NjQK
ICB7CiAgICBfX2Rldl90IHN0X2RldjsKICAgIHVuc2lnbmVkIGludCBfX3BhZDE7CgogICAgX19p
bm9fdCBfX3N0X2lubzsKICAgIF9fbW9kZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qgc3Rfbmxp
bms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19kZXZfdCBz
dF9yZGV2OwogICAgdW5zaWduZWQgaW50IF9fcGFkMjsKICAgIF9fb2ZmNjRfdCBzdF9zaXplOwog
ICAgX19ibGtzaXplX3Qgc3RfYmxrc2l6ZTsKCiAgICBfX2Jsa2NudDY0X3Qgc3RfYmxvY2tzOwog
ICAgX190aW1lX3Qgc3RfYXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDE7CiAg
ICBfX3RpbWVfdCBzdF9tdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICAg
IF9fdGltZV90IHN0X2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAg
X19pbm82NF90IHN0X2lubzsKICB9OwojIDk5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAz
CiMgMjAwICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IHN0YXQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZzdGF0IChpbnQgX19m
ZCwgc3RydWN0IHN0YXQgKl9fYnVmKSB0aHJvdyAoKTsKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMv
c3RhdC5oIiAzCmV4dGVybiBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
aWxlLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19yZXN0cmljdCBfX2J1Zikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgZnN0YXQ2NCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0NjQgKl9f
YnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBsc3RhdCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQgKl9fcmVzdHJpY3Qg
X19idWYpIHRocm93ICgpOwojIDI0MSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJu
IGludCBsc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlLAogICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IGNobW9kIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2Rl
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2htb2QgKGludCBfX2ZkLCBfX21vZGVfdCBfX21v
ZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBfX21vZGVfdCB1bWFzayAoX19tb2RlX3QgX19tYXNr
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX21vZGVfdCBnZXR1bWFzayAodm9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgbWtkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21v
ZGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRo
LCBfX21vZGVfdCBfX21vZGUsIF9fZGV2X3QgX19kZXYpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IG1rZmlmbyAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSkgdGhy
b3cgKCk7CiMgMzA2ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9fZnhz
dGF0IChpbnQgX192ZXIsIGludCBfX2ZpbGRlcywgc3RydWN0IHN0YXQgKl9fc3RhdF9idWYpIHRo
cm93ICgpOwpleHRlcm4gaW50IF9feHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2Zp
bGVuYW1lLAogICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBfX2x4c3RhdCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmls
ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJv
dyAoKTsKIyAzMzAgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgX19meHN0
YXQ2NCAoaW50IF9fdmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0NjQgKl9fc3RhdF9idWYp
CiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgX194c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3Qg
Y2hhciAqX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9f
c3RhdF9idWYpIHRocm93ICgpOwpleHRlcm4gaW50IF9fbHhzdGF0NjQgKGludCBfX3ZlciwgX19j
b25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0
NjQgKl9fc3RhdF9idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBfX3hta25vZCAoaW50IF9fdmVy
LCBfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlLAogICAgICAgICAgICAgICAg
ICAgICBfX2Rldl90ICpfX2RldikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQg
c3RhdCAoX19jb25zdCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc3RhdCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feHN0YXQgKDMsIF9f
cGF0aCwgX19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBsc3RhdCAoX19jb25z
dCBjaGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg
Kl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2x4c3RhdCAoMywgX19wYXRoLCBfX3N0
YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0IChpbnQgX19mZCwgc3RydWN0
IHN0YXQgKl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX2Z4c3RhdCAoMywgX19mZCwg
X19zdGF0YnVmKTsKfQoKCmV4dGVybiBfX2lubGluZV9fIGludCBta25vZCAoX19jb25zdCBjaGFy
ICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Rldl90IF9fZGV2KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feG1rbm9kICgxLCBfX3BhdGgsIF9f
bW9kZSwgJl9fZGV2KTsKfQoKCgoKCmV4dGVybiBfX2lubGluZV9fIGludCBzdGF0NjQgKF9fY29u
c3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rh
dDY0ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX194c3RhdDY0ICgzLCBfX3BhdGgs
IF9fc3RhdGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQ2NCAoX19jb25zdCBj
aGFyICpfX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0
ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19seHN0YXQ2NCAoMywgX19wYXRoLCBf
X3N0YXRidWYpOwp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBz
dHJ1Y3Qgc3RhdDY0ICpfX3N0YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19meHN0YXQ2NCAo
MywgX19mZCwgX19zdGF0YnVmKTsKfQoKCgoKfQojIDE5MjUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMTk0NSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAxIDMKIyAxOTQ2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaCIgMgojIDIwODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5oIgp0eXBlZGVmIHB0aHJlYWRfdCBBQ0VfaHRocmVhZF90Owp0eXBl
ZGVmIHB0aHJlYWRfdCBBQ0VfdGhyZWFkX3Q7CgoKCgoKICAgICAgICB0eXBlZGVmIHB0aHJlYWRf
a2V5X3QgQUNFX3RocmVhZF9rZXlfdDsKCgoKdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgQUNFX211
dGV4X3Q7CnR5cGVkZWYgcHRocmVhZF9jb25kX3QgQUNFX2NvbmRfdDsKdHlwZWRlZiBwdGhyZWFk
X2NvbmRhdHRyX3QgQUNFX2NvbmRhdHRyX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleGF0dHJfdCBB
Q0VfbXV0ZXhhdHRyX3Q7Cgp0eXBlZGVmIHB0aHJlYWRfbXV0ZXhfdCBBQ0VfdGhyZWFkX211dGV4
X3Q7CiMgMjIyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmgiCmNsYXNzIEFDRV9zZW1hX3QKewpmcmllbmQgY2xhc3MgQUNFX09TOwpwcm90ZWN0ZWQ6
CgogIEFDRV9tdXRleF90IGxvY2tfOwoKCiAgQUNFX2NvbmRfdCBjb3VudF9ub256ZXJvXzsKCgog
IHVfbG9uZyBjb3VudF87CgoKICB1X2xvbmcgd2FpdGVyc187Cn07CiMgMjU5NyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnN0cnVjdCBBQ0Vfcnds
b2NrX3QKewpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIEFDRV9PUzsKCiAgQUNFX211dGV4X3Qg
bG9ja187CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfcmVhZGVyc187CgoKICBpbnQgbnVtX3dhaXRp
bmdfcmVhZGVyc187CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfd3JpdGVyc187CgoKICBpbnQgbnVt
X3dhaXRpbmdfd3JpdGVyc187CgoKICBpbnQgcmVmX2NvdW50XzsKCgoKICBpbnQgaW1wb3J0YW50
X3dyaXRlcl87CgoKICBBQ0VfY29uZF90IHdhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl87Cgp9Owoj
IDI2NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o
IgpjbGFzcyBBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90CnsKcHVibGljOgoKICBBQ0VfdGhy
ZWFkX211dGV4X3QgbmVzdGluZ19tdXRleF87CgoKCiAgQUNFX2NvbmRfdCBsb2NrX2F2YWlsYWJs
ZV87CgoKICBpbnQgbmVzdGluZ19sZXZlbF87CgoKICBBQ0VfdGhyZWFkX3Qgb3duZXJfaWRfOwp9
OwojIDI4MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5oIgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVm
IF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDExMCAiL3Vzci9sb2NhbC9nY2Mt
My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGFyZy5oIiAz
CnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyAyODEzICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUv
YXNzZXJ0LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMiAzCiMg
NjUgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwpleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBf
X2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9f
ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19j
b25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJy
bnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9f
YXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyAyODE1ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5o
IiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu
dS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRk
ZWYuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
dHlwZXMuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2Mt
My4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMK
dHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRl
ZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDczICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1
ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMxMiAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRl
L3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNs
dWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK
ewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBf
X3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUv
X0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19t
YnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0
X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vz
ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwoj
IDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5o
IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
d2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy93Y2hhci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5
ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEg
Ii91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwK
ICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19H
Q09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdB
TF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9E
RVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09O
Vl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoK
CgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBf
X2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVk
ZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2dj
b252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRl
ZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRl
ZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlw
ZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAq
LCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2ln
bmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5z
aWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250
ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVu
c2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkg
KF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFu
c19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2Nv
bnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsK
CiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0
X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5z
X2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9f
bmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVk
X29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGlu
dCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAg
X19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2Nv
bnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBf
X21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVk
ZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVk
IGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRp
b25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0
YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2Rh
dGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90
IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25f
XyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBf
X2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9f
Y2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsK
fSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19h
dHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9H
X3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNs
dWRlL3N0ZGFyZy5oIiAxIDMKIyA1MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE1OCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklM
RTsKIyAxNjggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190
OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAg
c3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3BvczsKIyAxOTEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ss
CiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2Nv
bnYKfTsKIyAyNTkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fRklMRSB7CiAg
aW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2Vu
ZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIq
IF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jh
c2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAq
X0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJr
ZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87
CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hv
cnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hv
cnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzAzICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAgdm9pZCAqX19wYWQxOwogIHZvaWQg
Kl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQp
IC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoK
ZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0
IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3Bs
dXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRl
ZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNp
emVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2
b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4g
KHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGlu
dCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9m
biBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dy
aXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9u
X3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRl
OwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29v
a2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29v
a2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9p
ZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBf
X3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUs
IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0
ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191
ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJ
TEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxF
ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAo
KTsKIyA0MjQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9J
T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lP
X0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19m
cCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93
ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU0ICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9f
cmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
SU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRl
cm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cg
KCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkg
dGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29m
ZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAo
X0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2Zy
ZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwojIDUxMCAiL3Vzci9pbmNsdWRl
L2xpYmlvLmgiIDMKfQojIDc0ICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9fZ251Y192
YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBfR19m
cG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9zNjRfdCBmcG9zNjRfdDsKIyAxMzcgIi91
c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDEz
OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9p
bmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpz
dGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUyICIvdXNyL2xvY2FsL2djYy0zLjAvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
aW50IHJlbW92ZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBGSUxFICp0bXBmaWxlICh2b2lkKSB0aHJvdyAoKTsKIyAxNjggIi91
c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
dG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg4ICIvdXNyL2xvY2FsL2djYy0zLjAv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRl
cm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpfX3Bm
eCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJu
IGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNo
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFsbCAodm9p
ZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
IEZJTEUgKmZvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93
ICgpOwpleHRlcm4gRklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
aWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3Qg
Y2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2
b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0
ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFy
ICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hh
ciAqKl9fcmVzdHJpY3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0
YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXR2YnVmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt
LCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVz
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZmZlciAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzZXRsaW5l
YnVmIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVy
biBpbnQgc3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgdmZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJn
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgdnNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNp
emVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDMsIDQpKSk7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqX19y
ZXN0cmljdCBfX3MsIHNpemVfdCBfX21heGxlbiwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDMsIDApKSk7
CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh
X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJp
Y3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f
cHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0
IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
bXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz
dCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmlu
dGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgpleHRlcm4gaW50IGZzY2FuZiAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2NhbmYgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgc3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h
cmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywg
MiwgMCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoK
CgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
Z2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0Y2hhciAodm9p
ZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
ZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IHB1dGNoYXJfdW5sb2NrZWQgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBpbnQgZ2V0dyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0
dyAoaW50IF9fdywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZn
ZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzX3VubG9ja2VkIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnZXRz
IChjaGFyICpfX3MpIHRocm93ICgpOwojIDQzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3Np
emVfdCBfX2dldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJp
Y3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0
cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdl
dGxpbmUgKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1
dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3
cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93
ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBm
d3JpdGVfdW5sb2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAq
X19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgaW50IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBy
ZXdpbmQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0OTkgIi91c3IvbG9jYWwvZ2NjLTMu
MC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hl
bmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
IGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNl
dHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMg
NTMzICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w
L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbzY0IChGSUxFICpfX3N0cmVhbSwg
X19vZmY2NF90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90
IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmdldHBvczY0
IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zNjRfdCAqX19yZXN0cmljdCBfX3BvcykK
ICAgICB0aHJvdyAoKTsKZXh0ZXJuIGludCBmc2V0cG9zNjQgKEZJTEUgKl9fc3RyZWFtLCBfX2Nv
bnN0IGZwb3M2NF90ICpfX3BvcykgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVycm9yIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHZvaWQgcGVycm9yIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0
W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qg
X3N5c19lcnJsaXN0W107CgoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1h
bmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2Ug
KEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hh
ciAqX19zKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYg
KHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwpleHRlcm4gaW50IG9ic3RhY2tfdnByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg
X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QgX19hcmdzKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1w
Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3N0ZGlvLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAzCmlubGluZSBp
bnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNfdmFfbGlz
dCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2ZtdCwgX19h
cmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9J
T19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklMRSAqX19m
cCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9fZnApLT5f
SU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAoX19mcCkt
Pl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkg
dGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRpbiktPl9J
T19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAoc3RkaW4p
LT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9fYykgdGhy
b3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxpbmUgaW50
CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJl
dHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2MpKSA6ICh1
bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0K
CgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJl
YW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hh
cikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisr
ID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhy
b3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRvdXQpLT5f
SU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRyLCBzaXpl
X3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRkZWxpbSAo
X19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQKZmVvZl91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0p
LT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MjApICE9IDApOwp9CiMgNjQxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKfQojIDI4MTYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMjgzMiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAxIDMKIyAz
MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL25ldy5oIiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL2JhY2t3YXJkX3dh
cm5pbmcuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNr
d2FyZC9uZXcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25l
dyIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9u
ZXcuaCIgMiAzCgp1c2luZyBzdGQ6OmJhZF9hbGxvYzsKdXNpbmcgc3RkOjpub3Rocm93X3Q7CnVz
aW5nIHN0ZDo6bm90aHJvdzsKdXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRf
bmV3X2hhbmRsZXI7CiMgMjgzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL09TLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAxIDMKIyAy
ODM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIg
MgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9m
Y250bC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2lu
Y2x1ZGUvZmNudGwuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvZmNudGwuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9mY250
bC5oIiAyIDMKIyAxMzYgIi91c3IvaW5jbHVkZS9iaXRzL2ZjbnRsLmgiIDMKc3RydWN0IGZsb2Nr
CiAgewogICAgc2hvcnQgaW50IGxfdHlwZTsKICAgIHNob3J0IGludCBsX3doZW5jZTsKCiAgICBf
X29mZl90IGxfc3RhcnQ7CiAgICBfX29mZl90IGxfbGVuOwoKCgoKICAgIF9fcGlkX3QgbF9waWQ7
CiAgfTsKCgpzdHJ1Y3QgZmxvY2s2NAogIHsKICAgIHNob3J0IGludCBsX3R5cGU7CiAgICBzaG9y
dCBpbnQgbF93aGVuY2U7CiAgICBfX29mZjY0X3QgbF9zdGFydDsKICAgIF9fb2ZmNjRfdCBsX2xl
bjsKICAgIF9fcGlkX3QgbF9waWQ7CiAgfTsKIyAzNCAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDIg
MwoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl
L2ZjbnRsLmgiIDIgMwojIDYwICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IGZj
bnRsIChpbnQgX19mZCwgaW50IF9fY21kLCAuLi4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
b3BlbiAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIHRocm93ICgpOwoj
IDc2ICIvdXNyL2luY2x1ZGUvZmNudGwuaCIgMwpleHRlcm4gaW50IG9wZW42NCAoX19jb25zdCBj
aGFyICpfX2ZpbGUsIGludCBfX29mbGFnLCAuLi4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IGNyZWF0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsK
IyA5MyAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJuIGludCBjcmVhdDY0IChfX2NvbnN0
IGNoYXIgKl9fZmlsZSwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAoKTsKIyAxMzAgIi91c3IvaW5j
bHVkZS9mY250bC5oIiAzCmV4dGVybiBpbnQgcG9zaXhfZmFkdmlzZSAoaW50IF9fZmQsIF9fb2Zm
X3QgX19vZmZzZXQsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19hZHZpc2UpIHRocm93ICgpOwojIDE0MiAiL3Vzci9pbmNsdWRlL2ZjbnRsLmgiIDMKZXh0ZXJu
IGludCBwb3NpeF9mYWR2aXNlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIHNpemVf
dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2FkdmlzZSkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGUgKGludCBfX2ZkLCBfX29mZl90IF9f
b2Zmc2V0LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwojIDE2MCAiL3Vzci9pbmNsdWRlL2ZjbnRs
LmgiIDMKZXh0ZXJuIGludCBwb3NpeF9mYWxsb2NhdGU2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBf
X29mZnNldCwgc2l6ZV90IF9fbGVuKQogICAgIHRocm93ICgpOwoKCgp9CiMgMjg0MyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1
ZGUvbGltaXRzLmgiIDEgMwojIDI4NDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDEgMwojIDI4
NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAy
CgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjg1MCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDEgMwojIDI4NTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9PUy5oIiAyCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAyODUzICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDI5MTUgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDEK
IyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVh
bXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL3N0cmVhbXMuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyA2MyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVhbXMuaCIKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEgMwojIDMxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMSAzCiMgMzggIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwoj
IDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg
MzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAyIDMKIyA0MCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3RyZWFtLmgiIDEg
MwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVh
bS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
b3MuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAz
OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5nZndkLmgiIDMK
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdHJpbmdmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gY2xhc3Mg
Y2hhcl90cmFpdHM8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3MgY2hhcl90cmFpdHM8d2NoYXJf
dD47CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRz
PF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgYmFzaWNfc3RyaW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBz
dHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPHdjaGFyX3Q+IHdzdHJpbmc7Cgp9CiMgNDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMK
IyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAzCgoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i
aXRzL2MrK2lvLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMgMzEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9jc3RkaW8iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzgg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYu
aCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RkaW8uaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jc3RkaW8uaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2
LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVh
cmVycjsKICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7
CiAgdXNpbmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAg
dXNpbmcgOjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2lu
ZyA6OmZwdXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZy
ZW9wZW47CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRw
b3M7CiAgdXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAg
dXNpbmcgOjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2lu
ZyA6OnByaW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6
cHV0czsKICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2lu
ZDsKICB1c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsK
ICB1c2luZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwog
IHVzaW5nIDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAg
dXNpbmcgOjp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAxNDIgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwpuYW1lc3BhY2UgX19n
bnVfY3h4CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6
OnZzY2FuZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4
Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6
dnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDMyICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
Kytpby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDEwMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1z
aW5nbGUuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItc2luZ2xlLmgiIDMKdHlwZWRlZiBpbnQgX19ndGhyZWFk
X211dGV4X3Q7CiMgMjExICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1w
Yy1saW51eC1nbnUvYml0cy9ndGhyLXNpbmdsZS5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApf
X2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsK
fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9t
dXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9t
dXRleF91bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICogKQp7CiAgcmV0dXJuIDA7Cn0KIyAxMDMg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2d0aHIuaCIgMiAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVk
ZWYgbG9uZyBzdHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlw
ZWRlZiBwdHJkaWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1w
b3M7CgogIHR5cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKCiAgdHlwZWRlZiBG
SUxFIF9fY19maWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVm
IHNob3J0IF9faW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFs
cGhhID0gMHgwMDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAy
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBl
IF9TX2xlZnQgPSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAw
eDAwNDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25z
dCBfX2ludF90eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf
U19za2lwd3MgPSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVm
ID0gMHgyMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0
MDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAg
fCAweDAwODAgfCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmll
bGQgPSAweDAwMDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19mbG9hdGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZW9mYml0ID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAw
eDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2lu
dF90eXBlIF9TX2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9
IDB4MDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0MCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwojIDM3ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDMKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jKytjb25maWcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyAz
NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzggIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0
OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hh
ci5oIiAxIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1
ZGUvd2NoYXIuaCIgMwp0eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2No
YXJfdCAqd2NzY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4
dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fc3JjKSB0aHJvdyAoKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY2F0
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHdjc2NtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gaW50IHdjc25jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90
ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25jYXNlY21wIChf
X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hs
b2NhbGUuaCIgMSAzCiMgMTQ0ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgpleHRlcm4gaW50
IF9fd2NzY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gaW50IF9fd2NzbmNhc2VjbXBfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf
X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
X19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAo
X19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoK
CgpleHRlcm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90
IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9fd2NzY29sbF9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgX193Y3N4ZnJt
X2wgKHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdjaGFyX3QgKndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHIgKF9fY29u
c3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NyY2hyIChfX2NvbnN0IHdjaGFy
X3QgKl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hybnVsIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2Nz
LCBfX2NvbnN0IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAq
X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFy
X3QgKl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKF9f
Y29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc3RvayAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVf
dCB3Y3NsZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NubGVuIChfX2NvbnN0IHdjaGFyX3QgKl9f
cywgc2l6ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3
Y2hhcl90IF9fYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gaW50IHdtZW1jbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MxLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJf
dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgp
OwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtc2V0ICh3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCmV4
dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjdG9i
ICh3aW50X3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYnNpbml0IChfX2NvbnN0IG1i
c3RhdGVfdCAqX19wcykgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJydG93YyAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19wKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjcnRvbWIgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90
ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVf
dCBtYnJsZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf
dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKQp7IHJldHVybiAoX19wcyAhPSBfX251bGwKICAg
ICAgICAgID8gbWJydG93YyAoX19udWxsLCBfX3MsIF9fbiwgX19wcykgOiBfX21icmxlbiAoX19z
LCBfX24sIF9fbnVsbCkpOyB9CgoKCgpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3
Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4s
IG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3
Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IHdjd2lkdGggKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHdjc3dpZHRo
IChfX2NvbnN0IHdjaGFyX3QgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu
IGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7
CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0
aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHdjc3RvbGQgKF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoK
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwoKCgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9sbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91bGwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQwNyAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyA0MDgg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4
dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3dj
c3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoq
X19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBm
bG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBf
X3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19n
cm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9p
bnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBp
bnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxv
bmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUgdW5z
aWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFsIChf
X25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0IHdj
c3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsg
cmV0dXJuIF9fd2NzdG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRlcm4g
X19pbmxpbmUgbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUg
bG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5k
cHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJfdCAq
d2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgp
OwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdj
aGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGlu
dCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoK
ZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRl
cm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsK
CgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv
cm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4g
aW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAg
dGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKTsK
ZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSk7CgoKZXh0ZXJuIHdpbnRfdCBn
ZXR3Y2hhciAodm9pZCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9f
RklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklM
RSAqX19zdHJlYW0pOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193Yyk7CgoK
CgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSk7
CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKTsKCgoKZXh0ZXJu
IHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSk7CgoKCgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSk7CmV4dGVybiB3aW50
X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9j
a2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAo
d2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191
bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRfdCBw
dXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3
c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pOwoKCmV4
dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
LCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApOwojIDY4MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgi
IDMKfQojIDQzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3dj
aGFyLmgiIDIgMwojIDU3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY3djaGFyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx
MjEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIg
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
Ondjc3RvdWxsOwp9CiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3Rh
dGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfU3Rh
dGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwog
ICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAgICBfX3N0YXRlX3R5cGUK
ICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAgICAgdm9pZAogICAgICBz
dGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygp
OiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBm
cG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkK
ICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0
cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3Bl
cmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7
IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m
ZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhz
dHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAg
X190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAg
ICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0
aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoK
ICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBib29sCiAgICAgIG9w
ZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAh
PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNv
bnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJl
YW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8
bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1w
b3M7Cgp9CiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
b3Nmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i
YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy
Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df
ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv
bnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAg
Y2xhc3MgYmFzaWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJh
aXRzPF9DaGFyVD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0
eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3Ry
aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg
PSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9j
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s
CiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVi
dWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJf
dHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgYmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0
cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hh
cl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hh
clQ+ID4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7
CgoKICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8Y2hhcj4gc3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf
aW9zdHJlYW08Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4g
c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwog
IHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVm
IGJhc2ljX2ZpbGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNo
YXI+IGlmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgoKICB0eXBlZGVmIGJhc2ljX2lv
czx3Y2hhcl90PiB3aW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+IHdzdHJl
YW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+IHdpc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiB3b3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3Ry
ZWFtPHdjaGFyX3Q+IHdpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90
PiB3c3RyaW5nYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PiB3aXN0
cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJpbmdzdHJlYW08d2NoYXJfdD4gd29zdHJp
bmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD4gd3N0cmluZ3N0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD4gd2ZpbGVidWY7CiAgdHlwZWRl
ZiBiYXNpY19pZnN0cmVhbTx3Y2hhcl90PiB3aWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0
cmVhbTx3Y2hhcl90PiB3b2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+
IHdmc3RyZWFtOwoKfQojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9l
eGNlcHRpb24iIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDQw
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNjYgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5
OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7
CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwog
IHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwog
IHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVz
aW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBp
bmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsg
cmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0K
CiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBp
bnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFy
Kj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBz
dHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5n
IDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19u
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9f
czEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIo
Y2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3Ry
KGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNDAgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMSAzCiMgNDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwoK
bmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNo
YXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9
CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0
IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBz
dGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQK
ICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19z
Miwgc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8
IF9fbjsgKytfX2kpCiAgICAgICAgICBpZiAoIWVxKF9fczFbX19pXSwgX19zMltfX2ldKSkKICAg
ICAgICAgICAgcmV0dXJuIGx0KF9fczFbX19pXSwgX19zMltfX2ldKSA/IC0xIDogMTsKICAgICAg
ICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29u
c3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsKICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9
IF9fczsKICAgICAgICB3aGlsZSAoKl9fcCkgKytfX3A7CiAgICAgICAgcmV0dXJuIChfX3AgLSBf
X3MpOwogICAgICB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNv
bnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAg
ICAgewogICAgICAgIGZvciAoY29uc3QgY2hhcl90eXBlKiBfX3AgPSBfX3M7IHNpemVfdChfX3Ag
LSBfX3MpIDwgX19uOyArK19fcCkKICAgICAgICAgIGlmICgqX19wID09IF9fYSkgcmV0dXJuIF9f
cDsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg
ICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbW1vdmUoX19zMSwgX19zMiwgX19uICog
c2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5
KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAg
ICB7IHJldHVybiAoY2hhcl90eXBlKikgbWVtY3B5KF9fczEsIF9fczIsIF9fbiAqIHNpemVvZihj
aGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJf
dHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7CiAgICAgICAgZm9y
IChjaGFyX3R5cGUqIF9fcCA9IF9fczsgX19wIDwgX19zICsgX19uOyArK19fcCkKICAgICAgICAg
IGFzc2lnbigqX19wLCBfX2EpOwogICAgICAgIHJldHVybiBfX3M7CiAgICAgIH0KCiAgICAgIHN0
YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAg
ICAgIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9f
Yyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBl
JiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2My
OyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50X3R5cGU+KC0xKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2Yo
Y29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2Yo
KSkgPyBpbnRfdHlwZSgwKSA6IF9fYzsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190
eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0
YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh
dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg
ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs
IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9Cgog
ICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAg
ICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJf
dHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPiht
ZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBt
b3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIs
IF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSog
X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAg
IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9f
biwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o
bWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0
b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19p
bnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50
X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGlj
IGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEp
KTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAg
dHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1w
b3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVx
KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJl
dHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNo
YXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx
IDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlw
ZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVy
biB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAg
bGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJu
IHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9f
bikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3Rh
dGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlw
ZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBf
X24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBf
X3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19z
LCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBl
KGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBz
dGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsg
cmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90
eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyBy
ZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBz
dGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7
IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFy
X3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRz
X21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAg
ICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01f
YywgX19hKTsgfQogICAgfTsKfQojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIg
MSAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3
ZC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAzCm5hbWVz
cGFjZSBzdGQKewogIHR5cGVkZWYgaW50KiBfX2NfbG9jYWxlOwp9CiMgNDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyAzOCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAv
aW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDEgMwojIDMxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2NvbmZpZy5oIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzNCAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5
cGVzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBpbnB1
dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1Y3Qg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwpzdHJ1
Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90
YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5cGVkZWYgaW5wdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0cHV0X2l0ZXJhdG9yIHsKICB0
eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvciB7CiAgdHlw
ZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9U
cCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl
ZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdv
cnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5j
ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcg
aXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlwZWRl
ZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ2F0ZWdvcnksIGNsYXNzIF9U
cCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgY2xhc3MgX1BvaW50ZXIg
PSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0IGl0ZXJhdG9yIHsKICB0eXBl
ZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9Qb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogIHR5cGVkZWYgdHlwZW5h
bWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVlX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBw
b2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29u
c3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7Cn07CiMgMTQw
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV90eXBlcy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cl9faXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+
OjppdGVyYXRvcl9jYXRlZ29yeSBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9DYXRlZ29yeSgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCl9fZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYpCnsKICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVy
ZW5jZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5cGUqCl9fdmFsdWVfdHlwZShjb25zdCBf
SXRlciYpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
dGVyPjo6dmFsdWVfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQppdGVyYXRv
cl9jYXRlZ29yeShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX2l0ZXJhdG9yX2NhdGVnb3J5
KF9faSk7IH0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUqCmRpc3RhbmNlX3R5cGUoY29uc3QgX0l0
ZXImIF9faSkgeyByZXR1cm4gX19kaXN0YW5jZV90eXBlKF9faSk7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OnZhbHVlX3R5
cGUqCnZhbHVlX3R5cGUoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX192YWx1ZV90eXBlKF9f
aSk7IH0KCn0KIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2l0ZXJhdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAx
IDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9j
aGVjay5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA0MSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3Is
IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgd2hpbGUg
KF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBf
X2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9fZmlyc3Qs
IF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5w
dXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsr
X19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJldHVybiBf
X2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0lu
cHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9CaWRp
cmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNlCiAgICB3
aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNz
SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgIHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9f
aSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBf
X24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKfQoK
fQojIDM2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0
b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBf
Q29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy
X3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhw
bGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigm
X194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShj
b25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBjb250
YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9
CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisr
KGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpp
bmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4gYmFja19pbnNlcnRlcihfQ29u
dGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o
X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGZyb250X2luc2VydF9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0
eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0
b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlw
ZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9D
b250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZh
bHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0
X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJh
dG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkgewogIHJldHVy
biBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29u
dGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsK
cHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91
dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9p
bnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRh
aW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2kpCiAgICA6IGNvbnRh
aW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+Jgog
IG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVl
KSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0
ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYg
b3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29u
dGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUKaW5zZXJ0X2l0ZXJhdG9y
PF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKewog
IHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgX19pdGVyOwogIHJldHVybiBp
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0ZXIoX19pKSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWZlcmVu
Y2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90PgpjbGFzcyBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgcmV2ZXJzZV9iaWRpcmVj
dGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIF9UcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJlbmNlLCBfRGlzdGFuY2U+IF9TZWxm
Owpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAg
dHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNl
OwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVy
c2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAg
IDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3Qg
eyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAg
X0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190
bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3Iq
KCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4g
KnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0
b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3Bl
cmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAg
ICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KAog
ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5i
YXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaUl0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KAog
ICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1Jl
ZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuICEoX194
ID09IF9feSk7Cn0KIyAxOTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmNsYXNzIHJldmVy
c2VfaXRlcmF0b3IKewpwcm90ZWN0ZWQ6CiAgX0l0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRl
Z29yeQogICAgICAgICAgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyCiAgICAgICAgICBwb2ludGVyOwogIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZQogICAgICAg
ICAgcmVmZXJlbmNlOwoKICB0eXBlZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogIHR5cGVk
ZWYgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+IF9TZWxmOwoKcHVibGljOgogIHJldmVyc2Vf
aXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBf
X3gpIDogY3VycmVudChfX3gpIHt9CgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgX1NlbGYmIF9f
eCkgOiBjdXJyZW50KF9feC5jdXJyZW50KSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KICBy
ZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAgICA6
IGN1cnJlbnQoX194LmJhc2UoKSkge30KCiAgaXRlcmF0b3JfdHlwZSBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gY3VycmVudDsgfQogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBfSXRl
cmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgcmV0dXJuICotLV9fdG1wOwogIH0KICBwb2ludGVy
IG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBfU2VsZiYg
b3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1Nl
bGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAtLWN1cnJl
bnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0tKCkgewogICAgKytj
dXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0tKGludCkgewog
ICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJldHVybiBfX3RtcDsK
ICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7CiAgICBy
ZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9TZWxmJiBvcGVyYXRvcis9KGRpZmZl
cmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19uOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0
dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItPShkaWZmZXJl
bmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9
CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1
cm4gKigqdGhpcyArIF9fbik7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpIHsKICByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVy
YXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNl
X2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJh
c2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVy
biAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9v
bCBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkg
ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGlu
ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJh
dG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0l0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUKb3BlcmF0b3ItKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf
X3kpIHsKICByZXR1cm4gX195LmJhc2UoKSAtIF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSXRlcmF0b3I+CmlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4Kb3BlcmF0b3Ir
KHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9f
biwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAg
cmV0dXJuIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hhclQgPSBjaGFyLCBjbGFz
cyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgIGNsYXNzIF9EaXN0ID0g
cHRyZGlmZl90PgpjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICB0eXBlZGVmIGlu
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogIHR5cGVkZWYgX0Rpc3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1Rw
KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiByZWZlcmVuY2U7CgogIGlzdHJlYW1faXRl
cmF0b3IoKSA6IF9NX3N0cmVhbSgwKSwgX01fb2soZmFsc2UpIHt9CiAgaXN0cmVhbV9pdGVyYXRv
cihpc3RyZWFtX3R5cGUmIF9fcykgOiBfTV9zdHJlYW0oJl9fcykgeyBfTV9yZWFkKCk7IH0KCiAg
cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbHVlOyB9CiAgcG9pbnRl
ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgaXN0cmVh
bV9pdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgaXN0cmVhbV9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXN0cmVhbV9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fcmVhZCgpOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KCiAgYm9vbCBfTV9lcXVhbChjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJiBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9
PSBfX3guX01fc3RyZWFtKTsgfQoKcHJpdmF0ZToKICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsK
ICBfVHAgX01fdmFsdWU7CiAgYm9vbCBfTV9vazsKCiAgdm9pZCBfTV9yZWFkKCkgewogICAgX01f
b2sgPSAoX01fc3RyZWFtICYmICpfTV9zdHJlYW0pID8gdHJ1ZSA6IGZhbHNlOwogICAgaWYgKF9N
X29rKSB7CiAgICAgICpfTV9zdHJlYW0gPj4gX01fdmFsdWU7CiAgICAgIF9NX29rID0gKl9NX3N0
cmVhbSA/IHRydWUgOiBmYWxzZTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0PgppbmxpbmUgYm9vbApvcGVy
YXRvcj09KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0
PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9U
cmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9lcXVhbChfX3kpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9EaXN0
PgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hh
clQsIF9UcmFpdHMsIF9EaXN0PiYgX194LAogICAgICAgICAgIGNvbnN0IGlzdHJlYW1faXRlcmF0
b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KSB7CiAgcmV0dXJuICFfX3guX01f
ZXF1YWwoX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ2hh
clQgPSBjaGFyLCBjbGFzcyBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CmNsYXNzIG9z
dHJlYW1faXRlcmF0b3IgewpwdWJsaWM6CiAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogIHR5
cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIG9zdHJlYW1faXRlcmF0b3Iob3N0cmVhbV90eXBlJiBfX3MpIDogX01f
c3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1f
dHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9z
dHJpbmcoX19jKSB7fQogIG9zdHJlYW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U
cCYgX192YWx1ZSkgewogICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgaWYgKF9NX3N0cmlu
ZykgKl9NX3N0cmVhbSA8PCBfTV9zdHJpbmc7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIG9zdHJl
YW1faXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFt
X2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1f
aXRlcmF0b3I8X1RwPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CnByaXZhdGU6
CiAgb3N0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgY29uc3QgX0NoYXJUKiBfTV9zdHJpbmc7Cn07
CiMgNDE3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CmNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAg
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAg
ICAgICAgICAgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVj
dGVkOgogIF9JdGVyYXRvciBfTV9jdXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0
eXBlZGVmIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVy
IHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwoKICBfX25vcm1hbF9pdGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkg
eyB9CgogIGV4cGxpY2l0IF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6
IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGlu
ZSBfX25vcm1hbF9pdGVyYXRvcihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRh
aW5lcj4mIF9faSkKICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5j
ZQogIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIK
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZSYKICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsg
fQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25v
cm1hbF9pdGVyYXRvcihfTV9jdXJyZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK
ICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxf
aXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRv
cihfTV9jdXJyZW50LS0pOyB9CgoKICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZl
cmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBu
b3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYg
X19uKQogIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRl
cmF0b3JfdHlwZQogIG9wZXJhdG9yKyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QK
ICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3Jt
YWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19u
KQogIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0
b3JfdHlwZQogIG9wZXJhdG9yLShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7
IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJl
bmNlX3R5cGUKICBvcGVyYXRvci0oY29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29u
c3QKICB7IHJldHVybiBfTV9jdXJyZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0
ZXJhdG9yJgogIGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9D
b250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMu
YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwg
dHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3Bl
cmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYg
X19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0
ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNl
KCkgPCBfX3Jocy5iYXNlKCk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVu
YW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9y
Pihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMs
CiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy
PiYgX19yaHMpCnsgcmV0dXJuIF9fcmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGlu
ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvclIsIF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoK
dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5h
bWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19u
b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAh
KF9fbGhzIDwgX19yaHMpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1l
IF9Db250YWluZXI+CmlubGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+Cm9wZXJhdG9yKyhfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgMzcgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5Lmgi
IDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVt
b3J5LmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNiAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcGFpci5oIiAxIDMK
IyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0
IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5
cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vj
b25kKCkge30KCgoKICBwYWlyKGNvbnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJz
dChfX2EpLCBzZWNvbmQoX19iKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+
CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNl
Y29uZChfX3Auc2Vjb25kKSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBh
aXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBf
X3guc2Vjb25kID09IF9feS5zZWNvbmQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9U
Mj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICByZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8
CiAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5z
ZWNvbmQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu
ZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf
VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4KCgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9wYWlyKF9UMSBf
X3gsIF9UMiBfX3kpCgoKCnsKICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOwp9Cgp9
CiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3R5
cGVfdHJhaXRzLmgiIDEgMwojIDE5ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy90eXBlX3RyYWl0cy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAyMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMiAzCiMgNTcg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDMK
dGVtcGxhdGUgPGJvb2wgX1RydXRoPiBzdHJ1Y3QgX0Jvb2wge307CnR5cGVkZWYgX0Jvb2w8dHJ1
ZT4gX190cnVlX3R5cGU7CnR5cGVkZWYgX0Jvb2w8ZmFsc2U+IF9fZmFsc2VfdHlwZTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDgxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19m
YWxzZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8
Y2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf
dHJhaXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVu
c2lnbmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9E
X3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+
IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07CgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+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
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVn
cmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25n
PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCnRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3IgewogICB0eXBlZGVmIF9fZmFsc2Vf
dHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBzdGQgewogICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9
OwoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1
Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwgc3RkOjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+ID4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy
IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJp
bmcuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xpbWl0cy5oIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
Y3N0ZGxpYi5oIiAyIDMKIyA3MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmRpdl90OwogIHVz
aW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJzOwogIHVzaW5nIDo6
YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNpbmcgOjphdG9sOwog
IHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6OmRpdjsKICB1c2lu
ZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52OwogIHVzaW5nIDo6bGFi
czsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcgOjptYmxlbjsKICB1
c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6cXNvcnQ7CiAgdXNp
bmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5kOwogIHVzaW5nIDo6
c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsKICB1c2luZyA6OnN5
c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoKICBpbmxpbmUgbG9u
ZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlubGluZSBsZGl2X3QK
ICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwgX19qKTsgfQp9CiMg
MTI1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o
IiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9F
eGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9f
eCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBs
b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRp
dl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsg
X19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0K
CiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQog
IHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19k
OyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNp
bmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVf
Y3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6Omxs
YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAg
dXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2lu
ZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDQ2ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA0OSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRv
cl9iYXNlX3R5cGVzLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNTEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg
MSAzCiMgNTIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9j
b25jZXB0X2NoZWNrLmgiIDEgMwojIDUzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19i
LCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190
bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIy
PgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIg
X19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9f
YikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9
CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0
dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0
IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlm
IChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2Es
IGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9f
YSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9U
cCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVy
biBfX2I7IHJldHVybiBfX2E7Cn0KIyAxMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIgX19j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlcgpf
X2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
LCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsg
X19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3QsIGNv
bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19m
aXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3Vs
dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgcmV0dXJuIF9fY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5s
aW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpLAogICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4KaW5saW5lIF9UcCogX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwg
X1RwKiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCnsKICBy
ZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4KF9JbnB1dEl0
ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5
cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAg
IF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
LCBfVHJpdmlhbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19m
aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICByZXR1cm4gX091dHB1dEl0ZXIo
X19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpKTsKfQoKdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0
SXRlciBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl
X3R5cGUpCnsKICByZXR1cm4gX19jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTEoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7
CiAgcmV0dXJuIF9fY29weV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVz
dWx0LCBfX05vcm1hbCgpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICBy
ZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUg
X091dHB1dEl0ZXIgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46
Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19jb3B5X2JhY2t3YXJkKF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICotLV9fcmVzdWx0ID0gKi0t
X19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dhcmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFu
Y2UgX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAqLS1fX3Jlc3Vs
dCA9ICotLV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAg
ICAgY2xhc3MgX0Jvb2xUeXBlPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCnsKICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXIxPjo6aXRl
cmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIF9DYXQ7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
X0Rpc3RhbmNlOwoKICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMiBjb3B5KF9CaWRpcmVjdGlv
bmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2Fy
ZChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0KCksIChfRGlzdGFuY2UqKSAwKTsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNo
PF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAq
IF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICBjb25zdCBw
dHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICBtZW1tb3ZlKF9fcmVzdWx0IC0g
X051bSwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiBfTnVtKTsKICAgIHJldHVybiBfX3Jlc3VsdCAt
IF9OdW07CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2Fy
ZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAq
IGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs
dCkgewogICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3Ry
dWVfdHlwZT4KICAgICAgOjpjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogIH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfQkkxLCBjbGFzcyBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFj
a3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpIHsKICB0
eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
STI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogIHJldHVybiBfX2NvcHlfYmFj
a3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgOjpjb3B5
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwg
dHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf
aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUp
IHsKICByZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19y
ZXN1bHQuYmFzZSgpKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky
PgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkx
IF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpewogIHJldHVybiBf
X2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3
YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1
bHQsIF9fdHJ1ZV90eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y
PF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0
X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFs
KCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5lIF9C
STIgX19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9C
STEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lz
X25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5
X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3Jt
YWwoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUg
X0JJMiBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1
bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2Nv
cHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3Jt
YWwoKSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX091dHB1dEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+IF9fY29weV9uKF9J
bnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGZvciAoIDsgX19jb3Vu
dCA+IDA7IC0tX19jb3VudCkgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmly
c3Q7CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlcj4oX19maXJzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JBSXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfUkFJdGVyLCBfT3V0cHV0
SXRlcj4KX19jb3B5X24oX1JBSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
IHsKICBfUkFJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWlyPF9S
QUl0ZXIsIF9PdXRwdXRJdGVyPihfX2xhc3QsIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9P
dXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KX19jb3B5X24o
X0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkg
ewogIHJldHVybiBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWly
PF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpjb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVy
biBfX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jlc3VsdCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg
ICAqX19maXJzdCA9IF9fdmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgZmlsbF9uKF9PdXRwdXRJdGVyIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBm
b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fdmFsdWU7
CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCgoKaW5saW5lIHZvaWQgZmlsbCh1bnNpZ25lZCBjaGFyKiBf
X2ZpcnN0LCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgY2hhciYgX19jKQp7CiAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQo
X19maXJzdCwgX190bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgdm9pZCBmaWxsKHNp
Z25lZCBjaGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAg
IGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsKICBzaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICBt
ZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3Qg
LSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xh
c3QsIGNvbnN0IGNoYXImIF9fYykKewogIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0KF9fZmly
c3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIHVuc2lnbmVkIGNoYXIqIGZpbGxfbih1
bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0
ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1NpemU+CmlubGluZSBzaWduZWQgY2hhciogZmlsbF9uKGNoYXIqIF9fZmlyc3QsIF9TaXplIF9f
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkIGNoYXImIF9fYykKewog
IGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9f
bjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9TaXplPgppbmxpbmUgY2hhciogZmlsbF9uKGNoYXIqIF9f
Zmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KcGFpcjxfSW5wdXRJdGVyMSwg
X0lucHV0SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2Zp
cnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0
MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJ
dGVyMj4gbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3By
ZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg
JiYgX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICsrX19maXJzdDE7
CiAgICArK19fZmlyc3QyOwogIH0KICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRl
cjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg
Y2xhc3MgX0lucHV0SXRlcjI+CmlubGluZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoISgqX19maXJzdDEgPT0g
Kl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAo
IV9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7
CiAgcmV0dXJuIHRydWU7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz
IF9JbnB1dEl0ZXIyPgpib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19m
aXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIHRydWU7CiAgICBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2Zp
cnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9Db21wYXJlPgpib29sIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytf
X2ZpcnN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJl
dHVybiB0cnVlOwogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJl
dHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIg
IT0gX19sYXN0MjsKfQoKaW5saW5lIGJvb2wKbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3Qg
dW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2Zp
cnN0MTsKICBjb25zdCBzaXplX3QgX19sZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0
IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9f
bGVuMikpOwogIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwg
X19sZW4yOwp9CgppbmxpbmUgYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBjaGFy
KiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogX19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsK
CiAgcmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo
YXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJl
XzN3YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0
ZXIyIF9fbGFzdDIpCnsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4g
LTE7CiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICByZXR1cm4gMTsKICAgICsr
X19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBpZiAoX19maXJzdDIgPT0gX19sYXN0Mikg
ewogICAgcmV0dXJuICEoX19maXJzdDEgPT0gX19sYXN0MSk7CiAgfQogIGVsc2UgewogICAgcmV0
dXJuIC0xOwogIH0KfQoKaW5saW5lIGludApfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXko
Y29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xhc3QyKQp7CiAgY29uc3QgcHRy
ZGlmZl90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICBjb25zdCBwdHJkaWZmX3QgX19s
ZW4yID0gX19sYXN0MiAtIF9fZmlyc3QyOwogIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChf
X2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogIHJldHVybiBfX3Jlc3Vs
dCAhPSAwID8gX19yZXN1bHQKICAgICAgICAgICAgICAgICAgICAgICA6IChfX2xlbjEgPT0gX19s
ZW4yID8gMCA6IChfX2xlbjEgPCBfX2xlbjIgPyAtMSA6IDEpKTsKfQoKaW5saW5lIGludApfX2xl
eGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNo
YXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBf
X2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBz
aWduZWQgY2hhciopIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj
b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
cmV0dXJuIF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfX2ZpcnN0MSwgX19sYXN0MSwg
X19maXJzdDIsIF9fbGFzdDIpOwp9Cgp9CiMgMjEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDI4ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj
IDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZv
aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
aW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5n
dGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lk
CiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgMjkgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAz
MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGli
LmgiIDEgMwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2NzdHJpbmcuaCIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc3Nl
cnQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9hc3NlcnQuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAyIDMKIyA2NSAi
L3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCmV4dGVybiAiQyIgewoKCmV4dGVybiB2b2lkIF9fYXNz
ZXJ0X2ZhaWwgKF9fY29uc3QgY2hhciAqX19hc3NlcnRpb24sIF9fY29uc3QgY2hhciAqX19maWxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLCBfX2NvbnN0
IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJudW0s
IF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19u
b3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3Nl
cnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyAzMyAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMg
MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi
IDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9ndGhyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdGhyZWFkcy5oIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA2NiAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1
Y3QgX1JlZmNvdW50X0Jhc2UKewoKCgoKICB0eXBlZGVmIHNpemVfdCBfUkNfdDsKCgoKICAgdm9s
YXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoKCgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZf
Y291bnRfbG9jazsKICBfUmVmY291bnRfQmFzZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9f
bikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9tdXRleF90IF9fdG1wID0gMDsKICAgICAgX01fcmVm
X2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgogICAgfQojIDExMiAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHZvaWQgX01faW5jcigpIHsK
ICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICArK19NX3Jl
Zl9jb3VudDsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK
ICB9CiAgX1JDX3QgX01fZGVjcigpIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZf
Y291bnRfbG9jayk7CiAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVmX2NvdW50Owog
ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogICAgcmV0dXJu
IF9fdG1wOwogIH0KIyAxNjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90aHJlYWRzLmgiIDMKfTsKIyAyODQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBf
U1RMX211dGV4X3NwaW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEw
MDAgfTsKCgogIHN0YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0
Owp9OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2lu
c3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9
IDA7CiMgMzExICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhy
ZWFkcy5oIiAzCnN0cnVjdCBfU1RMX211dGV4X2xvY2sKewoKCgoKCgoKICBfX2d0aHJlYWRfbXV0
ZXhfdCBfTV9sb2NrOwogIHZvaWQgX01faW5pdGlhbGl6ZSgpIHsKIyAzNDIgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBf
TV9hY3F1aXJlX2xvY2soKSB7CgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7
CiAgfQogIHZvaWQgX01fcmVsZWFzZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3Vu
bG9jaygmX01fbG9jayk7CiAgfQojIDQ1MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9OwojIDQ5MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sK
ewogIF9TVExfbXV0ZXhfbG9jayYgX01fbG9jazsKCiAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRl
eF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWly
ZV9sb2NrKCk7IH0KICB+X1NUTF9hdXRvX2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2Nr
KCk7IH0KCnByaXZhdGU6CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1NUTF9hdXRvX2xvY2smKTsK
ICBfU1RMX2F1dG9fbG9jayhjb25zdCBfU1RMX2F1dG9fbG9jayYpOwp9OwoKfQojIDM5ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgNjgg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6
ZV90KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3Rh
dGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0
YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0g
bWFsbG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFs
bG9jKF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9j
YXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMg
dm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7
CiAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9
PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAg
IHJldHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5k
bGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9j
X2FsbG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7
CiAgICByZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lk
ICgqIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyKSgpID0gMDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQg
KCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAo
OzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhy
b3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAg
ICAgX19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihf
X3Jlc3VsdCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBf
X24pCnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVz
dWx0OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxs
b2NfYWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxl
cikgeyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hh
bmRsZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBp
ZiAoX19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikg
X0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBh
bGxvY2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXpl
b2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3Qg
X19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICog
c2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAg
ICAgeyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVu
dW0ge19TX2V4dHJhID0gOH07CgoKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNp
emVfdCBfX24pCiAgewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0
ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAg
ICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0g
KGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz
aXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCop
X19yZWFsX3AgPT0gX19uIiwgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGxvYy5oIiwgMTkwLCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgIF9BbGxv
Yzo6ZGVhbGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogIH0KCiAgc3Rh
dGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBf
X25ld19zeikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l
eHRyYTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29s
ZF9zeikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19vbGRf
c3oiLCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi
LCAxOTcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19yZXN1bHQgPSAo
Y2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRfc3ogKyAoaW50
KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zeiAr
IChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg
cmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxi
b29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGUgewoK
cHJpdmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9OwogIGVudW0ge19NQVhfQllURVMgPSAxMjh9
OwogIGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0YXRpYyBzaXplX3QKICBfU19yb3VuZF91
cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdCkgX0FM
SUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7IH0KCiAgdW5pb24gX09iaiB7CiAgICAg
ICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgY2hhciBfTV9jbGllbnRf
ZGF0YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W107Cgog
IHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpIHsKICAgICAg
ICByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9BTElHTi0xKS8oc2l6ZV90KV9BTElHTiAt
IDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZpbGwoc2l6ZV90IF9fbik7CgoKICBzdGF0
aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgog
IHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsK
ICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9j
ayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAgICBjbGFzcyBfTG9jazsKICAgIGZyaWVu
ZCBjbGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAg
ICAgIF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX2Fj
cXVpcmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5fTG9jaygpIHsgeyBpZiAodGhyZWFkcykg
X1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfTsgfQogICAgfTsKCnB1
YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQq
IF9fcmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICBf
X3JldCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19uKTsKICAgIH0KICAgIGVsc2UgewogICAg
ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0
ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgogICAgICBfTG9jayBfX2xvY2tfaW5zdGFu
Y2U7CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgaWYgKF9f
cmVzdWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7
CiAgICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVfbGlzdCA9IF9fcmVzdWx0IC0+IF9NX2Zy
ZWVfbGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAg
ICByZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUodm9pZCogX19w
LCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAg
ICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgZWxzZSB7CiAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAgICAgICAgPSBfU19mcmVlX2xpc3QgKyBf
U19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2JqKiBfX3EgPSAoX09iaiopX19wOwoKCgoK
ICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAgICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9s
aW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3E7CgogICAg
fQogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19vbGRf
c3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxz
ZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JikKewogIHJldHVybiB0
cnVlOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhcioKX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX3RvdGFs
X2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19l
bmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFs
X2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgIF9TX3N0
YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICByZXR1cm4oX19yZXN1bHQpOwogICAg
fSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKSB7CiAgICAgICAgX19ub2JqcyA9IChp
bnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUg
KiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19z
dGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAg
IH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgIDIgKiBf
X3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVhcF9zaXplID4+IDQpOwoKICAgICAgICBp
ZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m
cmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVl
bGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9m
cmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAg
Kl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgfQogICAgICAg
IF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICBp
ZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAgICAgIHNpemVfdCBfX2k7CiAgICAgICAg
ICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgX09iaiogX19w
OwoKCgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICAgICBfX2kg
PD0gKHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAgICAgICAgICBfX2kgKz0gKHNpemVfdCkg
X0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCAr
IF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVl
X2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApIHsKICAgICAgICAgICAgICAgICAg
ICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAg
ICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilfX3A7CiAgICAgICAgICAgICAgICAgICAg
X1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgIHJl
dHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gMDsKICAgICAgICAgICAg
X1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9f
Z2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0
OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9fYnl0ZXNfdG9fZ2V0Owog
ICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAgIH0KfQoK
CgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24p
CnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxs
b2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAg
IF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJyZW50X29iajsKICAgIF9PYmoqIF9fbmV4
dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09IF9fbm9ianMpIHJldHVybihfX2NodW5r
KTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVl
X2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChf
X2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAg
ICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAg
ICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgICAgX19jdXJyZW50X29iaiAt
PiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25l
eHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxh
dGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lkKiBfX3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19u
ZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAgc2l6ZV90IF9fY29weV9zejsKCiAgICBp
ZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVTICYmIF9fbmV3X3N6ID4gKHNpemVfdCkg
X01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFsbG9jKF9fcCwgX19uZXdfc3opKTsKICAg
IH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRfdXAoX19uZXdfc3op
KSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxsb2NhdGUoX19uZXdfc3opOwogICAgX19j
b3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19vbGRfc3ogOiBfX25ld19zejsKICAgIG1l
bWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xk
X3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgogICAgdGVtcGxhdGUgPGJvb2wgX190aHJl
YWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2FsbG9jYXRvcl9sb2NrCiAgICAg
ICAgPSB7IDAgfTsKCgoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFy
KiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19zdGFydF9m
cmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAw
OwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzaXplX3QgX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRl
bXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KdHlwZW5hbWUgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKX19kZWZhdWx0
X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9ORlJFRUxJU1RTCl0g
PSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1
MjYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvciB7CiAgdHlwZWRlZiBhbGxvYyBf
QWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk
aWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYg
Y29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgdHlw
ZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgYWxs
b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYpIHRocm93KCkge30KICB+YWxsb2Nh
dG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3Qg
eyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2Ug
X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg
X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMCA/IHN0YXRpY19jYXN0
PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgICAgICAg
ICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlw
ZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsg
fQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXpl
X3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv
bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShw
b2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGU8PgpjbGFzcyBhbGxvY2F0
b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYg
cHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBl
OwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIGFs
bG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNz
IF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0
IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgYWxsb2NhdG9yPF9UMT4m
LCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KIyA2MDIgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsKICBfQWxsb2Mg
X191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7
CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9UcCB2YWx1
ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBl
ZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19hbGxvY2F0b3Io
KSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3co
KQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAx
LCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3Vu
ZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVy
IGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3Bv
aW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9
CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAg
cmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdf
YWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsKICB9CgoKICB2
b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9fdW5kZXJs
eWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz
aXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBf
X3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19w
KSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfX2Fs
bG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlw
ZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsK
ICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHZhbHVl
X3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAgIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fYWxs
b2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5fX3VuZGVybHlp
bmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfX2FsbG9jYXRv
cjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxv
Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2Fs
bG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUgPGludCBpbnN0
PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGlu
c3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19p
bnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBk
ZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWJ1Z19h
bGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDczMiAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25z
dCBib29sIF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9j
YXRvcjo6dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJh
aXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1Rw
MT4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl
ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9j
YXRvcjxfVHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQg
X19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsK
ICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxf
VHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3Rh
dGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9h
bGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgog
ICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0Fs
bG9jX3RyYWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8
X1RwLAogICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
X19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9y
PF9UcDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0
YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlw
ZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2lu
c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2Fs
bG9jYXRvcjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJv
b2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRl
YnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9U
cCwgZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKfQojIDIyICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIg
MSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25z
dHJ1Y3QuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9uZXciIDEg
MwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3Ry
dWN0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBj
bGFzcyBfVDI+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192
YWx1ZSkgewpuZXcgKCh2b2lkKikgX19wKSBfVDEoX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVDE+CmlubGluZSB2b2lkIF9Db25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBuZXcgKCh2b2lkKikg
X19wKSBfVDEoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX0Rlc3Ryb3ko
X1RwKiBfX3BvaW50ZXIpIHsKICBfX3BvaW50ZXItPn5fVHAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CnZvaWQKX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCnsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYqX19maXJzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1ZV90eXBlKSB7fQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQK
X19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh
c3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3RvcjsKICBfX2Rlc3Ry
b3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3RvcigpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIF9EZXN0cm95KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfX2Rlc3Ryb3ko
X19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgppbmxpbmUgdm9pZCBf
RGVzdHJveShjaGFyKiwgY2hhciopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGludCosIGludCop
IHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGxvbmcqLCBsb25nKikge30KaW5saW5lIHZvaWQgX0Rl
c3Ryb3koZmxvYXQqLCBmbG9hdCopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGRvdWJsZSosIGRv
dWJsZSopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCgoK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIHZvaWQgY29uc3RydWN0KF9U
MSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKICBfQ29uc3RydWN0KF9fcCwgX192YWx1ZSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDE+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCkg
ewogIF9Db25zdHJ1Y3QoX19wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQg
ZGVzdHJveShfVHAqIF9fcG9pbnRlcikgewogIF9EZXN0cm95KF9fcG9pbnRlcik7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBkZXN0cm95KF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKICBfRGVzdHJveShf
X2ZpcnN0LCBfX2xhc3QpOwp9Cgp9CiMgMjMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgMjQgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAz
CiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVm
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpwYWlyPF9UcCosIHB0
cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCnsK
ICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgIF9f
bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkp
OwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4o
X190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBw
dHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgcGFp
cjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRpZmZfdCBfX2xlbikg
ewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7Cn0KCgoK
CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRf
dGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRf
dGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
Pgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVt
cG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBw
dHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9NX2FsbG9jYXRlX2J1
ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7
CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkp
CiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01f
bGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVv
ZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVu
IC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYs
IF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2
YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBf
TV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQog
IF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jhcnlf
YnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
IHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAg
ICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2xlbik7CiAg
ICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4gMCkKICAgICAgICBf
TV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAgICB9CiAgICBjYXRj
aCguLi4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwOyB0aHJv
dzsgfTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ryb3koX01fYnVmZmVy
LCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnByaXZhdGU6
CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KICB2b2lk
IG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAgICAgICAgICAgICAg
ICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl
X3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1YmxpYyBfVGVtcG9y
YXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3JhcnlfYnVmZmVyKF9G
b3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9U
ZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJzdCwgX19sYXN0KSB7
fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyAyNSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyAzNCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu
aCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Ry
aW5nLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdW5pbml0aWFsaXplZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIK
X191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBjb3B5KF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh
bHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29u
c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9CiAgY2F0Y2go
Li4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRocm93OyB9Owp9CgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUg
X0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+Ojppc19QT0Rf
dHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgogIHVuaW5pdGlhbGl6
ZWRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICByZXR1cm4gX191bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKF9fcmVzdWx0KSk7Cn0KCmlubGluZSBjaGFyKiB1bmluaXRp
YWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShf
X3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpOwp9CgppbmxpbmUgd2NoYXJfdCoKdW5pbml0aWFsaXplZF9jb3B5
KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJz
dCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1
bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CnBhaXI8X0lucHV0SXRlciwgX0Zvcndh
cmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgX0ZvcndhcmRJdGVy
IF9fY3VyID0gX19yZXN1bHQ7CiAgdHJ5IHsKICAgIGZvciAoIDsgX19jb3VudCA+IDAgOyAtLV9f
Y291bnQsICsrX19maXJzdCwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19m
aXJzdCk7CiAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3Qs
IF9fY3VyKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX2N1cik7IHRo
cm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TaXpl
LCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9y
d2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19y
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
IHsKICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1
cm4gcGFpcjxfUmFuZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPigKICAgICAgICAgICAgICAg
ICBfX2xhc3QsCiAgICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9T
aXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJk
SXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9f
Y291bnQsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJl
dHVybiBfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9G
b3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgp1bmluaXRp
YWxpemVkX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkgewogIHJldHVybiBfX3VuaW5pdGlh
bGl6ZWRfY29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRp
YWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQp7
CiAgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZApfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBlKQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0g
X19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAg
ICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95
KF9fZmlyc3QsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIHZvaWQgX191bmluaXRpYWxpemVkX2Zp
bGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX194LCBfVHAxKikKewogIHR5cGVkZWYg
dHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICBfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3gsIF9Jc19QT0QoKSk7Cgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVu
aW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9fdW5pbml0aWFsaXplZF9maWxsKF9fZmlyc3Qs
IF9fbGFzdCwgX194LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0
ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90
eXBlKQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBl
KQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgewogICAgZm9yICggOyBf
X24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwog
ICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJzdCwgX19j
dXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Np
emUsIGNsYXNzIF9UcCwgY2xhc3MgX1RwMT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYg
X194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6aXNf
UE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19m
aXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKdW5pbml0aWFs
aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf
X3gpCnsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCwg
X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQojIDIzMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBf
Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmlu
aXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgewogICAg
cmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0K
ICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoK
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRl
cj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJk
SXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1
bHQsIF9fbWlkLCBfX3gpOwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1
bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVk
X2NvcHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIg
X19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9G
b3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEs
IF9fZmlyc3QyKTsKICB0cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0
MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOyB0
aHJvdzsgfTsKfQoKfQojIDI2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xh
c3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBf
TV9pdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j
ZTsKCiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gp
IDogX01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsg
cmV0dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBf
VHAmIF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv
ciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsK
ICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRv
cisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1Rw
PiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsK
Cgp9CiMgMjcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v
cnkuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
YXV0b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19w
KSA6IF9NX3B0cihfX3ApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0
ciB7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgZWxlbWVu
dF90eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9w
dHIoX19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19h
LnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRy
PF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIGF1
dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2Eu
cmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7CiAg
ICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0
b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJv
dygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0
aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co
KSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsKICAg
IF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9IF9N
X3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9CiAg
fQoKCgoKCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3co
KQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1
dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChfX3JlZi5fTV9wdHIgIT0g
dGhpcy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19yZWYu
X01fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0dXJuIGF1
dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0
cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNDUgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMK
IyA0NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19z
dHJpbmcuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5
LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dv
cmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0
aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJlZ2lzdGVyIF9BdG9taWNf
d29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IHhhZGRsICUwLCUy
IgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIgKF9fcmVzdWx0KQogICAgICAgICAgICAg
ICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpfX21lbSkKICAgICAgICAgICAgICAgICAg
ICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgpzdGF0aWMgaW5saW5lIHZv
aWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2F0b21pY19hZGQgKHZvbGF0aWxlIF9B
dG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgi
bG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAgICAgICAgICAgOiA6ICJpciIgKF9fdmFs
KSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIGNoYXIKX19hdHRy
aWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVfYW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcq
IF9fcCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3ZhbCkKewogIGNoYXIgX19yZXQ7CiAgbG9u
ZyBfX3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgY21weGNoZ2wgJTMs
ICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9cSIgKF9fcmV0KSwgIj1t
IiAoKl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiciIg
KF9fbmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29sZHZhbCkpOwogIHJldHVybiBfX3JldDsK
fQojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJp
bmcuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0
cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
QWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3JtYWxf
aXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBf
X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0ZXJh
dG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv
cj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9S
ZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmViaW5kPGNoYXI+
OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90eXBlIF9TX21heF9zaXplOwogICAgICAgIHN0YXRpYyBjb25zdCBfQ2hhclQgX1NfdGVybWlu
YWw7CgogICAgICAgIHNpemVfdHlwZSBfTV9sZW5ndGg7CiAgICAgICAgc2l6ZV90eXBlIF9NX2Nh
cGFjaXR5OwogICAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwoKICAgICAgICBib29s
CiAgICAgICAgX01faXNfbGVha2VkKCkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9yZWZlcmVu
Y2VzIDwgMDsgfQoKICAgICAgICBib29sCiAgICAgICAgX01faXNfc2hhcmVkKCkgY29uc3QKICAg
ICAgICB7IHJldHVybiBfTV9yZWZlcmVuY2VzID4gMDsgfQoKICAgICAgICB2b2lkCiAgICAgICAg
X01fc2V0X2xlYWtlZCgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0gLTE7IH0KCiAgICAgICAg
dm9pZAogICAgICAgIF9NX3NldF9zaGFyYWJsZSgpCiAgICAgICAgeyBfTV9yZWZlcmVuY2VzID0g
MDsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmZGF0YSgpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiByZWludGVycHJldF9jYXN0PF9DaGFyVCo+ICh0aGlzICsgMSk7IH0KCiAgICAg
ICAgX0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAg
X01fZ3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQog
ICAgICAgIHsgcmV0dXJuICghX01faXNfbGVha2VkKCkgJiYgX19hbGxvYzEgPT0gX19hbGxvYzIp
ID8KICAgICAgICAgICAgX01fcmVmY29weSgpIDogX01fY2xvbmUoX19hbGxvYzEpOyB9CgoKICAg
ICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUoc2l6ZV90LCBjb25zdCBfQWxsb2Mm
KTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2UoY29uc3QgX0FsbG9jJiBfX2EpCiAg
ICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmZXJlbmNlcywg
LTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19hKTsKICAgICAgICB9CgogICAgICAg
IHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYpIHRocm93KCk7CgogICAgICAg
IF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3coKQogICAgICAgIHsKICAgICAgICAg
IF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAgICAgICAgICByZXR1cm4gX01fcmVm
ZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2Nsb25lKGNvbnN0
IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwojIDIwOCAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3Rh
dGljIGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xvcChzaXplX3QsIHNpemVfdCk7CgogICAgICB9
OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAgIF9B
bGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9B
bGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9
OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3Rh
dGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0Fs
bG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5
X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXpl
X3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBfTV9k
YXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0No
YXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0YXBs
dXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9
CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lk
CiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVh
a2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IK
ICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg
KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3Bv
czsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9
IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2Zm
ID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICByZXR1
cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29w
eV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQogICAg
ICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAg
ICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9f
azEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgp
LCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMo
X0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAg
ICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCog
X19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwg
X19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9D
aGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAgICAg
eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9p
ZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXpl
X3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAgICBz
dGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoK
CgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAogICAg
ICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhj
b25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24s
IGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0g
X0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9B
bGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0
ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0
b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAg
IHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikg
eyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Mp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJl
dHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2lu
KCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01f
ZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25z
dAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVy
YXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0
dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNv
bnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQo
KSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAg
ICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IK
ICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
dGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlw
ZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19t
YXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJU
IF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJl
c2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkg
Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAg
IHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVh
cigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAg
ZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0
X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVy
YXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAg
ICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNl
CiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49
IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICBy
ZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGlmIChfX24g
Pj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6
YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwog
ICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4g
dGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3Ir
PShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmlu
ZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAg
eyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9f
Yyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19z
dHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh
dG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhf
Q2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEs
IF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7
CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3Ry
Ll9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4g
dGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAg
ICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihf
X3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCks
IF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9f
cCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwg
X19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9J
bnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19i
ZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBl
IF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIGl0ZXJh
dG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f
cCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9NX2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUg
X19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgc2l6ZV90eXBl
IF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9N
X2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01f
Y2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3My
LCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7
CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zLCBfX3MgKyBfX24pOwogICAgICAg
IHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQo
c2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+
aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwg
X0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3Bvcyks
IF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBf
TV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4o
KSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVf
dHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg
fQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAg
ewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAg
ICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBf
TV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0
dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFz
ZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXpl
X3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo
X19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCkt
Pl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgewogICAgICAgIHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkp
OwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9f
cG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0
IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBf
X24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAg
ICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsKICAgICAgICByZXR1cm4g
dGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAg
ICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xk
KF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0
cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
dHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo
aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBfX3MgKyBfX24pOyB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3Qg
X0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kx
LCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9N
X3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9Cgog
ICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndk
SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAg
ICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf
Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0
b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9f
ZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29u
c3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf
QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2Nv
bnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2VuZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9B
bGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cgog
ICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBf
Q2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv
cyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0
cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsK
ICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJt
aW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0No
YXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxv
Y2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBs
dXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAg
IGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z
aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3Ms
IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRh
KCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7
CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBy
ZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNp
emVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rf
b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl
CiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19j
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9f
YywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXpl
KCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQog
ICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9v
ZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90
X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVf
dHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg
PSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rf
b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2Yo
X0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19z
dHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBu
cG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAg
ICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAg
ICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAg
IGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAg
IHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVf
dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
bihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBh
cmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAg
ICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAg
fQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm
IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBj
b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsK
CgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAg
ICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQog
ICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAg
b3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0
dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf
QWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0No
YXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19y
aHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgewogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAg
ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVy
YXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
IF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19z
dHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9f
c3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAg
ICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21w
YXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o
Y29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJl
KF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg
ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJl
dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xo
cywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBf
X3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9f
cmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz
KSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0No
YXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0g
MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19y
aHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dh
cChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhz
LnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAg
ICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKICAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDQ3ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAxIDMKIyAz
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5o
IiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAxIDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDM1ICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVm
LmgiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
YWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2
b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1
ZSkKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGls
ZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9f
dmFsdWUpIHsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFy
ZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJ
bmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QsIF9EaXN0YW5jZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2Uo
KF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAo
KihfX2xhc3QgLSAxKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
PgppbmxpbmUgdm9pZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0
LAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlw
ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs
YXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQK
X19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hv
bGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBf
Q29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAx
KSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2Zp
cnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAg
IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1Rw
PgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmly
c3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXAsCiAgICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hl
YXAoX19maXJzdCwgX0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2Uo
MCksCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFz
dCwgX19jb21wLAogICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9w
SW5kZXggPSBfX2hvbGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hv
bGVJbmRleCArIDI7CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAx
KSkpCiAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENo
aWxkOwogICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBp
ZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9f
c2Vjb25kQ2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwg
X190b3BJbmRleCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFs
dWUsIF9EaXN0YW5jZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFw
KF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3Zh
bHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1Rw
PgppbmxpbmUgdm9pZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1RwKikKewog
IF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICAgICAg
IF9UcCgqKF9fbGFzdCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CnZvaWQKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3Rh
bmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFs
dWUsIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5k
ZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdo
aWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsg
X19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAg
X19zZWNvbmRDaGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0
ICsgX19zZWNvbmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBf
X3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29u
ZENoaWxkID09IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmly
c3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls
ZCAtIDE7CiAgfQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4
LCBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBf
RGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2Zp
cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAg
ICAgICAgIF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hl
YXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3Bv
cF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEp
KSwgX19jb21wLAogICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkCnBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xh
c3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19t
YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0
IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2Zp
cnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVl
KSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19m
aXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9f
cGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgpp
bmxpbmUgdm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFy
ZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBp
ZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh
c3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdo
aWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwg
X1RwKCooX19maXJzdCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZAptYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCwKICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2Vf
dHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
CnZvaWQgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hl
YXAoX19maXJzdCwgX19sYXN0LS0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29t
cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwg
X19jb21wKTsKfQoKfQojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CmlubGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAm
IF9fYiwgY29uc3QgX1RwJiBfX2MpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAo
X19iIDwgX19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAg
ICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8
IF9fYykKICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9f
YzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
Q29tcGFyZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2Is
IF9fYykpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog
ICAgICByZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9f
Y29tcChfX2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9f
YykpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9f
Zmlyc3QpOwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs
YXNzIF9UcD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZT4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsK
ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAy
OwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBp
ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAg
IGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7Cgog
ICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsK
ICB9CgogIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAg
ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMToKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFu
ZG9tQWNjZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7Cgog
IGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChf
X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBz
d2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19w
cmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgog
ICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0Owog
IGNhc2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5w
dXRJdGVyIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zv
cndhcmRJdGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hp
bGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19s
YXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfRm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19m
aXJzdDsKICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVk
KCpfX2ZpcnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0g
X19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAg
X1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFz
cyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAo
X19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbHVlKQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7
CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJj
aChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0
MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7
CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3Rt
cCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0
Mik7CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytf
X3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3Qx
LCAqX19maXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBf
X2xhc3QxOwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlm
ICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGls
ZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAg
ICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJu
IF9fZmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zvcndh
cmRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmly
c3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9f
dG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3
aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBf
Rm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9G
b3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxKSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19w
cmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2Zp
cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog
ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkg
cmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3Ap
KSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK
ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7
CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3
YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192
YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAg
IHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19s
YXN0LCBfX3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVn
ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0Owog
ICAgICArK19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9f
aSA9PSBfX3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAg
IF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19s
YXN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICBfQmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmly
c3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAx
OwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdo
aWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192
YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9f
biA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGls
ZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192
YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAg
ICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0Zv
cndhcmRJdGVyMiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0
ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCAr
K19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9f
Zmlyc3QyOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRl
ciwgY2xhc3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKCgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQp
CiAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0
ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9v
cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19s
YXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9
IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2Uo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh
c3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9f
Zmlyc3QgPSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9f
cHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0
cHV0SXRlciByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l
d192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09
IF9fb2xkX3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3Mg
X1ByZWRpY2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1By
ZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQog
ICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7
CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9HZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9f
Z2VuKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9HZW5lcmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAt
LV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX1RwPgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgY29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192
YWx1ZSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAg
ICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5
X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0Zvcndh
cmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz
dAogICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3Qs
IF9fZmlyc3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFz
cyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg
X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9p
ZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7
Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFz
cyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCwgX1RwKikKewoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9f
dmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09
ICpfX2ZpcnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0
ID0gX192YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191
bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpf
Rm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQs
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK
ICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1
dEl0ZXIgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0
OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQ
cmVkaWNhdGUsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1
ZTsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChf
X3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytf
X3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091
dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
IF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBf
X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19i
aW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsK
ICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIg
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAg
cmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlf
cHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFz
dCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3
YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19m
aXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rp
b25hbF9pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCB8fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAg
IGl0ZXJfc3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJh
dG9yX3RhZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmly
c3QrKywgLS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpp
bmxpbmUgdm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3Jl
dmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9P
dXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1f
X2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0
dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+
Cl9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewog
IHdoaWxlIChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAl
IF9fbjsKICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0
ZXIgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUp
CiAgICByZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4g
X19maXJzdDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAg
c3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRs
ZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xh
c3QpOwoKICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIg
PSBfX21pZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9f
Zmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAg
IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAg
ICAgIF9fZmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoK
dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlk
aXJlY3Rpb25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0Owog
IGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNl
KF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3Jl
dmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7Cgog
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3
YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7
CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcoKSk7CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2Zp
cnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4g
X19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAg
KikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBf
RGlzdGFuY2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0g
X19maXJzdCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVy
biBfX2xhc3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmly
c3QsIF9fbWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlz
dGFuY2UgX19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBf
X2kgPCBfX2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3Ig
KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChf
X3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAg
ICAgICAgX19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7
CiAgICAgICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3Ig
KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAg
aWYgKF9fcCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsK
ICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0g
X19sKTsKICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1w
OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4g
X19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091
dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
cmV0dXJuIGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19y
ZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5j
ZSBfX3JhbmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUg
X19uOwoKCgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZv
aWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3Ig
KF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19f
aSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9f
Zmlyc3QpICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5n
KTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5p
bmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAg
ICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICBy
ZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2Vu
ZXJhdG9yPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0
LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsK
CiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7
CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAg
IH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwog
IF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20g
PCBfX247ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0g
X19yYW5kb21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01d
ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg
ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21O
dW1iZXJHZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9EaXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5j
ZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsr
X19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9f
dCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICAr
K19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJ
dGVyCnJhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19vdXRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAg
ICAgICAgIGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNz
SXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYg
X19yYW5kKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1
cm4gX19yYW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fb3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9s
YXN0IC0gX19vdXRfZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm4gX19maXJzdDsKCiAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2Zp
cnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf
X2ZpcnN0OwoKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19u
ZXh0KSkgewogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0Owog
ICAgfQoKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJl
Y3Rpb25hbF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUp
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAg
ICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVs
c2UKICAgICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBp
ZiAoIV9fcHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAg
IGJyZWFrOwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAg
fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxp
bmUgX0ZvcndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lu
cGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3Rh
bmNlIF9fbGVuKQp7CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0
KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsK
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNl
X3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAg
ICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9f
bWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3Mg
X0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewog
IGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQx
ID0gX19maXJzdDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHsKICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7
CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAg
ICAgICsrX19yZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9f
cmVzdWx0MSk7CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIp
OwogICAgcmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0
aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFz
dCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBf
X2J1ZmZlciwgX19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSBfRm9yd2FyZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJk
SXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAw
KQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl
KF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBf
X2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVk
X3NpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlPgppbmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBf
X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0
aXRpb25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFy
ZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAo
dHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0Owog
ICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0
OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9S
YW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGls
ZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xh
c3Q7CiAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsK
ICAgIGlmICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0
ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50
IF9fc3RsX3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0g
X19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xh
c3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpf
X2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBf
X2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAg
ICpfX2xhc3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAg
fQogICpfX2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19m
aXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwog
ICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2lu
c2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9f
dmFsID0gKl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlf
YmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192
YWw7CiAgfQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3Zh
bCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9f
aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFu
ZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAg
ICBfX2xpbmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNl
cnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVk
X2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCop
CnsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJk
ZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3Vh
cmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19m
aXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVh
cl9pbnNlcnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1
YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f
Zmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0
bF90aHJlc2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9f
c3RsX3RocmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9f
c3RsX3RocmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsg
X19zdGxfdGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQo
X19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7
CiAgZm9yIChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19r
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X1NpemU+CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAw
KSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJl
dHVybjsKICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
Y3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJz
dCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3Qg
LSAxKSkpKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9f
ZGVwdGhfbGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJl
Pgp2b2lkIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAg
ICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdo
aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0
aF9saW1pdCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFz
dCwgX19jb21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJz
dCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBf
X2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBf
X2NvbXApOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRf
bG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIp
OwogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZv
aWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAg
IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf
X3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0g
X19maXJzdCkgKiAyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAg
X19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFu
ZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAy
OwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlk
ZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxl
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4K
dm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlv
bl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsK
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19s
YXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIs
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRv
bUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIg
X19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVw
ID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19z
dGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsg
X190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCAr
PSBfX3R3b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAt
IF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3Rl
cF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyMiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQg
X19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190
d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g
X190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19z
dGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19m
aXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBf
X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl
KTsKCiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmly
c3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29t
cCk7Cn0KCmNvbnN0IGludCBfX3N0bF9jaHVua19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewog
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0g
X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFz
cyBfQ29tcGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXpl
LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r
X3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtf
c2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9s
YXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxf
Y2h1bmtfc2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19z
dGVwX3NpemUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9z
b3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19z
dGVwX3NpemUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9s
YXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3Mg
X0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dp
dGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkK
ewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZm
ZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9f
c3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fc3RlcF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewog
ICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3Np
emUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3Ao
X19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwog
ICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlz
dGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9z
aXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3Rh
bmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZm
ZXJfc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Bv
aW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f
c3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19i
dWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6
ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmly
c3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19s
ZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFw
dGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVm
ZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2Zp
cnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgX19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBf
RGlzdGFuY2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4g
YnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxh
Y2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJl
PgppbmxpbmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
IF9UcCosIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1
ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJs
ZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgpp
bmxpbmUgdm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJz
dCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAg
ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFi
bGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs
IGNsYXNzIF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUp
OwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsg
KytfX2kpCiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5
cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUo
X19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9U
cCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtl
X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl
ciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9f
aSwgKl9fZmlyc3QpKQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9U
cCgqX19pKSwgX19jb21wLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7CiAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0
aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
RGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlh
bF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1Rw
KikKewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3Vs
dF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3Qg
IT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0Owog
ICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChf
X3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1
c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVh
cChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRf
cmVhbF9sYXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5w
dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdF9maXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFz
cyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRf
Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRf
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXAsIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1
bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1
bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3Qg
JiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9y
ZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2Zp
cnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwg
X19jb21wKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmly
c3QsIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRf
cmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19m
aXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAg
c29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAg
cmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21B
Y2Nlc3NJdGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2Zp
cnN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3Qg
PiAzKSB7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo
X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0g
X19udGgpCiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19j
dXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgs
IF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1l
bnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xh
c3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChf
X2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xh
c3QgPSBfX2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19s
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewog
IF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7
CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChf
X2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmly
c3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9f
dmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBf
X2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBf
X2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICByZXR1cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs
ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAg
ICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xl
biAtIF9faGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0K
ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg
X1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQo
X19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9f
ZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBf
X2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNl
IF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsK
ICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZh
bmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBf
X2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAg
ICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQog
IHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191
cHBlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAg
IF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJ
dGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJl
IF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0
ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+
IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp
OwogICAgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAg
ICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0
LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3Jh
bmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9fdmFsLAogICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAw
OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7
CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xl
biA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFs
KSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xl
biA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlk
ZGxlKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3Qs
IF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3Qs
IF9fdmFsKTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9f
bGVmdCwgX19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4K
ZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9f
ZXF1YWxfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAg
ICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0Zv
cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAw
KSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAg
YWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3Zh
bCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9f
bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFs
LCAqX19taWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xl
ZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAg
IGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytf
X21pZGRsZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3
YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1
cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+
CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwK
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192
YWwsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmlu
YXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwg
X192YWwpOwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9v
bCBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAg
IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwgX19jb21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19p
KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBj
bGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg
KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpf
X2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAg
ICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNv
cHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdl
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAq
X19maXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsr
X19maXJzdDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0
MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19t
ZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAg
aWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEg
KyBfX2xlbjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVy
X3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29u
ZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEg
LyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQg
PSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFu
Y2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19s
ZW4yMiA9IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAg
ICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRf
Y3V0KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQs
IF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGVuMTEsIF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBf
X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBf
X2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAg
IGlmIChfX2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0
LCBfX21pZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
X2N1dCA9IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk
ZGxlOwogIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
aWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k
KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIg
PSBfX2xlbjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19m
aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwg
X19jb21wKTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9
CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9j
dXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19m
aXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25l
d19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRh
cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2J1ZmZlcl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
cik7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0
dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYg
KF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmly
c3QpOwogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19s
YXN0KTsKICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19s
YXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp
cmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlk
aXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0
MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlf
YmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1f
X2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewog
ICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0
MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jl
c3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3Vs
dCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0t
X19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx
LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9u
YWxJdGVyMywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNr
d2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5
X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19y
ZXN1bHQpOwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlm
IChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xh
c3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsK
ICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAo
X19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1BvaW50ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAg
ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7
CiAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
KTsKICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9f
Zmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1Bv
aW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAg
ICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf
ZW5kLCBfX2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
X2N1dCA9IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t
aWRkbGU7CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9
IDA7CiAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAy
OwogICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0
ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlz
dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBf
X2xlbjIyKTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRs
ZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBf
X2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAg
ICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwg
X19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0
X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIy
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAg
ICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwg
Y2xhc3MgX1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xl
bjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1
ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZm
ZXJfc2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRk
bGUsIF9fbGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9
IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7
CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
ICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBk
aXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQs
IF9fbGVuMjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlk
ZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlk
ZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdl
X2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9f
bGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFj
ZV9tZXJnZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0
YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0
ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAw
KQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf
X2xlbjEsIF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYu
YmVnaW4oKSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAw
OwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xl
bjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3Jh
cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3Qp
OwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UK
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1
Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAg
cmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90
eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh
c3QpCiAgICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wg
aW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkK
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAg
ICAgICsrX19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7Cgog
IHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBf
X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0
ZXI+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChf
X2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAr
K19fZmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg
ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVs
c2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg
ICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2Zp
cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1
dEl0ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7Cgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJz
dDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19f
Zmlyc3QxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAg
ICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHko
X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9P
dXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2Zp
cnN0MTsKICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0
MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJz
dDE7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9f
cmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRl
ciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsr
X19maXJzdDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAg
ICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0K
ICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0
MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg
ICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
Q29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
aWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f
Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz
ZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAg
IGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVy
biBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0
SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7
CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg
ICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsr
X19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIs
IF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVy
LAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlm
ZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19f
cmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkg
ewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsr
X19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0
MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cj4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0
KQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9l
bGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlm
IChfX2NvbXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRl
ciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2Zp
cnN0ICE9IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1
bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9f
Zmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2Zp
cnN0LCAqX19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRf
cGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4g
ZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7
CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpf
X2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg
IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo
X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7Oykg
ewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChf
X2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xh
c3Q7CiAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAg
aXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICBy
ZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK
ICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBf
X2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkg
PSBfX2k7CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAg
ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf
X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg
ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg
IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21w
YXJlPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2kgPSBfX2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZh
bHNlOwogIF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9f
aSkpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUg
KCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBf
X2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAg
fQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0
KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu
cHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lu
cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19p
dGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIp
CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGlj
YXRlPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0
SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9G
b3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVy
KQogICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9f
Zmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9CiMgMzM5MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5kKF9Gb3J3
YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0
ZXJhdG9yX3RhZykKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFz
dDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdo
aWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFy
Y2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgaWYgKF9fbmV3
X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7
CiAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25l
d19yZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICBj
bGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJ
dGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0
b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2Ug
ewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICB3aGlsZSAoMSkgewog
ICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgID0gc2VhcmNoKF9fZmlyc3Qx
LCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgaWYgKF9fbmV3X3Jl
c3VsdCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgZWxzZSB7CiAg
ICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgX19maXJzdDEgPSBfX25ld19y
ZXN1bHQ7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgfQogIH0KfQoKCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyPgpf
QmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0
MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0
eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7
CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3Qx
KSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19s
YXN0MiksIF9fcmxhc3QyKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVy
biBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9f
cnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIs
IF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
Y2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGly
ZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21w
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVy
MTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0
ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJdGVyMiBfX3JsYXN0
MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19s
YXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIy
KF9fbGFzdDIpLCBfX3JsYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCk7CgogIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBl
bHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp
OwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAg
ICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIx
LCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgX0ZvcndhcmRJdGVyMQpmaW5kX2VuZChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9f
bGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdDIpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9G
b3J3YXJkSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX0Zv
cndhcmRJdGVyMQpmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIg
X19sYXN0MiwKICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBf
X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9y
X2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmJvb2wgX19pc19o
ZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFu
Y2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwg
X19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2ZpcnN0W19fcGFyZW50XSA8IF9fZmlyc3RbX19j
aGlsZF0pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAg
ICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmlu
Zz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1N0cmljdFdlYWtP
cmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX24pCnsKICBfRGlzdGFu
Y2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNlIF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwg
X19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAoX19maXJzdFtfX3BhcmVudF0sIF9fZmly
c3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9
PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9vbCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0g
X19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9T
dHJpY3RXZWFrT3JkZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9T
dHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19jb21wLCBfX2xhc3QgLSBfX2Zp
cnN0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+CmJvb2wgaXNfc29ydGVk
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9G
b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBf
X2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAoKl9fbmV4dCA8ICpf
X2ZpcnN0KQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBp
c19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIF9TdHJpY3RXZWFrT3JkZXJpbmcgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiB0cnVlOwoKICBfRm9yd2Fy
ZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICBmb3IgKCsrX19uZXh0OyBfX25leHQgIT0gX19sYXN0
OyBfX2ZpcnN0ID0gX19uZXh0LCArK19fbmV4dCkgewogICAgaWYgKF9fY29tcCgqX19uZXh0LCAq
X19maXJzdCkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp9CiMg
MzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0u
aCIgMiAzCiMgNTAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
YmFzaWNfc3RyaW5nLnRjYyIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBj
b25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4X3Np
emUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpucG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2Yo
X0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1
Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19i
ZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5
X3JlcCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAg
c2l6ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8
IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAg
X19idWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQog
ICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9f
ci0+X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAg
ICBmb3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0g
X19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFy
VCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAg
ICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAg
IGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAg
ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAg
ICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19h
KTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0
YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCks
IF9fbGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAg
ICAgICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBf
X2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAg
ICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0No
YXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBf
SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRp
Y19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1w
dHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3Jl
YXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhf
X3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAg
ICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAg
ICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAg
cmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAg
aWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlf
cmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf
X24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAg
ICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAg
ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ry
b3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGgg
PSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsK
ICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9n
cmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9f
c3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19h
KQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBf
X2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0
cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi
YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAog
ICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBf
TV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19h
KQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNv
bnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3Mg
KyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBj
b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19z
ICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmlu
ZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01f
ZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywg
X0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9T
X2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikK
ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAg
ICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5n
ZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg
ICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSAr
IDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9j
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xl
YWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAg
ICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlz
LT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSAr
IF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSAr
IF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xk
X3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9j
YXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9SZXAqIF9fciA9IF9S
ZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6
Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAg
aWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9N
X3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCgu
Li4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9j
YXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01f
cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRh
KCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVu
MikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19w
b3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgp
LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3Np
emU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhp
cy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAg
ICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwogICAgICAgICAgYWxsb2NhdG9y
X3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9N
X3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgpKTsKICAgICAgICAgIF9N
X3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAgICBpZiAoX01fcmVwKCkt
Pl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAg
ICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX19zLl9NX3JlcCgp
LT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9hbGxvY2F0b3IoKSA9PSBf
X3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBf
TV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkpOwogICAgICAgICAgX19z
Ll9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcy5nZXRfYWxs
b2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihfX3MuX01faWJlZ2luKCks
IF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmdldF9h
bGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAgICAgICAgIF9fcyA9IF9f
dG1wMTsKICAgICAgICB9CiAgICB9CiMgMzU2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNv
bnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNp
dHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf
c3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0
eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19w
bGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxvYykuYWxsb2NhdGUoX19zaXplKTsKICAgICAg
X1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVwOwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0g
X19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9s
ZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xv
bmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9sZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAg
ICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsg
dHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVu
Z3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0
dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhj
ZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9fcikKCiAgICB7CiAgICAgIHJldHVybiAyICog
KF9fcyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9f
biwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAg
X190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVf
dHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAg
ICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwgX19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwg
X19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9fbik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0
ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgICAgewogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAg
ICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLl9NX2liZWdpbigpLCBfX3Mu
X01faWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7
CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlw
ZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBz
dGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYg
KF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf
c3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9N
X2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAg
ICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29m
ZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwg
c2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNp
emVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICByZXR1cm4gdGhpcy0+
cmVwbGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9mb2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg
ICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19s
ZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01faWJl
Z2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgewoKCgog
ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0
aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAg
dGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQo
KSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxf
VHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg
X19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShf
X2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBf
X3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAg
ICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBh
Y2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9U
cmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBl
IF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0
cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3Ry
LmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7
CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwog
ICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhz
LnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBl
bmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAg
ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9f
bjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7
CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmICht
YXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJv
d19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUg
KF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlw
ZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNv
bnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhp
cy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7Cgog
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAg
ICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCog
X19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsg
KytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBv
cywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4g
bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9
IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25z
dCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBf
X3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6
OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAg
ICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f
bikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg
ICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1p
bihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0g
X01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0
cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDApCiAgICAg
ICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChf
X3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9f
Yywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVf
dCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAg
ICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3Mt
LSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9z
XSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0
dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8
IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAg
ICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAg
IHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAg
ICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAg
ICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Zmlu
ZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9f
c2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNp
emVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5z
aXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24s
IF9NX2RhdGEoKVtfX3hwb3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVy
biBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNv
bnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBv
cyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEo
X01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAg
ICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUg
PiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6
ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAg
ICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
dGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAg
ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp
Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXpl
IC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29z
aXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9f
cG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0g
X19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19z
dHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAog
ICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5
cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBf
X3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9f
cG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19w
b3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXpl
KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9f
cG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19y
b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFy
VCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9f
c2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9z
ID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNv
bXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChf
X3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7
CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50
IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVu
KTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAg
IHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFy
VCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNv
bnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlm
IChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry
aW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1pbih0cmFpdHNfdHlw
ZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3Np
emUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBf
X29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSAr
IF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6
ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQKICAgIF9TX3N0cmlu
Z19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry
LAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUgX0FsbG9jOjpzaXpl
X3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgp
OwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9fYnVmc2l6IC0gMSk7
CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19ieXRlcyk7CiAgICAg
IF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyA0MyAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzgg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAyIDMKIyA1NSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAzCm5hbWVzcGFjZSBzdGQKewog
IHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJsOwog
IHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2VyOwog
IHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNlOwog
IHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dlcjsK
ICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz
cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo
dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h
aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1
bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p
b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDU2
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgdmVjdG9y
OwogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAg
ICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2xvd2Vy
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2RpZ2l0KF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQsIGNvbnN0IGxv
Y2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAg
aXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVy
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCgoKICBj
bGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0
eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRlbXBsYXRlPD4gY2xhc3Mg
Y3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0
eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBj
b2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFt
ZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g
PgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9w
dXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAg
ICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0
aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0g
b3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsK
CgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5
X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVu
Y3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBj
bGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAg
ewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xh
c3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFz
cyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBs
b2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29s
CiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNv
bnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0g
MUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25l
dGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8
PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUgfCBt
b25ldGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1l
cmljIHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2Nh
bGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2Nh
bGUoY29uc3QgY2hhciogX19zdGRfbmFtZSk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19i
YXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3Qg
bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9f
b3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBs
b2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29u
c3QgbG9jYWxlJiBfX290aGVyKTsKCgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAg
Ym9vbAogICAgb3BlcmF0b3I9PShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgp
OwoKICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikg
Y29uc3QgdGhyb3cgKCkKICAgIHsgcmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7
IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgICBib29sCiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJh
c2ljX3N0cmluZzxfQ2hhciwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0
YXRpYyBsb2NhbGUKICAgIGdsb2JhbChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3Qg
bG9jYWxlJgogICAgY2xhc3NpYygpOwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoK
CiAgICBzdGF0aWMgX0ltcGwqIF9TX2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xv
YmFsOwoKICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfbnVtX2NhdGVnb3JpZXMgPSA2OwogICAg
c3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fZmFjZXRzID0gMjY7CgogICAgZXhwbGljaXQKICAg
IGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lkCiAgICBfU19p
bml0aWFsaXplKCkKICAgIHsgaWYgKCFfU19jbGFzc2ljKSBjbGFzc2ljKCk7IH0KCiAgICBzdGF0
aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9p
ZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19h
ZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAg
cHVibGljOgoKICAgIHR5cGVkZWYgdmVjdG9yPGZhY2V0KiwgYWxsb2NhdG9yPGZhY2V0Kj4gPiBf
X3ZlY19mYWNldDsKCgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBs
b2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5k
IGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNv
bnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgc2l6ZV90IF9NX3JlZmVyZW5j
ZXM7CiAgICBfX3ZlY19mYWNldCogX01fZmFjZXRzOwogICAgc3RyaW5nIF9NX25hbWVzW19TX251
bV9jYXRlZ29yaWVzXTsKICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGU7CiAgICBzdGF0aWMgY29u
c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2Nh
bGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjpp
ZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNv
bnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19p
ZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21l
c3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2Zh
Y2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgp
IHRocm93KCkKICAgIHsgKytfTV9yZWZlcmVuY2VzOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9N
X3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfTV9yZWZlcmVuY2Vz
LS0gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhp
czsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9
CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoc3RyaW5nIF9fbmFt
ZSwgc2l6ZV90KTsKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBib29sCiAgICBfTV9jaGVja19z
YW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAgICBfX3JldCAm
PSBfTV9uYW1lc1tpXSA9PSBfTV9uYW1lc1tpICsgMV07CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhjb25zdCBfSW1wbCosIGNhdGVn
b3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5KGNvbnN0IF9JbXBsKiwgY29u
c3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2ZhY2V0KGNv
bnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZvaWQKICAgIF9NX2luc3RhbGxf
ZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0X2ZhY2V0KF9GYWNldCogX19m
YWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2ZhY2V0KTsgfQog
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZTo6bG9jYWxlKGNvbnN0
IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAgICAgIF9NX2ltcGwgPSBuZXcg
X0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2ltcGwtPl9NX2luc3RhbGxfZmFj
ZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9T
X251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldID0g
IioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsKICAgIGZyaWVuZCBjbGFzcyBs
b2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKCiAgcHJvdGVjdGVkOgogICAg
ZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1
YWwKICAgIH5mYWNldCgpIHsgfTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfY3JlYXRlX2NfbG9j
YWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciogX19zKTsKCiAgICBzdGF0aWMgdm9p
ZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICBwcml2YXRl
OgogICAgc2l6ZV90IF9NX3JlZmVyZW5jZXM7CgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5j
ZSgpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7
CgogICAgZmFjZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3Qg
ZmFjZXQmKTsKICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZy
aWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAg
dXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7
CgoKCgogICAgbXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBzaXplX3QgX1Nf
aGlnaHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNv
bnN0IGlkJik7CgogIHB1YmxpYzoKCgoKICAgIGlkKCkgeyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNf
ZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ0ICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCgpuYW1lc3BhY2Ug
c3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFM
IDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10Zmxh
Z3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRp
Y19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J
b3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3Mg
X19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
XihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19G
bXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9
CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2Es
IF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxp
bmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0Zt
dGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
Rm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz
CiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Mo
fnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lv
c19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w
ZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUg
X19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19j
YXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19i
KQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGlj
X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0o
X0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBf
X2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Bl
bm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19i
OyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBf
X2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBp
bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJl
dHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9J
b3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBf
SW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9f
YikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGlj
X2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9J
b3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl
KHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s
aW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3Rh
dGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBz
dGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRv
cnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9
IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lv
c3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7
IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2Es
IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGlu
ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBf
SW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtk
aXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UK
ICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAg
ewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5n
JiBfX3N0cikgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygp
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsK
CiAgICBwcml2YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFy
IF9NX25hbWVbX01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdz
IGZtdGZsYWdzOwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBk
ZWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBmaXhlZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
aW50ZXJuYWwpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs
YWdzIHNjaWVudGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1Nfc2hvd2Jhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdz
IHNob3dwb3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU191bml0YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBhZGp1c3RmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2Jhc2VmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lv
c3RhdGUgaW9zdGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUo
X19pb3NfZmxhZ3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQg
PSBpb3N0YXRlKF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3Rh
dGUgZmFpbGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGlj
IGNvbnN0IGlvc3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19P
cGVubW9kZSBvcGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9k
ZShfX2lvc19mbGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBi
aW5hcnkgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBv
cGVubW9kZSBpbiA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29u
c3Qgb3Blbm1vZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0
aWMgY29uc3Qgb3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMp
OwoKCiAgICB0eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNl
ZWtkaXIgYmVnID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNl
ZWtkaXIoMSk7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIx
NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwog
ICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQs
CiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2Fs
bGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2Nh
bGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoK
ICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAg
IGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7Cgog
ICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxi
YWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5kZXg7CiAgICAgIGludCBfTV9yZWZjb3VudDsKCiAg
ICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19p
bmRleCwKICAgICAgICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDog
X01fbmV4dChfX2NiKSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3Vu
dCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9yZWZj
b3VudDsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBf
TV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tz
OwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7Cgog
ICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29y
ZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICB9
OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4OwogICAgX1dvcmRzIF9N
X3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1bW15OwogICAgX1dv
cmRzKiBfTV93b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYKICAgIF9N
X2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAg
ICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAg
ewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsK
ICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9v
bCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAg
ICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRp
YyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdz
CiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZs
YWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s
ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29s
ZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkK
ICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0g
X19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwog
ICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZt
dGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAg
IF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAg
fQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdz
ICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29u
c3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHBy
ZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9
IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4g
X19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyBy
ZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFt
c2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAg
ICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0
aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxv
Y2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQog
ICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMg
aW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50
IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0
KQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3Jk
cyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUg
dm9pZComCiAgICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAo
X19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNb
X19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3Jk
OwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsK
CgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNl
JgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uu
c2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxp
bmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVu
c2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5l
IGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19i
YXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwog
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6
YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK
ICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpy
aWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAg
aW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jh
c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVs
ZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9z
X2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3Nf
YmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBf
X2Jhc2U7CiAgfQoKfQojIDQ1ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9zdHJlYW1idWYuaCIgMSAzCiMgMzggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMg
NDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu
aCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv
c2Z3ZC5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAy
IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf
Q2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj
X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zgog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190
eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFt
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVh
bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZf
aXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0
cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6
CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9z
aXplOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9i
dWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJf
dHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90
eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJf
dHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgog
ICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5p
dDsKCgoKCgoKICAgICAgaW50X3R5cGUgX01fcGJhY2tfc2l6ZTsKICAgICAgY2hhcl90eXBlKiBf
TV9wYmFjazsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgY2hhcl90
eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19pbml0OwoKCgoKICAg
ICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9w
YmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBpbnRfdHlwZSBfX2Rpc3QgPSBfTV9p
bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIGludF90eXBlIF9fbGVuID0gbWluKF9NX3Bi
YWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNr
LCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9p
bl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAg
ICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAg
ICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgog
ICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9N
X3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9jdXIg
PSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBpbnRfdHlwZSBfX29mZl9lbmQg
PSAwOwogICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3Bi
YWNrOwogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUg
LSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAg
ICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAg
ICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAg
ICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAg
ICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2Vu
ZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gZmFsc2U7CiAgICAg
ICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJfbW92ZShvZmZfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291dF9jdXI7CiAgICAg
ICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYmIF9NX2J1Zl91bmlm
aWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAxOTMgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2
b2lkCiAgICAgIF9NX291dF9jdXJfbW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBi
b29sIF9fdGVzdGluID0gX01faW5fY3VyOwoKICAgICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAg
ICAgICBpZiAoX190ZXN0aW4gJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBfTV9pbl9jdXIg
Kz0gX19uOwogICAgICAgIGlmIChfTV9vdXRfY3VyID4gX01fb3V0X2VuZCkKICAgICAgICAgIHsK
ICAgICAgICAgICAgX01fb3V0X2VuZCA9IF9NX291dF9jdXI7CgogICAgICAgICAgICBpZiAoX190
ZXN0aW4pCiAgICAgICAgICAgICAgX01faW5fZW5kICs9IF9fbjsKICAgICAgICAgIH0KICAgICAg
fQoKCgoKICAgICAgb2ZmX3R5cGUKICAgICAgX01fb3V0X2J1Zl9zaXplKCkKICAgICAgewogICAg
ICAgIG9mZl90eXBlIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX01fb3V0X2N1cikKICAgICAgICAg
IHsKCiAgICAgICAgICAgIGlmIChfTV9vdXRfYmVnID09IF9NX2J1ZikKICAgICAgICAgICAgICBf
X3JldCA9IF9NX291dF9iZWcgKyBfTV9idWZfc2l6ZSAtIF9NX291dF9jdXI7CgogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfZW5kIC0gX01fb3V0X2N1cjsKICAg
ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KIyAyMzYgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lk
CiAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01f
bW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYs
IF9NX2J1Zik7CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAg
dGhpcy0+c2V0cChfTV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01f
c2V0X2RldGVybWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rl
c3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBf
TV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0
aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9f
dGVzdG91dCkKICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAg
ICAgIH0KCiAgICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7
CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAg
ICAgewogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAg
ICBfX3JldCA9IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2Vu
ZDsKICAgICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAg
IF9fcmV0ID0gX01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0
X2VuZDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGlj
OgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAg
X01fYnVmX3VuaWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAg
X01fYnVmX3NpemVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2Rl
KDApOwogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAg
bG9jYWxlCiAgICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAg
ICBsb2NhbGUgX190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9j
KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRs
b2MoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAg
ICAgIHJldHVybiBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBs
b2NhbGUoKTsKICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1
ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNl
dGJ1ZihfX3MsIF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5
cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAg
ICB7IHJldHVybiB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAg
cG9zX3R5cGUKICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0
KQogICAgICB7IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGlu
dAogICAgICBwdWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVh
bXNpemUKICAgICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsK
ICAgICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAg
IHsKICAgICAgICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJh
Y2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2lu
X2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19w
YmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
X19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAg
IGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJu
IF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAg
ICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJu
ICh0aGlzLT5zYnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAg
IH0KCiAgICAgIGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAg
c2dldGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2lu
X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAg
IF9fcmV0ID0gdGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9
CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGlu
dF90eXBlCiAgICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAg
ICAgIHN1bmdldGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19j
KTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0
cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251
bGwpLCBfTV9idWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGlu
dF90eXBlPig4MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDAp
LCBfTV9pbl9jdXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigw
KSwKICAgICAgX01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBf
TV9idWZfbG9jYWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwg
X01fcGJhY2tfc2l6ZSgxKSwgX01fcGJhY2soX19udWxsKSwKICAgICAgX01fcGJhY2tfY3VyX3Nh
dmUoX19udWxsKSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChmYWxz
ZSkKICAgICAgeyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0
dXJuIF9NX2luX2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyBy
ZXR1cm4gX01faW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3Qg
eyByZXR1cm4gX01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsg
X01faW5fY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19n
YmVnLCBjaGFyX3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAg
ICAgX01faW5fYmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAg
ICAgX01faW5fZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6
aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBf
TV9tb2RlIHwgaW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBw
YmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAg
ICAgcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoK
ICAgICAgZXBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAg
ICAgIHBidW1wKGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAg
ICAgc2V0cChjaGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAg
ICAgICBfTV9vdXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5k
ID0gX19wZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3Bi
ZWcgJiYgX19wZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0
OwogICAgICB9CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAg
ICBpZiAoX01fYnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBf
X2xvYzsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxf
VHJhaXRzPioKICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0
dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlw
ZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190
eXBlLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVh
bCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1
cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVm
bG93KCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICAgIGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7CiAg
ICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu
X2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAg
ewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3Vy
KTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll
ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7
CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVh
bCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkp
CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry
ZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFp
dHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDUx
NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5o
IiAzCiAgICBwcml2YXRlOgogICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZf
dHlwZSYpOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9f
c3RyZWFtYnVmX3R5cGUmKTsKCiAgICB9OwoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwpuYW1lc3BhY2Ugc3Rk
IHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBf
X3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAg
ICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAgICAgICAgICBfTV9pbl9j
dXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f
Yyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT51ZmxvdygpOwog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRf
dHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3B1dGJhY2tj
KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBib29sIF9f
dGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgIGJvb2wg
X190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190eXBlOjplcShfX2MsIHRoaXMtPmdwdHIo
KVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBfX3Rlc3RuZSkKICAgICAgICBfX3JldCA9
IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0cigpKTsKICAgICAgICB9CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsK
ICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwg
X01faW5fY3VyKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAg
ICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJf
dHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1
Zl9zaXplKCkpCiAgICAgICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAg
ICBfTV9vdXRfY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+
b3ZlcmZsb3codHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVh
bXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAg
ICAgICAgc2l6ZV90IF9fYnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAg
IGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9f
cmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWlu
KF9fYnVmX2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5
KF9fcywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAg
ICAgICAgICAgICAgX19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9f
bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAg
ICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9
IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlw
ZSBfX2J1Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4g
PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBf
X24gLSBfX3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4s
IF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3Vy
LCBfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAg
ICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAg
ICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9m
KCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAg
ICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3Jl
dCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwog
ICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+
X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAgICAgd2hpbGUgKF9fdGVz
dHB1dCAmJiBfX2J1ZnNpemUgIT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feHRyY3Qg
PSBfX3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAg
X19yZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0
cmN0KTsKICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKICAgICAg
ICAgICAgICAgIGlmIChfX2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRocm93OwogICAgICB9CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDUzMCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyA0NiAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAxIDMKIyAzNiAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDMKCm5h
bWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91
dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbWJ1Zl90eXBl
KiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGlu
ZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSB0aHJvdyAoKQog
ICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9NX3NidWYpIHsgfQoKICAg
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdyAoKQogICAg
ICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1i
dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsKCiAgICAgIG9zdHJlYW1i
dWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAg
ICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX2Zh
aWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I9KF9DaGFyVCBf
X2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAgICBfVHJhaXRzOjplcV9p
bnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigpKSkKICAgICAgX01fZmFp
bGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0
b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D
aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgICAgdHlwZWRlZiBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmaXRlcl90eXBlOwoK
ICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAg
aW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0
aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7IH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm
KF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0
cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2MoLTIp
IHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigpIGNvbnN0CiAgICAgIHsK
CiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9zYnVmICYmIF9NX2MgIT0g
c3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0ID0gX01fYzsKICAgICAg
ICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0g
c3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAgICAgIHJldHVy
biBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlJgogICAgICBvcGVy
YXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgX01fc2J1Zi0+
c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
fQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAg
ICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0gKnRoaXM7CiAgICAgICAg
aWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCk7CiAg
ICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYm9v
bAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikKICAgICAgewog
ICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wg
X190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsKICAgICAg
ICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAgfHwgX19i
Ll9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNlb2YgJiYg
X19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKCgoKICAgICAgYm9v
bAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUmIF9fYikgY29uc3QKICAg
ICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
IGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9PSBfX2VvZjsK
ICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAgICAgICAgICAg
fHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJuIChfX3RoaXNl
b2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAgfQoKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBf
VHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9D
aGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz
PiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQp9CiMgMzYgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgi
IDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVf
ZmFjZXRzLmgiIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N0aW1lLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMiAzCiMgNDAgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMSAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
dGltZS5oIiAyIDMKIyA1MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N0aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5n
IDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZm
dGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1l
OwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7
CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgojIDEgIi91c3IvaW5j
bHVkZS9sYW5naW5mby5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9ubF90eXBl
cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1
ZGUvbmxfdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVy
biAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoK
CmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9f
ZmxhZykgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxv
ZywgaW50IF9fc2V0LCBpbnQgX19udW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRk
IF9fY2F0YWxvZykgdGhyb3cgKCk7Cgp9CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAy
IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1
ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVS
SUMgPSAxLAogIF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVU
QVJZID0gNCwKICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBF
UiA9IDcsCiAgX19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBI
T05FID0gMTAsCiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04g
PSAxMgp9OwojIDI3ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7
CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAo
KChfX0xDX1RJTUUpIDw8IDE2KSB8ICgwKSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFC
REFZXzQsCgogIEFCREFZXzUsCgogIEFCREFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgog
IERBWV8yLAoKICBEQVlfMywKCiAgREFZXzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcs
CgoKCiAgQUJNT05fMSwKCiAgQUJNT05fMiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJN
T05fNSwKCiAgQUJNT05fNiwKCiAgQUJNT05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAg
QUJNT05fMTAsCgogIEFCTU9OXzExLAoKICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIs
CgogIE1PTl8zLAoKICBNT05fNCwKCiAgTU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9O
XzgsCgogIE1PTl85LAoKICBNT05fMTAsCgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RS
LAoKICBQTV9TVFIsCgoKICBEX1RfRk1ULAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FN
UE0sCgoKICBFUkEsCgogIF9fRVJBX1lFQVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRT
LAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJBX1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRS
SUVTLAogIF9OTF9USU1FX0VSQV9FTlRSSUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRB
WV8yLAogIF9OTF9XQUJEQVlfMywKICBfTkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9O
TF9XQUJEQVlfNiwKICBfTkxfV0FCREFZXzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIs
CiAgX05MX1dEQVlfMywKICBfTkxfV0RBWV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwK
ICBfTkxfV0RBWV83LAoKCiAgX05MX1dBQk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FC
TU9OXzMsCiAgX05MX1dBQk1PTl80LAogIF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAg
X05MX1dBQk1PTl83LAogIF9OTF9XQUJNT05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1P
Tl8xMCwKICBfTkxfV0FCTU9OXzExLAogIF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAog
IF9OTF9XTU9OXzIsCiAgX05MX1dNT05fMywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAg
X05MX1dNT05fNiwKICBfTkxfV01PTl83LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBf
TkxfV01PTl8xMCwKICBfTkxfV01PTl8xMSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIs
CiAgX05MX1dQTV9TVFIsCgogIF9OTF9XRF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9G
TVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoKICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1U
LAogIF9OTF9XQUxUX0RJR0lUUywKICBfTkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1U
LAoKICBfTkxfVElNRV9XRUVLX05EQVlTLAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9U
SU1FX1dFRUtfMVNUV0VFSywKICBfTkxfVElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJ
UlNUX1dPUktEQVksCiAgX05MX1RJTUVfQ0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9O
RSwKCiAgX0RBVEVfRk1ULAoKICBfTkxfV19EQVRFX0ZNVCwKCiAgX05MX05VTV9MQ19USU1FLAoK
CgoKICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUpIDw8IDE2KSB8ICgwKSks
CiAgX05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFCTEVNQiwKICBfTkxfQ09M
TEFURV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0lORElS
RUNUTUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9HQVAyLAogIF9OTF9DT0xM
QVRFX0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09MTEFURV9XRUlHSFRXQywK
ICBfTkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElSRUNUV0MsCiAgX05MX0NP
TExBVEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCiAgX05M
X0NPTExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwKICBfTkxfQ09M
TEFURV9DT0xMU0VRV0MsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xB
U1MgPSAoKChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9UT1VQUEVSLAog
IF9OTF9DVFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQRV9HQVAyLAog
IF9OTF9DVFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQRV9HQVA0LAog
IF9OTF9DVFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9DTEFTU19OQU1F
UywKICBfTkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBfTkxfQ1RZUEVf
TUJfQ1VSX01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQgPSBfTkxfQ1RZ
UEVfQ09ERVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9DVFlQRV9UT0xP
V0VSMzIsCiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwK
ICBfTkxfQ1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAg
X05MX0NUWVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01CLAogIF9OTF9D
VFlQRV9JTkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBfTkxfQ1RZUEVf
SU5ESUdJVFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NUWVBFX0lORElH
SVRTN19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlf
TUIsCiAgX05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dD
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMl9XQywKICBf
TkxfQ1RZUEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCiAgX05MX0NU
WVBFX0lORElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM5X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMV9N
QiwKICBfTkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCiAg
X05MX0NUWVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01CLAogIF9OTF9D
VFlQRV9PVVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBfTkxfQ1RZUEVf
T1VURElHSVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NUWVBFX09VVERJ
R0lUMF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDJf
V0MsCiAgX05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ0X1dDLAog
IF9OTF9DVFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9XQywKICBfTkxf
Q1RZUEVfT1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAgX05MX0NUWVBF
X09VVERJR0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAgX05MX0NUWVBF
X1RSQU5TTElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwKICBfTkxf
Q1RZUEVfVFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCiAgX05M
X0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElU
X0RFRkFVTFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKICBfTkxf
Q1RZUEVfVFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9DVFlQRV9FWFRS
QV9NQVBfNCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF82
LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCiAgX05M
X0NUWVBFX0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAgX05MX0NUWVBF
X0VYVFJBX01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9DVFlQRV9FWFRS
QV9NQVBfMTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xDX0NUWVBFLAoK
CgoKICBfX0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2KSB8ICgwKSks
CgoKCiAgX19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lOVCwKCgoKICBf
X01PTl9USE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9fUE9TSVRJVkVf
U0lHTiwKCgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJVFMsCgoKCiAg
X19GUkFDX0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NFUF9CWV9TUEFD
RSwKCgoKICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwKCgoKICBfX1Bf
U0lHTl9QT1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0NSTkNZU1RS
LAoKICBfX0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQQUNFLAoKCgog
IF9fSU5UX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19J
TlRfUF9TSUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZ
X0RVT19JTlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5DWV9TWU1CT0ws
CiAgX05MX01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19G
UkFDX0RJR0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU
QVJZX0RVT19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMs
CiAgX05MX01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lO
VF9QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAog
IF9OTF9NT05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19J
TlRfTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKICBfTkxf
TU9ORVRBUllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9Q
T1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9V
Tk9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9OTF9NT05FVEFS
WV9EVU9fVkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAogIF9OTF9NT05F
VEFSWV9DT05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAg
X05MX01PTkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05VTV9MQ19NT05FVEFSWSwKCgoK
ICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8IDE2KSB8ICgwKSksCgoKCiAg
UkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VTQU5EU19TRVAsCgoKCiAgVEhP
VVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywKCgoKICBfTkxfTlVNRVJJQ19E
RUNJTUFMX1BPSU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX05V
TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo
MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTlVN
X0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYp
IHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05B
TUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFN
RV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFN
RV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTlVNX0xDX05BTUUsCgogIF9O
TF9BRERSRVNTX1BPU1RBTF9GTVQgPSAoKChfX0xDX0FERFJFU1MpIDw8IDE2KSB8ICgwKSksCiAg
X05MX0FERFJFU1NfQ09VTlRSWV9OQU1FLAogIF9OTF9BRERSRVNTX0NPVU5UUllfUE9TVCwKICBf
TkxfQUREUkVTU19DT1VOVFJZX0FCMiwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMywKICBfTkxf
QUREUkVTU19DT1VOVFJZX0NBUiwKICBfTkxfQUREUkVTU19DT1VOVFJZX05VTSwKICBfTkxfQURE
UkVTU19DT1VOVFJZX0lTQk4sCiAgX05MX0FERFJFU1NfTEFOR19OQU1FLAogIF9OTF9BRERSRVNT
X0xBTkdfQUIsCiAgX05MX0FERFJFU1NfTEFOR19URVJNLAogIF9OTF9BRERSRVNTX0xBTkdfTElC
LAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9URUxfSU5UX0ZNVCA9ICgo
KF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxFUEhPTkVfVEVMX0RPTV9G
TVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxFUEhPTkVfSU5UX1BSRUZJ
WCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAgX05MX01FQVNVUkVNRU5UX01FQVNVUkVNRU5U
ID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwKICBfTkxfTlVNX0xDX01FQVNV
UkVNRU5ULAoKICBfTkxfSURFTlRJRklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FU
SU9OKSA8PCAxNikgfCAoMCkpLAogIF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX0FERFJFU1MsCiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05M
X0lERU5USUZJQ0FUSU9OX0VNQUlMLAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX0ZBWCwKICBfTkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lE
RU5USUZJQ0FUSU9OX1RFUlJJVE9SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAg
X05MX0lERU5USUZJQ0FUSU9OX0FQUExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJS
RVZJQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNB
VElPTl9EQVRFLAogIF9OTF9JREVOVElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfTlVNX0xDX0lE
RU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9OwojIDU2MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZv
LmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCk7
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDU3MiAiL3Vzci9pbmNs
dWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0
ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyA0NSAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAxIDMKIyAzOCAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3djdHlw
ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL3djdHlwZS5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAi
L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAz
CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CgoKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2VuZGlhbi5oIiAxIDMKIyA2OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA3OSAi
L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmVudW0KewogIF9fSVN3dXBwZXIgPSAwLAogIF9fSVN3
bG93ZXIgPSAxLAogIF9fSVN3YWxwaGEgPSAyLAogIF9fSVN3ZGlnaXQgPSAzLAogIF9fSVN3eGRp
Z2l0ID0gNCwKICBfX0lTd3NwYWNlID0gNSwKICBfX0lTd3ByaW50ID0gNiwKICBfX0lTd2dyYXBo
ID0gNywKICBfX0lTd2JsYW5rID0gOCwKICBfX0lTd2NudHJsID0gOSwKICBfX0lTd3B1bmN0ID0g
MTAsCiAgX19JU3dhbG51bSA9IDExLAoKICBfSVN3dXBwZXIgPSAoKF9fSVN3dXBwZXIpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgMjQpIDogKChfX0lTd3VwcGVyKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8PCA4KSA6ICgoX19JU3d1cHBlcikgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3d1cHBlcikpID4+IDI0KSkpKSwKICBfSVN3bG93ZXIgPSAoKF9fSVN3bG93ZXIpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgMjQpIDogKChfX0lTd2xvd2VyKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8PCA4KSA6ICgoX19JU3dsb3dlcikgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dsb3dlcikpID4+IDI0KSkpKSwKICBfSVN3YWxwaGEgPSAoKF9fSVN3YWxwaGEpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgMjQpIDogKChfX0lTd2FscGhhKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8PCA4KSA6ICgoX19JU3dhbHBoYSkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dhbHBoYSkpID4+IDI0KSkpKSwKICBfSVN3ZGlnaXQgPSAoKF9fSVN3ZGlnaXQpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgMjQpIDogKChfX0lTd2RpZ2l0KSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3dkaWdpdCkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3eGRpZ2l0ID0gKChfX0lTd3hkaWdpdCkgPCA4
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRpZ2l0KSkgPDwgMjQpIDogKChfX0lTd3hkaWdpdCkg
PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDgpIDogKChfX0lTd3hkaWdp
dCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDgpIDogKGludCkgKCgx
VUwgPDwgKF9fSVN3eGRpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3dzcGFjZSA9ICgoX19JU3dzcGFj
ZSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCAyNCkgOiAoKF9fSVN3c3Bh
Y2UpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpIDw8IDgpIDogKChfX0lTd3Nw
YWNlKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gMjQpKSkpLAogIF9JU3dwcmludCA9ICgoX19JU3dwcmlu
dCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCAyNCkgOiAoKF9fSVN3cHJp
bnQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpIDw8IDgpIDogKChfX0lTd3By
aW50KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd3ByaW50KSkgPj4gMjQpKSkpLAogIF9JU3dncmFwaCA9ICgoX19JU3dncmFw
aCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCAyNCkgOiAoKF9fSVN3Z3Jh
cGgpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpIDw8IDgpIDogKChfX0lTd2dy
YXBoKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gMjQpKSkpLAogIF9JU3dibGFuayA9ICgoX19JU3dibGFu
aykgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCAyNCkgOiAoKF9fSVN3Ymxh
bmspIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpIDw8IDgpIDogKChfX0lTd2Js
YW5rKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gMjQpKSkpLAogIF9JU3djbnRybCA9ICgoX19JU3djbnRy
bCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCAyNCkgOiAoKF9fSVN3Y250
cmwpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpIDw8IDgpIDogKChfX0lTd2Nu
dHJsKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd2NudHJsKSkgPj4gMjQpKSkpLAogIF9JU3dwdW5jdCA9ICgoX19JU3dwdW5j
dCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCAyNCkgOiAoKF9fSVN3cHVu
Y3QpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpIDw8IDgpIDogKChfX0lTd3B1
bmN0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gMjQpKSkpLAogIF9JU3dhbG51bSA9ICgoX19JU3dhbG51
bSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCAyNCkgOiAoKF9fSVN3YWxu
dW0pIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpIDw8IDgpIDogKChfX0lTd2Fs
bnVtKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiA4KSA6IChpbnQpICgo
MVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gMjQpKSkpCn07CgoKCmV4dGVybiAiQyIgewoKCgoKCgoK
ZXh0ZXJuIGludCBpc3dhbG51bSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgaXN3YWxwaGEgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd2NudHJs
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3ZGlnaXQgKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dncmFwaCAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgaXN3cHJpbnQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
aXN3cHVuY3QgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3c3BhY2Ug
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3dXBwZXIgKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0ICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIHRocm93ICgpOwoj
IDE3OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4dGVybiB3Y3R5cGVfdCB3Y3R5cGUgKF9f
Y29uc3QgY2hhciAqX19wcm9wZXJ0eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUg
KHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHVuc2ln
bmVkIGludCAqX19jdHlwZTMyX2I7CiMgMjQ5ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKdHlw
ZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93
ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50
X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG9s
b3dlcjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIvdXNy
L2luY2x1ZGUvd2N0eXBlLmgiIDMKfQojIDI4OCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCmV4
dGVybiAiQyIgewoKCgpleHRlcm4gd2N0cmFuc190IHdjdHJhbnMgKF9fY29uc3QgY2hhciAqX19w
cm9wZXJ0eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnMgKHdpbnRfdCBfX3dj
LCB3Y3RyYW5zX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs
ZS5oIiAxIDMKIyAzMDAgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCgoKCmV4dGVybiBpbnQg
X19pc3dhbG51bV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f
bG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3Y250cmxfbCAod2ludF90IF9fd2Ms
IF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3ZGlnaXRf
bCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IF9faXN3cHJpbnRfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1
bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgX19pc3dzcGFjZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hkaWdpdF9sICh3
aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IF9faXN3YmxhbmtfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgp
OwoKCgpleHRlcm4gd2N0eXBlX3QgX193Y3R5cGVfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5
LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9faXN3
Y3R5cGVfbCAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYywgX19sb2NhbGVfdCBfX2xvY2Fs
ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB3aW50X3QgX190b3dsb3dlcl9sICh3aW50
X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBf
X3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdjdHJhbnNfdCBfX3djdHJhbnNfbCAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5
LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190
b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCn0KIyAzOSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMiAz
CiMgNjAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBl
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBl
X3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjpp
c3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcg
Ojppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNp
bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAg
dXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0
OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3Vw
cGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKfQojIDQ2ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoj
IDEgIi91c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL2ljb252Lmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9p
Y29udi5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2lj
b252LmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4
dGVybiBpY29udl90IGljb252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3Qg
Y2hhciAqX19mcm9tY29kZSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYg
KGljb252X3QgX19jZCwgY2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKl9fcmVzdHJpY3QgX19vdXRieXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2Ug
KGljb252X3QgX19jZCkgdGhyb3cgKCk7Cgp9CiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgoK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5
cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOwoKCgogICAgdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBf
SVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0
aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGln
aXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsK
ICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3Qg
bWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNn
cmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0g
PSBfSVNhbG51bTsKICB9OwojIDU0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgX19jdHlwZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyBjdHlwZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CgogICAgICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0
IGNoYXJfdHlwZSoKICAgICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5
cGUgKl9faGksIG1hc2sgKl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhf
X2xvLCBfX2hpLCBfX3ZlYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9p
cyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3Qg
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3NjYW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlw
ZQogICAgICB0b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3RvdXBwZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVy
KGNoYXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb190b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAg
ICAgdG9sb3dlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190
b2xvd2VyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFy
X3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fdG9sb3dlcihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdp
ZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9
CgogICAgICBjb25zdCBjaGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBj
aGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3dpZGVuKF9fbG8sIF9faGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFy
X3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19u
YXJyb3coX19jLCBfX2RmYXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFy
cm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAg
ICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX25hcnJvdyhfX2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19y
ZWZzID0gMCk6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg
fl9fY3R5cGVfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv
X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29u
c3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19o
aSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Nj
YW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dp
ZGVuKGNoYXIpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9f
d2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAg
Y2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBk
b19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQs
IGNoYXIqIF9fZGVzdCkgY29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh
clQ+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh
clQ+KF9fcmVmcykgeyB9CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAog
ICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4g
ZmFsc2U7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25z
dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmly
dHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0K
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hp
OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBf
X2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy
X3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiBjaGFyX3R5
cGUoKTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhj
aGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hh
ciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9D
aGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMg
X19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAg
ICAgX190b190eXBlIGNvbnN0JiBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9N
X3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0
IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7
CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNr
KiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7Cgog
ICAgICBpbmxpbmUgYm9vbAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAg
ICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgog
ICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp
KSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9f
bSwgY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVj
dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAg
ICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAg
ICBjb25zdCBtYXNrKgogICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBfTV9jdGFibGU7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwg
Y2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1h
c2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
c2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93
ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNo
YXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
ICBjb25zdCBjdHlwZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxv
Y2FsZSYgX19sb2MpOwoKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPHdjaGFyX3Q+IDog
cHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTx3Y2hhcl90PgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3Y3R5cGVfdCBf
X3dtYXNrX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBf
X3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29u
c3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAg
ICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog
X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy
X3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj
aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f
d2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dp
ZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBj
aGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks
CiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAg
ICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNl
dDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2lu
bGluZS5oIiAxIDMKIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46
OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtfX2Nd
ICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIq
IF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdo
aWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107
CiAgICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg
c2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkg
Y29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIShfTV90YWJsZVsqX19sb3dd
ICYgX19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNo
YXIqCiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xv
dywgY29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGln
aAogICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQogICAgICArK19f
bG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgog
ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBl
eHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw
KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsg
fQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiMgNTcgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNsYXNzIF9fZW5jX3RyYWl0
cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19kZXNjX3R5cGU7CgogIHBy
b3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6ZSA9IDMyOwoKICAgIGNo
YXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9leHRfZW5jW19TX21heF9z
aXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBfX2Rlc2NfdHlwZSBfTV9v
dXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBfTV9pbnRfYm9tOwoKICBw
dWJsaWM6CiAgICBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz
YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewoKCgoKICAgICAgc3RyY3B5
KF9NX2ludF9lbmMsICJVQ1M0Iik7CgoKICAgICAgc3RyY3B5KF9NX2V4dF9lbmMsIG5sX2xhbmdp
bmZvKENPREVTRVQpKTsKICAgIH0KCiAgICBfX2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQs
IGNvbnN0IGNoYXIqIF9fZXh0LCBpbnQgX19pYm9tID0gMCwKICAgICAgICAgICAgICAgICBpbnQg
X19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9i
b20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2lu
dCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhf
c2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBf
X29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBf
U19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywg
X1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAg
X01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygp
CiAgICB7CiAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAgICBpY29udl9jbG9zZShf
TV9vdXRfZGVzYyk7CiAgICB9CgoKICAgIHZvaWQKICAgIF9NX2luaXQoKQogICAgewogICAgICBf
TV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAgX01f
b3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9lbmMpOwogICAgICBpZiAo
X01fb3V0X2Rlc2MgPT0gaWNvbnZfdCgtMSkgfHwgX01faW5fZGVzYyA9PSBpY29udl90KC0xKSkK
ICAgICAgICB7CgogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsK
ICAgICAgcmV0dXJuIF9NX291dF9kZXNjICYmIF9NX2luX2Rlc2MKICAgICAgICAgICAgICYmIF9N
X291dF9kZXNjICE9IGljb252X3QoLTEpICYmIF9NX2luX2Rlc2MgIT0gaWNvbnZfdCgtMSk7CiAg
ICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5fZGVzY3JpcHRvcigpCiAg
ICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVzY190eXBlKgogICAgX01f
Z2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRfZGVzYzsgfQoKICAgY29u
c3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01faW50X2Vu
YzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0
dXJuIF9NX2V4dF9lbmM7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRlcm5hbF9ib20oKQogICAg
eyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0X2ludGVybmFsX2JvbSgp
CiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CiAgfTsKCgoKCiAgY2xhc3MgY29kZWN2dF9iYXNl
CiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0
aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+
CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpm
YWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50
ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGlu
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg
ICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJu
IHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAg
ICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4
dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hp
ZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAg
ICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAg
ICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19m
cm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3Rv
X25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAg
YWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3
YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBl
eHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50
CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChf
X3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uo
KSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0
YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJu
X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg
ICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq
IF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlw
ZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f
aW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSog
X190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAw
OwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJv
dygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90
eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4
dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUg
X1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9J
bnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwog
ICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjpp
ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAg
ICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4g
KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0
KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4
dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQs
IF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu
VCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0lu
dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJu
VCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAg
dHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFp
dHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBf
X2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJh
Y3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAg
ICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBz
aXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5f
dHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFs
IHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5
cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUq
IF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYg
X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo
c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25z
dCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5j
b2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5
c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVu
Z3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAg
ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAg
ICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRz
Pjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlubGluZSBzaXplX3QKICAg
IF9faWNvbnZfYWRhcHRvcihzaXplX3QoKmljb252X2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3Qq
LCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgY2QsIGNoYXIq
KiBpbmJ1Ziwgc2l6ZV90KiBpbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICBjaGFyKiog
b3V0YnVmLCBzaXplX3QqIG91dGJ5dGVzbGVmdCkKICAgIHsKICAgICAgcmV0dXJuIGljb252X2Z1
bmMoY2QsIChfVClpbmJ1ZiwgaW5ieXRlc2xlZnQsIG91dGJ1Ziwgb3V0Ynl0ZXNsZWZ0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg
Y29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2Vu
Y190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj
b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAo
X19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBl
OjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBf
X2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qg
c2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsK
ICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19m
cm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5f
dHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlw
bGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAg
ICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2ludF9ib20gPSBfX3N0YXRl
Ll9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2ludF9ib20pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsK
ICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxpbnRlcm5f
dHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBlKSAqIChfX3NpemUgKyAx
KSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+
KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5
KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0g
X19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludGVy
bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg
ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg
ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j
ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f
Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6
ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9f
dG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAg
ICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9t
X2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJv
bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog
ICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl
Kj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jh
c2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46
OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywK
ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChf
X3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6
Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9f
ZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNp
emVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAg
ICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsK
CgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7
CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpfX2Rlc2Ms
IF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBfX3RtdWx0
aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBub2NvbnY7
CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAgICAgICAgICAgICBfX3Jl
dCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh
bDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGVycm9y
OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAog
ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9faW4o
c3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg
IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJv
bV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICBy
ZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7
CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f
ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9m
KGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBf
X2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVf
dCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAg
ICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoK
ICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAg
ICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAg
ICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRlcm5hbF9ib20oKTsKICAg
ICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3Qg
X19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVk
WzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7CiAgICAgICAgICAgICAg
Y2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3Np
emUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2Nm
aXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19k
ZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9f
ZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2Fz
dDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252
X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9
CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlw
ZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxl
biA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQg
PSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAg
ICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
X2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1
cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+
CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6
CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAg
aW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk
b19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0
CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zy
b20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46
OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KCgoK
CiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+CiAg
ICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50ZXJuX3R5cGU7CiAgICAg
IHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVf
dHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0
YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg
ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4
dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwK
ICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90
eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsK
CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3co
KTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90
eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAg
IGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgdGVtcGxhdGU8PgogICAg
Y2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2Nv
ZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBw
dWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
Y2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo
c2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAgICAgICAg
ICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAg
ICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAgICAgICAgICAgY29uc3Qg
ZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgaW50
ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGludGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2Vu
Y29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgYm9vbCBkb19hbHdh
eXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAgICAgaW50IGRvX2xl
bmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3co
KTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWUgOiBwdWJsaWMg
Y29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7CiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4oX19y
ZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dF9ieW5h
bWUoKSB7IH0KICAgIH07CiMgNDE2ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19nZXQ7CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX0Zvcm1hdF9jYWNoZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJh
aXRzPF9DaGFyVD4gdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VD4gc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVf
dHlwZSBzaXplX3R5cGU7CgoKICAgICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICAgICAgZnJpZW5kIGNsYXNz
IF9OdW1lcmljX2dldDsKICAgICAgZnJpZW5kIGNsYXNzIG51bV9nZXQ8X0NoYXJUPjsKICAgICAg
ZnJpZW5kIGNsYXNzIG51bV9wdXQ8X0NoYXJUPjsKICAgICAgZnJpZW5kIGNsYXNzIHRpbWVfZ2V0
PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9nZXQ8X0NoYXJUPjsKICAgICAgZnJp
ZW5kIGNsYXNzIHRpbWVfcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyBtb25leV9wdXQ8
X0NoYXJUPjsKCgoKCiAgICAgIHN0YXRpYyBpbnQgX1NfcHdvcmRfaXg7CgoKCiAgICAgIGJvb2wg
X01fdmFsaWQ7CgoKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2xpdGVyYWxzW107CgoKCgog
ICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfU19taW51cywKICAgICAgICBfU19wbHVzLAogICAg
ICAgIF9TX3gsCiAgICAgICAgX1NfWCwKICAgICAgICBfU19kaWdpdHMsCiAgICAgICAgX1NfZGln
aXRzX2VuZCA9IF9TX2RpZ2l0cyArIDE2LAogICAgICAgIF9TX3VkaWdpdHMgPSBfU19kaWdpdHNf
ZW5kLAogICAgICAgIF9TX3VkaWdpdHNfZW5kID0gX1NfdWRpZ2l0cyArIDE2LAogICAgICAgIF9T
X2VlID0gX1NfZGlnaXRzICsgMTQsCiAgICAgICAgX1NfRWUgPSBfU191ZGlnaXRzICsgMTQKICAg
ICAgfTsKCgoKCiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwoKCgoKCiAgICAgIGNo
YXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwoKCgogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFt
ZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKCgogICAgICBib29sIF9NX3VzZV9n
cm91cGluZzsKCgoKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwoKICAgICAgX0Zvcm1hdF9jYWNo
ZSgpOwoKICAgICAgfl9Gb3JtYXRfY2FjaGUoKSB0aHJvdygpIHsgfQoKCgoKICAgICAgc3RhdGlj
IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgICAgX1NfZ2V0KGlvc19iYXNlJiBfX2lvcyk7Cgog
ICAgICB2b2lkCiAgICAgIF9NX3BvcHVsYXRlKGlvc19iYXNlJik7CgogICAgICBzdGF0aWMgdm9p
ZAogICAgICBfU19jYWxsYmFjayhpb3NfYmFzZTo6ZXZlbnQgX19ldmVudCwgaW9zX2Jhc2UmIF9f
aW9zLCBpbnQgX19peCkgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGludCBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX3B3b3JkX2l4OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBjaGFyIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6
CiAgICBfU19saXRlcmFsc1tdID0gIi0reFgwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OUFCQ0RF
RiI7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9Gb3JtYXRfY2FjaGUoKTsK
CiAgIHRlbXBsYXRlPD4gX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6X0Zvcm1hdF9jYWNoZSgpOwoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz
cyBfTnVtZXJpY19nZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyBu
dW1fZ2V0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+
CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0OwogICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUgX0luSXRlclQ+CiAgICAgIGZyaWVu
ZCBjbGFzcyBudW1fcHV0OwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhciwgdHlwZW5hbWUg
X0luSXRlclQ+CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX3B1dDsKICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf
cHV0OwoKICAgIHByaXZhdGU6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX2dldCgpIHsg
fQoKICAgICAgdmlydHVhbAogICAgICB+X051bWVyaWNfZ2V0KCkgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgX01fZ2V0X2RpZ2l0cyhpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kKSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0
ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNf
dHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
bnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29s
JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBf
X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9f
aW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0K
CiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZv
aWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7
IH0KCgoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3QoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLAogICAgICAgICAgICAgICAgIGludCYgX19iYXNl
LCBib29sIF9fZnAgPSB0cnVlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0
ZSYsIGJvb2wmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBzaG9y
dCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBpbnQmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldCAoaXRlcl90eXBlLCBpdGVyX3R5
cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0JikgY29uc3Q7CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAg
IGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JikgY29uc3Q7CiAgICAgIHZpcnR1
YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
LAogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg
aXRlcl90eXBlLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwKICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBk
b3VibGUmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVy
X3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAg
ICAgICAgICAgICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtX2dldDxjaGFyLCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFjdChpc3RyZWFtYnVmX2l0ZXJh
dG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBjaGFyKiBfX3h0cmMsCiAgICAgICAgICAgICAgIGludCYgX19iYXNlLCBib29sIF9f
ZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBjbGFzcyBfTnVtZXJpY19wdXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAg
IHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX051bWVyaWNfcHV0KCkgeyB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5fTnVtZXJpY19wdXQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9f
cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBi
b29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg
ICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19m
LCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7
IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmls
bCwgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z
X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJv
b2wgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19m
aWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVk
IGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgbnVtcHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
cHJpdmF0ZToKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlw
ZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmlu
Z190eXBlIF9NX3RydWVuYW1lOwogICAgICBzdHJpbmdfdHlwZSBfTV9mYWxzZW5hbWU7CgogICAg
cHVibGljOgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChzaXplX3QgX19yZWZzID0gMCkg
OiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX251bXB1bmN0KCk7
IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFs
aXplX251bXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3Bv
aW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBj
aGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3Ro
b3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJ1
ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb190cnVlbmFtZSgpOyB9CgogICAgICBzdHJp
bmdfdHlwZQogICAgICBmYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBkb19mYWxzZW5h
bWUoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3QoKSB7
IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9kZWNpbWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJf
dHlwZQogICAgICBkb190aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhv
dXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9ncm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb190cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RydWVuYW1l
OyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2ZhbHNlbmFtZSgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2ZhbHNlbmFtZTsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5p
dGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46
OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBudW1wdW5jdDxf
Q2hhclQ+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoKICAgIH0K
CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVf
bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBu
dW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xv
Yyk7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnlu
YW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9j
X2xvY2FsZV9udW1wdW5jdDsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAg
ICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9fcyk7CiAgICAg
ICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7CiAgICAgIH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5bmFtZSgpCiAg
ICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7IH0KICAgIH07
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRlIDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0
ZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp
bnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkx
LAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2NvbXBhcmUoX19sbzEsIF9faGkxLCBfX2xv
MiwgX19oaTIpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0cmFuc2Zvcm0oY29uc3QgX0No
YXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3RyYW5zZm9ybShfX2xvLCBfX2hpKTsgfQoKICAgICAgbG9uZwogICAgICBoYXNoKGNvbnN0
IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19oYXNoKF9fbG8sIF9faGkpOyB9CgogIHByb3RlY3RlZDoKICAgICAgfmNvbGxhdGUo
KSB7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBf
X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5n
X3R5cGUKICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU
KiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9D
aGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgog
IHRlbXBsYXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6ZG9fY29tcGFyZShjb25zdCBj
aGFyKiBfX2xvMSwgY29uc3QgY2hhciogX19oaTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIF9fbG8yLCBjb25zdCBjaGFyKiBfX2hpMikgY29uc3Q7CgogIHRlbXBs
YXRlPD4KICAgIHN0cmluZwogICAgY29sbGF0ZTxjaGFyPjo6ZG9fdHJhbnNmb3JtKGNvbnN0IGNo
YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBsb25n
CiAgICBjb2xsYXRlPGNoYXI+Ojpkb19oYXNoKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGkpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46
OmRvX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCogX19sbzEsIGNvbnN0IHdjaGFyX3QqIF9faGkxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90KiBfX2xvMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19oaTIpIGNvbnN0
OwoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb190cmFu
c2Zvcm0oY29uc3Qgd2NoYXJfdCogX19sbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB3Y2hhcl90KiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwog
ICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9faGFzaChjb25zdCB3Y2hhcl90KiBfX2xvLCBjb25zdCB3
Y2hhcl90KiBfX2hpKSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNs
YXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0
ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1w
bGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTxjaGFyPjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMpOwoKICB0ZW1wbGF0ZTw+CiAgICBjb2xsYXRlX2J5bmFtZTx3Y2hh
cl90Pjo6Y29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKCiAgY2xh
c3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIs
IGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFj
ZXQsIHB1YmxpYyB0aW1lX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSwgX01fZGF5bmFtZXMo
MCksIF9NX21vbnRobmFtZXMoMCkgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRl
cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldF90aW1lKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfdGltZShfX3MsIF9fZW5kLCBfX2YsIF9fZXJy
LCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldF9kYXRl
KF9fcywgX19lbmQsIF9fZiwgX19lcnIsIF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2Ys
CiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29u
c3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X3dlZWtkYXkoX19zLF9fZW5kLF9fZixfX2VycixfX3Qp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRf
bW9udGhuYW1lKF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
ZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25z
dAogICAgICB7IHJldHVybiBkb19nZXRfeWVhcihfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkKICAgICAgewog
ICAgICAgIGRlbGV0ZSBbXSBfTV9tb250aG5hbWVzOwogICAgICAgIGRlbGV0ZSBbXSBfTV9kYXlu
YW1lczsKICAgICAgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRl
cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRpbWVfYmFzZTo6eW1kOyB9CgogICAgICB2aXJ0dWFs
IGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgLCBp
b3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAogICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7IHJldHVy
biBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0
ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19zLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAog
ICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAg
eyByZXR1cm4gX19zOyB9CgogICAgICBtdXRhYmxlIGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfTV9k
YXluYW1lczsKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fbW9udGhuYW1l
czsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIGxvY2FsZTo6aWQgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6aWQ7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5
bmFtZSA6IHB1YmxpYyB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+CiAgICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0
ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFy
Kiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihf
X3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9i
eW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJs
aWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0KHNpemVfdCBfX3JlZnMg
PSAwKSA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcykgeyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgLCBjaGFyX3R5cGUgLAogICAgICAgICAgY29u
c3QgdG0qICwgY29uc3QgX0NoYXJUKiAsCiAgICAgICAgICBjb25zdCBfQ2hhclQqICkgY29uc3QK
ICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0
bSogX190bWIsIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2RpZmllciA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3RtYiwgX19mb3JtYXQsIF9fbW9k
aWZpZXIpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgp
IHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3Ms
IGlvc19iYXNlJiwgY2hhcl90eXBlLCBjb25zdCB0bSogLAogICAgICAgICAgICAgY2hhciAsIGNo
YXIgKSBjb25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxf
Q2hhclQsIF9PdXRJdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGlj
aXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPiAoX19yZWZzKSB7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfcHV0X2J5bmFtZSgpIHsgfQogICAgfTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNz
IG1vbmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNp
emVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50
bCwKICAgICAgICAgIGlvc19iYXNlJiBfX2YsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u
ZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5k
LCBfX2ludGwsIF9fZiwgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNl
JiBfX2YsCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdfdHlwZSYg
X19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX3MsIF9fZW5kLCBfX2ludGws
IF9fZiwgX19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAog
ICAgICB+bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19n
ZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3NfYmFz
ZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmICkgY29u
c3QKICAgICAgeyByZXR1cm4gX19zOyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBk
b19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgYm9vbCAsCiAgICAgICAgICAgICBpb3Nf
YmFzZSYgLCBpb3NfYmFzZTo6aW9zdGF0ZSYgLAogICAgICAgICAgICAgc3RyaW5nX3R5cGUmICkg
Y29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUg
X191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fcHV0KF9fcywgX19pbnRsLCBfX2YsIF9f
ZmlsbCwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2YsCiAgICAgICAgICBjaGFyX3R5cGUgX19maWxs
LCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1
dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCwgaW9zX2Jhc2UmICwgY2hhcl90
eXBlICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlICkgY29uc3QKICAgICAgeyByZXR1cm4gX19z
OyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
Ym9vbCwgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190
eXBlJiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCiAgc3RydWN0IG1vbmV5X2Jhc2UKICB7CiAgICBlbnVt
IHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9sLCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBh
dHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoKICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2Rl
ZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRpYyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0
dGVybihjaGFyIF9fcHJlY2VlZHMsIGNoYXIgX19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVu
Y3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlu
dGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAg
ICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2Fu
ZHNfc2VwOwogICAgICBzdHJpbmcgX01fZ3JvdXBpbmc7CiAgICAgIHN0cmluZ190eXBlIF9NX2N1
cnJfc3ltYm9sOwogICAgICBzdHJpbmdfdHlwZSBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBzdHJp
bmdfdHlwZSBfTV9uZWdhdGl2ZV9zaWduOwogICAgICBpbnQgX01fZnJhY19kaWdpdHM7CiAgICAg
IHBhdHRlcm4gX01fcG9zX2Zvcm1hdDsKICAgICAgcGF0dGVybiBfTV9uZWdfZm9ybWF0OwoKICAg
IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChzaXplX3QgX19yZWZzID0g
MCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xv
Yywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICBk
ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGVjaW1hbF9wb2lu
dCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsgfQoKICAgICAgc3RyaW5nCiAgICAg
IGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ3JvdXBpbmcoKTsgfQoK
ICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBwb3Np
dGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9zaXRpdmVfc2lnbigp
OyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9CgogICAgICBpbnQKICAgICAgZnJh
Y19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19mcmFjX2RpZ2l0cygpOyB9
CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRlcm4KICAgICAgbmVnX2Zvcm1hdCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19mb3JtYXQoKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5jdCgpIHsgfQoKICAgICAgdmlydHVh
bCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Ro
b3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aG91c2FuZHNfc2VwOyB9Cgog
ICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2N1
cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vycl9zeW1ib2w7IH0KCiAgICAg
IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVfc2lnbigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK
ICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25lZ2F0aXZl
X3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2ZyYWNfZGlnaXRzKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAgIHZpcnR1YWwgcGF0dGVybgog
ICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9zX2Zvcm1hdDsg
fQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19mb3JtYXQoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFs
aXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgbG9jYWxlOjppZCBtb25leXB1
bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29s
IF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppbnRsOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICB2b2lkCiAgICBtb25l
eXB1bmN0PF9DaGFyVCwgX0ludGw+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2Fs
ZSApCiAgICB7CgogICAgfQoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNo
YXI+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1w
bGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlw
dW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21v
bmV5cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGludGwgPSBfSW50bDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVu
Y3RfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbW9u
ZXlwdW5jdDxfQ2hhclQsIF9JbnRsPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBfU19jcmVhdGVf
Y19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlwdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFs
aXplX21vbmV5cHVuY3QoX01fY19sb2NhbGVfbW9uZXlwdW5jdCk7CiAgICAgIH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3RfYnluYW1lKCkKICAgICAgeyBf
U19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5
cHVuY3RfYnluYW1lPF9DaGFyVCwgX0ludGw+OjppbnRsOwoKCiAgc3RydWN0IG1lc3NhZ2VzX2Jh
c2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1Ymxp
YyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2Fn
ZXMoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg
Y2F0YWxvZwogICAgICBvcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBs
b2NhbGUmIF9fbG9jKSBjb25zdAogICAgICB7IHJldHVybiBkb19vcGVuKF9fcywgX19sb2MpOyB9
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwgaW50
IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X2dldChfX2MsX19zZXQsX19tc2dpZCxfX3MpOyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNh
dGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiBkb19jbG9zZShfX2MpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygpIHsgfQoKCgogICAgICB2aXJ0
dWFsIGNhdGFsb2cKICAgICAgZG9fb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25z
dCBsb2NhbGUmKSBjb25zdAogICAgICB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu
Z190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCAsIGNvbnN0IHN0cmluZ190eXBl
JiBfX2RmYXVsdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1
YWwgdm9pZAogICAgICBkb19jbG9zZShjYXRhbG9nKSBjb25zdCB7IH0KICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZSA6
IHB1YmxpYyBtZXNzYWdlczxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFy
Kiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+bWVzc2FnZXNfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBtZXNzYWdl
c19ieW5hbWU8Y2hhcj46Om1lc3NhZ2VzX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVm
cyk7CgogIHRlbXBsYXRlPD4KICAgIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90Pjo6bWVzc2FnZXNf
YnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQgX19jLCBjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYykuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJUIF9fYywgY29uc3QgbG9j
YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp
LmlzKGN0eXBlX2Jhc2U6OnByaW50LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhj
dHlwZV9iYXNlOjpjbnRybCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf
YmFzZTo6dXBwZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wgaXNsb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6bG93
ZXIsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzYWxwaGEoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFscGhhLCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2RpZ2l0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwdW5j
dChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHVuY3QsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9D
aGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5
cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp4ZGlnaXQsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxudW0oX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmFsbnVtLCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCBfX2Ms
IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU
PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpncmFwaCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b3VwcGVyKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS50b3VwcGVyKF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG9sb3dlcihf
X2MpOyB9Cn0KIyAzNyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9p
dGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D
aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAg
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5
cGUgX01fZmlsbDsKICAgICAgaW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgog
ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAg
ICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUq
IF9NX2lvc19mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoK
ICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAg
IGlubGluZSBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9zKHZvaWQp
CiAgICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNf
aW9zKj4odGhpcyk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAg
ICAgcmRzdGF0ZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoK
ICAgICAgaW5saW5lIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCkK
ICAgICAgewogICAgICAgIGlmICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFtYnVm
X3N0YXRlID0gX19zdGF0ZTsKICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3Rh
dGUgPSBfX3N0YXRlIHwgYmFkYml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhp
cy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lv
czo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxp
bmUgdm9pZAogICAgICBzZXRzdGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xl
YXIodGhpcy0+cmRzdGF0ZSgpIHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAg
IGdvb2QoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAg
ICAgaW5saW5lIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJk
c3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJp
dCkpICE9IDA7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuICh0aGlzLT5yZHN0YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBp
b3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRp
b247IH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2Vw
dCkKICAgICAgewogICAgICAgIF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMt
PmNsZWFyKF9NX3N0cmVhbWJ1Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAg
ICBiYXNpY19pb3MoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9z
X2Jhc2UoKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg
fmJhc2ljX2lvcygpIHsgfQoKCiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qCiAgICAgIHRpZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAg
aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9
IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX3N0cmVhbWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qCiAgICAgIHJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBf
X3NiKTsKCiAgICAgIGJhc2ljX2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9f
cmhzKTsKCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2ZpbGw7IH0KCiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFy
X3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAg
ICAgICAgX01fZmlsbCA9IF9fY2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAg
ICAgbG9jYWxlCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgog
ICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBj
aGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAg
ICAgIGJhc2ljX2lvcygpIDogaW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAg
aW5pdChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29s
CiAgICAgIF9NX2NoZWNrX2ZhY2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAgICAgewog
ICAgICAgIGJvb2wgX19yZXQgPSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAgICAgX19y
ZXQgPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAg
ICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFj
ZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDEgMwojIDMzICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MudGNjIiAzCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KgogICAgYmFzaWNfaW9zPF9DaGFyVCwg
X1RyYWl0cz46OnJkYnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQog
ICAgewogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19vbGQgPSBfTV9z
dHJlYW1idWY7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIHRoaXMtPmNsZWFyKCk7
CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pb3M8X0NoYXJULCBfVHJhaXRzPjo6Y29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKQog
ICAgewoKCgoKICAgICAgX1dvcmRzKiBfX3dvcmRzID0gKF9fcmhzLl9NX3dvcmRfbGltaXQgPD0g
X1NfbG9jYWxfd29yZHMpID8KICAgICAgICBfTV93b3JkX2FycmF5IDogbmV3IF9Xb3Jkc1tfX3Jo
cy5fTV93b3JkX2xpbWl0XTsKIyA2MyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhz
Ll9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVy
ZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChf
TV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAg
ICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAg
ICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQog
ICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07CiAgICAgIGlmIChfTV93
b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAg
X01fd29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9s
aW1pdDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0
aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigp
KTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5m
aWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAg
ICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
Y2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19j
LCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+bmFycm93
KF9fYywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OndpZGVu
KGNoYXIgX19jKSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lkZW4oX19jKTsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9j
YWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9z
X2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAg
aWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShf
X2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1Ry
YWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7
CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9z
X2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbign
ICcpOwogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OwogICAgICBfTV9zdHJlYW1idWYgPSBf
X3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8gZ29vZGJpdCA6IGJhZGJpdDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
dm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2ZhY2V0cyhjb25z
dCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5cGVfdHlwZT4o
X19sb2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4o
X19sb2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xvYykpCiAgICAg
ICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpOwogICAgICBp
ZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtZ2V0ID0g
JnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICB9Cn0KIyAyMTQgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA0NyAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyA0MCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu
dF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJh
c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9z
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAg
ICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5
cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhw
bGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7
IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0o
KSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAo
Kl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikp
OwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsK
CiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6
YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBp
b3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJl
dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9Cgog
ICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24p
CiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9u
Zz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBf
X24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFn
cygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6
b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVy
YXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxz
ZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u
KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0
YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19v
c3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAo
KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBf
X29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsK
CiAgICBwcml2YXRlOgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0oY29u
c3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3RyZWFt
X3R5cGUmKTsKCiAgICB9OwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5
CiAgICB7CgogICAgICBib29sIF9NX29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh
aXRzPiYgX01fb3M7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFz
aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAgICAg
IHsKCiAgICAgICAgaWYgKF9NX29zLmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAhdW5j
YXVnaHRfZXhjZXB0aW9uKCkpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3MucmRi
dWYoKSAmJiBfTV9vcy5yZGJ1ZigpLT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAgX01f
b3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAg
IG9wZXJhdG9yIGJvb2woKQogICAgICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f
YykKICAgIHsgcmV0dXJuIChfX291dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2Mp
OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0
LCBzaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hh
cj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mIF9fb3V0LCB1bnNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0
aWNfY2FzdDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFy
VCogX19zKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRl
bXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg
Y2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JiBfX291dCwgY29uc3Qgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8
PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVyYXRv
cjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBj
aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBj
aGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19vcy5w
dXQoX19vcy53aWRlbignXG4nKSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVu
ZHMoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v
cy5wdXQoX0NoYXJUKCkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNoKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MuZmx1
c2goKTsgfQoKfQoKCgoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL29zdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2Mt
My4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDEgMwojIDQxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwoj
IDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2Vycm5vLmgiIDEgMwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAz
CiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8u
aCIgMiAzCiMgMzYgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIg
MSAzCiMgMjYgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCgojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIg
MwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNv
bnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoK
CiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAq
Y3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90
aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWdu
OwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBm
cmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNl
OwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAg
Y2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19w
cmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJl
Y2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2ln
bl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2Fs
ZS5oIiAzCn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVnb3J5LCBfX2Nv
bnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxjb252ICpsb2Nh
bGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDE0MiAiL3Vzci9pbmNsdWRlL2xvY2Fs
ZS5oIiAyIDMKCgoKCgoKCmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRl
Z29yeV9tYXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVf
dCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4g
dm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMg
MzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbG9jYWxlLmgi
IDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRs
b2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgNDUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv
bmZpZy5oIiAxIDMKIyA0NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYt
cGMtbGludXgtZ251L2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDEgMwojIDM4ICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Zsb2F0LmgiIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvZmxv
YXQuaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jZmxvYXQuaCIgMiAzCiMgNDcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9p
Njg2LXBjLWxpbnV4LWdudS9iaXRzL3N0ZF9saW1pdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkIHsK
CiAgICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxlIHsKICAgICAgICByb3VuZF9pbmRldGVybWluYXRl
ID0gLTEsCiAgICAgICAgcm91bmRfdG93YXJkX3plcm8gPSAwLAogICAgICAgIHJvdW5kX3RvX25l
YXJlc3QgPSAxLAogICAgICAgIHJvdW5kX3Rvd2FyZF9pbmZpbml0eSA9IDIsCiAgICAgICAgcm91
bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICAgIH07CgogICAgZW51bSBmbG9hdF9kZW5vcm1f
c3R5bGUgewogICAgICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICAgICAgZGVub3Jt
X2Fic2VudCA9IDAsCiAgICAgICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgICB9OwoKICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IG51bWVyaWNfbGltaXRzIHsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIG1p
bigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICAgIHN0YXRp
YyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHJhZGl4ID0gMDsKCiAgICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJv
cigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgX1RwIGlu
ZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgICAg
c3RhdGljIF9UcCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4o
MCk7IH0KICAgICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0dXJu
IHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0
aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
Ym91bmRlZCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19pbmZpbml0eSgp
OwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19saW1pdHNfcXVpZXRfTmFOKCk7CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19zaWduYWxpbmdfTmFOKCk7CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBfX2xpbWl0c19kZW5vcm1fbWluKCk7CgogICAg
dGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4gewogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGJvb2wgbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgc3RhdGljIGJvb2wg
bWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSA4OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAy
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KICAgICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICAgIHN0YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KDApOyB9CiAgICAgICAg
c3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxib29sPigwKTsgfQogICAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4oMCk7IH0KCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+IHsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAgIHN0
YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAoLTEyOCk7IH0KICAgICAg
ICBzdGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjaGFyIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGljIGNoYXIg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KDAp
OyB9CiAgICAgICAgc3RhdGljIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyBjaGFyIGRlbm9y
bV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8c2lnbmVkIGNoYXI+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl
ZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gKC0xMjgpOyB9CiAgICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSA3OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhh
Y3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0
YXRpYyBzaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7IH0K
ICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgICAgc3RhdGlj
IHNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hh
cj4oMCk7IH0KICAgICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf
emVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgY2hhcj4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gMjU1OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
ODsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CiAgICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1f
YWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDAp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8d2NoYXJfdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk
ID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuICgtMjE0NzQ4MzY0N2wgLSAxbCk7IH0KICAgICAgICBzdGF0aWMgd2NoYXJfdCBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdsKTsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICAgIHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8d2NoYXJfdD4oMCk7IH0KICAgICAgICBzdGF0aWMg
d2NoYXJfdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
d2NoYXJfdD4oMCk7IH0KICAgICAgICBzdGF0aWMgd2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhy
b3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHdjaGFyX3Q+KDApOyB9CiAgICAgICAg
c3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDx3Y2hhcl90PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRp
bnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0
ZTw+IHN0cnVjdCBudW1lcmljX2xpbWl0czxzaG9ydD4gewogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAoLTMyNzY3LTEpOyB9CiAgICAgICAgc3RhdGljIHNob3J0
IG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg
PSA0OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7
CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5v
cm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8c2hvcnQ+KDApOyB9CiAgICAgICAgc3RhdGljIHNob3J0IHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0K
ICAgICAgICBzdGF0aWMgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0KICAgICAgICBzdGF0aWMgc2hvcnQgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaG9ydD4oMCk7IH0K
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgo
KSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gNjU1MzU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSAxNjsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg
ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5n
X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4o
MCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRl
bXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4gewogICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGludCBtaW4oKSB0
aHJvdygpCiAgICAgICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3LTEpOyB9CiAgICAgICAgc3RhdGlj
IGludCBtYXgoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0NzsgfQoKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSA5OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g
PSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9
IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgcXVpZXRf
TmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAg
ICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICAgIHN0YXRpYyBpbnQgZGVub3JtX21pbigpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQg
aW50PiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgICAg
eyByZXR1cm4gKDIxNDc0ODM2NDcgKiAyVSArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVy
biAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+
KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
cHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBudW1lcmlj
X2xpbWl0czxsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQg
PSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gKC0yMTQ3NDgzNjQ3TC0xKTsgfQogICAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkK
ICAgICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDMxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg
IHN0YXRpYyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICAgIHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
ICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp
CiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAg
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNl
OwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwoKICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+IHsK
ICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9
CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuICgyMTQ3NDgzNjQ3TCAqIDJVTCArIDEpOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMzI7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
ZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4g
MDsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQog
ICAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25l
bnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0g
ZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xv
c3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAg
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVl
OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRf
c3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgogICAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPiB7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0aWMgbG9uZyBsb25nIG1pbigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKTsgfQogICAgICAg
IHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDkyMjMzNzIw
MzY4NTQ3NzU4MDdMTDsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwog
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgICBzdGF0aWMgbG9uZyBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0YXRp
YyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg
PSAwOwoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBz
dGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9
CiAgICAgICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9u
ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPigwKTsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv
dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAgIHRlbXBsYXRlPD4gc3Ry
dWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuICg5
MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMgPSA2NDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAwOyB9CiAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAwOyB9CgogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gMDsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n
IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg
cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oMCk7IH0KICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPigwKTsgfQogICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3Jt
X21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KDApOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBu
dW1lcmljX2xpbWl0czxmbG9hdD4gewogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgbWF4KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuNDAyODIzNDdlKzM4RjsgfQoKICAgICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSA3OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp
eCA9IDI7CiAgICAgICAgc3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgICAgeyBy
ZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHJvdW5kX2Vycm9y
KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMGY7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4
cG9uZW50MTAgPSAtMzc7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAx
Mjg7CiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgZmxvYXQg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KDAp
OyB9CiAgICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KICAgICAgICBzdGF0aWMgZmxvYXQgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7
IH0KICAgICAgICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9
IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0
X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICAg
IHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4gewogICAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgICAgc3RhdGljIGRvdWJs
ZSBtaW4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7
IH0KICAgICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgICB7IHJldHVybiAx
Ljc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0
cyA9IDUzOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0
YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiAyLjIyMDQ0NjA0
OTI1MDMxMzFlLTE2OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93
KCkKICAgICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAtMTAyMTsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEw
ID0gLTMwNzsKICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEwMjQ7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgICAgc3RhdGljIGRvdWJsZSBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDApOyB9
CiAgICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPigwKTsgfQogICAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFs
aW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK
ICAgIHRlbXBsYXRlPD4gc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPiB7CiAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgICBzdGF0
aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQz
MTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1heCgpIHRo
cm93KCkKICAgICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQog
ICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgICB7
IHJldHVybiAxLjBMOyB9CgogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g
LTE2MzgxOwogICAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsK
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDE2Mzg0OwogICAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl
IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgaW5maW5p
dHkoKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBkb3VibGU+KDAp
OyB9CiAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxsb25nIGRvdWJsZT4oMCk7IH0KICAgICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGRvdWJs
ZT4oMCk7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKfQojIDM5ICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRl
ci5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9j
YWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgNDIgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2
MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1MCAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewogIGNsYXNzIHR5cGVf
aW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9pbmZvKCk7CgogIHByaXZh
dGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9pbmZvJik7CiAgICB0eXBl
X2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAgIGNvbnN0IGNoYXIgKl9f
bmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZvKGNvbnN0IGNoYXIgKl9f
bik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgogICAgY29uc3QgY2hhciogbmFtZSgpIGNv
bnN0CiAgICB7IHJldHVybiBfX25hbWU7IH0KIyA4NiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9f
YXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9f
bmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9p
bmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAg
cHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZp
cnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJv
b2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9v
YmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsK
CgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3Nf
dHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoq
X19vYmpfcHRyKSBjb25zdDsKICB9OwoKICBjbGFzcyBiYWRfY2FzdCA6IHB1YmxpYyBleGNlcHRp
b24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+
YmFkX2Nhc3QoKSB0aHJvdygpOwogIH07CgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMgZXhj
ZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAgIHZp
cnR1YWwgfmJhZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv
dXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDEgMwoj
IDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgi
IDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhj
ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBf
X3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Mo
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5n
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIq
IF9fcyk7Cn0KIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDM1ICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgMzYgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQu
aCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92
ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3ZlY3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0
ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNl
cHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2
b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyAzNiAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr
LmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dmVjdG9yLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNDggIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0
b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf
TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h
bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu
ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy
biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl
KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k
ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl
PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9
CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl
ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0
b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+
OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p
CiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh
bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh
dGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry
dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg
X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf
QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz
ZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog
ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7
CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf
YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0
b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxs
b2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNl
OwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5
cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFs
X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9y
bWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsK
ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5
cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl
ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjph
bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK
cHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01f
ZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zp
bmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9p
ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2
b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg
fQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz
aCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9p
dGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0
CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2Vf
aXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9
CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAog
ICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4
X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9
CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25z
dF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHko
KSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3Bl
cmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29u
c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi
ZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv
bnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9y
YW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsg
X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVy
ZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyBy
ZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3Jf
dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0
b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2Ep
CiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9f
dmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShf
X24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls
bF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigp
KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5l
bmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
dmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jh
c2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y
Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9f
bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv
aWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3Ry
dWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m
aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19m
YWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9N
X3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj
b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg
X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUg
X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu
ZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs
IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y
YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2gg
PSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg
KyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0
IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2Zp
bGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9k
aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlw
ZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAg
dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf
SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz
aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5j
ZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkg
Y29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICoo
ZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihl
bmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAo
X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p
c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl
cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9m
aW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVu
ZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3Rk
Ojpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwg
X194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l
bmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn
aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv
biA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N
X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bv
c2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBp
bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRp
b24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBf
X3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICAr
K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf
X3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK
ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlz
cGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f
cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg
ewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBz
aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3Ms
IF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1f
TV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0
ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAg
ICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5p
c2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAg
aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBp
dGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9f
aSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3Qp
OwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf
c2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAg
ICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNl
cnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNp
emVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lk
IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w
eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog
ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9f
cmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9p
dGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAg
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2Nh
dGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl
cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog
IHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7
CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwg
X0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh
dG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1
cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29u
c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf
X3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz
cyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRv
cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykg
ewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVu
ID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv
cHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFy
dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0
b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9v
Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkg
Pj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k
KCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug
ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp
OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo
KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0
b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf
X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs
KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp
bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz
ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f
Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg
ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g
PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBj
YXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVu
LCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg
ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK
ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9
IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAg
aXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwog
ICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp
bmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJz
dDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf
TV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFz
dCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K
dm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp
b24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N
X2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwog
ICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5
cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk
X3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0
KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3Rh
cnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0
ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5i
YXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1
bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg
ICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVh
bGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJv
eShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog
ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdl
ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn
ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N
X2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo
IC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpf
X3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xk
X3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9
IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxs
b2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAg
IHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf
TV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr
K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
cG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0
cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs
X19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9N
X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmls
bF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24g
IT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkg
Pj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBl
IF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xk
X2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAg
ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmlu
aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19w
b3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwo
X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVs
c2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVt
c19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2Fm
dGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gs
IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQog
ICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg
ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9f
bik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAg
IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAg
X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9f
bmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf
X25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0g
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAg
ICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg
ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f
bmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsK
ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAg
IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu
c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAr
K19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y
YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt
IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy
ID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmlu
aXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxp
emVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAg
X01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xk
X2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRl
cik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7
CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0
aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg
ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlk
LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf
X29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0
YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l
d19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl
ZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAg
ICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0
aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNh
dGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9j
YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3ko
X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu
ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJh
c2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5k
X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0K
IyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5o
IiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZl
Y3Rvci5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBjb25zdCBpbnQgX19XT1JE
X0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVjdCBfQml0X3JlZmVyZW5j
ZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBfTV9tYXNrOwogIF9CaXRf
cmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9w
KF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkgOiBfTV9w
KDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEoISgq
X01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0oYm9vbCBfX3gp
CiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVsc2UgKl9NX3AgJj0gfl9N
X21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVyYXRvcj0o
Y29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0aGlzID0gYm9vbChfX3gp
OyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpIGNvbnN0CiAg
ICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPChj
b25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gIWJvb2woKnRoaXMp
ICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBePSBfTV9tYXNrOyB9Cn07
CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0JpdF9yZWZlcmVuY2UgX195
KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195ID0gX190bXA7Cn0KCnN0
cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcjxi
b29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAgdW5zaWduZWQgaW50IF9N
X29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25l
ZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kpIHt9CgogIHZvaWQgX01f
YnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRfQklUIC0gMSkgewogICAg
ICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01fYnVtcF9k
b3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0ID0gX19X
T1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZvaWQgX01faW5jcihwdHJk
aWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19pICsgX01fb2Zmc2V0Owog
ICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19uICUgX19XT1JEX0JJVDsK
ICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbiAr
IF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAgICBfTV9vZmZzZXQgPSAo
dW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0oY29uc3QgX0JpdF9pdGVy
YXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09IF9faS5fTV9wICYmIF9N
X29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJhdG9yPChjb25zdCBfQml0
X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9NX3AgPCBfX2kuX01fcCB8
fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01fb2Zmc2V0KTsKICB9CiAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAg
ICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJhdG9yPihjb25zdCBfQml0
X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9faSA8ICp0aGlzOwogIH0K
ICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsK
ICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9C
aXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA8IF9faSk7
CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3QgX0JpdF9pdGVyYXRvcl9i
YXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7CiAgcmV0dXJuIF9fV09S
RF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zmc2V0IC0gX195Ll9NX29m
ZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFz
ZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgdHlwZWRlZiBfQml0X3Jl
ZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CgogIF9C
aXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfaXRlcmF0
b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0
b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0
dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJh
dG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01f
YnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItLSgp
IHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBv
cGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBf
ZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3IrPShkaWZm
ZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlz
ICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKyhkaWZm
ZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAg
cmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2Vf
dHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4g
X190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBl
IF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGluZSBfQml0X2l0ZXJhdG9y
Cm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0
dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJhdG9yIDogcHVibGljIF9C
aXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5jZTsKICB0eXBlZGVmIGJv
b2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCogcG9pbnRlcjsKICB0eXBl
ZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogIF9CaXRfY29uc3RfaXRl
cmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9CaXRfY29uc3RfaXRlcmF0
b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9CaXRfaXRlcmF0
b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9yKGNvbnN0IF9CaXRfaXRl
cmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9wLCBfX3guX01fb2Zm
c2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgcmV0dXJu
IF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAgfQogIGNvbnN0X2l0ZXJh
dG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3RfaXRlcmF0b3Ig
X190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAg
Y29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGNv
bnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVyZW5jZV90eXBl
IF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9p
dGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAqdGhpcyArPSAt
X19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisoZGlm
ZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhp
czsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9y
LShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9
ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVmZXJlbmNlIG9w
ZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRoaXMgKyBfX2kp
OwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3Qg
X19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsg
fQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0YXRpYz4KY2xh
c3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxv
Y190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1
cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgp
LCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3RlZDoKICB1bnNp
Z25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX01fZGF0YV9h
bGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUKTsgfQog
IHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQogICAgICBfTV9k
YXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9
CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBfQWxsb2NhdG9yPjo6YWxs
b2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRlcmF0b3Ig
X01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBfTV9l
bmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvcj4KY2xhc3MgX0J2
ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAg
ICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg
Y29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZlY3Rvcl9hbGxvY19iYXNl
KGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwgX01fZmluaXNoKCksIF9N
X2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxs
b2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxvY190eXBlCiAgICAgICAg
ICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikK
ICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsgX19XT1JEX0JJVCAtIDEp
L19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewogICAgaWYgKF9NX3N0YXJ0
Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQuX01f
cCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRfaXRlcmF0b3IgX01fZmlu
aXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX0J2ZWN0b3JfYWxsb2Nf
YmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX0J2ZWN0b3JfYWxs
b2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFp
dHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CnB1Ymxp
YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlw
ZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9f
YSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxsb2NhdGUoKTsgfQp9OwoK
fQoKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAxIDMKIyAzMTggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9idmVjdG9yLmgiIDIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDx0eXBlbmFtZSBfQWxs
b2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1ZV90eXBlOwogICAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB0eXBlZGVmIGJv
b2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsK
ICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAgICB0eXBlZGVmIF9CaXRf
aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJh
dG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFz
ZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90
eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNl
PF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46
Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAg
ICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90
ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICB1bnNp
Z25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFn
ZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgX01fc3Rh
cnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZl
cmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRf
b2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNo
LCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19N
X2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBz
aXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9f
cSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdp
bigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7
CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAg
ICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19s
ZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJh
dG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9N
X2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygq
X19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gMDsKICAgICAgZGlzdGFuY2Uo
X19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNv
cHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90
YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAg
ICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAg
ICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lk
IF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlm
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICAg
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgICBpZiAoY2FwYWNpdHkoKSAt
IHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5k
KCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICAgIGNvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2ZpbmlzaCArPSBkaWZmZXJl
bmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBzaXplX3R5
cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAgICAgICAgdW5zaWduZWQg
aW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAgaXRlcmF0b3IgX19pID0g
Y29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAgIF9f
aSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAgX01fZmluaXNoID0gY29w
eShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAg
ICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX19XT1JEX0JJVCAtIDEp
L19fV09SRF9CSVQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAg
ICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
X01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX2ZpbmlzaDsgfQogICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmluaXNoOyB9CgogICAgcmV2
ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsg
fQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7CiAgICAgIHJldHVy
biBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAgIHJldmVyc2VfaXRlcmF0
b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KICAgIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7
IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAgc2l6ZV90eXBlIG1heF9z
aXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAgc2l6ZV90eXBlIGNhcGFj
aXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2Vu
ZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVuY2Ugb3BlcmF0b3JbXShz
aXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIGNv
bnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQoK
ICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29uc3QgewogICAgICBpZiAo
X19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X3JhbmdlX2Vycm9yKCJ2ZWN0b3I8
Ym9vbD4iKTsKICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgICAgeyBf
TV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgICBjb25zdF9yZWZl
cmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24p
OyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFsbG9j
YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8
X0FsbG9jPihfX2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24sIGJvb2wgX192YWx1ZSwK
ICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAgewogICAgICBfTV9pbml0
aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2Us
IF9fdmFsdWUgPyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUg
X19uKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0b3JfdHlwZSgpKQogICAg
ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f
ZW5kX29mX3N0b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkg
OiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3IoKSkgewogICAgICBfTV9p
bml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCks
IF9NX3N0YXJ0KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZv
aWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwgX190
cnVlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0
Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAgfQoKICAgIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRj
aChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxp
emVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsK
ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2ZWN0b3IoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2
ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNf
aW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2lu
aXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9Cgog
ICAgfnZlY3RvcigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvciYgX194
KSB7CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsKICAgICAgaWYgKF9feC5z
aXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9N
X2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29weShfX3guYmVnaW4oKSwg
X194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0gYmVnaW4oKSArIGRpZmZlcmVu
Y2VfdHlwZShfX3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgoKCgogICAg
dm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkgewogICAgICBpZiAoX19u
ID4gc2l6ZSgpKSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFn
ZSwgX194ID8gfjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbiAtIHNpemUoKSwgX194
KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdpbigpICsgX19uLCBlbmQo
KSk7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8g
fjAgOiAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNpemVfdCBfX24sIGJvb2wg
X194KSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2Vy
PF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rp
c3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2VyIF9f
biwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9NX2ZpbGxfYXNzaWduKChz
aXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJz
dCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9fY3VyID0gYmVnaW4oKTsK
ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAhPSBlbmQoKTsgKytfX2N1
ciwgKytfX2ZpcnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsKICAgICAgZWxzZQogICAg
ICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IDA7
CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogICAgICBpZiAoX19sZW4g
PCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkpLCBl
bmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2Zp
cnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2ZpcnN0
LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0KTsK
ICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIGlm
IChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRf
YWxsb2MoX19uKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVy
YXRvcihfX3EsIDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQg
PSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f
biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICB9CiAgICB9CgogICAgcmVmZXJl
bmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBmcm9u
dCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsgcmV0
dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAgICAg
IGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01fZmlu
aXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBfX3gp
OwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAgICAg
c3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01fZmlu
aXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdlLCBf
X3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRpZmZlcmVuY2VfdHlwZSBf
X24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9N
X2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAgICAgICAgKl9NX2Zpbmlz
aCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0aW9uLCBf
X3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxj
bGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9z
LCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24sIF9feCk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNl
cnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5zZXJ0X3JhbmdlKF9f
cG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgaW5zZXJ0KGl0
ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50
ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2Vy
dF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
IH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw
ZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0dXJuOwogICAgICBpZiAo
Y2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9z
aXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7CiAgICAgICAg
ZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90eXBlKF9fbiksIF9feCk7
CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICB9CiAgICAg
IGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9f
bik7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAg
ICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19x
LCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9
IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg
ICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAo
X19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBfTV9zdGFydCA9IGl0
ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAgICBfTV9maWxsX2luc2Vy
dChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBwb3BfYmFjaygpIHsgLS1f
TV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAg
ICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNvcHkoX19wb3NpdGlvbiAr
IDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2ZpbmlzaDsKICAgICAgcmV0dXJu
IF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBp
dGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShfX2xhc3QsIGVuZCgpLCBf
X2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2b2lkIHJlc2l6ZShzaXpl
X3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgaWYgKF9fbmV3X3Np
emUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX25l
d19zaXplKSwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX25ld19z
aXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkgewogICAgICBmb3IgKHVu
c2lnbmVkIGludCogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdl
OyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsg
ZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBhbGxv
Yz4gYml0X3ZlY3RvcjsKCn0KIyAzOSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0NCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNv
bnN0IGxvY2FsZSYgX19vdGhlcikKICAgIHsKICAgICAgbG9jYWxlIF9fY29weSgqdGhpcyk7CiAg
ICAgIF9fY29weS5fTV9pbXBsLT5fTV9yZXBsYWNlX2ZhY2V0KF9fb3RoZXIuX01faW1wbCwgJl9G
YWNldDo6aWQpOwogICAgICByZXR1cm4gX19jb3B5OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAg
IGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg
c3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAgICAgIGNvbnN0IF9fY29sbGF0
ZV90eXBlKiBfX2Zjb2xsID0gJnVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAg
ICByZXR1cm4gKF9fZmNvbGwtPmNvbXBhcmUoX19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19z
MS5sZW5ndGgoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fczIuZGF0YSgpLCBf
X3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgewogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9f
dmVjX2ZhY2V0OwogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAg
X192ZWNfZmFjZXQqIF9fZmFjZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGNv
bnN0IGxvY2FsZTo6ZmFjZXQqIF9fZnAgPSAoKl9fZmFjZXQpW19faV07CiAgICAgIGlmIChfX2Zw
ID09IDAgfHwgX19pID49IF9fZmFjZXQtPnNpemUoKSkKICAgICAgICBfX3Rocm93X2JhZF9jYXN0
KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mcCk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25z
dCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHR5cGVkZWYgbG9jYWxlOjpfSW1w
bDo6X192ZWNfZmFjZXQgX192ZWNfZmFjZXQ7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6Omlk
Ll9NX2luZGV4OwogICAgICBfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9N
X2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2ZhY2V0LT5zaXplKCkgJiYgKCpfX2ZhY2V0
KVtfX2ldICE9IDApOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0
eXBlbmFtZSBfQ2hhclQ+CiAgICBfSW5JdGVyCiAgICBfX21hdGNoX3BhcmFsbGVsKF9Jbkl0ZXIg
X19zLCBfSW5JdGVyIF9fZW5kLCBpbnQgX19udGFyZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+KiBfX3RhcmdldHMsCiAgICAgICAgICAgICAgICAgICAg
IGludCogX19tYXRjaGVzLCBpbnQmIF9fcmVtYWluLCBib29sJiBfX2VvZikKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwogICAgICBfX2VvZiA9
IGZhbHNlOwogICAgICBmb3IgKGludCBfX3RpID0gMDsgX190aSA8IF9fbnRhcmdzOyArK19fdGkp
CiAgICAgICAgX19tYXRjaGVzW19fdGldID0gX190aTsKICAgICAgX19yZW1haW4gPSBfX250YXJn
czsKICAgICAgc2l6ZV90IF9fcG9zID0gMDsKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBp
bnQgX190aSA9IDA7CiAgICAgICAgICB3aGlsZSAoX190aSA8IF9fcmVtYWluICYmIF9fcG9zID09
IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aV1dLnNpemUoKSkKICAgICAgICAgICAgKytfX3RpOwog
ICAgICAgICAgaWYgKF9fdGkgPT0gX19yZW1haW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpZiAoX19wb3MgPT0gMCkgX19yZW1haW4gPSAwOwogICAgICAgICAgICAgIHJldHVybiBfX3M7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3MgPT0gX19lbmQpCiAgICAgICAgICAgIF9f
ZW9mID0gdHJ1ZTsKICAgICAgICAgIGJvb2wgX19tYXRjaGVkID0gZmFsc2U7CiAgICAgICAgICBm
b3IgKGludCBfX3RpMiA9IDA7IF9fdGkyIDwgX19yZW1haW47ICkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fdGFyZ2V0ID0gX190YXJnZXRzW19fbWF0
Y2hlc1tfX3RpMl1dOwogICAgICAgICAgICAgIGlmIChfX3BvcyA8IF9fdGFyZ2V0LnNpemUoKSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fZW9mIHx8IF9fdGFyZ2V0
W19fcG9zXSAhPSAqX19zKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgIF9fbWF0Y2hlc1tfX3RpMl0gPSBfX21hdGNoZXNbLS1fX3JlbWFpbl07CiAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIF9fbWF0Y2hlZCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytf
X3RpMjsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbWF0Y2hlZCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGZvciAoaW50IF9fdGkzID0gMDsgX190aTMgPCBfX3JlbWFpbjspCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MgPiBfX3RhcmdldHNbX19tYXRjaGVzW19f
dGkzXV0uc2l6ZSgpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21hdGNo
ZXNbX190aTNdID0gX19tYXRjaGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICArK19fdGkzOwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB3aGlsZSAoX19yZW1haW4pOwogICAgICByZXR1cm4gX19zOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFy
VD46Ol9Gb3JtYXRfY2FjaGUoKQogICAgOiBfTV92YWxpZCh0cnVlKSwgX01fdXNlX2dyb3VwaW5n
KGZhbHNlKQogICAgeyB9CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8Y2hhcj46Ol9G
b3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8PgogICAgX0Zvcm1hdF9jYWNoZTx3Y2hhcl90Pjo6
X0Zvcm1hdF9jYWNoZSgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAg
ICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9NX3BvcHVsYXRlKGlvc19iYXNlJiBfX2lvKQogICAg
ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYyAoKTsKICAgICAgbnVtcHVuY3Q8X0No
YXJUPiBjb25zdCYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBfTV90cnVlbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgX01fZmFsc2VuYW1lID0g
X19ucC5mYWxzZW5hbWUoKTsKICAgICAgX01fdGhvdXNhbmRzX3NlcCA9IF9fbnAudGhvdXNhbmRz
X3NlcCgpOwogICAgICBfTV9kZWNpbWFsX3BvaW50ID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CiAg
ICAgIF9NX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBfTV91c2VfZ3JvdXBpbmcg
PSBfTV9ncm91cGluZy5zaXplKCkgIT0gMCAmJiBfTV9ncm91cGluZy5kYXRhKClbMF0gIT0gMDsK
ICAgICAgX01fdmFsaWQgPSB0cnVlOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIHZvaWQKICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6CiAgICBfU19jYWxsYmFjayhp
b3NfYmFzZTo6ZXZlbnQgX19ldiwgaW9zX2Jhc2UmIF9faW9zLCBpbnQgX19peCkgdGhyb3coKQog
ICAgewogICAgICB2b2lkKiYgX19wID0gX19pb3MucHdvcmQoX19peCk7CiAgICAgIHN3aXRjaCAo
X19ldikKICAgICAgICB7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6ZXJhc2VfZXZlbnQ6CiAgICAg
ICAgICBkZWxldGUgc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAg
ICAgICAgIF9fcCA9IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjpj
b3B5Zm10X2V2ZW50OgoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcCA9IG5ldyBfRm9y
bWF0X2NhY2hlPF9DaGFyVD47IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9
CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIGlvc19iYXNlOjppbWJ1ZV9ldmVudDoKICAg
ICAgICAgIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCktPl9NX3ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIF9Gb3JtYXRfY2FjaGU8X0NoYXJUPioKICAgIF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPjo6X1NfZ2V0KGlvc19iYXNlJiBfX2lvcykKICAgIHsKICAgICAgaWYgKCFfU19w
d29yZF9peCkKICAgICAgICBfU19wd29yZF9peCA9IGlvc19iYXNlOjp4YWxsb2MoKTsKICAgICAg
dm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9TX3B3b3JkX2l4KTsKCgogICAgICBpZiAoX19wID09
IDApCiAgICAgICAgewogICAgICAgICAgYXV0b19wdHI8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+ID4g
X19hcChuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KTsKICAgICAgICAgIF9faW9zLnJlZ2lzdGVy
X2NhbGxiYWNrKCZfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2NhbGxiYWNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1NfcHdvcmRfaXgpOwogICAgICAgICAgX19wID0gX19h
cC5yZWxlYXNlKCk7CiAgICAgICAgfQogICAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fbmNw
ID0gc3RhdGljX2Nhc3Q8X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Kj4oX19wKTsKICAgICAgaWYgKCFf
X25jcC0+X01fdmFsaWQpCiAgICAgICAgX19uY3AtPl9NX3BvcHVsYXRlKF9faW9zKTsKCiAgICAg
IHJldHVybiBfX25jcDsKICAgIH0KIyAyNTAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIF9NX2V4dHJhY3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYg
LCBib29sICkgY29uc3QKICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51
bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3Qo
aXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAg
ICAgICAgICAgYm9vbCBfX2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl
cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikg
Y29uc3QKICAgIHsKCiAgICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxw
aGEpKQogICAgICAgIHsKCgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsK
ICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgICAgIGNoYXIqIF9f
c2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgICAgICBs
b25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgJiYgX19sIDw9IDEK
ICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg
JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgICAgICBfX3YgPSBfX2w7CiAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2Nh
Y2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAgICAgICAgIF9fZmNhY2hlX3R5cGUqIF9f
Zm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8pOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9mYWxzZW5hbWUuY19zdHIoKTsKICAgICAg
ICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX190cnVl
KSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6
Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19wb3MgPSAwOyBf
X2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJf
dHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYgPSBfX2MgPT0g
X19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1
ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19mYWxzZWxlbikKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9
PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDE7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNb
MzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf
X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19s
ID0gc3RydG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpf
X3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAg
JiYgX19sID49ICgtMzI3NjctMSkgJiYgX19sIDw9IDMyNzY3KQogICAgICAgIF9fdiA9IHN0YXRp
Y19jYXN0PHNob3J0PihfX2wpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJU
LCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgaW50
JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjWzMyXSA9IHsnXDAnfTsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJj
LCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg
JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3
NDgzNjQ3IC0xKSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz
dDxpbnQ+KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192
KSBjb25zdAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50
IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z
YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg
ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQog
ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAg
ICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4
dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsK
CgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7
CiAgICAgIGxvbmcgbG9uZyBfX2xsID0gc3RydG9sbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNl
KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f
c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID09IDApCiAgICAgICAgX192ID0gX19sbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewoKCgogICAgICBjaGFy
IF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAg
IGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAg
dW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsK
ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2Fu
aXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJj
WzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf
X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog
X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25l
ZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0g
X194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g
MAogICAgICAgICAgJiYgX191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAg
ICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hh
ciBfX3h0cmNbMzJdID0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAg
ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg
ICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2Up
OwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19z
YW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlv
biAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX3VsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRl
cl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewoKCgogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg
ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJjLCAmX19zYW5pdHks
IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAgICBlbHNlCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIg
X194dHJjWzMyXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBm
bG9hdCBfX2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2Vy
ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg
ICBfX3YgPSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0
ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9f
dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UsIHRydWUpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgZG91YmxlIF9fZCA9IHN0cnRvZChfX3h0cmMsICZf
X3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fZDsKICAgICAgZWxzZQogICAgICAg
IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewoKCgogICAgICBj
aGFyIF9feHRyY1szMl09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAg
ICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg
ICBsb25nIGRvdWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMsICZfX3Nhbml0eSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf
X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw
KQogICAgICAgIF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KIyA2NzggIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6
Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwog
ICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6
OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVy
Y2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2Zt
dG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwoKCgoKICAgICAg
Y2hhciBfX3h0cmNbMzJdPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJh
Y3QoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgog
ICAgICBjaGFyKiBfX3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAg
ICAgIHZvaWQqIF9fdnAgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywg
Jl9fc2FuaXR5LCBfX2Jhc2UpKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAm
JiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxh
Z3MoX19mbXQpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19w
YWQoX091dEl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9f
cGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQgX19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmls
bCk7CiAgICAgIHJldHVybiBfX3MgKyBfX3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0
ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywg
X1RhZykKICAgIHsKICAgICAgd2hpbGUgKC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmls
bDsgKytfX3M7IH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFk
KF9PdXRJdGVyIF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAg
cmV0dXJuIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsK
ICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBfT3V0SXRlcgogICAgX19wYWRfbnVtZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRm
bGFncyAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAg
IF9DaGFyVCBjb25zdCogLCBfQ2hhclQgY29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJU
IGNvbnN0KiApCiAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251
bWVyaWMob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdz
IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBf
Q2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19t
aWRkbGUsIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiBfX291dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193
aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAg
ICAgX19wYWRkaW5nID0gMDsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19m
bGFncyAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9f
cGFkZGluZyA9PSAwIHx8IF9fYWZsYWdzID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYg
KF9fZmlyc3QgIT0gX19taWRkbGUpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVs
ZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRp
bmcpOwogICAgICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVy
IF9fczIgPSBfX3M7CgogICAgICBpZiAoX19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNl
OjpsZWZ0KQogICAgICAgIHsKICAgICAgICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5n
KTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9f
czMgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQog
ICAgICAgIF9fcGFkKF9fczMsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7
CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
Y29uc3QKICAgIHsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9G
b3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNl
Ojpib29sYWxwaGEpID09IDApCiAgICAgICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2
ID0gX192OwogICAgICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2Zp
bGwsIGZhbHNlLCBfX3V2KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fZmlyc3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
bGFzdDsKICAgICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zp
cnN0ID0gX19mbXQtPl9NX3RydWVuYW1lLmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBf
X2ZpcnN0ICsgX19mbXQtPl9NX3RydWVuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9m
YWxzZW5hbWUuZGF0YSgpOwogICAgICAgICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+
X01fZmFsc2VuYW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fcyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRz
KF9DaGFyVCogX19zLCBfQ2hhclQgX19ncnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAg
ICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAg
IGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gKl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAg
X19zID0gX19ncm91cF9kaWdpdHMoX19zLCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3Vw
aW5nICsgMSA9PSBfX2dyZW5kID8gX19ncm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAg
ICAgICAgICBfX2dyZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAg
ICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dy
c2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19m
aXJzdCsrOwogICAgICAgIH0KICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAg
cmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXIsIHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50
ZWdlcihfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9f
bmVnLAogICAgICAgICAgICAgIF9WYWx1ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBf
TV9yb29tID0gbnVtZXJpY19saW1pdHM8X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAg
IF9DaGFyVCBfX2RpZ2l0c1tfTV9yb29tXTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdp
dHMgKyBfTV9yb29tOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxh
Z3MoKTsKICAgICAgY29uc3QgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRf
Y2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9faW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0g
X19mbXQtPl9TX2xpdGVyYWxzICsgX19mbXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpm
bXRmbGFncyBfX2Jhc2VmaWVsZCA9IChfX2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBf
Q2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zyb250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9z
X2Jhc2U6OmhleCkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1
cHBlcmNhc2UpCiAgICAgICAgICAgIF9fdGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAg
ICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9f
diA+Pj0gNCkgIT0gMCk7CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAg
IGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAg
ICAgICAgICAgICAgICAgICAgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDog
MCldOwogICAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQog
ICAgICAgIHsKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19f
diAmIDddOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYg
KF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2Fz
dDxjaGFyPigqX19mcm9udCkgIT0gX190YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9
IF9fdGFibGVbMF07CiAgICAgICAgICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9
IF9fdGFibGVbX192ICUgMTBdOwogICAgICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwog
ICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChf
X2ZsYWdzICYgaW9zX2Jhc2U6OnNob3dwb3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19m
bXQtPl9TX2xpdGVyYWxzW19fZm10LT5fU19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAg
ICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICBy
ZXR1cm4gY29weShfX2Zyb250LCBfX2RpZ2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAo
IV9fZm10LT5fTV91c2VfZ3JvdXBpbmcpCiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19z
LCBfX2ZsYWdzLCBfX2ZpbGwsIF9faW8ud2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19mcm9udCwgX19zaWduX2VuZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9D
aGFyVCogX19wID0gX19kaWdpdHM7CiAgICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkK
ICAgICAgICAqX19wKysgPSAqX19mcm9udCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19m
bXQtPl9NX2dyb3VwaW5nLmRhdGEoKTsKICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9f
cCwgX19mbXQtPl9NX3Rob3VzYW5kc19zZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5f
TV9ncm91cGluZy5zaXplKCksIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAg
IHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDAp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAg
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf
T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25z
dAogICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcg
PSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0
cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0
cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19m
aWxsLCBmYWxzZSwgX192KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmls
bCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9f
dXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAg
ICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2Owog
ICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwg
X19uZWcsIF9fdXYpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoK
ICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls
bCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4g
X19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jh
c2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog
X19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg
ICAgICAgICAgICBfQ2hhclQgX19maWxsLCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3Ns
ZW4pCiAgICB7CiAgICAgIHNpemVfdCBfX3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1z
aXplKF9fc2xlbikgPwogICAgICAgICAgICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3Ns
ZW4gOiAwOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxf
Q2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAg
ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmFkanVzdGZpZWxkOwogICAgICBjb25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIg
KyBfX3NsZW47CgogICAgICBpZiAoX19hZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAg
ICAgICB7CgogICAgICAgICBpZiAoX19zcHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8
fCAqX19zcHRyID09ICctJykpCiAgICAgICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53
aWRlbigqX19zcHRyKTsKICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7
CiAgICAgICAgICAgfQogICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5n
KTsKICAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpm
aWVsZCAhPSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChf
X3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAg
fQoKICAgICAgY2hhciBfX2RlY2ltYWxfcG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9w
b2ludCk7CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0
X2NhY2hlPF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2Vw
dHI7ICsrX19zLCArK19fc3B0cikKICAgICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9f
ZGVjaW1hbF9wb2ludCkKICAgICAgICAgICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsK
CiAgICAgICAgIGVsc2UKICAgICAgICAgICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAg
ICAgfQoKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19w
YWRkaW5nKTsKICAgICAgX19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAg
Ym9vbAogIF9fYnVpbGRfZmxvYXRfZm9ybWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIs
IGNoYXIgX19tb2RpZmllciwKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJl
Yyk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
X091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBj
b25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xp
bWl0czxkb3VibGU+OjpkaWdpdHMxMCArIDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19p
by5wcmVjaXNpb24oKTsKCiAgICAgIGlmIChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9f
cHJlYyA9IF9fbWF4X3ByZWM7CgogICAgICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAg
ICAgIHNpemVfdCBfX3NsZW47CgogICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1
aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVu
ID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAg
ICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBf
X291dHB1dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ
dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRv
dWJsZSBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9
IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1z
aXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhf
cHJlYykKICAgICAgICBfX3ByZWMgPSBfX21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19t
YXhfcHJlYyAqIDJdOwogICAgICBzaXplX3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZd
OwoKICAgICAgaWYgKF9fYnVpbGRfZmxvYXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3By
ZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192
KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9f
dik7CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1
ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGws
CiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlv
c19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZs
YWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBp
b3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFz
ZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2Zt
dCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAg
ICAgIHRyeSB7CiAgICAgICAgX091dEl0ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBf
X2lvLCBfX2ZpbGwsIGZhbHNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9f
Zm10KTsKICAgICAgICByZXR1cm4gX19zMjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAg
ICAgICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAg
c3RydWN0IF9XZWVrZGF5bmFtZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0
cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIq
IGNvbnN0IF9TX25hbWVzWzE0XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAg
Y29uc3QgY2hhciogY29uc3QKICAgIF9XZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFt
ZXNbMTRdID0KICAgIHsKICAgICAgIlN1biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRh
eSIsICJUdWUiLCAiVHVlc2RheSIsICJXZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJU
aHVyc2RheSIsICJGcmkiLCAiRnJpZGF5IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX1dlZWtkYXluYW1lczx3Y2hhcl90
LCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCB3Y2hhcl90KiBjb25zdCBfU19uYW1lc1sxNF07
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0
CiAgICBfV2Vla2RheW5hbWVzPHdjaGFyX3QsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAgICB7
CiAgICAgIEwiU3VuIiwgTCJTdW5kYXkiLAogICAgICBMIk1vbiIsIEwiTW9uZGF5IiwgTCJUdWUi
LCBMIlR1ZXNkYXkiLCBMIldlZCIsIEwiV2VkbmVzZGF5IiwKICAgICAgTCJUaHUiLCBMIlRodXJz
ZGF5IiwgTCJGcmkiLCBMIkZyaWRheSIsIEwiU2F0IiwgTCJTYXR1cmRheSIKICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVj
dCBfTW9udGhuYW1lczsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9N
b250aG5hbWVzPGNoYXIsX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgX1Nf
bmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBjaGFy
KiBjb25zdAogICAgX01vbnRobmFtZXM8Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAg
ewogICAgICAiSmFuIiwgIkphbnVhcnkiLCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJNYXJj
aCIsCiAgICAgICJBcHIiLCAiQXByaWwiLCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsCiAg
ICAgICJKdWwiLCAiSnVseSIsICJBdWciLCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIiLAog
ICAgICAiT2N0IiwgIk9jdG9iZXIiLCAiTm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNlbWJl
ciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX01vbnRo
bmFtZXM8d2NoYXJfdCwgX0R1bW15PgogICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29uc3Qg
X1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCB3
Y2hhcl90KiBjb25zdAogICAgX01vbnRobmFtZXM8d2NoYXJfdCxfRHVtbXk+OjpfU19uYW1lc1sy
NF0gPQogICAgewogICAgICBMIkphbiIsIEwiSmFudWFyeSIsIEwiRmViIiwgTCJGZWJydWFyeSIs
IEwiTWFyIiwgTCJNYXJjaCIsCiAgICAgIEwiQXByIiwgTCJBcHJpbCIsIEwiTWF5IiwgTCJNYXki
LCBMIkp1biIsIEwiSnVuZSIsCiAgICAgIEwiSnVsIiwgTCJKdWx5IiwgTCJBdWciLCBMIkF1Z3Vz
dCIsIEwiU2VwIiwgTCJTZXB0ZW1iZXIiLAogICAgICBMIk9jdCIsIEwiT2N0b2JlciIsIEwiTm92
IiwgTCJOb3ZlbWJlciIsIEwiRGVjIiwgTCJEZWNlbWJlciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dl
dDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0
ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fZGF5
bmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5n
PF9DaGFyVD5bMTRdOwogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgMTQ7ICsrX19p
KQogICAgICAgICAgICBfTV9kYXluYW1lc1tfX2ldID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+Ojpf
U19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAg
ICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQgX19tYXRjaGVzWzE0XTsKICAgICAgaXRlcl90
eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbChfX3MsIF9fZW5kLCAxNCwgX01fZGF5bmFtZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3Jl
bWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAg
ICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4g
PT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAo
X19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX3dkYXkgPSAoX19tYXRjaGVzWzBdPj4x
KTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJu
IF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190
KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX21vbnRobmFtZXMpCiAgICAgICAgewogICAgICAg
ICAgX01fbW9udGhuYW1lcyA9IG5ldyBiYXNpY19zdHJpbmc8X0NoYXJUPlsyNF07CiAgICAgICAg
ICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCAyNDsgKytfX2kpCiAgICAgICAgICAgIF9NX21vbnRo
bmFtZXNbX19pXSA9IF9Nb250aG5hbWVzPF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAg
fQogICAgICBib29sIF9fYXRfZW9mID0gZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAg
ICAgIGludCBfX21hdGNoZXNbMjRdOwogICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3Bh
cmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwgX01fbW9udGhuYW1lcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwog
ICAgICBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9f
ZXJyIHw9IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAg
X19yZW1haW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkK
ICAgICAgICBfX3QtPnRtX21vbiA9IChfX21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAg
ICAgX19lcnIgfD0gX19pby5mYWlsYml0OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cn0KIyA0
MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAy
IDMKIyAzMyAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50
Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnk6
OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKQogICAgOiBf
TV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAgICBpZiAoX01fb2sgJiYg
X19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1fdHlwZSYpKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8
KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxs
KCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3Mo
KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0
KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9f
YiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8
IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
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
ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBp
b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAg
ICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24p
OwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhp
cywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhp
cywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikK
ICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNp
Z25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFp
bGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls
bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25z
dCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9N
X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkK
ICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmlu
KQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3Ry
ZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFfX3NiaW4gfHwgIV9f
eHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAgICAgICAgIGlmIChfX3B1
dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkKICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24p
OwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRi
dWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5
cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAg
ICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2Zm
KDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBib29sIF9fdGVzdG9r
ID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgewoK
CiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19w
b3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAg
IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19v
ZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRo
aXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAg
ICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBf
X2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlw
ZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKICAgICAgICB9Cgog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29uc3Qg
X0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4s
IGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90eXBl
IF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAg
IGNoYXJfdHlwZSogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6YXNz
aWduKF9fcGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOwoKICAgICAgY2hhcl90eXBlKiBfX2Jl
ZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAg
c2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lvcy5m
bGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fZm10ID09IGlvc19i
YXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hhcl90
eXBlKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAgICBf
X2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19iYXNl
OjppbnRlcm5hbCkKICAgICAgICB7CgoKCiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2FjaGU8
X0NoYXJUPiBfX2NhY2hlX3R5cGU7CiAgICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9fZm10
ID0gX19jYWNoZV90eXBlOjpfU19nZXQoX19pb3MpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19t
aW51cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBlOjpm
aW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsKICAgICAgICAgIGJvb2wgX190ZXN0
c2lnbiA9IF9fbWludXMgfHwgX19wbHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX29s
ZHNbMF0gPT0gJzAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0gPT0g
J3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOwoKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAg
ICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAg
ICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsK
ICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuIC0gX19tb2Q7CiAgICAgICAgICAgICAg
X19lbmQgPSBfX3BhZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHNp
Z24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX21vZCArPSBfX3BsZW47CiAgICAgICAg
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21pbnVzID8gX19taW51cyArIDE6IF9f
cGx1cyArIDE7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9f
b2xkcyk7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3NpZ24gLSBfX29sZHM7CiAgICAgICAg
ICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2lnbiArIF9fcGxlbik7CiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFkcywg
X19wbGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAg
ICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVu
OwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9f
YmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2Vu
ZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICB9CgogICAgICB0cmFp
dHNfdHlwZTo6Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIHRyYWl0c190eXBl
Ojpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9f
bW9kKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsK
ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9D
aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19s
ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQs
IF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19s
ZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291
dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0K
CgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkg
X19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgo
KTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls
dGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBf
X2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291
dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf
X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBf
X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f
b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAg
ICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hh
clQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj
X2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlm
IChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRf
Y2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBf
X3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m
IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9z
X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f
b3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
dHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6
c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgc2l6ZV90IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgICAg
IF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faSA9
IDA7IF9faSA8PSBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291dC53
aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0
aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193
ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19j
YXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKCiAg
ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fd3MsIF9fdywgX19sZW4pOwogICAg
ICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBf
X3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9f
bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v
dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIs
IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6
c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0
LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9
IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAg
ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAg
ICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAg
ICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0
eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRh
KCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBf
Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNf
Y2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9f
bGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRz
LCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAg
ICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBfX3Jl
cyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQud2lk
dGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0LnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsK
ICAgIH0KfQojIDI3OSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X29zdHJlYW0uaCIgMiAzCiMgNDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9nY2MtMy4wL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xv
Y2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9zdGRfbGlt
aXRzLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaXN0cmVhbS5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtIDogdmlydHVh
bCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw
ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiBfX2lvc190eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsK
ICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9p
dGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90
eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUgX01fZ2NvdW50OwoKICAgIHB1
YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJlYW0oX19zdHJlYW1idWZfdHlw
ZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19zYik7CiAgICAgICAgX01fZ2Nv
dW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf
aXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNs
YXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUmICgqX19wZikoX19pc3RyZWFt
X3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lvc190
eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKTsKCgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoKICAgICAgX19pc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAg
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKTsKCgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19mKTsKCiAgICAgIF9faXN0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2YpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBpbmxp
bmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
Z2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9pZCk7CgogICAgICBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBl
JgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19k
ZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUq
IF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIGdldChfX3MsIF9fbiwgdGhpcy0+
d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt
YnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJl
YW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJu
IGdldChfX3NiLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9f
ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gZ2V0bGluZShfX3MsIF9f
biwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdu
b3JlKHN0cmVhbXNpemUgX19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjpl
b2YoKSk7CgogICAgICBpbnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg
IHN0cmVhbXNpemUKICAgICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAg
IHN5bmModm9pZCk7CgogICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9f
aXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgc2Vla2cob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRl
OgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19pc3RyZWFt
X3R5cGUmKTsKCiAgICAgIGJhc2ljX2lzdHJlYW0oY29uc3QgX19pc3RyZWFtX3R5cGUmKTsKCiAg
ICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj
bGFzcyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAg
IHR5cGVkZWYgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs
IGJvb2wgX19ub3NraXB3cyA9IGZhbHNlKTsKCiAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVy
biBfTV9vazsgfQoKICAgIHByaXZhdGU6CiAgICAgIGJvb2wgX01fb2s7CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKTsKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0
dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciYg
X19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAg
ICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3MpKTsgfQoKICB0
ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+Jgog
ICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBj
aGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXIqPihf
X3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgY2xhc3MgYmFzaWNfaW9zdHJlYW0KICAgIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiwKICAgICAgcHVibGljIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPgog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfaW9z
dHJlYW0oYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICAgIDogX19p
c3RyZWFtX3R5cGUoX19zYiksIF9fb3N0cmVhbV90eXBlKF9fc2IpCiAgICAgIHsgfQoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfaW9zdHJlYW0oKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMp
Owp9CgoKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJl
YW0udGNjIiAxIDMKIyAzMiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMv
aXN0cmVhbS50Y2MiIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9pc3RyZWFtLnRjYyIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAzCiMgMzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9f
aW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAg
ICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2lu
LmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg
ICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygp
OwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg
ICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAg
ICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf
X2MpKQogICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAg
ICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29v
ZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAo
Kl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19w
ZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz
ZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFj
ZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAs
ICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQm
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog
ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f
bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0
LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+
Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg
KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9f
bikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29v
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAg
ICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg
ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6
aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh
Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw
LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp
OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZG91YmxlJiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f
ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg
IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n
ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRv
cj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo
aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs
IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYgX19jZXJiKQogICAgICAgIF9feHRyY3Qg
PSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYgKCFf
X3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZv
aWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp
OwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1
ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAg
ICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAg
ICAgICAgICAgIGlmIChfX2J1ZnZhbCAhPSBfX2VvZikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBn
ZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19p
ZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAg
ICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9f
dGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0
cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2Nv
dW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAg
ICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rk
ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBp
ZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpCiAgICAgICAgICAgICAgICBf
X3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJf
dHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChf
X3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNf
dHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19jID0gX190aGlzX3Ni
LT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
bGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAg
ICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgd2hpbGUgKCFfX3Rl
c3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAgICAgICAgICAgJiYgKF9fdGVzdHB1dCA9
IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKQogICAgICAgICAgICAg
ICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMo
KTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAg
ICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAgICAgICAgICAg
ICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7
CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNw
dXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxp
bmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAg
IHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAg
ICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAr
K19NX2djb3VudDsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRl
bGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19j
ID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uICYmICFfX3Rl
c3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsK
ICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFf
X3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291
bnQ7CiAgICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBp
ZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9f
biwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg
ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wg
X190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl
b2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNf
bGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3Vu
dCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2Mg
PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9f
ZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9NX2djb3VudCA9PSBfX24gLSAxICYm
ICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgKytfTV9nY291bnQ7
CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6
OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgeyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFk
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICB0cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg
X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBf
X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBf
X2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0g
MSAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAg
ICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+
c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7
CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQog
ICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf
dHlwZShfX2MpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAg
Y29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUg
X19udW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAo
X19udW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAg
ICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBf
X251bSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp
cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9f
YykgPT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAg
ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg
ICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAg
ICAgIGlmICghX19zYiB8fCBfX2VvZiA9PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAg
ICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBf
X3JldCA9PSBfX3NiLT5wdWJzeW5jKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3Jl
dCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
dGVsbGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1
ciwgaW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2co
cG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMt
PnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAg
ICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg
IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs
IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190
eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0
KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYg
X19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBf
X2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2Nl
cmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpm
YWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf
Q2hhclQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBz
dHJlYW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
bnVtID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAg
ICAgICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAg
ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg
ICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lv
cygpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAg
ICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAg
ICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwog
ICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAg
ICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0
c3ApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAg
ICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19z
Yi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsK
ICAgICAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj
ZSwgX19jKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2Yp
CiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAg
ICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYK
ICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpjaGFyX3R5cGUgX19jaGFyX3R5cGU7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiID0gX19pbi5yZGJ1ZigpOwogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBf
X2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBf
VHJhaXRzOjplb2YoKTsKICAgICAgX19pbnRfdHlwZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9m
OwogICAgICBib29sIF9fdGVzdHNwOwoKICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBfX2Mg
PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAg
ICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAg
ICAgICAgfQogICAgICB3aGlsZSAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAo
IV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAg
ICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAg
cmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu
LAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
X19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Omlu
dF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6
Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBl
OwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUg
X193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAg
X19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4
X3NpemUoKTsKCiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp
OwogICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0
eXBlX2lvcygpOwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg
ICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg
IGJvb2wgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChf
X2V4dHJhY3RlZCA8IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fc3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAg
ICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
KCk7CiAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg
IF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICBfX3NiLT5zcHV0YmFj
a2MoX19jKTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlm
ICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQp
OwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6
ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwog
ICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBf
X3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRz
Ojp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig
PSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAg
ICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICBib29sIF9fdGVz
dGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19u
ICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytf
X2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg
ICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0g
PSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2Yp
CiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQog
ICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBs
YXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5l
IGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
X1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIs
IF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0KIyAyOTEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDIgMwojIDQyICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
ICBleHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0
cmVhbSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2lu
OwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0
ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsK
fQojIDMyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMwoj
IDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFt
cy5oIiAyCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDEg
MwojIDMxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvZnN0cmVhbSIgMwojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDEg
MwojIDM4ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVh
bS5oIiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9p
c3RyZWFtLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2ZzdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAxIDMKIyAzOCAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfZmlsZS5oIiAzCgojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp
Zy5oIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfZmlsZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zLmgiIDEgMwojIDQxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19maWxlLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9fYmFzaWNfZmlsZV9iYXNlOiBwdWJsaWMgX19j
X2ZpbGVfdHlwZQogICAgewogICAgICB2aXJ0dWFsCiAgICAgIH5fX2Jhc2ljX2ZpbGVfYmFzZSgp
IHsgfTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIG92ZXJmbG93KGludCBfX2MgPSAoLTEpKSA9
IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICB1bmRlcmZsb3coKSA9IDA7CgogICAgICB2aXJ0
dWFsIGludAogICAgICB1ZmxvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHBiYWNr
ZmFpbChpbnQgX19jKSA9IDA7CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRu
KGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikgPSAwOwoKICAgICAgdmlydHVhbCBz
dHJlYW1zaXplCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pID0gMDsK
CiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICAgIHNlZWtvZmYoc3RyZWFtb2ZmIF9fb2ZmLCBp
b3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkgPSAwOwoKICAgICAgdmlydHVh
bCBzdHJlYW1vZmYKICAgICAgc2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
ID0gMDsKCiAgICAgIHZpcnR1YWwgc3RyZWFtYnVmKgogICAgICBzZXRidWYoX0NoYXJUKiBfX2Is
IGludCBfX2xlbikgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpID0gMDsKCiAg
ICAgIHZpcnR1YWwgaW50CiAgICAgIGRvYWxsb2NhdGUoKSA9IDA7CgogICAgICB2aXJ0dWFsIHN0
cmVhbXNpemUKICAgICAgc3lzX3JlYWQoX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKSA9IDA7
CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog
X19zLCBzdHJlYW1zaXplIF9fbikgPSAwOwoKICAgICAgdmlydHVhbCBzdHJlYW1vZmYKICAgICAg
c3lzX3NlZWsoc3RyZWFtb2ZmIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSkgPSAwOwoK
ICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lzX2Nsb3NlKCkgPSAwOwoKICAgICAgdmlydHVhbCBp
bnQKICAgICAgc3lzX3N0YXQodm9pZCogX192KSA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBzaG93bWFueWMoKSA9IDA7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUodm9pZCog
X192KSA9IDA7CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CgoKCiAgICBj
bGFzcyBfX2Jhc2ljX2ZpbGUKCiAgICB7CgogICAgICBfX2NfZmlsZV90eXBlKiBfTV9jZmlsZTsK
ICAgICAgYm9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKCgoKCgogICAgcHVibGljOgogICAgICBfX2Jh
c2ljX2ZpbGUoX19jX2xvY2sqIF9fbG9jayA9IDApOwoKICAgICAgdm9pZAogICAgICBfTV9vcGVu
X21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50JiBfX3BfbW9kZSwgaW50JiBfX3J3
X21vZGUsCiAgICAgICAgICAgICAgICAgICBjaGFyKiBfX2NfbW9kZSk7CgoKICAgICAgX19iYXNp
Y19maWxlKgogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2Rl
IF9fbW9kZSwgaW50IF9fcHJvdCA9IDA2NjQpOwoKCgoKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAg
ICAgc3lzX29wZW4oX19jX2ZpbGVfdHlwZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
b2RlKTsKCiAgICAgIF9DaGFyVAogICAgICBzeXNfZ2V0YygpOwoKICAgICAgX0NoYXJUCiAgICAg
IHN5c191bmdldGMoX0NoYXJUKTsKCiAgICAgIF9fYmFzaWNfZmlsZSoKICAgICAgY2xvc2UoKTsK
CiAgICAgIGJvb2wKICAgICAgaXNfb3BlbigpOwoKCgoKCiAgICAgIHZpcnR1YWwKICAgICAgfl9f
YmFzaWNfZmlsZSgpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgb3ZlcmZsb3coaW50IF9fYyA9
ICgtMSkpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgdW5kZXJmbG93KCk7CgogICAgICB2aXJ0
dWFsIGludAogICAgICB1ZmxvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgcGJhY2tmYWls
KGludCBfX2MpOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHhzcHV0bihjb25z
dCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICAgICAgdmlydHVhbCBzdHJlYW1z
aXplCiAgICAgIHhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKCgoKICAgICAg
dmlydHVhbCBzdHJlYW1vZmYKICAgICAgc2Vla29mZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNl
OjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg
PSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFt
b2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAg
IHZpcnR1YWwgc3RyZWFtYnVmKgogICAgICBzZXRidWYoX0NoYXJUKiBfX2IsIGludCBfX2xlbik7
CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCk7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb2FsbG9jYXRlKCk7CgoKCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgc3lzX3Jl
YWQoX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCgoKCiAgICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZQogICAgICBzeXNfd3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKTsK
CgoKCiAgICAgIHZpcnR1YWwgc3RyZWFtb2ZmCiAgICAgIHN5c19zZWVrKHN0cmVhbW9mZiBfX29m
ZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXkpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgc3lz
X2Nsb3NlKCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeXNfc3RhdCh2b2lkKiBfX3YpOwoK
ICAgICAgdmlydHVhbCBpbnQKICAgICAgc2hvd21hbnljKCk7CgogICAgICB2aXJ0dWFsIHZvaWQK
ICAgICAgaW1idWUodm9pZCogX192KTsKICAgIH07Cn0KCgoKIyAxICIvdXNyL2xvY2FsL2djYy0z
LjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9iYXNpY19maWxlX21vZGVs
LmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9iYXNpY19maWxlX21vZGVsLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpfX2Jhc2lj
X2ZpbGUoX19jX2xvY2sqICkKICAgIDogX01fY2ZpbGUoX19udWxsKSwgX01fY2ZpbGVfY3JlYXRl
ZChmYWxzZSkgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNfZmls
ZTxfQ2hhclQ+Ojp+X19iYXNpY19maWxlKCkKICAgIHsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4o
KSkKICAgICAgICB7CiAgICAgICAgICBmZmx1c2goX01fY2ZpbGUpOwogICAgICAgICAgdGhpcy0+
Y2xvc2UoKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IHZvaWQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpfTV9vcGVuX21vZGUoaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
JiAsIGludCYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBf
X2NfbW9kZSkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RiID0gX19tb2RlICYgaW9zX2Jhc2U6OmJp
bmFyeTsKICAgICAgYm9vbCBfX3Rlc3RpID0gX19tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICBi
b29sIF9fdGVzdG8gPSBfX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICBib29sIF9fdGVzdHQg
PSBfX21vZGUgJiBpb3NfYmFzZTo6dHJ1bmM7CiAgICAgIGJvb2wgX190ZXN0YSA9IF9fbW9kZSAm
IGlvc19iYXNlOjphcHA7CgogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiAhX190ZXN0
dCAmJiAhX190ZXN0YSkKICAgICAgICBzdHJjcHkoX19jX21vZGUsICJ3Iik7CiAgICAgIGlmICgh
X190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0ICYmIF9fdGVzdGEpCiAgICAgICAgc3RyY3B5
KF9fY19tb2RlLCAiYSIpOwogICAgICBpZiAoIV9fdGVzdGkgJiYgX190ZXN0byAmJiBfX3Rlc3R0
ICYmICFfX3Rlc3RhKQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInciKTsKICAgICAgaWYgKF9f
dGVzdGkgJiYgIV9fdGVzdG8gJiYgIV9fdGVzdHQgJiYgIV9fdGVzdGEpCiAgICAgICAgc3RyY3B5
KF9fY19tb2RlLCAiciIpOwogICAgICBpZiAoX190ZXN0aSAmJiBfX3Rlc3RvICYmICFfX3Rlc3R0
ICYmICFfX3Rlc3RhKQogICAgICAgIHN0cmNweShfX2NfbW9kZSwgInIrIik7CiAgICAgIGlmIChf
X3Rlc3RpICYmIF9fdGVzdG8gJiYgX190ZXN0dCAmJiAhX190ZXN0YSkKICAgICAgICBzdHJjcHko
X19jX21vZGUsICJ3KyIpOwogICAgICBpZiAoX190ZXN0YikKICAgICAgICBzdHJjYXQoX19jX21v
ZGUsICJiIik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fYmFzaWNf
ZmlsZTxfQ2hhclQ+KgogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19vcGVuKF9fY19maWxl
X3R5cGUqIF9fZmlsZSwgaW9zX2Jhc2U6Om9wZW5tb2RlKQogICAgewogICAgICBfX2Jhc2ljX2Zp
bGUqIF9fcmV0ID0gX19udWxsOwoKICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkgJiYgX19maWxl
KQogICAgICAgIHsKICAgICAgICAgIF9NX2NmaWxlID0gX19maWxlOwogICAgICAgICAgX01fY2Zp
bGVfY3JlYXRlZCA9IGZhbHNlOwogICAgICAgICAgX19yZXQgPSB0aGlzOwogICAgICAgIH0KCiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
X0NoYXJUCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX2dldGMoKQogICAgewogICAgICBy
ZXR1cm4gZ2V0YyAoX01fY2ZpbGUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBfQ2hhclQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfdW5nZXRjKF9DaGFyVCBf
X3MpCiAgICB7CiAgICAgIHJldHVybiB1bmdldGMgKF9fcywgX01fY2ZpbGUpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPioKICAgIF9f
YmFzaWNfZmlsZTxfQ2hhclQ+OjpvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9w
ZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCApCiAgICB7
CiAgICAgIF9fYmFzaWNfZmlsZSogX19yZXQgPSBfX251bGw7CiAgICAgIGludCBfX3BfbW9kZSA9
IDA7CiAgICAgIGludCBfX3J3X21vZGUgPSAwOwogICAgICBjaGFyIF9fY19tb2RlWzRdOwoKICAg
ICAgX01fb3Blbl9tb2RlKF9fbW9kZSwgX19wX21vZGUsIF9fcndfbW9kZSwgX19jX21vZGUpOwoK
ICAgICAgaWYgKCF0aGlzLT5pc19vcGVuKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKChfTV9j
ZmlsZSA9IGZvcGVuKF9fbmFtZSwgX19jX21vZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9NX2NmaWxlX2NyZWF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIF9fcmV0ID0gdGhpczsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6
aXNfb3BlbigpIHsgcmV0dXJuIF9NX2NmaWxlICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgX19iYXNpY19maWxlPF9DaGFyVD4qCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJU
Pjo6Y2xvc2UoKQogICAgewogICAgICBfX2Jhc2ljX2ZpbGUqIF9fcmV0dmFsID0gc3RhdGljX2Nh
c3Q8X19iYXNpY19maWxlKj4oX19udWxsKTsKICAgICAgaWYgKF9NX2NmaWxlX2NyZWF0ZWQgJiYg
ZmNsb3NlKF9NX2NmaWxlKSkKICAgICAgICBfX3JldHZhbCA9IHRoaXM7CiAgICAgIHJldHVybiBf
X3JldHZhbDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtc2l6
ZQogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnhzZ2V0bihfQ2hhclQqIF9fcywgc3RyZWFtc2l6
ZSBfX24pCiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEsIF9fbiwgX01fY2ZpbGUpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHN0cmVhbXNpemUKICAgIF9fYmFzaWNfZmlsZTxf
Q2hhclQ+Ojp4c3B1dG4oY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgeyBy
ZXR1cm4gZndyaXRlKF9fcywgMSwgX19uLCBfTV9jZmlsZSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgc3RyZWFtb2ZmCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c2Vla29m
ZihzdHJlYW1vZmYgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlICkKICAgIHsgZnNlZWsoX01f
Y2ZpbGUsIF9fb2ZmLCBfX3dheSk7IHJldHVybiBmdGVsbChfTV9jZmlsZSk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RyZWFtb2ZmCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJU
Pjo6c2Vla3BvcyhzdHJlYW1vZmYgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgKQogICAgeyBmc2VlayhfTV9jZmlsZSwgX19wb3MsIGlv
c19iYXNlOjpiZWcpOyByZXR1cm4gZnRlbGwoX01fY2ZpbGUpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5bmMoKQogICAg
eyByZXR1cm4gZmZsdXNoKF9NX2NmaWxlKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW50CiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6b3ZlcmZsb3coaW50ICkKICAgIHsg
cmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGludAogICAg
X19iYXNpY19maWxlPF9DaGFyVD46OnVuZGVyZmxvdygpCiAgICB7IHJldHVybiAoLTEpOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hh
clQ+Ojp1ZmxvdygpCiAgICB7IHJldHVybiAoLTEpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpwYmFja2ZhaWwoaW50ICkK
ICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHN0
cmVhbWJ1ZioKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzZXRidWYoX0NoYXJUKiAsIGludCAp
CiAgICB7IHJldHVybiByZWludGVycHJldF9jYXN0PHN0cmVhbWJ1Zio+KHRoaXMpOyB9CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+
Ojpkb2FsbG9jYXRlKCkKICAgIHsgcmV0dXJuICgtMSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIHN0cmVhbXNpemUKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfcmVh
ZChfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7IHJldHVybiBmcmVhZChfX3MsIDEs
IF9fbiwgX01fY2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJl
YW1zaXplCiAgICBfX2Jhc2ljX2ZpbGU8X0NoYXJUPjo6c3lzX3dyaXRlKGNvbnN0IF9DaGFyVCog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsgcmV0dXJuIGZ3cml0ZShfX3MsIDEsIF9fbiwgX01f
Y2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBzdHJlYW1vZmYKICAg
IF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfc2VlayhzdHJlYW1vZmYgX19wb3MsIGlvc19iYXNl
OjpzZWVrZGlyIF9fd2F5KQogICAgewogICAgICBmc2VlayhfTV9jZmlsZSwgX19wb3MsIF9fd2F5
KTsKICAgICAgcmV0dXJuIGZ0ZWxsKF9NX2NmaWxlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGludAogICAgX19iYXNpY19maWxlPF9DaGFyVD46OnN5c19jbG9zZSgp
CiAgICB7IHJldHVybiBmY2xvc2UoX01fY2ZpbGUpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzeXNfc3RhdCh2b2lkKiAp
CiAgICB7IHJldHVybiAoLTEpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bnQKICAgIF9fYmFzaWNfZmlsZTxfQ2hhclQ+OjpzaG93bWFueWMoKQogICAgeyByZXR1cm4gKC0x
KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgX19iYXNpY19m
aWxlPF9DaGFyVD46OmltYnVlKHZvaWQqICkgeyB9Cn0KIyAyNTEgIi91c3IvbG9jYWwvZ2NjLTMu
MC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2ZpbGUuaCIgMiAzCiMgNDIgIi91c3IvbG9jYWwv
Z2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMwojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMSAzCiMgNDMg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIg
MwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHIuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9mc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1ZiA6
IHB1YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBl
IGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBw
b3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2Zm
X3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNf
dHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJf
dHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIF9fYmFzaWNf
ZmlsZTxjaGFyX3R5cGU+IF9fZmlsZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0
c190eXBlOjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBjb2RlY3Z0PGNo
YXJfdHlwZSwgY2hhciwgX19zdGF0ZV90eXBlPiBfX2NvZGVjdnRfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX2NvZGVjdnRfdHlwZTo6cmVzdWx0IF9fcmVzX3R5cGU7CiAgICAgIHR5cGVk
ZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgaW9z
X2Jhc2U7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2ZpbGVfdHlwZSogX01fZmlsZTsKCgogICAg
ICBfX3N0YXRlX3R5cGUgX01fc3RhdGVfY3VyOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3RhdGVf
YmVnOwoKCiAgICAgIF9fY19sb2NrIF9NX2xvY2s7CgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2Nh
dGVkOwoKCiAgICAgIGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOwoKICAgIHB1YmxpYzoKCiAgICAg
IGJhc2ljX2ZpbGVidWYoKTsKCgogICAgICBiYXNpY19maWxlYnVmKF9fY19maWxlX3R5cGUqIF9f
ZiwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX3MgPSBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oODE5MikpOwoKICAgICAgdmlydHVhbAogICAg
ICB+YmFzaWNfZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5jbG9zZSgpOwogICAgICAg
IF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgYm9vbAogICAgICBp
c19vcGVuKHZvaWQpIGNvbnN0IHsgcmV0dXJuIF9NX2ZpbGUgPyBfTV9maWxlLT5pc19vcGVuKCkg
OiBmYWxzZTsgfQoKICAgICAgX19maWxlYnVmX3R5cGUqCiAgICAgIG9wZW4oY29uc3QgY2hhciog
X19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKTsKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgog
ICAgICBjbG9zZSh2b2lkKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQKICAgICAgX01fYWxs
b2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfaW50
ZXJuYWxfYnVmZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2FsbG9jYXRlX3BiYWNrX2J1ZmZl
cigpOwoKCiAgICAgIHZvaWQKICAgICAgX01fYWxsb2NhdGVfZmlsZSgpOwoKCiAgICAgIHZpcnR1
YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWModm9pZCk7CgoKCgoKICAgICAgdmlydHVhbCBp
bnRfdHlwZQogICAgICB1bmRlcmZsb3codm9pZCk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAg
ICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CiMgMTQ4ICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAzCiAgICAg
IHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6
ZW9mKCkpOwojIDE1OCAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2ZzdHJlYW0uaCIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50
X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwoKICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90
eXBlKgogICAgICBzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg
IHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6
OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9
IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQog
ICAgICBzZWVrcG9zKHBvc190eXBlIF9fcG9zLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1
YWwgaW50CiAgICAgIHN5bmModm9pZCkKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0cHV0ID0g
X01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2VuZDsKICAgICAgICBpZiAoX190ZXN0
cHV0KQogICAgICAgICAgewoKCiAgICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsKCgoKCgogICAg
ICAgICAgICBzdHJlYW1vZmYgX19jdXIgPSBfTV9maWxlLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjpj
dXIpOwogICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9jdXIgLSBfTV9vdXRfYmVn
OwogICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKICAgICAgICAgICAgX01fZmlsZS0+
c2Vla3BvcyhfX2N1ciArIF9fb2ZmKTsKICAgICAgICAgIH0KICAgICAgICBfTV9sYXN0X292ZXJm
bG93ZWQgPSBmYWxzZTsKICAgICAgICByZXR1cm4gMDsKICAgICAgfQoKICAgICAgdmlydHVhbCB2
b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgdmlydHVhbCBzdHJl
YW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAg
IHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKCiAgICAgICAgaWYgKF9NX3BiYWNrX2lu
aXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHdoaWxlIChfX3JldCA8IF9fbiAmJiBfTV9pbl9j
dXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgKl9fcyA9ICpf
TV9pbl9jdXI7CiAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgKytfX3M7
CiAgICAgICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICBpZiAoX19yZXQgPCBfX24p
CiAgICAgICAgICBfX3JldCArPSBfX3N0cmVhbWJ1Zl90eXBlOjp4c2dldG4oX19zLCBfX24gLSBf
X3JldCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICB2aXJ0dWFsIHN0cmVh
bXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgICAgewogICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAgICByZXR1cm4gX19zdHJl
YW1idWZfdHlwZTo6eHNwdXRuKF9fcywgX19uKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBf
TV9vdXRwdXRfdW5zaGlmdCgpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAg
IHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2Zp
bGVidWY7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfaWZzdHJlYW0oKQogICAgICA6IF9faXN0
cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7IHRoaXMtPmluaXQoJl9NX2Zp
bGVidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pZnN0cmVhbShjb25zdCBjaGFy
KiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIDog
X19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlz
LT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5vcGVuKF9fcywgX19tb2RlKTsKICAg
ICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19maWxlYnVm
X3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX2Zp
bGVidWZfdHlwZSo+KCZfTV9maWxlYnVmKTsgfQoKICAgICAgYm9vbAogICAgICBpc19vcGVuKHZv
aWQpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9CgogICAgICB2b2lkCiAgICAgIG9w
ZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6
OmluKQogICAgICB7CiAgICAgICAgaWYgKF9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSB8IGlv
c19iYXNlOjppbikgPT0gX19udWxsKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKHZvaWQpCiAgICAgIHsK
ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbSA6IHB1
YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7
CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9f
ZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4gX19vc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19maWxlYnVmX3R5
cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19vZnN0cmVhbSgpCiAgICAg
IDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhpcy0+aW5p
dCgmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNv
bnN0IGNoYXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSA9IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90
eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01f
ZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAg
IH5iYXNpY19vZnN0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAg
ICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90
eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29wZW4odm9pZCkgeyBy
ZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KCiAgICAgIHZvaWQKICAgICAgb3Blbihjb25z
dCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i
YXNlOjpvdXQgfCBpb3NfYmFzZTo6dHJ1bmMpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVi
dWYub3BlbihfX3MsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpKQogICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIGNsb3Nl
KHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAg
IHNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19mc3Ry
ZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf
dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5
cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl
IG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8Y2hhcl90eXBl
LCB0cmFpdHNfdHlwZT4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTxj
aGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAg
ICAgX19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgogICAgICBiYXNpY19m
c3RyZWFtKCkKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAg
ICAgIHsgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJh
c2ljX2ZzdHJlYW0oY29uc3QgY2hhciogX19zLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICA6
IF9faW9zdHJlYW1fdHlwZShfX251bGwpLCBfTV9maWxlYnVmKCkKICAgICAgewogICAgICAgIHRo
aXMtPmluaXQoJl9NX2ZpbGVidWYpOwogICAgICAgIHRoaXMtPm9wZW4oX19zLCBfX21vZGUpOwog
ICAgICB9CgogICAgICB+YmFzaWNfZnN0cmVhbSgpCiAgICAgIHsgfQoKCiAgICAgIF9fZmlsZWJ1
Zl90eXBlKgogICAgICByZGJ1Zih2b2lkKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0
PF9fZmlsZWJ1Zl90eXBlKj4oJl9NX2ZpbGVidWYpOyB9CgogICAgICBib29sCiAgICAgIGlzX29w
ZW4odm9pZCkgeyByZXR1cm4gX01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KCiAgICAgIHZvaWQKICAg
ICAgb3Blbihjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9f
bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsKICAgICAgICBpZiAo
IV9NX2ZpbGVidWYub3BlbihfX3MsIF9fbW9kZSkpCiAgICAgICAgICBzZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgY2xvc2Uodm9pZCkKICAgICAg
ewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5jbG9zZSgpKQogICAgICAgICAgc2V0c3RhdGUoaW9z
X2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CiAgICB9Owp9CgoKCgoKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9mc3RyZWFtLnRjYyIgMSAzCiMgMzcgIi91c3IvbG9j
YWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL2ZzdHJlYW0udGNjIiAzCm5hbWVzcGFjZSBz
dGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZv
aWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9hbGxvY2F0ZV9m
aWxlKCkKICAgIHsKICAgICAgaWYgKCFfTV9maWxlKQogICAgICAgIHsKICAgICAgICAgIF9NX2J1
Zl91bmlmaWVkID0gdHJ1ZTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9NX2ZpbGUgPSBu
ZXcgX19maWxlX3R5cGUoJl9NX2xvY2spOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBkZWxldGUgX01fZmlsZTsKICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlm
ICghX01fYnVmICYmIF9NX2J1Zl9zaXplX29wdCkKICAgICAgICB7CiAgICAgICAgICBfTV9idWZf
c2l6ZSA9IF9NX2J1Zl9zaXplX29wdDsKCgogICAgICAgICAgdHJ5IHsgX01fYnVmID0gbmV3IGNo
YXJfdHlwZVtfTV9idWZfc2l6ZV07IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSB0cnVlOwogICAgICAgIH0K
ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9kZXN0cm95
X2ludGVybmFsX2J1ZmZlcigpCiAgICB7CiAgICAgIGlmIChfTV9idWZfYWxsb2NhdGVkKQogICAg
ICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9idWY7CiAgICAgICAgICBfTV9idWYgPSBfX251
bGw7CiAgICAgICAgICBfTV9idWZfYWxsb2NhdGVkID0gZmFsc2U7CiAgICAgICAgICB0aGlzLT5z
ZXRnKF9fbnVsbCwgX19udWxsLCBfX251bGwpOwogICAgICAgICAgdGhpcy0+c2V0cChfX251bGws
IF9fbnVsbCk7CiAgICAgICAgfQogICAgfQoKIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKQogICAgewogICAgICBpZiAoIV9NX3Bi
YWNrICYmIF9NX3BiYWNrX3NpemUpCiAgICAgICAgewoKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7IF9NX3BiYWNrID0gbmV3IGNoYXJfdHlwZVtfTV9wYmFja19zaXplXTsgfQogICAgICAgICAg
Y2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZGVsZXRlIFtdIF9NX3BiYWNr
OwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxl
YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgYmFzaWNfZmlsZWJ1ZigpCiAgICA6IF9fc3RyZWFt
YnVmX3R5cGUoKSwgX01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkp
LAogICAgX01fc3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxz
ZSksCiAgICBfTV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIGJhc2ljX2ZpbGVidWYoX19jX2ZpbGVfdHlwZSogX19mLCBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlLCBpbnRfdHlwZSBfX3MpCiAgICA6IF9fc3RyZWFtYnVmX3R5cGUo
KSwgX01fZmlsZShfX251bGwpLCBfTV9zdGF0ZV9jdXIoX19zdGF0ZV90eXBlKCkpLAogICAgX01f
c3RhdGVfYmVnKF9fc3RhdGVfdHlwZSgpKSwgX01fYnVmX2FsbG9jYXRlZChmYWxzZSksCiAgICBf
TV9sYXN0X292ZXJmbG93ZWQoZmFsc2UpCiAgICB7CiAgICAgIF9NX2FsbG9jYXRlX2ZpbGUoKTsK
ICAgICAgX01fZmlsZS0+c3lzX29wZW4oX19mLCBfX21vZGUpOwogICAgICBpZiAodGhpcy0+aXNf
b3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgICBp
ZiAoX19zKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fYnVmX3NpemVfb3B0ID0gX19z
OwogICAgICAgICAgICAgIF9NX2FsbG9jYXRlX2ludGVybmFsX2J1ZmZlcigpOwogICAgICAgICAg
ICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX2Fs
bG9jYXRlX3BiYWNrX2J1ZmZlcigpOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkK
ICAgIHsKICAgICAgX19maWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOwogICAgICBpZiAoIXRo
aXMtPmlzX29wZW4oKSkKICAgICAgICB7CiAgICAgICAgICBfTV9hbGxvY2F0ZV9maWxlKCk7CiAg
ICAgICAgICBfTV9maWxlLT5vcGVuKF9fcywgX19tb2RlKTsKICAgICAgICAgIGlmICh0aGlzLT5p
c19vcGVuKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9pbnRlcm5h
bF9idWZmZXIoKTsKICAgICAgICAgICAgICBfTV9hbGxvY2F0ZV9wYmFja19idWZmZXIoKTsKICAg
ICAgICAgICAgICBfTV9tb2RlID0gX19tb2RlOwoKCiAgICAgICAgICAgICAgX01fc2V0X2luZGV0
ZXJtaW5hdGUoKTsKICAgICAgICAgICAgICBpZiAoX19tb2RlICYgaW9zX2Jhc2U6OmF0ZQogICAg
ICAgICAgICAgICAgICAmJiB0aGlzLT5zZWVrb2ZmKDAsIGlvc19iYXNlOjplbmQsIF9fbW9kZSkg
PCAwKQogICAgICAgICAgICAgICAgdGhpcy0+Y2xvc2UoKTsKICAgICAgICAgICAgICBfX3JldCA9
IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
ZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX2ZpbGVidWZfdHlwZSoKICAgIGJhc2ljX2ZpbGVi
dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBjbG9zZSgpCiAgICB7CiAgICAgIF9fZmlsZWJ1Zl90
eXBlICpfX3JldCA9IF9fbnVsbDsKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSkKICAgICAgICB7
CiAgICAgICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9N
X291dF9lbmQ7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICBfTV9yZWFsbHlf
b3ZlcmZsb3codHJhaXRzX3R5cGU6OmVvZigpKTsKCgogICAgICAgICAgX01fcGJhY2tfZGVzdHJv
eSgpOwojIDE5MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvZnN0cmVh
bS50Y2MiIDMKICAgICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUoMCk7CiAgICAg
ICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKICAgICAgICAgIGlmIChfTV9wYmFj
aykKICAgICAgICAgICAgewogICAgICAgICAgICAgIGRlbGV0ZSBbXSBfTV9wYmFjazsKICAgICAg
ICAgICAgICBfTV9wYmFjayA9IF9fbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgX19yZXQg
PSB0aGlzOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9NX2ZpbGUpCiAgICAgICAgewogICAgICAg
ICAgZGVsZXRlIF9NX2ZpbGU7CiAgICAgICAgICBfTV9maWxlID0gX19udWxsOwogICAgICAgIH0K
ICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3Ry
ZWFtc2l6ZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNob3dtYW55
YygpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAtMTsKICAgICAgYm9vbCBfX3Rlc3Rp
biA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAg
ewogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBmYWxzZTsKICAgICAgICAgIGlmIChfTV9pbl9j
dXIgPj0gX01faW5fZW5kKQogICAgICAgICAgICBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3co
KSA9PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAg
ICAgICAgX19yZXQgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgfQogICAgICBfTV9s
YXN0X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVm
PF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgdW5kZXJmbG93KCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6
OmluOwogICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKCiAg
ICAgIGlmIChfX3Rlc3RpbikKICAgICAgICB7CgoKCiAgICAgICAgICBpZiAoX01fcGJhY2tfaW5p
dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKTsKICAgICAg
ICAgICAgICBpZiAoX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgICAgICAgcmV0dXJu
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICAgICAgfQoKICAg
ICAgICAgIGJvb2wgX190ZXN0Z2V0ID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1
cjsKICAgICAgICAgIGJvb2wgX190ZXN0aW5pdCA9IF9NX2lzX2luZGV0ZXJtaW5hdGUoKTsKCgog
ICAgICAgICAgaWYgKF9fdGVzdGdldCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
X3Rlc3RvdXQpCiAgICAgICAgICAgICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coKTsKCgoKCiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX01fZmlsZS0+c2Vla29mZihfTV9pbl9jdXIg
LSBfTV9pbl9iZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpj
dXIsIGlvc19iYXNlOjppbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX190ZXN0aW5p
dCB8fCBfX3Rlc3RnZXQpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3NpemUgPSBfTV9maWxlLT54c2dldG4oX01faW5fYmVnLCBfTV9idWZfc2l6ZSk7CiAgICAgICAg
ICAgICAgaWYgKDAgPCBfX3NpemUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9NX3NldF9kZXRlcm1pbmF0ZShfX3NpemUpOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0
b3V0KQogICAgICAgICAgICAgICAgICAgIF9NX291dF9jdXIgPSBfTV9pbl9jdXI7CiAgICAgICAg
ICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwoK
CgoKCgogICAgICAgICAgICAgICAgICBzdHJlYW1vZmYgX19wID0gX01fZmlsZS0+c2Vla29mZigw
IC0gX19zaXplLCBpb3NfYmFzZTo6Y3VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwogICAgICAgICAgICAgICAgICBpZiAo
X19wID09IC0xKQogICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgfQoK
CgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfTV9sYXN0
X292ZXJmbG93ZWQgPSBmYWxzZTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9D
aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgcGJhY2tmYWlsKGludF90eXBlIF9faSkKICAgIHsKICAgICAgaW50X3R5cGUgX19y
ZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYg
aW9zX2Jhc2U6OmluOwoKICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgIHsKICAgICAgICAgIGJv
b2wgX190ZXN0cGIgPSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgICAgICBjaGFyX3R5cGUg
X19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2kpOwogICAgICAgICAgYm9vbCBfX3Rl
c3Rlb2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICAgICAgICAg
aWYgKF9fdGVzdHBiKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RvdXQg
PSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVxID0g
dHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CgoKCiAgICAgICAgICAgICAg
aWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0ZXEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAg
ICAgICAgICAgICAgICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBf
X2k7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAg
ICAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7
CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAg
ICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAg
ICAgICAgICAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAqX01faW5f
Y3VyID0gX19jOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgICAgICB0aGlz
LT51bmRlcmZsb3coKTsKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX19jLCAqX01faW5f
Y3VyKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFj
a19jcmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0
c190eXBlOjpub3RfZW9mKF9faSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xh
c3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9f
cmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9j
dXIgJiYgX01fb3V0X2N1ciA8IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVz
dG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKICAgICAgaWYgKF9fdGVzdG91dCkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgKl9NX291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAg
ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICBfX3JldCA9IHRoaXMtPl9NX3JlYWxseV9vdmVyZmxvdyhfX2MpOwogICAgICAgIH0KCiAgICAg
IF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2Zp
bGVidWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rl
c3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwogICAgICBib29s
IF9fdGVzdHVuYnVmZmVyZWQgPSBfTV9maWxlICYmICFfTV9idWZfc2l6ZTsKCiAgICAgIGlmIChf
X3Rlc3RwdXQgfHwgX190ZXN0dW5idWZmZXJlZCkKICAgICAgICB7CgogICAgICAgICAgaW50IF9f
cGxlbiA9IF9NX291dF9lbmQgLSBfTV9vdXRfYmVnOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl
biA9IDA7CgogICAgICAgICAgaWYgKF9fcGxlbikKICAgICAgICAgICAgX19sZW4gPSBfTV9maWxl
LT54c3B1dG4oX01fb3V0X2JlZywgX19wbGVuKTsKCiAgICAgICAgICBpZiAoX19jICE9dHJhaXRz
X3R5cGU6OmVvZigpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fcGVu
ZGluZyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICBfX2xl
biArPSBfTV9maWxlLT54c3B1dG4oJl9fcGVuZGluZywgMSk7CiAgICAgICAgICAgICAgKytfX3Bs
ZW47CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIF9NX2ZpbGUtPnN5bmMoKTsKICAgICAgICAg
IGlmIChfX2xlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9zZXRf
aW5kZXRlcm1pbmF0ZSgpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9l
b2YoX19jKTsKICAgICAgICAgICAgfQojIDQ3MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUv
ZysrLXYzL2JpdHMvZnN0cmVhbS50Y2MiIDMKICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZs
b3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjpfX3N0cmVhbWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAg
ICAgIGlmICghdGhpcy0+aXNfb3BlbigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogICAgICAg
IF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgIGVsc2UgaWYgKF9fcyAmJiBfX24pCiAgICAgICAg
ewoKCgoKCiAgICAgICAgICBfTV9kZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKCiAgICAgICAg
ICBfTV9idWYgPSBfX3M7CiAgICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9
IF9fbjsKICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CgoKICAgICAgICAgIF9NX2Fs
bG9jYXRlX3BiYWNrX2J1ZmZlcigpOwogICAgICAgIH0KICAgICAgX01fbGFzdF9vdmVyZmxvd2Vk
ID0gZmFsc2U7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OnBvc190eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vl
a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNlOjpv
cGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2Zm
X3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RvcGVuID0gdGhpcy0+aXNfb3BlbigpOwogICAg
ICBib29sIF9fdGVzdGluID0gX19tb2RlICYgaW9zX2Jhc2U6OmluICYmIF9NX21vZGUgJiBpb3Nf
YmFzZTo6aW47CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX19tb2RlICYgaW9zX2Jhc2U6Om91dCAm
JiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKCgogICAgICBpbnQgX193aWR0aCA9IHVzZV9mYWNl
dDxfX2NvZGVjdnRfdHlwZT4oX01fYnVmX2xvY2FsZSkuZW5jb2RpbmcoKTsKICAgICAgaWYgKF9f
d2lkdGggPCAwKQogICAgICAgIF9fd2lkdGggPSAwOwogICAgICBib29sIF9fdGVzdGZhaWwgPSBf
X29mZiAhPSAwICYmIF9fd2lkdGggPD0gMDsKCiAgICAgIGlmIChfX3Rlc3RvcGVuICYmICFfX3Rl
c3RmYWlsICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQpKQogICAgICAgIHsKCiAgICAgICAgICBf
TV9wYmFja19kZXN0cm95KCk7CgogICAgICAgICAgaWYgKF9fd2F5ICE9IGlvc19iYXNlOjpjdXIg
fHwgX19vZmYgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fY29t
cHV0ZWRfb2ZmID0gX193aWR0aCAqIF9fb2ZmOwoKICAgICAgICAgICAgICBib29sIF9fdGVzdGdl
dCA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9lbmQ7CiAgICAgICAgICAgICAgYm9v
bCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcgPCBfTV9vdXRfZW5kOwoKCiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdHB1dCB8fCBfTV9sYXN0X292ZXJmbG93ZWQpCiAgICAgICAg
ICAgICAgICB7CgogICAgICAgICAgICAgICAgICB0aGlzLT5zeW5jKCk7CgogICAgICAgICAgICAg
ICAgICBfTV9vdXRwdXRfdW5zaGlmdCgpOwogICAgICAgICAgICAgICAgfQoKCiAgICAgICAgICAg
ICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAgICAgICAg
ICAgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9pbl9iZWc7CgogICAgICAg
ICAgICAgIF9fcmV0ID0gX01fZmlsZS0+c2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193YXksIF9f
bW9kZSk7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAgICAg
fQoKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3JldCA9IF9N
X2ZpbGUtPnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIsIF9fbW9kZSk7CiAgICAgICAgICAg
ICAgX19yZXQgKz0gbWF4KF9NX291dF9jdXIsIF9NX2luX2N1cikgLSBfTV9idWY7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICBy
ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAg
IGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrcG9zKHBvc190eXBlIF9f
cG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3Jl
dDsKICAgICAgb2ZmX3R5cGUgX19vZmYgPSBfX3BvczsKCiAgICAgIF9fcmV0ID0gdGhpcy0+c2Vl
a29mZihfX29mZiwgaW9zX2Jhc2U6OmJlZywgX19tb2RlKTsKCiAgICAgIF9NX2xhc3Rfb3ZlcmZs
b3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFz
aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0YmVnID0gZ3B0cigpID09IGViYWNrKCkgJiYgcHB0
cigpID09IHBiYXNlKCk7CgogICAgICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2NhbGUgIT0g
X19sb2MpCiAgICAgICAgewogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICAg
ICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgX01fbGFz
dF9vdmVyZmxvd2VkID0gZmFsc2U7CiAgICB9Cgp9CiMgNDIxICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnN0cmVhbS5oIiAyIDMKIyAzMiAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2ZzdHJlYW0iIDIgMwojIDY1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2lzdHJlYW0iIDEgMwojIDY2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL29zdHJlYW0iIDEgMwojIDY3ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL3N0cmVhbWJ1ZiIgMSAzCiMgNjggIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyAx
ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaW9tYW5pcCIgMSAzCiMgMzEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9pb21hbmlwIiAzCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMSAzCiMgMzggIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb21hbmlwLmgiIDMKCiMg
MSAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9tYW5pcC5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvbWFuaXAuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1bmN0aW9uYWwuaCIgMSAzCiMgMTkgIi91
c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDMK
IyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMjAgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDIxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rpb25hbC5oIiAyIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMg
MzQgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5o
IiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+
CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBj
bGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlw
ZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2Fy
Z3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
X1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAtIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj
b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChwbHVzPF9UcD4pIHsKICBy
ZXR1cm4gX1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlf
ZWxlbWVudChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9U
cCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGdyZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0
dXJuIF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBw
dWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u
PF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3Qg
X1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1Rw
LGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195
KSBjb25zdCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsK
CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29s
PiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1
bmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29u
c3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRl
PihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25l
Z2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz
dF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJl
ZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGlj
aXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0
ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3By
ZWQoX194LCBfX3kpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUg
YmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkK
ewogIHJldHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5j
dGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90
ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1
bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9f
eCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRf
dHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlv
bjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVl
LCBfX3gpOwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0
b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFz
dChjb25zdCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVy
biBiaW5kZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJv
dGVjdGVkOgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2Fy
Z3VtZW50X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYg
X194LAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJh
dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194
LCB2YWx1ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVy
YXRvcigpKHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X09wZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQy
bmQoY29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5
cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0
dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CgoKCnRl
bXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5
X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6
YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0
aW9uMTo6cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBf
T3BlcmF0aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRp
b24xJiBfX3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9m
bjIoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9y
KCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09w
ZXJhdGlvbjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwg
Y29uc3QgX09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJh
dGlvbjEsX09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3Bl
cmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5h
cnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24y
Ojphcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVy
YXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fZm4xOwog
IF9PcGVyYXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBfTV9mbjM7CnB1YmxpYzoKICBiaW5h
cnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195
LAogICAgICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opCiAgICA6IF9NX2ZuMShf
X3gpLCBfTV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6
OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJn
dW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpLCBf
TV9mbjMoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBf
T3BlcmF0aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3Bl
cmF0aW9uMSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpjb21wb3NlMihjb25zdCBfT3BlcmF0
aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMiwKICAgICAgICAgY29uc3QgX09w
ZXJhdGlvbjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9P
cGVyYXRpb24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBfX2ZuMiwgX19mbjMpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9m
dW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3Rl
ZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlf
ZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3Vs
dCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0Fy
ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FyZywgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0Fy
ZywgX1Jlc3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2lu
dGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f
YmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsK
cHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkK
ICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwg
X0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5s
aW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9m
dW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2Jp
bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1Rw
PiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBj
b25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVu
dGl0eTxfVHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3Qg
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBl
PiB7CiAgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6
OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9feC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2Vs
ZWN0Mm5kIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vj
b25kX3R5cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1Bh
aXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVu
YW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+
IHN0cnVjdCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRl
IDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWly
PiB7fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2pl
Y3Qxc3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBf
QXJnMSBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyBy
ZXR1cm4gX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1
Y3QgX1Byb2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0Fy
ZzI+IHsKICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkg
Y29uc3QgeyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9B
cmcyPgpzdHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+
IHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3Qy
bmQgOiBwdWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsKCgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lkX2Z1biB7CiAgdHlwZWRlZiBfUmVz
dWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3ZvaWRf
ZnVuKGNvbnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCByZXN1
bHRfdHlwZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4Kc3RydWN0IF9Db25zdGFudF91bmFy
eV9mdW4gewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVz
dWx0IHJlc3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3VuYXJ5
X2Z1bihjb25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVz
dWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01f
dmFsOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEsIGNsYXNzIF9B
cmcyPgpzdHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZzEgZmlyc3Rf
YXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5
cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0IF9NX3ZhbDsKCiAgX0NvbnN0YW50
X2JpbmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3Qg
cmVzdWx0X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0
IHsKICAgIHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0
cnVjdCBjb25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3Vs
dD4gewogIGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfQ29uc3RhbnRf
dm9pZF9mdW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAog
ICAgICAgICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3VuYXJ5
X2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4Kewog
IGNvbnN0YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAgICA6IF9Db25zdGFudF91
bmFyeV9mdW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsCiAgICAgICAgICBjbGFz
cyBfQXJnMiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1bgogIDogcHVibGljIF9D
b25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4KewogIGNvbnN0YW50X2Jp
bmFyeV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxf
UmVzdWx0LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0
PgppbmxpbmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1
bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jl
c3VsdCxfUmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4g
Y29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0
LF9SZXN1bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25z
dGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCgoKY2xh
c3Mgc3VidHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwg
dW5zaWduZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsKICBz
aXplX3QgX01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25lZCBp
bnQgb3BlcmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9N
X2luZGV4MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsK
ICAgIF9NX3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVb
X01faW5kZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9
CgogIHZvaWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2ln
bmVkIGludCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9f
aTsKICAgIGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9f
aWkgPSAoMjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0g
X19rOwogICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJs
ZVtfX2lpXTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9v
cCsrKSB7CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAg
IF9NX3RhYmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkg
JSA1NV07CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQoK
ICBzdWJ0cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXplKF9f
c2VlZCk7IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4dSk7
IH0KfTsKIyA1MzMgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9m
dW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9m
dW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnBy
aXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxj
b25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0
IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg
eyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu
X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1
cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBt
ZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9BcmcsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9m
KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyBy
ZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShf
QXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCos
X0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9U
cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x
X3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBfTV9m
KF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyBy
ZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9B
cmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgY29uc3RfbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn
LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KF9SZXQgKF9U
cDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gp
OyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChf
VHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3Ap
IGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgp
Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9m
KF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IChfX3At
PipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9y
ZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu
X3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBj
b25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBj
b25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNv
bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf
dDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAqLF9Bcmcsdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJn
KSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBfQXJnIF9feCkg
Y29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3Rf
bWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNv
bnN0IF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90
KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w
ZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShf
X3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBf
VHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6
IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25z
dCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJn
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9m
dW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3Qodm9p
ZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsg
fQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fdDxfUmV0LF9UcD4g
bWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl90PF9SZXQsX1Rw
PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3Rf
bWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSBjb25zdCkKICB7
IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVu
X3JlZihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4gbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0
X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSBj
b25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1
bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyBy
ZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0
LF9UcCxfQXJnPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1
cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1bjFfcmVmX3Q8X1Jl
dCxfVHAsX0FyZz4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVy
biBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8
X1JldCxfVHAsX0FyZz4KbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkK
ICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgbWVtX2Z1
bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsg
cmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNz
IF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9mdW4xX3Q8X1Jl
dCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJl
dHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxf
UmV0LF9UcCxfQXJnPiBtZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJl
dHVybiBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfcmVm
X3Q8X1JldCxfVHAsX0FyZz4KbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykgY29u
c3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKfQojIDIyICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVu
Y3Rpb25hbC5oIiAyIDMKIyA0MiAiL3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lvbWFuaXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgc3RydWN0IF9SZXNldGlv
c2ZsYWdzIHsgaW9zX2Jhc2U6OmZtdGZsYWdzIF9NX21hc2s7IH07CgogIGlubGluZSBfUmVzZXRp
b3NmbGFncwogIHJlc2V0aW9zZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAg
ICBfUmVzZXRpb3NmbGFncyBfX3g7CiAgICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVy
biBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfUmVzZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAg
IF9faXMuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIF9fZi5fTV9tYXNrKTsKICAgICAgcmV0
dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsK
ICAgICAgX19vcy5zZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAg
ICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9TZXRpb3NmbGFncwogIHNldGlvc2ZsYWdz
IChpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9TZXRpb3NmbGFncyBfX3g7CiAg
ICBfX3guX01fbWFzayA9IF9fbWFzazsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lz
LCBfU2V0aW9zZmxhZ3MgX19mKQogICAgewogICAgICBfX2lzLnNldGYoX19mLl9NX21hc2spOwog
ICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8
PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldGlvc2ZsYWdzIF9fZikK
ICAgIHsKICAgICAgX19vcy5zZXRmKF9fZi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9fb3M7CiAg
ICB9CgoKICBzdHJ1Y3QgX1NldGJhc2UgeyBpbnQgX01fYmFzZTsgfTsKCiAgaW5saW5lIF9TZXRi
YXNlCiAgc2V0YmFzZSAoaW50IF9fYmFzZSkKICB7CiAgICBfU2V0YmFzZSBfX3g7CiAgICBfX3gu
X01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0
YmFzZSBfX2YpCiAgICB7CiAgICAgIF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jh
c2U6Om9jdCA6CiAgICAgICAgICAgICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVj
IDoKICAgICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAg
ICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAg
ICAgIHJldHVybiBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7
CiAgICAgIF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAg
ICAgICAgICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAg
ICAgICAgX19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAg
IGlvc19iYXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVy
biBfX29zOwogICAgfQoKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IF9TZXRm
aWxsIHsgX0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIF9TZXRm
aWxsPF9DaGFyVD4KICAgIHNldGZpbGwoX0NoYXJUIF9fYykKICAgIHsKICAgICAgX1NldGZpbGw8
X0NoYXJUPiBfX3g7CiAgICAgIF9feC5fTV9jID0gX19jOwogICAgICByZXR1cm4gX194OwogICAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfX2lzLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsKICAgICAgX19pcy5m
aWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9T
ZXRmaWxsPF9DaGFyVD4gX19mKQogICAgewogICAgICBfX29zLmZpbGwoX19mLl9NX2MpOwogICAg
ICByZXR1cm4gX19vczsKICAgIH0KCgogIHN0cnVjdCBfU2V0cHJlY2lzaW9uIHsgaW50IF9NX247
IH07CgogIGlubGluZSBfU2V0cHJlY2lzaW9uCiAgc2V0cHJlY2lzaW9uKGludCBfX24pCiAgewog
ICAgX1NldHByZWNpc2lvbiBfX3g7CiAgICBfX3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7
CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0cHJlY2lzaW9uIF9fZikKICAgIHsKICAgICAgX19pcy5w
cmVjaXNpb24oX19mLl9NX24pOwogICAgICByZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19v
cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9fb3MucHJlY2lzaW9uKF9fZi5fTV9u
KTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1Y3QgX1NldHcgeyBpbnQgX01fbjsg
fTsKCiAgaW5saW5lIF9TZXR3CiAgc2V0dyhpbnQgX19uKQogIHsKICAgIF9TZXR3IF9feDsKICAg
IF9feC5fTV9uID0gX19uOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBf
Q2hhclQsIGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9faXMsIF9TZXR3
IF9fZikKICAgIHsKICAgICAgX19pcy53aWR0aChfX2YuX01fbik7CiAgICAgIHJldHVybiBfX2lz
OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9fb3Mud2lkdGgo
X19mLl9NX24pOwogICAgICByZXR1cm4gX19vczsKICAgIH0KCn0KIyAzMiAiL3Vzci9sb2NhbC9n
Y2MtMy4wL2luY2x1ZGUvZysrLXYzL2lvbWFuaXAiIDIgMwojIDY5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2lvcyIgMSAzCiMgNzAgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9zdHJlYW1zLmgiIDIKIyAxICIvdXNyL2xvY2Fs
L2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAxIDMKIyAyMiAiL3Vz
ci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3N0cnN0cmVhbSIgMwojIDEg
Ii91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9iYWNrd2FyZF93YXJu
aW5nLmgiIDEgMwojIDIzICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMvYmFja3dh
cmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDI0ICIvdXNyL2xvY2FsL2djYy0zLjAvaW5jbHVkZS9n
KystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDEgMwojIDI1ICIvdXNyL2xvY2FsL2djYy0zLjAv
aW5jbHVkZS9nKystdjMvYmFja3dhcmQvc3Ryc3RyZWFtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2dj
Yy0zLjAvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAyNiAiL3Vzci9s
b2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JhY2t3YXJkL3N0cnN0cmVhbSIgMiAzCiMgMSAi
L3Vzci9sb2NhbC9nY2MtMy4wL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMSAz
CiMgMjcgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNrd2FyZC9zdHJzdHJl
YW0iIDIgMwojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJpbmcuaCIgMSAzCiMgMjggIi91c3IvbG9jYWwvZ2NjLTMuMC9pbmNsdWRlL2crKy12My9iYWNr
d2FyZC9zdHJzdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKY2xhc3Mgc3Ryc3RyZWFt
YnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyLCBjaGFyX3RyYWl0czxjaGFyPiA+CnsK
cHVibGljOgogIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcj4gX1RyYWl0czsKICB0eXBlZGVmIGJh
c2ljX3N0cmVhbWJ1ZjxjaGFyLCBfVHJhaXRzPiBfQmFzZTsKCnB1YmxpYzoKICBleHBsaWNpdCBz
dHJzdHJlYW1idWYoc3RyZWFtc2l6ZSBfX2luaXRpYWxfY2FwYWNpdHkgPSAwKTsKICBzdHJzdHJl
YW1idWYodm9pZCogKCpfX2FsbG9jKShzaXplX3QpLCB2b2lkICgqX19mcmVlKSh2b2lkKikpOwoK
ICBzdHJzdHJlYW1idWYoY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBjaGFyKiBfX3B1dCA9
IDApOwogIHN0cnN0cmVhbWJ1ZihzaWduZWQgY2hhciogX19nZXQsIHN0cmVhbXNpemUgX19uLCBz
aWduZWQgY2hhciogX19wdXQgPSAwKTsKICBzdHJzdHJlYW1idWYodW5zaWduZWQgY2hhciogX19n
ZXQsIHN0cmVhbXNpemUgX19uLCB1bnNpZ25lZCBjaGFyKiBfX3B1dD0wKTsKCiAgc3Ryc3RyZWFt
YnVmKGNvbnN0IGNoYXIqIF9fZ2V0LCBzdHJlYW1zaXplIF9fbik7CiAgc3Ryc3RyZWFtYnVmKGNv
bnN0IHNpZ25lZCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pOwogIHN0cnN0cmVhbWJ1Zihj
b25zdCB1bnNpZ25lZCBjaGFyKiBfX2dldCwgc3RyZWFtc2l6ZSBfX24pOwoKICB2aXJ0dWFsIH5z
dHJzdHJlYW1idWYoKTsKCnB1YmxpYzoKICB2b2lkIGZyZWV6ZShib29sID0gdHJ1ZSk7CiAgY2hh
ciogc3RyKCk7CiAgaW50IHBjb3VudCgpIGNvbnN0OwoKcHJvdGVjdGVkOgogIHZpcnR1YWwgaW50
X3R5cGUgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gX1RyYWl0czo6ZW9mKCkpOwogIHZpcnR1YWwg
aW50X3R5cGUgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IF9UcmFpdHM6OmVvZigpKTsKICB2aXJ0
dWFsIGludF90eXBlIHVuZGVyZmxvdygpOwogIHZpcnR1YWwgX0Jhc2UqIHNldGJ1ZihjaGFyKiBf
X2J1Ziwgc3RyZWFtc2l6ZSBfX24pOwogIHZpcnR1YWwgcG9zX3R5cGUgc2Vla29mZihvZmZfdHlw
ZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpOwogIHZpcnR1YWwgcG9z
X3R5cGUgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCk7Cgpwcml2YXRlOgoKICBjaGFyKiBfTV9hbGxvYyhzaXplX3QpOwogIHZvaWQg
X01fZnJlZShjaGFyKik7CgoKICB2b2lkIF9NX3NldHVwKGNoYXIqIF9fZ2V0LCBjaGFyKiBfX3B1
dCwgc3RyZWFtc2l6ZSBfX24pOwoKcHJpdmF0ZToKICB2b2lkKiAoKl9NX2FsbG9jX2Z1bikoc2l6
ZV90KTsKICB2b2lkICgqX01fZnJlZV9mdW4pKHZvaWQqKTsKCiAgYm9vbCBfTV9keW5hbWljIDog
MTsKICBib29sIF9NX2Zyb3plbiA6IDE7CiAgYm9vbCBfTV9jb25zdGFudCA6IDE7Cn07CgoKCgpj
bGFzcyBpc3Ryc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08Y2hhcj4KewpwdWJsaWM6CiAg
ZXhwbGljaXQgaXN0cnN0cmVhbShjaGFyKik7CiAgZXhwbGljaXQgaXN0cnN0cmVhbShjb25zdCBj
aGFyKik7CiAgaXN0cnN0cmVhbShjaGFyKiAsIHN0cmVhbXNpemUpOwogIGlzdHJzdHJlYW0oY29u
c3QgY2hhciosIHN0cmVhbXNpemUpOwogIHZpcnR1YWwgfmlzdHJzdHJlYW0oKTsKCiAgc3Ryc3Ry
ZWFtYnVmKiByZGJ1ZigpIGNvbnN0OwogIGNoYXIqIHN0cigpOwoKcHJpdmF0ZToKICBzdHJzdHJl
YW1idWYgX01fYnVmOwp9OwoKCgoKY2xhc3Mgb3N0cnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3Ry
ZWFtPGNoYXI+CnsKcHVibGljOgogIG9zdHJzdHJlYW0oKTsKICBvc3Ryc3RyZWFtKGNoYXIqLCBp
bnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjpvdXQpOwogIHZpcnR1YWwgfm9zdHJz
dHJlYW0oKTsKCiAgc3Ryc3RyZWFtYnVmKiByZGJ1ZigpIGNvbnN0OwogIHZvaWQgZnJlZXplKGJv
b2wgPSB0cnVlKTsKICBjaGFyKiBzdHIoKTsKICBpbnQgcGNvdW50KCkgY29uc3Q7Cgpwcml2YXRl
OgogIHN0cnN0cmVhbWJ1ZiBfTV9idWY7Cn07CgoKCgpjbGFzcyBzdHJzdHJlYW0gOiBwdWJsaWMg
YmFzaWNfaW9zdHJlYW08Y2hhcj4KewpwdWJsaWM6CiAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsK
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+OjppbnRfdHlwZSBpbnRfdHlwZTsKICB0eXBlZGVm
IGNoYXJfdHJhaXRzPGNoYXI+Ojpwb3NfdHlwZSBwb3NfdHlwZTsKICB0eXBlZGVmIGNoYXJfdHJh
aXRzPGNoYXI+OjpvZmZfdHlwZSBvZmZfdHlwZTsKCiAgc3Ryc3RyZWFtKCk7CiAgc3Ryc3RyZWFt
KGNoYXIqLCBpbnQsIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpOwogIHZpcnR1YWwgfnN0cnN0cmVhbSgpOwoKICBzdHJzdHJlYW1idWYqIHJkYnVmKCkg
Y29uc3Q7CiAgdm9pZCBmcmVlemUoYm9vbCA9IHRydWUpOwogIGludCBwY291bnQoKSBjb25zdDsK
ICBjaGFyKiBzdHIoKTsKCnByaXZhdGU6CiAgc3Ryc3RyZWFtYnVmIF9NX2J1ZjsKfTsKCn0KIyA3
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3N0cmVhbXMu
aCIgMgoKCgoKCgoKICAgICAgICB1c2luZyBzdGQ6OmlvczsKICAgICAgICB1c2luZyBzdGQ6OnN0
cmVhbWJ1ZjsKICAgICAgICB1c2luZyBzdGQ6OmlzdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpv
c3RyZWFtOwogICAgICAgIHVzaW5nIHN0ZDo6aW9zdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpm
aWxlYnVmOwogICAgICAgIHVzaW5nIHN0ZDo6aWZzdHJlYW07CiAgICAgICAgdXNpbmcgc3RkOjpv
ZnN0cmVhbTsKICAgICAgICB1c2luZyBzdGQ6OmZzdHJlYW07CgogICAgICAgIHVzaW5nIHN0ZDo6
aXN0cnN0cmVhbTsKICAgICAgICB1c2luZyBzdGQ6Om9zdHJzdHJlYW07CgogICAgICAgIHVzaW5n
IHN0ZDo6Y2luOwogICAgICAgIHVzaW5nIHN0ZDo6Y291dDsKICAgICAgICB1c2luZyBzdGQ6OmNl
cnI7CiAgICAgICAgdXNpbmcgc3RkOjpjbG9nOwoKICAgICAgICB1c2luZyBzdGQ6OmVuZGw7CiAg
ICAgICAgdXNpbmcgc3RkOjplbmRzOwogICAgICAgIHVzaW5nIHN0ZDo6Zmx1c2g7CgogICAgICAg
IHVzaW5nIHN0ZDo6d3M7CgogICAgICAgIHVzaW5nIHN0ZDo6cmVzZXRpb3NmbGFnczsKICAgICAg
ICB1c2luZyBzdGQ6OnNldGZpbGw7CiAgICAgICAgdXNpbmcgc3RkOjpzZXRpb3NmbGFnczsKICAg
ICAgICB1c2luZyBzdGQ6OnNldHByZWNpc2lvbjsKICAgICAgICB1c2luZyBzdGQ6OnNldHc7Cgog
ICAgICAgIHVzaW5nIHN0ZDo6ZGVjOwogICAgICAgIHVzaW5nIHN0ZDo6aGV4OwogICAgICAgIHVz
aW5nIHN0ZDo6b2N0OwojIDE0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3N0cmVhbXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAyCiMgMjkxNiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2ZjbnRsLmgiIDEgMwojIDI5MjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMjkzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2ljX1R5cGVzLmgiIDEKIyAyOTM0ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDI5NDcgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogICAgICB0eXBlZGVm
IGxvZmZfdCBBQ0VfTE9GRl9UOwojIDI5NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpzdGF0aWMgY29uc3QgQUNFX1VJTlQzMiBBQ0VfVV9PTkVf
U0VDT05EX0lOX01TRUNTID0gMTAwMFU7CnN0YXRpYyBjb25zdCBBQ0VfVUlOVDMyIEFDRV9VX09O
RV9TRUNPTkRfSU5fVVNFQ1MgPSAxMDAwMDAwVTsKc3RhdGljIGNvbnN0IEFDRV9VSU5UMzIgQUNF
X1VfT05FX1NFQ09ORF9JTl9OU0VDUyA9IDEwMDAwMDAwMDBVOwojIDMwMDggIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpleHRlcm4gIkMiIHNzaXpl
X3QgcHJlYWQgKGludCBmZCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICBvZmZfdCBvZmZzZXQpOwoKZXh0ZXJuICJDIiBzc2l6ZV90IHB3cml0ZSAoaW50IGZk
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZf
dCBvZmZzZXQpOwojIDMwMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5oIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBtc2doZHIgQUNFX1NFTkRNU0dfVFlQ
RTsKIyAzMDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaCIKdHlwZWRlZiB1X2ludCBBQ0VfUkFORFJfVFlQRTsKIyAzMDg1ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiB2b2lkICgqQUNF
X1NpZ25hbEhhbmRsZXIpKGludCk7CnR5cGVkZWYgdm9pZCAoKkFDRV9TaWduYWxIYW5kbGVyViko
aW50KTsKIyAzNTMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaCIKdHlwZWRlZiBpbnQgQUNFX2V4aXRjb2RlOwojIDM1NDYgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfZXZlbnRfdAp7
CiAgZnJpZW5kIGNsYXNzIEFDRV9PUzsKcHJvdGVjdGVkOgoKICBBQ0VfbXV0ZXhfdCBsb2NrXzsK
CgogIEFDRV9jb25kX3QgY29uZGl0aW9uXzsKCgogIGludCBtYW51YWxfcmVzZXRfOwoKCiAgaW50
IGlzX3NpZ25hbGVkXzsKCgogIHVfbG9uZyB3YWl0aW5nX3RocmVhZHNfOwp9OwoKc3RydWN0IEFD
RV9PVkVSTEFQUEVECnsKICB1X2xvbmcgSW50ZXJuYWw7CiAgdV9sb25nIEludGVybmFsSGlnaDsK
ICB1X2xvbmcgT2Zmc2V0OwogIHVfbG9uZyBPZmZzZXRIaWdoOwogIEFDRV9IQU5ETEUgaEV2ZW50
Owp9OwojIDM2MTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDEgMwojIDIzICIvdXNyL2lu
Y2x1ZGUvc3lzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDI0ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL3Vpby5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5
cy91aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjUgIi91
c3IvaW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy91aW8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9iaXRzL3Vpby5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvdWlv
LmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvYml0cy91aW8uaCIgMwpzdHJ1Y3QgaW92ZWMKICB7
CiAgICB2b2lkICppb3ZfYmFzZTsKICAgIHNpemVfdCBpb3ZfbGVuOwogIH07CiMgMzAgIi91c3Iv
aW5jbHVkZS9zeXMvdWlvLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIHNzaXplX3QgcmVhZHYgKGludCBf
X2ZkLCBfX2NvbnN0IHN0cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gc3NpemVfdCB3cml0ZXYgKGludCBfX2ZkLCBfX2NvbnN0IHN0
cnVjdCBpb3ZlYyAqX192ZWN0b3IsIGludCBfX2NvdW50KQogICAgIHRocm93ICgpOwoKfQojIDI4
ICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4w
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMiAzCgoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zb2NrZXQuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAz
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0Lmgi
IDIgMwoKIyAxICIvdXNyL2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy9zb2Nr
ZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAzMyAiL3Vzci9p
bmNsdWRlL2JpdHMvc29ja2V0LmgiIDIgMwojIDQxICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQu
aCIgMwplbnVtIF9fc29ja2V0X3R5cGUKewogIFNPQ0tfU1RSRUFNID0gMSwKCgogIFNPQ0tfREdS
QU0gPSAyLAoKCiAgU09DS19SQVcgPSAzLAoKICBTT0NLX1JETSA9IDQsCgogIFNPQ0tfU0VRUEFD
S0VUID0gNSwKCgogIFNPQ0tfUEFDS0VUID0gMTAKCgoKfTsKIyAxMzggIi91c3IvaW5jbHVkZS9i
aXRzL3NvY2tldC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2thZGRyLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBzaG9y
dCBpbnQgc2FfZmFtaWx5X3Q7CiMgMTM5ICIvdXNyL2luY2x1ZGUvYml0cy9zb2NrZXQuaCIgMiAz
CgoKc3RydWN0IHNvY2thZGRyCiAgewogICAgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OwogICAgY2hh
ciBzYV9kYXRhWzE0XTsKICB9OwojIDE1OCAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2V0LmgiIDMK
c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UKICB7CiAgICBzYV9mYW1pbHlfdCBzc19mYW1pbHk7CiAg
ICBfX3VpbnQzMl90IF9fc3NfYWxpZ247CiAgICBjaGFyIF9fc3NfcGFkZGluZ1soMTI4IC0gKDIg
KiBzaXplb2YgKF9fdWludDMyX3QpKSldOwogIH07CgoKCmVudW0KICB7CiAgICBNU0dfT09CID0g
MHgwMSwKCiAgICBNU0dfUEVFSyA9IDB4MDIsCgogICAgTVNHX0RPTlRST1VURSA9IDB4MDQsCgoK
CiAgICBNU0dfVFJZSEFSRCA9IE1TR19ET05UUk9VVEUsCgoKICAgIE1TR19DVFJVTkMgPSAweDA4
LAoKICAgIE1TR19QUk9YWSA9IDB4MTAsCgogICAgTVNHX1RSVU5DID0gMHgyMCwKCiAgICBNU0df
RE9OVFdBSVQgPSAweDQwLAoKICAgIE1TR19FT1IgPSAweDgwLAoKICAgIE1TR19XQUlUQUxMID0g
MHgxMDAsCgogICAgTVNHX0ZJTiA9IDB4MjAwLAoKICAgIE1TR19TWU4gPSAweDQwMCwKCiAgICBN
U0dfQ09ORklSTSA9IDB4ODAwLAoKICAgIE1TR19SU1QgPSAweDEwMDAsCgogICAgTVNHX0VSUlFV
RVVFID0gMHgyMDAwLAoKICAgIE1TR19OT1NJR05BTCA9IDB4NDAwMAoKICB9OwoKCgoKc3RydWN0
IG1zZ2hkcgogIHsKICAgIHZvaWQgKm1zZ19uYW1lOwogICAgc29ja2xlbl90IG1zZ19uYW1lbGVu
OwoKICAgIHN0cnVjdCBpb3ZlYyAqbXNnX2lvdjsKICAgIGludCBtc2dfaW92bGVuOwoKICAgIHZv
aWQgKm1zZ19jb250cm9sOwogICAgc29ja2xlbl90IG1zZ19jb250cm9sbGVuOwoKICAgIGludCBt
c2dfZmxhZ3M7CiAgfTsKCgpzdHJ1Y3QgY21zZ2hkcgogIHsKICAgIHNpemVfdCBjbXNnX2xlbjsK
CiAgICBpbnQgY21zZ19sZXZlbDsKICAgIGludCBjbXNnX3R5cGU7CiAgICBfX2V4dGVuc2lvbl9f
IHVuc2lnbmVkIGNoYXIgX19jbXNnX2RhdGEgW107CgogIH07CiMgMjUwICIvdXNyL2luY2x1ZGUv
Yml0cy9zb2NrZXQuaCIgMwpleHRlcm4gc3RydWN0IGNtc2doZHIgKl9fY21zZ19ueHRoZHIgKHN0
cnVjdCBtc2doZHIgKl9fbWhkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBfX2lubGluZSBz
dHJ1Y3QgY21zZ2hkciAqCl9fY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbWhkciwgc3Ry
dWN0IGNtc2doZHIgKl9fY21zZykgdGhyb3cgKCkKewogIGlmICgoc2l6ZV90KSBfX2Ntc2ctPmNt
c2dfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikpCgogICAgcmV0dXJuIDA7CgogIF9fY21z
ZyA9IChzdHJ1Y3QgY21zZ2hkciAqKSAoKHVuc2lnbmVkIGNoYXIgKikgX19jbXNnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChz
aXplX3QpIC0gMSkgJiAoc2l6ZV90KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKSk7CiAgaWYgKCh1
bnNpZ25lZCBjaGFyICopIChfX2Ntc2cgKyAxKSA+PSAoKHVuc2lnbmVkIGNoYXIgKikgX19taGRy
LT5tc2dfY29udHJvbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsg
X19taGRyLT5tc2dfY29udHJvbGxlbikKICAgICAgfHwgKCh1bnNpZ25lZCBjaGFyICopIF9fY21z
ZyArICgoKF9fY21zZy0+Y21zZ19sZW4pICsgc2l6ZW9mIChzaXplX3QpIC0gMSkgJiAoc2l6ZV90
KSB+KHNpemVvZiAoc2l6ZV90KSAtIDEpKQogICAgICAgICAgPiAoKHVuc2lnbmVkIGNoYXIgKikg
X19taGRyLT5tc2dfY29udHJvbCArIF9fbWhkci0+bXNnX2NvbnRyb2xsZW4pKSkKCiAgICByZXR1
cm4gMDsKICByZXR1cm4gX19jbXNnOwp9CgoKCgplbnVtCiAgewogICAgU0NNX1JJR0hUUyA9IDB4
MDEsCgoKICAgIFNDTV9DUkVERU5USUFMUyA9IDB4MDIsCgoKICAgIF9fU0NNX0NPTk5FQ1QgPSAw
eDAzCiAgfTsKCgoKc3RydWN0IHVjcmVkCnsKICBwaWRfdCBwaWQ7CiAgdWlkX3QgdWlkOwogIGdp
ZF90IGdpZDsKfTsKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vc29ja2V0LmgiIDEgMwoKCgojIDEg
Ii91c3IvaW5jbHVkZS9hc20vc29ja2lvcy5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvYXNtL3Nv
Y2tldC5oIiAyIDMKIyAyOTkgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAyIDMKCgoKc3Ry
dWN0IGxpbmdlcgogIHsKICAgIGludCBsX29ub2ZmOwogICAgaW50IGxfbGluZ2VyOwogIH07CiMg
MzYgIi91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmgiIDIgMwoKCgoKc3RydWN0IG9zb2NrYWRkcgog
IHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBzYV9mYW1pbHk7CiAgICB1bnNpZ25lZCBjaGFyIHNh
X2RhdGFbMTRdOwogIH07CgoKCgplbnVtCnsKICBTSFVUX1JEID0gMCwKCiAgU0hVVF9XUiwKCiAg
U0hVVF9SRFdSCgp9OwojIDEwMCAiL3Vzci9pbmNsdWRlL3N5cy9zb2NrZXQuaCIgMwpleHRlcm4g
aW50IHNvY2tldCAoaW50IF9fZG9tYWluLCBpbnQgX190eXBlLCBpbnQgX19wcm90b2NvbCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzb2NrZXRwYWlyIChpbnQgX19kb21haW4sIGludCBfX3R5
cGUsIGludCBfX3Byb3RvY29sLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Zkc1syXSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiaW5kIChpbnQgX19mZCwgX19jb25zdCBzdHJ1Y3Qgc29j
a2FkZHIgKiBfX2FkZHIsIHNvY2tsZW5fdCBfX2xlbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGdldHNvY2tuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f
YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fbGVu
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGNvbm5lY3QgKGludCBfX2ZkLCBfX2NvbnN0IHN0
cnVjdCBzb2NrYWRkciAqIF9fYWRkciwgc29ja2xlbl90IF9fbGVuKQogICAgIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGdldHBlZXJuYW1lIChpbnQgX19mZCwgc3RydWN0IHNvY2thZGRyICpfX3Jl
c3RyaWN0IF9fYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpfX3Jlc3Ry
aWN0IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kIChpbnQgX19mZCwgX19jb25z
dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgcmVjdiAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLCBpbnQg
X19mbGFncykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZW5kdG8gKGludCBfX2ZkLCBf
X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgaW50IF9f
ZmxhZ3MsIF9fY29uc3Qgc3RydWN0IHNvY2thZGRyICogX19hZGRyLAogICAgICAgICAgICAgICAg
ICAgc29ja2xlbl90IF9fYWRkcl9sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmVjdmZy
b20gKGludCBfX2ZkLCB2b2lkICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19uLCBpbnQgX19m
bGFncywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9f
YWRkciwgc29ja2xlbl90ICpfX3Jlc3RyaWN0IF9fYWRkcl9sZW4pCiAgICAgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNlbmRtc2cgKGludCBfX2ZkLCBfX2NvbnN0IHN0cnVjdCBtc2doZHIgKl9f
bWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmVjdm1z
ZyAoaW50IF9fZmQsIHN0cnVjdCBtc2doZHIgKl9fbWVzc2FnZSwgaW50IF9fZmxhZ3MpCiAgICAg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRzb2Nrb3B0IChpbnQgX19mZCwgaW50IF9fbGV2
ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmlj
dCBfX29wdHZhbCwKICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3Qg
X19vcHRsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRzb2Nrb3B0IChpbnQgX19mZCwg
aW50IF9fbGV2ZWwsIGludCBfX29wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB2b2lkICpfX29wdHZhbCwgc29ja2xlbl90IF9fb3B0bGVuKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IGxpc3RlbiAoaW50IF9fZmQsIGludCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IGFjY2VwdCAoaW50IF9fZmQsIHN0cnVjdCBzb2NrYWRkciAqX19yZXN0cmljdCBfX2FkZHIs
CiAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKl9fcmVzdHJpY3QgX19hZGRyX2xlbikKICAg
ICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgc2h1dGRvd24gKGludCBfX2ZkLCBpbnQgX19o
b3cpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzZmR0eXBlIChpbnQgX19mZCwgaW50IF9f
ZmR0eXBlKSB0aHJvdyAoKTsKCgp9CiMgMzYxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgpleHRlcm4gIkMiCnsKIyAzNjMwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2lu
Y2x1ZGUvbmV0ZGIuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAz
CgojIDEgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUv
bmV0aW5ldC9pbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIv
dXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50Lmgi
IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCgojIDEgIi91c3Iv
bG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z
dGRkZWYuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9zdGRpbnQuaCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgdWludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdWludDE2X3Q7
Cgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50MzJfdDsKCgoKCgpfX2V4dGVuc2lvbl9fCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKCgoKCgoKdHlwZWRlZiBzaWduZWQg
Y2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7CnR5cGVk
ZWYgaW50IGludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25nIGxvbmcg
aW50IGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xlYXN0OF90
Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdWludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25l
ZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFy
IGludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYgaW50IGludF9mYXN0MTZfdDsKdHlwZWRlZiBpbnQg
aW50X2Zhc3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRfZmFz
dDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgdWludF9mYXN0MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludF9m
YXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWlu
dF9mYXN0NjRfdDsKIyAxMzEgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwp0eXBlZGVmIHVuc2ln
bmVkIGludCB1aW50cHRyX3Q7CiMgMTQwICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDMKX19leHRl
bnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9fZXh0ZW5zaW9uX18KdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKIyAyNCAiL3Vzci9pbmNsdWRl
L25ldGluZXQvaW4uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCmVudW0K
ICB7CiAgICBJUFBST1RPX0lQID0gMCwKCiAgICBJUFBST1RPX0hPUE9QVFMgPSAwLAoKICAgIElQ
UFJPVE9fSUNNUCA9IDEsCgogICAgSVBQUk9UT19JR01QID0gMiwKCiAgICBJUFBST1RPX0lQSVAg
PSA0LAoKICAgIElQUFJPVE9fVENQID0gNiwKCiAgICBJUFBST1RPX0VHUCA9IDgsCgogICAgSVBQ
Uk9UT19QVVAgPSAxMiwKCiAgICBJUFBST1RPX1VEUCA9IDE3LAoKICAgIElQUFJPVE9fSURQID0g
MjIsCgogICAgSVBQUk9UT19UUCA9IDI5LAoKICAgIElQUFJPVE9fSVBWNiA9IDQxLAoKICAgIElQ
UFJPVE9fUk9VVElORyA9IDQzLAoKICAgIElQUFJPVE9fRlJBR01FTlQgPSA0NCwKCiAgICBJUFBS
T1RPX1JTVlAgPSA0NiwKCiAgICBJUFBST1RPX0dSRSA9IDQ3LAoKICAgIElQUFJPVE9fRVNQID0g
NTAsCgogICAgSVBQUk9UT19BSCA9IDUxLAoKICAgIElQUFJPVE9fSUNNUFY2ID0gNTgsCgogICAg
SVBQUk9UT19OT05FID0gNTksCgogICAgSVBQUk9UT19EU1RPUFRTID0gNjAsCgogICAgSVBQUk9U
T19NVFAgPSA5MiwKCiAgICBJUFBST1RPX0VOQ0FQID0gOTgsCgogICAgSVBQUk9UT19QSU0gPSAx
MDMsCgogICAgSVBQUk9UT19DT01QID0gMTA4LAoKICAgIElQUFJPVE9fUkFXID0gMjU1LAoKICAg
IElQUFJPVE9fTUFYCiAgfTsKCgoKdHlwZWRlZiB1aW50MTZfdCBpbl9wb3J0X3Q7CgoKZW51bQog
IHsKICAgIElQUE9SVF9FQ0hPID0gNywKICAgIElQUE9SVF9ESVNDQVJEID0gOSwKICAgIElQUE9S
VF9TWVNUQVQgPSAxMSwKICAgIElQUE9SVF9EQVlUSU1FID0gMTMsCiAgICBJUFBPUlRfTkVUU1RB
VCA9IDE1LAogICAgSVBQT1JUX0ZUUCA9IDIxLAogICAgSVBQT1JUX1RFTE5FVCA9IDIzLAogICAg
SVBQT1JUX1NNVFAgPSAyNSwKICAgIElQUE9SVF9USU1FU0VSVkVSID0gMzcsCiAgICBJUFBPUlRf
TkFNRVNFUlZFUiA9IDQyLAogICAgSVBQT1JUX1dIT0lTID0gNDMsCiAgICBJUFBPUlRfTVRQID0g
NTcsCgogICAgSVBQT1JUX1RGVFAgPSA2OSwKICAgIElQUE9SVF9SSkUgPSA3NywKICAgIElQUE9S
VF9GSU5HRVIgPSA3OSwKICAgIElQUE9SVF9UVFlMSU5LID0gODcsCiAgICBJUFBPUlRfU1VQRFVQ
ID0gOTUsCgoKICAgIElQUE9SVF9FWEVDU0VSVkVSID0gNTEyLAogICAgSVBQT1JUX0xPR0lOU0VS
VkVSID0gNTEzLAogICAgSVBQT1JUX0NNRFNFUlZFUiA9IDUxNCwKICAgIElQUE9SVF9FRlNTRVJW
RVIgPSA1MjAsCgoKICAgIElQUE9SVF9CSUZGVURQID0gNTEyLAogICAgSVBQT1JUX1dIT1NFUlZF
UiA9IDUxMywKICAgIElQUE9SVF9ST1VURVNFUlZFUiA9IDUyMCwKCgogICAgSVBQT1JUX1JFU0VS
VkVEID0gMTAyNCwKCgogICAgSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKICB9OwoKCgp0eXBl
ZGVmIHVpbnQzMl90IGluX2FkZHJfdDsKc3RydWN0IGluX2FkZHIKICB7CiAgICBpbl9hZGRyX3Qg
c19hZGRyOwogIH07CiMgMTkwICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCnN0cnVjdCBp
bjZfYWRkcgogIHsKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICB1aW50OF90IHU2X2FkZHI4WzE2
XTsKICAgICAgICB1aW50MTZfdCB1Nl9hZGRyMTZbOF07CiAgICAgICAgdWludDMyX3QgdTZfYWRk
cjMyWzRdOwogICAgICB9IGluNl91OwoKCgogIH07CgpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9h
ZGRyIGluNmFkZHJfYW55OwpleHRlcm4gY29uc3Qgc3RydWN0IGluNl9hZGRyIGluNmFkZHJfbG9v
cGJhY2s7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NvY2tldC5oIiAxIDMKIyAyMTMg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDIgMwoKCgpzdHJ1Y3Qgc29ja2FkZHJfaW4KICB7
CiAgICBzYV9mYW1pbHlfdCBzaW5fZmFtaWx5OwogICAgaW5fcG9ydF90IHNpbl9wb3J0OwogICAg
c3RydWN0IGluX2FkZHIgc2luX2FkZHI7CgoKICAgIHVuc2lnbmVkIGNoYXIgc2luX3plcm9bc2l6
ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpIC0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNpemVv
ZiAodW5zaWduZWQgc2hvcnQgaW50KSkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
b2YgKGluX3BvcnRfdCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0cnVj
dCBpbl9hZGRyKV07CiAgfTsKCgpzdHJ1Y3Qgc29ja2FkZHJfaW42CiAgewogICAgc2FfZmFtaWx5
X3Qgc2luNl9mYW1pbHk7CiAgICBpbl9wb3J0X3Qgc2luNl9wb3J0OwogICAgdWludDMyX3Qgc2lu
Nl9mbG93aW5mbzsKICAgIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CiAgICB1aW50MzJfdCBz
aW42X3Njb3BlX2lkOwogIH07CgoKc3RydWN0IGlwdjZfbXJlcQogIHsKCiAgICBzdHJ1Y3QgaW42
X2FkZHIgaXB2Nm1yX211bHRpYWRkcjsKCgogICAgdW5zaWduZWQgaW50IGlwdjZtcl9pbnRlcmZh
Y2U7CiAgfTsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2luLmgiIDEgMwojIDY2ICIvdXNyL2lu
Y2x1ZGUvYml0cy9pbi5oIiAzCnN0cnVjdCBpcF9vcHRzCiAgewogICAgc3RydWN0IGluX2FkZHIg
aXBfZHN0OwogICAgY2hhciBpcF9vcHRzWzQwXTsKICB9OwoKCnN0cnVjdCBpcF9tcmVxCiAgewog
ICAgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKICAgIHN0cnVjdCBpbl9hZGRyIGltcl9p
bnRlcmZhY2U7CiAgfTsKCgpzdHJ1Y3QgaXBfbXJlcW4KICB7CiAgICBzdHJ1Y3QgaW5fYWRkciBp
bXJfbXVsdGlhZGRyOwogICAgc3RydWN0IGluX2FkZHIgaW1yX2FkZHJlc3M7CiAgICBpbnQgaW1y
X2lmaW5kZXg7CiAgfTsKCgpzdHJ1Y3QgaW5fcGt0aW5mbwogIHsKICAgIGludCBpcGlfaWZpbmRl
eDsKICAgIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKICAgIHN0cnVjdCBpbl9hZGRyIGlw
aV9hZGRyOwogIH07CiMgMjUxICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKIyAyNTkg
Ii91c3IvaW5jbHVkZS9uZXRpbmV0L2luLmgiIDMKZXh0ZXJuIHVpbnQzMl90IG50b2hsICh1aW50
MzJfdCBfX25ldGxvbmcpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0
ZXJuIHVpbnQxNl90IG50b2hzICh1aW50MTZfdCBfX25ldHNob3J0KQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIHVpbnQzMl90IGh0b25sICh1aW50MzJf
dCBfX2hvc3Rsb25nKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
ZXh0ZXJuIHVpbnQxNl90IGh0b25zICh1aW50MTZfdCBfX2hvc3RzaG9ydCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4u
aCIgMSAzCiMgMjY4ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAyIDMKCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL2J5dGVzd2FwLmgiIDEgMwojIDI3MSAiL3Vzci9pbmNsdWRlL25ldGluZXQv
aW4uaCIgMiAzCiMgMzMzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIiAzCmV4dGVybiBpbnQg
YmluZHJlc3Zwb3J0IChpbnQgX19zb2NrZmQsIHN0cnVjdCBzb2NrYWRkcl9pbiAqX19zb2NrX2lu
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGJpbmRyZXN2cG9ydDYgKGludCBfX3NvY2tmZCwgc3Ry
dWN0IHNvY2thZGRyX2luNiAqX19zb2NrX2luKQogICAgIHRocm93ICgpOwojIDM2MSAiL3Vzci9p
bmNsdWRlL25ldGluZXQvaW4uaCIgMwpzdHJ1Y3QgaW42X3BrdGluZm8KICB7CiAgICBzdHJ1Y3Qg
aW42X2FkZHIgaXBpNl9hZGRyOwogICAgdW5zaWduZWQgaW50IGlwaTZfaWZpbmRleDsKICB9OwoK
fQojIDI5ICIvdXNyL2luY2x1ZGUvbmV0ZGIuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0ZGlu
dC5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j
bHVkZS9ycGMvbmV0ZGIuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9ycGMvbmV0ZGIuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3JwYy9u
ZXRkYi5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9y
cGMvbmV0ZGIuaCIgMiAzCgpleHRlcm4gIkMiIHsKCnN0cnVjdCBycGNlbnQKewogIGNoYXIgKnJf
bmFtZTsKICBjaGFyICoqcl9hbGlhc2VzOwogIGludCByX251bWJlcjsKfTsKCmV4dGVybiB2b2lk
IHNldHJwY2VudCAoaW50IF9fc3RheW9wZW4pIHRocm93ICgpOwpleHRlcm4gdm9pZCBlbmRycGNl
bnQgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gc3RydWN0IHJwY2VudCAqZ2V0cnBjYnluYW1lIChf
X2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVybiBzdHJ1Y3QgcnBjZW50ICpnZXRy
cGNieW51bWJlciAoaW50IF9fbnVtYmVyKSB0aHJvdyAoKTsKZXh0ZXJuIHN0cnVjdCBycGNlbnQg
KmdldHJwY2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRycGNieW5hbWVfciAo
X19jb25zdCBjaGFyICpfX25hbWUsIHN0cnVjdCBycGNlbnQgKl9fcmVzdWx0X2J1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19idWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJwY2VudCAqKl9fcmVzdWx0KSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZ2V0cnBjYnludW1iZXJfciAoaW50IF9fbnVtYmVyLCBzdHJ1Y3QgcnBj
ZW50ICpfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19i
dWZmZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRycGNlbnRfciAo
c3RydWN0IHJwY2VudCAqX19yZXN1bHRfYnVmLCBjaGFyICpfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fYnVmbGVuLCBzdHJ1Y3QgcnBjZW50ICoqX19yZXN1bHQpIHRo
cm93ICgpOwoKCn0KIyAzNCAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDIgMwoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdp
bmZvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNiAiL3Vz
ci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL25ldGRiLmgi
IDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL25l
dGRiLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmV0ZGIuaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9iaXRzL25ldGRiLmgiIDMKc3RydWN0IG5ldGVudAp7CiAgY2hhciAqbl9uYW1l
OwogIGNoYXIgKipuX2FsaWFzZXM7CiAgaW50IG5fYWRkcnR5cGU7CiAgdWludDMyX3Qgbl9uZXQ7
Cn07CiMgNDQgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAyIDMKIyA1NCAiL3Vzci9pbmNsdWRlL25l
dGRiLmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBoX2Vycm5vOwoKCmV4dGVybiBpbnQg
Kl9faF9lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwojIDEwNSAiL3Vzci9pbmNsdWRlL25ldGRiLmgiIDMKZXh0ZXJuIHZvaWQgaGVycm9y
IChfX2NvbnN0IGNoYXIgKl9fc3RyKSB0aHJvdyAoKTsKCgpleHRlcm4gX19jb25zdCBjaGFyICpo
c3RyZXJyb3IgKGludCBfX2Vycl9udW0pIHRocm93ICgpOwoKCgoKc3RydWN0IGhvc3RlbnQKewog
IGNoYXIgKmhfbmFtZTsKICBjaGFyICoqaF9hbGlhc2VzOwogIGludCBoX2FkZHJ0eXBlOwogIGlu
dCBoX2xlbmd0aDsKICBjaGFyICoqaF9hZGRyX2xpc3Q7Cgp9OwoKCgpleHRlcm4gdm9pZCBzZXRo
b3N0ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZGhvc3Rl
bnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RlbnQg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIg
KF9fY29uc3Qgdm9pZCAqX19hZGRyLCBfX3NvY2tsZW5fdCBfX2xlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX190eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3Ry
dWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUyIChfX2NvbnN0IGNo
YXIgKl9fbmFtZSwgaW50IF9fYWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGhvc3Rl
bnRfciAoc3RydWN0IGhvc3RlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3Ap
IHRocm93ICgpOwoKZXh0ZXJuIGludCBnZXRob3N0YnlhZGRyX3IgKF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX2FkZHIsIF9fc29ja2xlbl90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0
ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2hfZXJybm9wKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgZ2V0aG9zdGJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19y
ZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGhvc3RlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJu
IGludCBnZXRob3N0YnluYW1lMl9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLCBp
bnQgX19hZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqX19y
ZXN0cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBob3N0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19oX2Vycm5vcCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgc2V0bmV0ZW50IChpbnQgX19zdGF5X29wZW4pIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIGVuZG5ldGVudCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgbmV0
ZW50ICpnZXRuZXRlbnQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IG5ldGVudCAq
Z2V0bmV0YnlhZGRyICh1aW50MzJfdCBfX25ldCwgaW50IF9fdHlwZSkKICAgICB0aHJvdyAoKTsK
CgpleHRlcm4gc3RydWN0IG5ldGVudCAqZ2V0bmV0YnluYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFt
ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdldG5ldGVudF9yIChzdHJ1Y3QgbmV0ZW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93ICgpOwoKZXh0ZXJuIGludCBn
ZXRuZXRieWFkZHJfciAodWludDMyX3QgX19uZXQsIGludCBfX3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19i
dWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRlbnQgKipfX3Jlc3Ry
aWN0IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3Qg
X19oX2Vycm5vcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldG5ldGJ5bmFtZV9yIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3QgbmV0ZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0ZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9faF9lcnJub3ApIHRocm93
ICgpOwoKCgoKc3RydWN0IHNlcnZlbnQKewogIGNoYXIgKnNfbmFtZTsKICBjaGFyICoqc19hbGlh
c2VzOwogIGludCBzX3BvcnQ7CiAgY2hhciAqc19wcm90bzsKfTsKCgoKZXh0ZXJuIHZvaWQgc2V0
c2VydmVudCAoaW50IF9fc3RheV9vcGVuKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRzZXJ2
ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2ZW50
ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2YnluYW1l
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcHJvdG8pIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHNl
cnZlbnQgKmdldHNlcnZieXBvcnQgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19wcm90bykK
ICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHNlcnZlbnRfciAoc3RydWN0IHNlcnZl
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgZ2V0c2VydmJ5bmFtZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
cHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqX19yZXN0
cmljdCBfX3Jlc3VsdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jl
c3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2VydmVudCAqKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBnZXRzZXJ2Ynlwb3J0X3IgKGludCBfX3BvcnQsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3Byb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlcnZlbnQgKl9f
cmVzdHJpY3QgX19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
X19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNlcnZlbnQgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgoK
CnN0cnVjdCBwcm90b2VudAp7CiAgY2hhciAqcF9uYW1lOwogIGNoYXIgKipwX2FsaWFzZXM7CiAg
aW50IHBfcHJvdG87Cn07CgoKCmV4dGVybiB2b2lkIHNldHByb3RvZW50IChpbnQgX19zdGF5X29w
ZW4pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGVuZHByb3RvZW50ICh2b2lkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQgKHZvaWQpIHRocm93ICgpOwoK
CmV4dGVybiBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnluYW1lIChfX2NvbnN0IGNoYXIgKl9f
bmFtZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW51bWJl
ciAoaW50IF9fcHJvdG8pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0cHJvdG9lbnRfciAo
c3RydWN0IHByb3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3Vs
dCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnluYW1lX3IgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBy
b3RvZW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0X2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19idWZsZW4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CgpleHRlcm4gaW50IGdldHByb3RvYnludW1iZXJfciAoaW50IF9fcHJvdG8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9lbnQgKl9fcmVzdHJpY3Qg
X19yZXN1bHRfYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0
cmljdCBfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHByb3RvZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IHNldG5ldGdyZW50IChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXApIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIGVuZG5ldGdyZW50ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBnZXRuZXRncmVudCAoY2hhciAqKl9fcmVzdHJpY3QgX19ob3N0cCwKICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX191c2VycCwKICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19kb21haW5wKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBp
bm5ldGdyIChfX2NvbnN0IGNoYXIgKl9fbmV0Z3JvdXAsIF9fY29uc3QgY2hhciAqX19ob3N0LAog
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX191c2VyLCBfX2NvbnN0IGNoYXIgKmRv
bWFpbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRuZXRncmVudF9yIChjaGFyICoqX19yZXN0
cmljdCBfX2hvc3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fdXNlcnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19k
b21haW5wLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZm
ZXIsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CiMgMzUxICIvdXNyL2luY2x1ZGUvbmV0ZGIu
aCIgMwpleHRlcm4gaW50IHJjbWQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fYWhvc3QsIHVuc2lnbmVk
IHNob3J0IGludCBfX3Jwb3J0LAogICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2xvY3VzZXIsCiAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fcmVtdXNlciwKICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19j
bWQsIGludCAqX19yZXN0cmljdCBfX2ZkMnApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
cmNtZF9hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgdW5zaWduZWQgc2hvcnQgaW50IF9f
cnBvcnQsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbG9j
dXNlciwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19yZW11
c2VyLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwg
aW50ICpfX3Jlc3RyaWN0IF9fZmQycCwKICAgICAgICAgICAgICAgICAgICBzYV9mYW1pbHlfdCBf
X2FmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCByZXhlYyAoY2hhciAqKl9fcmVzdHJpY3Qg
X19haG9zdCwgaW50IF9fcnBvcnQsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3Bhc3MsCiAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Nt
ZCwgaW50ICpfX3Jlc3RyaWN0IF9fZmQycCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBy
ZXhlY19hZiAoY2hhciAqKl9fcmVzdHJpY3QgX19haG9zdCwgaW50IF9fcnBvcnQsCiAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bhc3MsCiAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2NtZCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZmQycCwKICAgICAgICAgICAgICAgICAgICAgc2FfZmFtaWx5X3QgX19hZikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHJ1c2Vyb2sgKF9fY29uc3QgY2hhciAqX19yaG9zdCwgaW50IF9fc3VzZXIs
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3JlbXVzZXIsIF9fY29uc3QgY2hh
ciAqX19sb2N1c2VyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBydXNlcm9rX2FmIChfX2NvbnN0
IGNoYXIgKl9fcmhvc3QsIGludCBfX3N1c2VyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZW11c2VyLCBfX2NvbnN0IGNoYXIgKl9fbG9jdXNlciwKICAgICAgICAgICAg
ICAgICAgICAgICBzYV9mYW1pbHlfdCBfX2FmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcnJl
c3Zwb3J0IChpbnQgKl9fYWxwb3J0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBycmVzdnBvcnRf
YWYgKGludCAqX19hbHBvcnQsIHNhX2ZhbWlseV90IF9fYWYpIHRocm93ICgpOwoKCgoKCgpzdHJ1
Y3QgYWRkcmluZm8KewogIGludCBhaV9mbGFnczsKICBpbnQgYWlfZmFtaWx5OwogIGludCBhaV9z
b2NrdHlwZTsKICBpbnQgYWlfcHJvdG9jb2w7CiAgc29ja2xlbl90IGFpX2FkZHJsZW47CiAgc3Ry
dWN0IHNvY2thZGRyICphaV9hZGRyOwogIGNoYXIgKmFpX2Nhbm9ubmFtZTsKICBzdHJ1Y3QgYWRk
cmluZm8gKmFpX25leHQ7Cn07CgoKCnN0cnVjdCBnYWljYgp7CiAgY29uc3QgY2hhciAqYXJfbmFt
ZTsKICBjb25zdCBjaGFyICphcl9zZXJ2aWNlOwogIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqYXJf
cmVxdWVzdDsKICBzdHJ1Y3QgYWRkcmluZm8gKmFyX3Jlc3VsdDsKCiAgaW50IF9fcmV0dXJuOwog
IGludCBfX3VudXNlZFs1XTsKfTsKIyA0NzYgIi91c3IvaW5jbHVkZS9uZXRkYi5oIiAzCmV4dGVy
biBpbnQgZ2V0YWRkcmluZm8gKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NlcnZpY2UsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IGFkZHJpbmZvICpfX3Jlc3RyaWN0
IF9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKipfX3Jlc3Ry
aWN0IF9fcGFpKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmcmVlYWRkcmluZm8gKHN0cnVjdCBh
ZGRyaW5mbyAqX19haSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmdhaV9zdHJlcnJvciAoaW50
IF9fZWNvZGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0bmFtZWluZm8gKF9fY29uc3Qgc3Ry
dWN0IHNvY2thZGRyICpfX3Jlc3RyaWN0IF9fc2EsCiAgICAgICAgICAgICAgICAgICAgICAgIHNv
Y2tsZW5fdCBfX3NhbGVuLCBjaGFyICpfX3Jlc3RyaWN0IF9faG9zdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgc29ja2xlbl90IF9faG9zdGxlbiwgY2hhciAqX19yZXN0cmljdCBfX3NlcnYsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBfX3NlcnZsZW4sIHVuc2lnbmVkIGludCBf
X2ZsYWdzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGFkZHJpbmZvX2EgKGludCBfX21v
ZGUsIHN0cnVjdCBnYWljYiAqX19saXN0W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fZW50LCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAgdGhyb3cgKCk7
CgoKCgpleHRlcm4gaW50IGdhaV9zdXNwZW5kIChfX2NvbnN0IHN0cnVjdCBnYWljYiAqX19jb25z
dCBfX2xpc3RbXSwgaW50IF9fZW50LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0
cnVjdCB0aW1lc3BlYyAqX190aW1lb3V0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdhaV9lcnJv
ciAoc3RydWN0IGdhaWNiICpfX3JlcSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnYWlfY2FuY2Vs
IChzdHJ1Y3QgZ2FpY2IgKl9fZ2FpY2JwKSB0aHJvdyAoKTsKCgoKfQojIDM2MzEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMzY0MSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vz
ci9pbmNsdWRlL25ldC9pZi5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbmV0L2lm
LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNyAiL3Vzci9p
bmNsdWRlL25ldC9pZi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NvY2tldC5oIiAxIDMK
IyAyOCAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAyIDMKCgoKCgoKc3RydWN0IGlmX25hbWVpbmRl
eAogIHsKICAgIHVuc2lnbmVkIGludCBpZl9pbmRleDsKICAgIGNoYXIgKmlmX25hbWU7CiAgfTsK
CgoKCmVudW0KICB7CiAgICBJRkZfVVAgPSAweDEsCgogICAgSUZGX0JST0FEQ0FTVCA9IDB4MiwK
CiAgICBJRkZfREVCVUcgPSAweDQsCgogICAgSUZGX0xPT1BCQUNLID0gMHg4LAoKICAgIElGRl9Q
T0lOVE9QT0lOVCA9IDB4MTAsCgogICAgSUZGX05PVFJBSUxFUlMgPSAweDIwLAoKICAgIElGRl9S
VU5OSU5HID0gMHg0MCwKCiAgICBJRkZfTk9BUlAgPSAweDgwLAoKICAgIElGRl9QUk9NSVNDID0g
MHgxMDAsCgoKCiAgICBJRkZfQUxMTVVMVEkgPSAweDIwMCwKCgogICAgSUZGX01BU1RFUiA9IDB4
NDAwLAoKICAgIElGRl9TTEFWRSA9IDB4ODAwLAoKCiAgICBJRkZfTVVMVElDQVNUID0gMHgxMDAw
LAoKCiAgICBJRkZfUE9SVFNFTCA9IDB4MjAwMCwKCiAgICBJRkZfQVVUT01FRElBID0gMHg0MDAw
CgogIH07CgoKCgoKCnN0cnVjdCBpZmFkZHIKICB7CiAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZhX2Fk
ZHI7CiAgICB1bmlvbgogICAgICB7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFk
ZHI7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmdV9kc3RhZGRyOwogICAgICB9IGlmYV9pZnU7
CiAgICBzdHJ1Y3QgaWZhY2UgKmlmYV9pZnA7CiAgICBzdHJ1Y3QgaWZhZGRyICppZmFfbmV4dDsK
ICB9OwojIDExMCAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCnN0cnVjdCBpZm1hcAogIHsKICAg
IHVuc2lnbmVkIGxvbmcgaW50IG1lbV9zdGFydDsKICAgIHVuc2lnbmVkIGxvbmcgaW50IG1lbV9l
bmQ7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgYmFzZV9hZGRyOwogICAgdW5zaWduZWQgY2hhciBp
cnE7CiAgICB1bnNpZ25lZCBjaGFyIGRtYTsKICAgIHVuc2lnbmVkIGNoYXIgcG9ydDsKCiAgfTsK
CgoKCgpzdHJ1Y3QgaWZyZXEKICB7CgoKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBjaGFyIGlm
cm5fbmFtZVsxNl07CiAgICAgIH0gaWZyX2lmcm47CgogICAgdW5pb24KICAgICAgewogICAgICAg
IHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CiAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmcnVf
ZHN0YWRkcjsKICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7CiAgICAgICAg
c3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZy
dV9od2FkZHI7CiAgICAgICAgc2hvcnQgaW50IGlmcnVfZmxhZ3M7CiAgICAgICAgaW50IGlmcnVf
aXZhbHVlOwogICAgICAgIGludCBpZnJ1X210dTsKICAgICAgICBzdHJ1Y3QgaWZtYXAgaWZydV9t
YXA7CiAgICAgICAgY2hhciBpZnJ1X3NsYXZlWzE2XTsKICAgICAgICBjaGFyIGlmcnVfbmV3bmFt
ZVsxNl07CiAgICAgICAgX19jYWRkcl90IGlmcnVfZGF0YTsKICAgICAgfSBpZnJfaWZydTsKICB9
OwojIDE3MyAiL3Vzci9pbmNsdWRlL25ldC9pZi5oIiAzCnN0cnVjdCBpZmNvbmYKICB7CiAgICBp
bnQgaWZjX2xlbjsKICAgIHVuaW9uCiAgICAgIHsKICAgICAgICBfX2NhZGRyX3QgaWZjdV9idWY7
CiAgICAgICAgc3RydWN0IGlmcmVxICppZmN1X3JlcTsKICAgICAgfSBpZmNfaWZjdTsKICB9OwoK
CgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB1bnNpZ25lZCBpbnQgaWZfbmFtZXRvaW5kZXggKF9f
Y29uc3QgY2hhciAqX19pZm5hbWUpIHRocm93ICgpOwpleHRlcm4gY2hhciAqaWZfaW5kZXh0b25h
bWUgKHVuc2lnbmVkIGludCBfX2lmaW5kZXgsIGNoYXIgKl9faWZuYW1lKSB0aHJvdyAoKTsKCgpl
eHRlcm4gc3RydWN0IGlmX25hbWVpbmRleCAqaWZfbmFtZWluZGV4ICh2b2lkKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBpZl9mcmVlbmFtZWluZGV4IChzdHJ1Y3QgaWZfbmFtZWluZGV4ICpfX3B0
cikgdGhyb3cgKCk7Cgp9CiMgMzY0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL25ldGluZXQvaW4u
aCIgMSAzCiMgMzY1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmgiIDIKIyAzNjYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDEgMwojIDIyICIv
dXNyL2luY2x1ZGUvYXJwYS9pbmV0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjMgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L25ldGluZXQvaW4uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9hcnBhL2luZXQuaCIgMiAzCgoK
CgoKCgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2FkZHIgKF9fY29uc3Qg
Y2hhciAqX19jcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGluX2FkZHJfdCBpbmV0X2xuYW9mIChzdHJ1
Y3QgaW5fYWRkciBfX2luKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCBpbl9hZGRyIGluZXRf
bWFrZWFkZHIgKGluX2FkZHJfdCBfX25ldCwgaW5fYWRkcl90IF9faG9zdCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0b2YgKHN0cnVjdCBpbl9hZGRyIF9faW4pIHRo
cm93ICgpOwoKCgpleHRlcm4gaW5fYWRkcl90IGluZXRfbmV0d29yayAoX19jb25zdCBjaGFyICpf
X2NwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnRvYSAoc3RydWN0IGluX2FkZHIg
X19pbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGluZXRfcHRvbiAoaW50IF9fYWYsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2NwLAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19y
ZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19jb25zdCBjaGFyICppbmV0X250
b3AgKGludCBfX2FmLCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19jcCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzb2NrbGVuX3QgX19s
ZW4pCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbl9hZGRyX3QgaW5ldF9hdG9uIChfX2Nv
bnN0IGNoYXIgKl9fY3AsIHN0cnVjdCBpbl9hZGRyICpfX2lucCkgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICppbmV0X25ldGEgKGluX2FkZHJfdCBfX25ldCwgY2hhciAqX19idWYsIHNpemVfdCBf
X2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqaW5ldF9uZXRfbnRvcCAoaW50IF9fYWYs
IF9fY29uc3Qgdm9pZCAqX19jcCwgaW50IF9fYml0cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp
bmV0X25ldF9wdG9uIChpbnQgX19hZiwgX19jb25zdCBjaGFyICpfX2NwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHVuc2lnbmVkIGludCBpbmV0X25zYXBfYWRkciAoX19jb25zdCBjaGFyICpfX2NwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpfX2J1ZiwgaW50
IF9fbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmluZXRfbnNhcF9udG9hIChpbnQgX19s
ZW4sIF9fY29uc3QgdW5zaWduZWQgY2hhciAqX19jcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKfQojIDM2NjIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgp9CiMgMzY3MyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNs
dWRlL25ldGluZXQvdGNwLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL25l
dGluZXQvdGNwLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9uZXRpbmV0
L3RjcC5oIiAyIDMKIyA4OCAiL3Vzci9pbmNsdWRlL25ldGluZXQvdGNwLmgiIDMKc3RydWN0IHRj
cGhkcgogIHsKICAgIHVfaW50MTZfdCBzb3VyY2U7CiAgICB1X2ludDE2X3QgZGVzdDsKICAgIHVf
aW50MzJfdCBzZXE7CiAgICB1X2ludDMyX3QgYWNrX3NlcTsKCiAgICB1X2ludDE2X3QgcmVzMTo0
OwogICAgdV9pbnQxNl90IGRvZmY6NDsKICAgIHVfaW50MTZfdCBmaW46MTsKICAgIHVfaW50MTZf
dCBzeW46MTsKICAgIHVfaW50MTZfdCByc3Q6MTsKICAgIHVfaW50MTZfdCBwc2g6MTsKICAgIHVf
aW50MTZfdCBhY2s6MTsKICAgIHVfaW50MTZfdCB1cmc6MTsKICAgIHVfaW50MTZfdCByZXMyOjI7
CiMgMTE3ICIvdXNyL2luY2x1ZGUvbmV0aW5ldC90Y3AuaCIgMwogICAgdV9pbnQxNl90IHdpbmRv
dzsKICAgIHVfaW50MTZfdCBjaGVjazsKICAgIHVfaW50MTZfdCB1cmdfcHRyOwp9OwoKCmVudW0K
ewogIFRDUF9FU1RBQkxJU0hFRCA9IDEsCiAgVENQX1NZTl9TRU5ULAogIFRDUF9TWU5fUkVDViwK
ICBUQ1BfRklOX1dBSVQxLAogIFRDUF9GSU5fV0FJVDIsCiAgVENQX1RJTUVfV0FJVCwKICBUQ1Bf
Q0xPU0UsCiAgVENQX0NMT1NFX1dBSVQsCiAgVENQX0xBU1RfQUNLLAogIFRDUF9MSVNURU4sCiAg
VENQX0NMT1NJTkcKfTsKIyAxNzUgIi91c3IvaW5jbHVkZS9uZXRpbmV0L3RjcC5oIiAzCmVudW0g
dGNwX2NhX3N0YXRlCnsKICBUQ1BfQ0FfT3BlbiA9IDAsCiAgVENQX0NBX0Rpc29yZGVyID0gMSwK
ICBUQ1BfQ0FfQ1dSID0gMiwKICBUQ1BfQ0FfUmVjb3ZlcnkgPSAzLAogIFRDUF9DQV9Mb3NzID0g
NAp9OwoKc3RydWN0IHRjcF9pbmZvCnsKICB1X2ludDhfdCB0Y3BpX3N0YXRlOwogIHVfaW50OF90
IHRjcGlfY2Ffc3RhdGU7CiAgdV9pbnQ4X3QgdGNwaV9yZXRyYW5zbWl0czsKICB1X2ludDhfdCB0
Y3BpX3Byb2JlczsKICB1X2ludDhfdCB0Y3BpX2JhY2tvZmY7CiAgdV9pbnQ4X3QgdGNwaV9vcHRp
b25zOwogIHVfaW50OF90IHRjcGlfc25kX3dzY2FsZSA6IDQsIHRjcGlfcmN2X3dzY2FsZSA6IDQ7
CgogIHVfaW50MzJfdCB0Y3BpX3J0bzsKICB1X2ludDMyX3QgdGNwaV9hdG87CiAgdV9pbnQzMl90
IHRjcGlfc25kX21zczsKICB1X2ludDMyX3QgdGNwaV9yY3ZfbXNzOwoKICB1X2ludDMyX3QgdGNw
aV91bmFja2VkOwogIHVfaW50MzJfdCB0Y3BpX3NhY2tlZDsKICB1X2ludDMyX3QgdGNwaV9sb3N0
OwogIHVfaW50MzJfdCB0Y3BpX3JldHJhbnM7CiAgdV9pbnQzMl90IHRjcGlfZmFja2V0czsKCgog
IHVfaW50MzJfdCB0Y3BpX2xhc3RfZGF0YV9zZW50OwogIHVfaW50MzJfdCB0Y3BpX2xhc3RfYWNr
X3NlbnQ7CiAgdV9pbnQzMl90IHRjcGlfbGFzdF9kYXRhX3JlY3Y7CiAgdV9pbnQzMl90IHRjcGlf
bGFzdF9hY2tfcmVjdjsKCgogIHVfaW50MzJfdCB0Y3BpX3BtdHU7CiAgdV9pbnQzMl90IHRjcGlf
cmN2X3NzdGhyZXNoOwogIHVfaW50MzJfdCB0Y3BpX3J0dDsKICB1X2ludDMyX3QgdGNwaV9ydHR2
YXI7CiAgdV9pbnQzMl90IHRjcGlfc25kX3NzdGhyZXNoOwogIHVfaW50MzJfdCB0Y3BpX3NuZF9j
d25kOwogIHVfaW50MzJfdCB0Y3BpX2Fkdm1zczsKICB1X2ludDMyX3QgdGNwaV9yZW9yZGVyaW5n
Owp9OwojIDM2NzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PUy5oIiAyCiMgMzc1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy91aW8uaCIgMSAzCiMgMzc1NSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyMiAiL3Vzci9pbmNsdWRlL3N5cy9pcGMuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5
cy9pcGMuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvaXBjLmgiIDEgMwojIDIz
ICIvdXNyL2luY2x1ZGUvYml0cy9pcGMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9pcGMuaCIgMiAzCiMgNDMgIi91c3IvaW5j
bHVkZS9iaXRzL2lwYy5oIiAzCnN0cnVjdCBpcGNfcGVybQogIHsKICAgIF9fa2V5X3QgX19rZXk7
CiAgICBfX3VpZF90IHVpZDsKICAgIF9fZ2lkX3QgZ2lkOwogICAgX191aWRfdCBjdWlkOwogICAg
X19naWRfdCBjZ2lkOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG1vZGU7CiAgICB1bnNpZ25lZCBz
aG9ydCBpbnQgX19wYWQxOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fc2VxOwogICAgdW5zaWdu
ZWQgc2hvcnQgaW50IF9fcGFkMjsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMTsKICAg
IHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMjsKICB9OwojIDMwICIvdXNyL2luY2x1ZGUvc3lz
L2lwYy5oIiAyIDMKIyA1MSAiL3Vzci9pbmNsdWRlL3N5cy9pcGMuaCIgMwpleHRlcm4gIkMiIHsK
CgpleHRlcm4ga2V5X3QgZnRvayAoX19jb25zdCBjaGFyICpfX3BhdGhuYW1lLCBpbnQgX19wcm9q
X2lkKSB0aHJvdyAoKTsKCn0KIyAzNzU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMSAz
CiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDIgMwoKCiMgMSAiL3Vzci9s
b2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaG0uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9i
aXRzL3NobS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjQgIi91
c3IvaW5jbHVkZS9iaXRzL3NobS5oIiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2JpdHMvc2htLmgi
IDMKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBzaG1hdHRfdDsKCgpzdHJ1Y3Qgc2htaWRfZHMK
ICB7CiAgICBzdHJ1Y3QgaXBjX3Blcm0gc2htX3Blcm07CiAgICBzaXplX3Qgc2htX3NlZ3N6Owog
ICAgX190aW1lX3Qgc2htX2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwog
ICAgX190aW1lX3Qgc2htX2R0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQyOwog
ICAgX190aW1lX3Qgc2htX2N0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwog
ICAgX19waWRfdCBzaG1fY3BpZDsKICAgIF9fcGlkX3Qgc2htX2xwaWQ7CiAgICBzaG1hdHRfdCBz
aG1fbmF0dGNoOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQ0OwogICAgdW5zaWduZWQg
bG9uZyBpbnQgX191bnVzZWQ1OwogIH07CiMgNzAgIi91c3IvaW5jbHVkZS9iaXRzL3NobS5oIiAz
CnN0cnVjdCBzaG1pbmZvCiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htbWF4OwogICAgdW5z
aWduZWQgbG9uZyBpbnQgc2htbWluOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htbW5pOwogICAg
dW5zaWduZWQgbG9uZyBpbnQgc2htc2VnOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc2htYWxsOwog
ICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191
bnVzZWQyOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQzOwogICAgdW5zaWduZWQgbG9u
ZyBpbnQgX191bnVzZWQ0OwogIH07CgpzdHJ1Y3Qgc2htX2luZm8KICB7CiAgICBpbnQgdXNlZF9p
ZHM7CiAgICB1bnNpZ25lZCBsb25nIGludCBzaG1fdG90OwogICAgdW5zaWduZWQgbG9uZyBpbnQg
c2htX3JzczsKICAgIHVuc2lnbmVkIGxvbmcgaW50IHNobV9zd3A7CiAgICB1bnNpZ25lZCBsb25n
IGludCBzd2FwX2F0dGVtcHRzOwogICAgdW5zaWduZWQgbG9uZyBpbnQgc3dhcF9zdWNjZXNzZXM7
CiAgfTsKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zaG0uaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9zeXMvc2htLmgiIDIgMwojIDQ0ICIv
dXNyL2luY2x1ZGUvc3lzL3NobS5oIiAzCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IF9fZ2V0
cGFnZXNpemUgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CgoKZXh0ZXJuIGludCBzaG1jdGwgKGludCBfX3NobWlkLCBpbnQgX19jbWQsIHN0cnVjdCBzaG1p
ZF9kcyAqX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2htZ2V0IChrZXlfdCBfX2tleSwg
c2l6ZV90IF9fc2l6ZSwgaW50IF9fc2htZmxnKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqc2ht
YXQgKGludCBfX3NobWlkLCBfX2NvbnN0IHZvaWQgKl9fc2htYWRkciwgaW50IF9fc2htZmxnKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2htZHQgKF9fY29uc3Qgdm9pZCAqX19zaG1hZGRy
KSB0aHJvdyAoKTsKCn0KIyAzNzU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMSAzCiMg
MjIgIi91c3IvaW5jbHVkZS9zeXMvc2VtLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvc2VtLmgiIDIgMwoKCiMgMSAiL3Vzci9sb2Nh
bC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2lwYy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3N5cy9zZW0uaCIgMiAzCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZW0uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz
L3NlbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyNCAiL3Vzci9p
bmNsdWRlL2JpdHMvc2VtLmgiIDIgMwojIDM5ICIvdXNyL2luY2x1ZGUvYml0cy9zZW0uaCIgMwpz
dHJ1Y3Qgc2VtaWRfZHMKewogIHN0cnVjdCBpcGNfcGVybSBzZW1fcGVybTsKICBfX3RpbWVfdCBz
ZW1fb3RpbWU7CiAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogIF9fdGltZV90IHNlbV9j
dGltZTsKICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgdW5zaWduZWQgbG9uZyBpbnQg
c2VtX25zZW1zOwogIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICB1bnNpZ25lZCBsb25n
IGludCBfX3VudXNlZDQ7Cn07CiMgNzMgIi91c3IvaW5jbHVkZS9iaXRzL3NlbS5oIiAzCnN0cnVj
dCBzZW1pbmZvCnsKICBpbnQgc2VtbWFwOwogIGludCBzZW1tbmk7CiAgaW50IHNlbW1uczsKICBp
bnQgc2VtbW51OwogIGludCBzZW1tc2w7CiAgaW50IHNlbW9wbTsKICBpbnQgc2VtdW1lOwogIGlu
dCBzZW11c3o7CiAgaW50IHNlbXZteDsKICBpbnQgc2VtYWVtOwp9OwojIDMyICIvdXNyL2luY2x1
ZGUvc3lzL3NlbS5oIiAyIDMKCgoKCgpzdHJ1Y3Qgc2VtYnVmCnsKICB1bnNpZ25lZCBzaG9ydCBp
bnQgc2VtX251bTsKICBzaG9ydCBpbnQgc2VtX29wOwogIHNob3J0IGludCBzZW1fZmxnOwp9OwoK
CmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2VtY3RsIChpbnQgX19zZW1pZCwgaW50IF9fc2Vt
bnVtLCBpbnQgX19jbWQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzZW1nZXQgKGtleV90
IF9fa2V5LCBpbnQgX19uc2VtcywgaW50IF9fc2VtZmxnKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHNlbW9wIChpbnQgX19zZW1pZCwgc3RydWN0IHNlbWJ1ZiAqX19zb3BzLCBzaXplX3QgX19uc29w
cykgdGhyb3cgKCk7Cgp9CiMgMzc2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDEgMwoj
IDIyICIvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9maWxlLmgiIDIgMwoKCgoKCmV4dGVybiAi
QyIgewojIDUxICIvdXNyL2luY2x1ZGUvc3lzL2ZpbGUuaCIgMwpleHRlcm4gaW50IGZsb2NrIChp
bnQgX19mZCwgaW50IF9fb3BlcmF0aW9uKSB0aHJvdyAoKTsKCgp9CiMgMzc2NCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL3RpbWUuaCIgMSAzCiMgMzc2NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNl
LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvcmVzb3VyY2UuaCIg
MiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oIiAxIDMKIyAyNCAiL3Vzci9p
bmNsdWRlL2JpdHMvcmVzb3VyY2UuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgi
IDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5oIiAyIDMKCgoKCgoKCmVudW0g
X19ybGltaXRfcmVzb3VyY2UKewoKICBSTElNSVRfQ1BVID0gMCwKCgoKICBSTElNSVRfRlNJWkUg
PSAxLAoKCgogIFJMSU1JVF9EQVRBID0gMiwKCgoKICBSTElNSVRfU1RBQ0sgPSAzLAoKCgogIFJM
SU1JVF9DT1JFID0gNCwKCgoKCgoKICBSTElNSVRfUlNTID0gNSwKCgoKICBSTElNSVRfTk9GSUxF
ID0gNywKICBSTElNSVRfT0ZJTEUgPSBSTElNSVRfTk9GSUxFLAoKCgoKICBSTElNSVRfQVMgPSA5
LAoKCgogIFJMSU1JVF9OUFJPQyA9IDYsCgoKCiAgUkxJTUlUX01FTUxPQ0sgPSA4LAoKCgogIFJM
SU1JVF9MT0NLUyA9IDEwLAoKCiAgUkxJTUlUX05MSU1JVFMgPSAxMSwKICBSTElNX05MSU1JVFMg
PSBSTElNSVRfTkxJTUlUUwoKCn07CiMgMTA3ICIvdXNyL2luY2x1ZGUvYml0cy9yZXNvdXJjZS5o
IiAzCnR5cGVkZWYgX19ybGltX3QgcmxpbV90OwoKCgoKdHlwZWRlZiBfX3JsaW02NF90IHJsaW02
NF90OwoKCnN0cnVjdCBybGltaXQKICB7CgogICAgcmxpbV90IHJsaW1fY3VyOwoKICAgIHJsaW1f
dCBybGltX21heDsKICB9OwoKCnN0cnVjdCBybGltaXQ2NAogIHsKCiAgICBybGltNjRfdCBybGlt
X2N1cjsKCiAgICBybGltNjRfdCBybGltX21heDsKIH07CgoKCmVudW0gX19ydXNhZ2Vfd2hvCnsK
CiAgUlVTQUdFX1NFTEYgPSAwLAoKCgogIFJVU0FHRV9DSElMRFJFTiA9IC0xLAoKCgogIFJVU0FH
RV9CT1RIID0gLTIKCn07CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDE1
MSAiL3Vzci9pbmNsdWRlL2JpdHMvcmVzb3VyY2UuaCIgMiAzCgoKc3RydWN0IHJ1c2FnZQogIHsK
CiAgICBzdHJ1Y3QgdGltZXZhbCBydV91dGltZTsKCiAgICBzdHJ1Y3QgdGltZXZhbCBydV9zdGlt
ZTsKCiAgICBsb25nIGludCBydV9tYXhyc3M7CgoKICAgIGxvbmcgaW50IHJ1X2l4cnNzOwoKICAg
IGxvbmcgaW50IHJ1X2lkcnNzOwoKICAgIGxvbmcgaW50IHJ1X2lzcnNzOwoKCiAgICBsb25nIGlu
dCBydV9taW5mbHQ7CgogICAgbG9uZyBpbnQgcnVfbWFqZmx0OwoKICAgIGxvbmcgaW50IHJ1X25z
d2FwOwoKCiAgICBsb25nIGludCBydV9pbmJsb2NrOwoKICAgIGxvbmcgaW50IHJ1X291YmxvY2s7
CgogICAgbG9uZyBpbnQgcnVfbXNnc25kOwoKICAgIGxvbmcgaW50IHJ1X21zZ3JjdjsKCiAgICBs
b25nIGludCBydV9uc2lnbmFsczsKCgoKICAgIGxvbmcgaW50IHJ1X252Y3N3OwoKCiAgICBsb25n
IGludCBydV9uaXZjc3c7CiAgfTsKCgoKCgoKCmVudW0gX19wcmlvcml0eV93aGljaAp7CiAgUFJJ
T19QUk9DRVNTID0gMCwKCiAgUFJJT19QR1JQID0gMSwKCiAgUFJJT19VU0VSID0gMgoKfTsKIyAy
NiAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAyIDMKCgoKCgoKZXh0ZXJuICJDIiB7CgoK
CgoKCnR5cGVkZWYgZW51bSBfX3JsaW1pdF9yZXNvdXJjZSBfX3JsaW1pdF9yZXNvdXJjZV90Owp0
eXBlZGVmIGVudW0gX19ydXNhZ2Vfd2hvIF9fcnVzYWdlX3dob190Owp0eXBlZGVmIGVudW0gX19w
cmlvcml0eV93aGljaCBfX3ByaW9yaXR5X3doaWNoX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9zeXMv
cmVzb3VyY2UuaCIgMwpleHRlcm4gaW50IGdldHJsaW1pdCAoX19ybGltaXRfcmVzb3VyY2VfdCBf
X3Jlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJsaW1pdCAqX19ybGltaXRz
KSB0aHJvdyAoKTsKIyA2MyAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIiAzCmV4dGVybiBp
bnQgZ2V0cmxpbWl0NjQgKF9fcmxpbWl0X3Jlc291cmNlX3QgX19yZXNvdXJjZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHJsaW1pdDY0ICpfX3JsaW1pdHMpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gaW50IHNldHJsaW1pdCAoX19ybGltaXRfcmVzb3VyY2VfdCBfX3Jlc291cmNlLAog
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgcmxpbWl0ICpfX3JsaW1pdHMpIHRo
cm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgiIDMKZXh0ZXJuIGludCBz
ZXRybGltaXQ2NCAoX19ybGltaXRfcmVzb3VyY2VfdCBfX3Jlc291cmNlLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBybGltaXQ2NCAqX19ybGltaXRzKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZ2V0cnVzYWdlIChfX3J1c2FnZV93aG9fdCBfX3dobywgc3RydWN0IHJ1
c2FnZSAqX191c2FnZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRwcmlvcml0eSAoX19w
cmlvcml0eV93aGljaF90IF9fd2hpY2gsIGlkX3QgX193aG8pIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IHNldHByaW9yaXR5IChfX3ByaW9yaXR5X3doaWNoX3QgX193aGljaCwgaWRfdCBfX3dobywg
aW50IF9fcHJpbykKICAgICB0aHJvdyAoKTsKCn0KIyAzNzY2ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
d2FpdC5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAyIDMK
CmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDEgMwojIDMxICIvdXNy
L2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9yZXNvdXJjZS5o
IiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy93YWl0LmgiIDIgMwojIDk4ICIvdXNyL2luY2x1
ZGUvc3lzL3dhaXQuaCIgMwp0eXBlZGVmIGVudW0KewogIFBfQUxMLAogIFBfUElELAogIFBfUEdJ
RAp9IGlkdHlwZV90OwoKCgoKCmV4dGVybiBfX3BpZF90IHdhaXQgKHZvaWQgKiBfX3N0YXRfbG9j
KSB0aHJvdyAoKTsKIyAxMjkgIi91c3IvaW5jbHVkZS9zeXMvd2FpdC5oIiAzCmV4dGVybiBfX3Bp
ZF90IHdhaXRwaWQgKF9fcGlkX3QgX19waWQsIGludCAqX19zdGF0X2xvYywgaW50IF9fb3B0aW9u
cykgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAxIDMKIyAy
NSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnaW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
d29yZHNpemUuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMiAzCiMg
MTM0ICIvdXNyL2luY2x1ZGUvc3lzL3dhaXQuaCIgMiAzCiMgMTQyICIvdXNyL2luY2x1ZGUvc3lz
L3dhaXQuaCIgMwpleHRlcm4gaW50IHdhaXRpZCAoaWR0eXBlX3QgX19pZHR5cGUsIF9faWRfdCBf
X2lkLCBzaWdpbmZvX3QgKl9faW5mb3AsCiAgICAgICAgICAgICAgICAgICBpbnQgX19vcHRpb25z
KSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3QgcnVzYWdlOwoKCgoKCgpleHRlcm4gX19waWRfdCB3YWl0
MyAodm9pZCAqIF9fc3RhdF9sb2MsIGludCBfX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcnVzYWdlICogX191c2FnZSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IHJ1c2FnZTsK
CgpleHRlcm4gX19waWRfdCB3YWl0NCAoX19waWRfdCBfX3BpZCwgdm9pZCAqIF9fc3RhdF9sb2Ms
IGludCBfX29wdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnVzYWdlICpfX3Vz
YWdlKSB0aHJvdyAoKTsKCgoKfQojIDM3NjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAxIDMKIyAy
NiAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEg
MwojIDI3ICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAyIDMKIyA1
MCAiL3Vzci9pbmNsdWRlL3B3ZC5oIiAzCnN0cnVjdCBwYXNzd2QKewogIGNoYXIgKnB3X25hbWU7
CiAgY2hhciAqcHdfcGFzc3dkOwogIF9fdWlkX3QgcHdfdWlkOwogIF9fZ2lkX3QgcHdfZ2lkOwog
IGNoYXIgKnB3X2dlY29zOwogIGNoYXIgKnB3X2RpcjsKICBjaGFyICpwd19zaGVsbDsKfTsKCgoK
CiMgMSAiL3Vzci9sb2NhbC9nY2MtMy4wL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvcHdkLmgiIDIgMwoKCgoK
CmV4dGVybiB2b2lkIHNldHB3ZW50ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBlbmRw
d2VudCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3ZW50ICh2
b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpmZ2V0cHdlbnQgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHB3ZW50IChfX2NvbnN0IHN0cnVj
dCBwYXNzd2QgKl9fcmVzdHJpY3QgX19wLAogICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl
c3RyaWN0IF9fZikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3QgcGFzc3dkICpnZXRwd3VpZCAo
X191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBwYXNzd2QgKmdldHB3bmFt
IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgMTExICIvdXNyL2luY2x1ZGUvcHdk
LmgiIDMKZXh0ZXJuIGludCBnZXRwd2VudF9yIChzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9f
cmVzdWx0YnVmLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZm
ZXIsIHNpemVfdCBfX2J1ZmxlbiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dk
ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwd3VpZF9y
IChfX3VpZF90IF9fdWlkLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgKl9f
cmVzdHJpY3QgX19yZXN1bHRidWYsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0
cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBwYXNzd2QgKipfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
Z2V0cHduYW1fciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICpfX3Jlc3RyaWN0IF9fcmVzdWx0YnVmLAogICAgICAg
ICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWZmZXIsIHNpemVfdCBfX2J1Zmxl
biwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICoqX19yZXN0cmljdCBfX3Jl
c3VsdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmZ2V0cHdlbnRfciAoRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhc3N3ZCAqX19y
ZXN0cmljdCBfX3Jlc3VsdGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0
cmljdCBfX2J1ZmZlciwgc2l6ZV90IF9fYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgcGFzc3dkICoqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CiMgMTQyICIvdXNy
L2luY2x1ZGUvcHdkLmgiIDMKZXh0ZXJuIGludCBnZXRwdyAoX191aWRfdCBfX3VpZCwgY2hhciAq
X19idWZmZXIpIHRocm93ICgpOwoKCn0KIyAzNzY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2lvY3Rs
LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2lvY3Rscy5oIiAxIDMKIyAyNCAi
L3Vzci9pbmNsdWRlL2JpdHMvaW9jdGxzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2lvY3Rs
cy5oIiAxIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYXNtL2lvY3RsLmgiIDEgMwojIDUgIi91c3Iv
aW5jbHVkZS9hc20vaW9jdGxzLmgiIDIgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9pb2N0bHMu
aCIgMiAzCiMgMjggIi91c3IvaW5jbHVkZS9zeXMvaW9jdGwuaCIgMiAzCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9pb2N0bC10eXBlcy5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaW9j
dGwtdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9hc20vaW9jdGxzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvYml0cy9pb2N0bC10eXBlcy5oIiAyIDMKCgpzdHJ1Y3Qgd2luc2l6ZQogIHsK
ICAgIHVuc2lnbmVkIHNob3J0IGludCB3c19yb3c7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgd3Nf
Y29sOwogICAgdW5zaWduZWQgc2hvcnQgaW50IHdzX3hwaXhlbDsKICAgIHVuc2lnbmVkIHNob3J0
IGludCB3c195cGl4ZWw7CiAgfTsKCgpzdHJ1Y3QgdGVybWlvCiAgewogICAgdW5zaWduZWQgc2hv
cnQgaW50IGNfaWZsYWc7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgY19vZmxhZzsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBjX2NmbGFnOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGNfbGZsYWc7CiAg
ICB1bnNpZ25lZCBjaGFyIGNfbGluZTsKICAgIHVuc2lnbmVkIGNoYXIgY19jY1s4XTsKfTsKIyAz
MSAiL3Vzci9pbmNsdWRlL3N5cy9pb2N0bC5oIiAyIDMKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3R0eWRlZmF1bHRzLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvc3lzL2lvY3RsLmgiIDIg
MwoKCgoKZXh0ZXJuIGludCBpb2N0bCAoaW50IF9fZmQsIHVuc2lnbmVkIGxvbmcgaW50IF9fcmVx
dWVzdCwgLi4uKSB0aHJvdyAoKTsKCn0KIyAzNzcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM3ODUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdGVy
bWlvcy5oIiAxIDMKCgojIDEgIi91c3IvaW5jbHVkZS90ZXJtaW9zLmgiIDEgMwojIDI2ICIvdXNy
L2luY2x1ZGUvdGVybWlvcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj
IDI3ICIvdXNyL2luY2x1ZGUvdGVybWlvcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvdGVybWlvcy5oIiAyIDMKCgoKCgoKZXh0
ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oIiAxIDMKIyAyNCAi
L3Vzci9pbmNsdWRlL2JpdHMvdGVybWlvcy5oIiAzCnR5cGVkZWYgdW5zaWduZWQgY2hhciBjY190
Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzcGVlZF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB0Y2Zs
YWdfdDsKCgpzdHJ1Y3QgdGVybWlvcwogIHsKICAgIHRjZmxhZ190IGNfaWZsYWc7CiAgICB0Y2Zs
YWdfdCBjX29mbGFnOwogICAgdGNmbGFnX3QgY19jZmxhZzsKICAgIHRjZmxhZ190IGNfbGZsYWc7
CiAgICBjY190IGNfbGluZTsKICAgIGNjX3QgY19jY1szMl07CiAgICBzcGVlZF90IGNfaXNwZWVk
OwogICAgc3BlZWRfdCBjX29zcGVlZDsKICB9OwojIDQxICIvdXNyL2luY2x1ZGUvdGVybWlvcy5o
IiAyIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCIgMwpleHRlcm4gc3BlZWRfdCBjZmdl
dG9zcGVlZCAoX19jb25zdCBzdHJ1Y3QgdGVybWlvcyAqX190ZXJtaW9zX3ApIHRocm93ICgpOwoK
CmV4dGVybiBzcGVlZF90IGNmZ2V0aXNwZWVkIChfX2NvbnN0IHN0cnVjdCB0ZXJtaW9zICpfX3Rl
cm1pb3NfcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjZnNldG9zcGVlZCAoc3RydWN0IHRlcm1p
b3MgKl9fdGVybWlvc19wLCBzcGVlZF90IF9fc3BlZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
Y2ZzZXRpc3BlZWQgKHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCwgc3BlZWRfdCBfX3NwZWVk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjZnNldHNwZWVkIChzdHJ1Y3QgdGVybWlvcyAqX190
ZXJtaW9zX3AsIHNwZWVkX3QgX19zcGVlZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRjZ2V0
YXR0ciAoaW50IF9fZmQsIHN0cnVjdCB0ZXJtaW9zICpfX3Rlcm1pb3NfcCkgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgdGNzZXRhdHRyIChpbnQgX19mZCwgaW50IF9fb3B0aW9uYWxfYWN0aW9ucywK
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRlcm1pb3MgKl9fdGVybWlvc19w
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNmbWFrZXJhdyAoc3RydWN0IHRlcm1pb3MgKl9f
dGVybWlvc19wKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0Y3NlbmRicmVhayAoaW50IF9fZmQs
IGludCBfX2R1cmF0aW9uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRjZHJhaW4gKGludCBfX2Zk
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0Y2ZsdXNoIChpbnQgX19mZCwgaW50IF9fcXVldWVf
c2VsZWN0b3IpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRjZmxvdyAoaW50IF9fZmQsIGludCBf
X2FjdGlvbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19waWRfdCB0Y2dldHNpZCAoaW50IF9fZmQp
IHRocm93ICgpOwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R0eWRlZmF1bHRzLmgiIDEgMwoj
IDEwMyAiL3Vzci9pbmNsdWRlL3Rlcm1pb3MuaCIgMiAzCgoKfQojIDQgIi91c3IvaW5jbHVkZS9z
eXMvdGVybWlvcy5oIiAyIDMKIyAzNzg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM4MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi91c3IvaW5jbHVkZS9haW8uaCIgMSAzCiMg
MjYgIi91c3IvaW5jbHVkZS9haW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx
IDMKIyAyNyAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZmNudGwu
aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9haW8uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL3Np
Z25hbC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvdGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2Fpby5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvYWlvLmgiIDIgMwoKZXh0
ZXJuICJDIiB7CgoKc3RydWN0IGFpb2NiCnsKICBpbnQgYWlvX2ZpbGRlczsKICBpbnQgYWlvX2xp
b19vcGNvZGU7CiAgaW50IGFpb19yZXFwcmlvOwogIHZvbGF0aWxlIHZvaWQgKmFpb19idWY7CiAg
c2l6ZV90IGFpb19uYnl0ZXM7CiAgc3RydWN0IHNpZ2V2ZW50IGFpb19zaWdldmVudDsKCgogIHN0
cnVjdCBhaW9jYiAqX19uZXh0X3ByaW87CiAgaW50IF9fYWJzX3ByaW87CiAgaW50IF9fcG9saWN5
OwogIGludCBfX2Vycm9yX2NvZGU7CiAgX19zc2l6ZV90IF9fcmV0dXJuX3ZhbHVlOwoKCiAgX19v
ZmZfdCBhaW9fb2Zmc2V0OwogIGNoYXIgX19wYWRbc2l6ZW9mIChfX29mZjY0X3QpIC0gc2l6ZW9m
IChfX29mZl90KV07CgoKCiAgY2hhciBfX3VudXNlZFszMl07Cn07CgoKCgpzdHJ1Y3QgYWlvY2I2
NAp7CiAgaW50IGFpb19maWxkZXM7CiAgaW50IGFpb19saW9fb3Bjb2RlOwogIGludCBhaW9fcmVx
cHJpbzsKICB2b2xhdGlsZSB2b2lkICphaW9fYnVmOwogIHNpemVfdCBhaW9fbmJ5dGVzOwogIHN0
cnVjdCBzaWdldmVudCBhaW9fc2lnZXZlbnQ7CgoKICBzdHJ1Y3QgYWlvY2IgKl9fbmV4dF9wcmlv
OwogIGludCBfX2Fic19wcmlvOwogIGludCBfX3BvbGljeTsKICBpbnQgX19lcnJvcl9jb2RlOwog
IF9fc3NpemVfdCBfX3JldHVybl92YWx1ZTsKCiAgX19vZmY2NF90IGFpb19vZmZzZXQ7CiAgY2hh
ciBfX3VudXNlZFszMl07Cn07CgoKCgoKCnN0cnVjdCBhaW9pbml0CiAgewogICAgaW50IGFpb190
aHJlYWRzOwogICAgaW50IGFpb19udW07CiAgICBpbnQgYWlvX2xvY2tzOwogICAgaW50IGFpb191
c2VkYmE7CiAgICBpbnQgYWlvX2RlYnVnOwogICAgaW50IGFpb19udW11c2VyczsKICAgIGludCBh
aW9faWRsZV90aW1lOwoKICAgIGludCBhaW9fcmVzZXJ2ZWQ7CiAgfTsKCgoKCmVudW0KewogIEFJ
T19DQU5DRUxFRCwKCiAgQUlPX05PVENBTkNFTEVELAoKICBBSU9fQUxMRE9ORQoKfTsKCgoKZW51
bQp7CiAgTElPX1JFQUQsCgogIExJT19XUklURSwKCiAgTElPX05PUAoKfTsKCgoKZW51bQp7CiAg
TElPX1dBSVQsCgogIExJT19OT1dBSVQKCn07CgoKCgpleHRlcm4gdm9pZCBhaW9faW5pdCAoX19j
b25zdCBzdHJ1Y3QgYWlvaW5pdCAqX19pbml0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGFp
b19yZWFkIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYWlv
X3dyaXRlIChzdHJ1Y3QgYWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxp
b19saXN0aW8gKGludCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFpb2Ni
ICpfX2NvbnN0IF9fbGlzdFtdLAogICAgICAgICAgICAgICAgICAgICAgIGludCBfX25lbnQsIHN0
cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBh
aW9fZXJyb3IgKF9fY29uc3Qgc3RydWN0IGFpb2NiICpfX2Fpb2NicCkgdGhyb3cgKCk7CgpleHRl
cm4gX19zc2l6ZV90IGFpb19yZXR1cm4gKHN0cnVjdCBhaW9jYiAqX19haW9jYnApIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGFpb19jYW5jZWwgKGludCBfX2ZpbGRlcywgc3RydWN0IGFpb2NiICpf
X2Fpb2NicCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgYWlvX3N1c3BlbmQgKF9fY29uc3Qgc3Ry
dWN0IGFpb2NiICpfX2NvbnN0IF9fbGlzdFtdLCBpbnQgX19uZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IGFpb19mc3luYyAoaW50IF9fb3BlcmF0aW9uLCBzdHJ1Y3Qg
YWlvY2IgKl9fYWlvY2JwKSB0aHJvdyAoKTsKIyAyMTUgIi91c3IvaW5jbHVkZS9haW8uaCIgMwpl
eHRlcm4gaW50IGFpb19yZWFkNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgYWlvX3dyaXRlNjQgKHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cg
KCk7CgpleHRlcm4gaW50IGxpb19saXN0aW82NCAoaW50IF9fbW9kZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBhaW9jYjY0ICpfX2NvbnN0IF9fbGlzdFtdLAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fbmVudCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9fc2ln
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBhaW9fZXJyb3I2NCAoX19jb25zdCBzdHJ1Y3Qg
YWlvY2I2NCAqX19haW9jYnApIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGFpb19yZXR1cm42
NCAoc3RydWN0IGFpb2NiNjQgKl9fYWlvY2JwKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgYWlvX2Nh
bmNlbDY0IChpbnQgX19maWxkZXMsIHN0cnVjdCBhaW9jYjY0ICpfX2Fpb2NicCkgdGhyb3cgKCk7
CgpleHRlcm4gaW50IGFpb19zdXNwZW5kNjQgKF9fY29uc3Qgc3RydWN0IGFpb2NiNjQgKl9fY29u
c3QgX19saXN0W10sIGludCBfX25lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QgX190aW1lb3V0KQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBhaW9fZnN5bmM2NCAoaW50IF9fb3BlcmF0aW9uLCBzdHJ1Y3QgYWlvY2I2NCAq
X19haW9jYnApIHRocm93ICgpOwoKCn0KIyAzODAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvcGFy
YW0uaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMwojIDEgIi91c3IvbG9j
YWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9saW1p
dHMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9wYXJhbS5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvcGFyYW0uaCIgMSAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL2FzbS9wYXJhbS5oIiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvcGFyYW0uaCIg
MiAzCiMgMjUgIi91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgNDIgIi91c3IvaW5jbHVk
ZS9zeXMvcGFyYW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgNDMg
Ii91c3IvaW5jbHVkZS9zeXMvcGFyYW0uaCIgMiAzCiMgMzgwNyAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKCgoKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL3VuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL3VuLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvc3lzL2NkZWZzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL3VuLmgiIDIgMwoK
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc29ja2FkZHIuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVk
ZS9zeXMvdW4uaCIgMiAzCgpleHRlcm4gIkMiIHsKCgpzdHJ1Y3Qgc29ja2FkZHJfdW4KICB7CiAg
ICBzYV9mYW1pbHlfdCBzdW5fZmFtaWx5OwogICAgY2hhciBzdW5fcGF0aFsxMDhdOwogIH07CgoK
CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3N5cy91
bi5oIiAyIDMKCgoKCgoKfQojIDM4MTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5oIiAyCiMgMzgyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRlL3Vjb250ZXh0LmgiIDEg
MwojIDM4MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5oIiAyCgoKCgojIDEgIi91c3IvaW5jbHVkZS9wb2xsLmgiIDEgMwojIDEgIi91c3IvaW5jbHVk
ZS9zeXMvcG9sbC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL3N5cy9wb2xsLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9zeXMvcG9sbC5o
IiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3BvbGwuaCIgMSAzCiMgMjcgIi91c3IvaW5j
bHVkZS9zeXMvcG9sbC5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBuZmRzX3Q7
CgoKc3RydWN0IHBvbGxmZAogIHsKICAgIGludCBmZDsKICAgIHNob3J0IGludCBldmVudHM7CiAg
ICBzaG9ydCBpbnQgcmV2ZW50czsKICB9OwoKCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50
IHBvbGwgKHN0cnVjdCBwb2xsZmQgKl9fZmRzLCBuZmRzX3QgX19uZmRzLCBpbnQgX190aW1lb3V0
KSB0aHJvdyAoKTsKCn0KIyAyICIvdXNyL2luY2x1ZGUvcG9sbC5oIiAyIDMKIyAzODMwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM4NzMg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEg
Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMzg3NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIKIyAzODg0ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvdXNyL2luY2x1ZGUvZGxm
Y24uaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9kbGZjbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvZGxmY24uaCIgMiAzCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9kbGZjbi5oIiAxIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2JpdHMvZGxm
Y24uaCIgMwpleHRlcm4gdm9pZCBfZGxfbWNvdW50X3dyYXBwZXJfY2hlY2sgKHZvaWQgKl9fc2Vs
ZnBjKSB0aHJvdyAoKTsKIyAyNyAiL3Vzci9pbmNsdWRlL2RsZmNuLmgiIDIgMwojIDQxICIvdXNy
L2luY2x1ZGUvZGxmY24uaCIgMwpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHZvaWQgKmRsb3BlbiAo
X19jb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGRsY2xvc2UgKHZvaWQgKl9faGFuZGxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgKmRsc3lt
ICh2b2lkICpfX3Jlc3RyaWN0IF9faGFuZGxlLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25hbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKmRsdnN5
bSAodm9pZCAqX19yZXN0cmljdCBfX2hhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fdmVyc2lvbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmRs
ZXJyb3IgKHZvaWQpIHRocm93ICgpOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fY29uc3QgY2hh
ciAqZGxpX2ZuYW1lOwogIHZvaWQgKmRsaV9mYmFzZTsKICBfX2NvbnN0IGNoYXIgKmRsaV9zbmFt
ZTsKICB2b2lkICpkbGlfc2FkZHI7Cn0gRGxfaW5mbzsKCgoKZXh0ZXJuIGludCBkbGFkZHIgKGNv
bnN0IHZvaWQgKl9fYWRkcmVzcywgRGxfaW5mbyAqX19pbmZvKSB0aHJvdyAoKTsKCgp9CiMgMzg4
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDIK
CgoKICB0eXBlZGVmIHZvaWQgKkFDRV9TSExJQl9IQU5ETEU7CiMgMzk1NiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9tbWFuLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL21tYW4uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgi
IDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1
ZGUvc3lzL21tYW4uaCIgMiAzCgojIDEgIi91c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9p
Njg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjcgIi91c3IvaW5j
bHVkZS9zeXMvbW1hbi5oIiAyIDMKIyA0MiAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9tbWFuLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvc3lzL21t
YW4uaCIgMiAzCgoKCgpleHRlcm4gIkMiIHsKIyA1OCAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgi
IDMKZXh0ZXJuIHZvaWQgKm1tYXAgKHZvaWQgKl9fYWRkciwgc2l6ZV90IF9fbGVuLCBpbnQgX19w
cm90LAogICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIGludCBfX2ZkLCBfX29mZl90IF9f
b2Zmc2V0KSB0aHJvdyAoKTsKIyA3MSAiL3Vzci9pbmNsdWRlL3N5cy9tbWFuLmgiIDMKZXh0ZXJu
IHZvaWQgKm1tYXA2NCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4sIGludCBfX3Byb3QsCiAg
ICAgICAgICAgICAgICAgICAgIGludCBfX2ZsYWdzLCBpbnQgX19mZCwgX19vZmY2NF90IF9fb2Zm
c2V0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbXVubWFwICh2b2lkICpfX2FkZHIsIHNpemVf
dCBfX2xlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1wcm90ZWN0ICh2b2lkICpfX2FkZHIs
IHNpemVfdCBfX2xlbiwgaW50IF9fcHJvdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG1zeW5j
ICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fZmxhZ3MpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBtYWR2aXNlICh2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbiwgaW50IF9fYWR2
aWNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwb3NpeF9tYWR2aXNlICh2b2lkICpfX2FkZHIs
IHNpemVfdCBfX2xlbiwgaW50IF9fYWR2aWNlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbWxv
Y2sgKF9fY29uc3Qgdm9pZCAqX19hZGRyLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgbXVubG9jayAoX19jb25zdCB2b2lkICpfX2FkZHIsIHNpemVfdCBfX2xlbikgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IG1sb2NrYWxsIChpbnQgX19mbGFncykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgbXVubG9ja2FsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1y
ZW1hcCAodm9pZCAqX19hZGRyLCBzaXplX3QgX19vbGRfbGVuLCBzaXplX3QgX19uZXdfbGVuLAog
ICAgICAgICAgICAgICAgICAgICBpbnQgX19tYXlfbW92ZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBpbnQgbWluY29yZSAodm9pZCAqX19zdGFydCwgc2l6ZV90IF9fbGVuLCB1bnNpZ25lZCBjaGFy
ICpfX3ZlYyk7CgoKCgpleHRlcm4gaW50IHNobV9vcGVuIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwg
aW50IF9fb2ZsYWcsIG1vZGVfdCBfX21vZGUpOwoKCmV4dGVybiBpbnQgc2htX3VubGluayAoX19j
b25zdCBjaGFyICpfX25hbWUpOwoKfQojIDM5NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAyCgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMv
bXNnLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAyIDMKCgoj
IDEgIi91c3IvaW5jbHVkZS9zeXMvaXBjLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL21z
Zy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21zcS5oIiAxIDMKIyAyMyAiL3Vzci9p
bmNsdWRlL2JpdHMvbXNxLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMK
IyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvbXNxLmgiIDIgMwojIDMyICIvdXNyL2luY2x1ZGUvYml0
cy9tc3EuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IG1zZ3FudW1fdDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBtc2dsZW5fdDsKCgoKCnN0cnVjdCBtc3FpZF9kcwp7CiAgc3RydWN0
IGlwY19wZXJtIG1zZ19wZXJtOwogIF9fdGltZV90IG1zZ19zdGltZTsKICB1bnNpZ25lZCBsb25n
IGludCBfX3VudXNlZDE7CiAgX190aW1lX3QgbXNnX3J0aW1lOwogIHVuc2lnbmVkIGxvbmcgaW50
IF9fdW51c2VkMjsKICBfX3RpbWVfdCBtc2dfY3RpbWU7CiAgdW5zaWduZWQgbG9uZyBpbnQgX191
bnVzZWQzOwogIHVuc2lnbmVkIGxvbmcgaW50IF9fbXNnX2NieXRlczsKICBtc2dxbnVtX3QgbXNn
X3FudW07CiAgbXNnbGVuX3QgbXNnX3FieXRlczsKICBfX3BpZF90IG1zZ19sc3BpZDsKICBfX3Bp
ZF90IG1zZ19scnBpZDsKICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDQ7CiAgdW5zaWduZWQg
bG9uZyBpbnQgX191bnVzZWQ1Owp9OwojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy9tc3EuaCIgMwpz
dHJ1Y3QgbXNnaW5mbwogIHsKICAgIGludCBtc2dwb29sOwogICAgaW50IG1zZ21hcDsKICAgIGlu
dCBtc2dtYXg7CiAgICBpbnQgbXNnbW5iOwogICAgaW50IG1zZ21uaTsKICAgIGludCBtc2dzc3o7
CiAgICBpbnQgbXNndHFsOwogICAgdW5zaWduZWQgc2hvcnQgaW50IG1zZ3NlZzsKICB9OwojIDI5
ICIvdXNyL2luY2x1ZGUvc3lzL21zZy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9tc2cuaCIgMiAzCiMgNDkgIi91c3IvaW5jbHVk
ZS9zeXMvbXNnLmgiIDMKc3RydWN0IG1zZ2J1ZgogIHsKICAgIGxvbmcgaW50IG10eXBlOwogICAg
Y2hhciBtdGV4dFsxXTsKICB9OwoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IG1zZ2N0bCAo
aW50IF9fbXNxaWQsIGludCBfX2NtZCwgc3RydWN0IG1zcWlkX2RzICpfX2J1ZikgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBtc2dnZXQgKGtleV90IF9fa2V5LCBpbnQgX19tc2dmbGcpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgbXNncmN2IChpbnQgX19tc3FpZCwgdm9pZCAqX19tc2dwLCBzaXplX3Qg
X19tc2dzeiwKICAgICAgICAgICAgICAgICAgIGxvbmcgaW50IF9fbXNndHlwLCBpbnQgX19tc2dm
bGcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXNnc25kIChpbnQgX19tc3FpZCwgX19jb25zdCB2
b2lkICpfX21zZ3AsIHNpemVfdCBfX21zZ3N6LAogICAgICAgICAgICAgICAgICAgaW50IF9fbXNn
ZmxnKSB0aHJvdyAoKTsKCn0KIyAzOTY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDM5ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHR5cGVkZWYgaW50IEFDRV9pZHR5cGVfdDsKIyAz
OTk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK
ICB0eXBlZGVmIGxvbmcgQUNFX2lkX3Q7CgogIHR5cGVkZWYgc2hvcnQgQUNFX3ByaV90OwoKCgoK
CgogIHR5cGVkZWYgQUNFX1VJTlQ2NCBBQ0VfaHJ0aW1lX3Q7CiMgNDEwOCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy91dHNuYW1lLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3V0c25hbWUuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3N5cy91
dHNuYW1lLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3V0c25h
bWUuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdXRzbmFtZS5oIiAyIDMKCgoKCgoKc3Ry
dWN0IHV0c25hbWUKICB7CgogICAgY2hhciBzeXNuYW1lWzY1XTsKCgogICAgY2hhciBub2RlbmFt
ZVs2NV07CgoKICAgIGNoYXIgcmVsZWFzZVs2NV07CgogICAgY2hhciB2ZXJzaW9uWzY1XTsKCgog
ICAgY2hhciBtYWNoaW5lWzY1XTsKCgoKCiAgICBjaGFyIGRvbWFpbm5hbWVbNjVdOwoKCgoKICB9
OwoKCgoKCgoKZXh0ZXJuIGludCB1bmFtZSAoc3RydWN0IHV0c25hbWUgKl9fbmFtZSkgdGhyb3cg
KCk7CgoKfQojIDQxMDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PUy5oIiAyCnR5cGVkZWYgc3RydWN0IHV0c25hbWUgQUNFX3V0c25hbWU7CiMgNDEyOSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVk
ZWYgZmRfc2V0IEFDRV9GRF9TRVRfVFlQRTsKIyA0NDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiBjaGFyIEFDRV9IT1NURU5UX0RB
VEFbKDQqMTAyNCldOwp0eXBlZGVmIGNoYXIgQUNFX1NFUlZFTlRfREFUQVsoNCoxMDI0KV07CnR5
cGVkZWYgY2hhciBBQ0VfUFJPVE9FTlRfREFUQVsoMioxMDI0KV07CgoKCnVuaW9uIHNlbXVuCnsK
ICBpbnQgdmFsOwogIHN0cnVjdCBzZW1pZF9kcyAqYnVmOwogIHVfc2hvcnQgKmFycmF5Owp9Owoj
IDQ0OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5o
Igp0eXBlZGVmIGNvbnN0IGNoYXIgKipTWVNfU0lHTElTVDsKIyA0NDk5ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiBBQ0VfVEhSX0ZV
TkMgQUNFX1RIUl9GVU5DX0lOVEVSTkFMOwoKCmV4dGVybiAiQyIgewp0eXBlZGVmIHZvaWQgKCpB
Q0VfVEhSX0NfREVTVCkodm9pZCAqKTsKfQp0eXBlZGVmIHZvaWQgKCpBQ0VfVEhSX0RFU1QpKHZv
aWQgKik7CiMgNDUxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmgiCnR5cGVkZWYgY29uc3QgQUNFX1RDSEFSICogQUNFX0RMX1RZUEU7CiMgNDU0MCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmV4dGVy
biAiQyIKewogIHR5cGVkZWYgdm9pZCAoKkFDRV9TSUdOQUxfQ19GVU5DKShpbnQsc2lnaW5mb190
Kix2b2lkKik7Cn0KIyA0NTc0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX1RocmVhZF9JRAp7CnB1YmxpYzoKCiAgQUNFX1RocmVh
ZF9JRCAoQUNFX3RocmVhZF90LCBBQ0VfaHRocmVhZF90KTsKICBBQ0VfVGhyZWFkX0lEIChjb25z
dCBBQ0VfVGhyZWFkX0lEICZpZCk7CgoKICBBQ0VfdGhyZWFkX3QgaWQgKHZvaWQpOwogIHZvaWQg
aWQgKEFDRV90aHJlYWRfdCk7CgoKICBBQ0VfaHRocmVhZF90IGhhbmRsZSAodm9pZCk7CiAgdm9p
ZCBoYW5kbGUgKEFDRV9odGhyZWFkX3QpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9U
aHJlYWRfSUQgJikgY29uc3Q7CiAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IEFDRV9UaHJlYWRfSUQg
JikgY29uc3Q7Cgpwcml2YXRlOgoKICBBQ0VfdGhyZWFkX3QgdGhyZWFkX2lkXzsKCgogIEFDRV9o
dGhyZWFkX3QgdGhyZWFkX2hhbmRsZV87Cn07CgoKdHlwZWRlZiB2b2lkICgqQUNFX1NpZ19IYW5k
bGVyX0V4KSAoaW50LCBzaWdpbmZvX3QgKnNpZ2luZm8sIHVjb250ZXh0X3QgKnVjb250ZXh0KTsK
CgoKCnR5cGVkZWYgaW50IEFDRV9TY2hlZF9Qcmlvcml0eTsKCgpjbGFzcyBBQ0VfU2NoZWRfUGFy
YW1zOwojIDQ2NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PUy5oIgpzdHJ1Y3Qgc3RyYnVmCnsKICBpbnQgbWF4bGVuOwogIGludCBsZW47CiAgdm9pZCAq
YnVmOwp9OwoKCgoKCgoKY2xhc3MgQUNFX1N0cl9CdWYgOiBwdWJsaWMgc3RyYnVmCnsKcHVibGlj
OgoKCiAgQUNFX1N0cl9CdWYgKHZvaWQgKmIgPSAwLCBpbnQgbCA9IDAsIGludCBtYXggPSAwKTsK
CgogIEFDRV9TdHJfQnVmIChzdHJidWYgJik7Cn07CiMgNDY4OCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVkZWYgdm9pZCAoKkFDRV9DTEVB
TlVQX0ZVTkMpKHZvaWQgKm9iamVjdCwgdm9pZCAqcGFyYW0pIDsKIyA0NzA0ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX0NsZWFu
dXAKewpwdWJsaWM6CgogIEFDRV9DbGVhbnVwICh2b2lkKTsKCgogIHZpcnR1YWwgfkFDRV9DbGVh
bnVwICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBjbGVhbnVwICh2b2lkICpwYXJhbSA9IDApOwp9
OwoKCmV4dGVybiAiQyIKdm9pZCBhY2VfY2xlYW51cF9kZXN0cm95ZXIgKEFDRV9DbGVhbnVwICos
IHZvaWQgKnBhcmFtID0gMCk7CgoKCgoKCmNsYXNzIEFDRV9DbGVhbnVwX0luZm8KewpwdWJsaWM6
CgogIEFDRV9DbGVhbnVwX0luZm8gKHZvaWQpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFD
RV9DbGVhbnVwX0luZm8gJm8pIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9yIT0gKGNvbnN0IEFDRV9D
bGVhbnVwX0luZm8gJm8pIGNvbnN0OwoKCiAgdm9pZCAqb2JqZWN0XzsKCgogIEFDRV9DTEVBTlVQ
X0ZVTkMgY2xlYW51cF9ob29rXzsKCgogIHZvaWQgKnBhcmFtXzsKfTsKCmNsYXNzIEFDRV9DbGVh
bnVwX0luZm9fTm9kZTsKIyA0NzU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX09TX0V4aXRfSW5mbwp7CnB1YmxpYzoKCiAgQUNF
X09TX0V4aXRfSW5mbyAodm9pZCk7CgoKICB+QUNFX09TX0V4aXRfSW5mbyAodm9pZCk7CgoKICBp
bnQgYXRfZXhpdF9pICh2b2lkICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29r
LCB2b2lkICpwYXJhbSk7CgoKCiAgaW50IGZpbmQgKHZvaWQgKm9iamVjdCk7CgoKCiAgdm9pZCBj
YWxsX2hvb2tzICgpOwoKcHJpdmF0ZToKCgoKCgogIEFDRV9DbGVhbnVwX0luZm9fTm9kZSAqcmVn
aXN0ZXJlZF9vYmplY3RzXzsKfTsKCmNsYXNzIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOwpjbGFz
cyBBQ0VfVGhyZWFkX0hvb2s7CiMgNDc5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCnR5cGVkZWYgZG91YmxlIEFDRV90aW1lcl90OwoKCgoKCiAg
ICB0eXBlZGVmIHJ1c2FnZSBBQ0VfUnVzYWdlOwojIDQ4MjAgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogICAgICB0eXBlZGVmIHN0cnVjdCBzdGF0
IEFDRV9zdGF0OwoKCgoKZXh0ZXJuICJDIiB7CiAgdHlwZWRlZiBpbnQgKCpBQ0VfQ09NUEFSRV9G
VU5DKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7Cn0KIyA0ODY0ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKdHlwZWRlZiB1X2xvbmcgQUNF
X1NFUlZJQ0VfVFlQRTsKdHlwZWRlZiB1X2xvbmcgQUNFX1NPQ0tfR1JPVVA7CnN0cnVjdCBBQ0Vf
UHJvdG9jb2xfSW5mbwp7CiAgdV9sb25nIGR3U2VydmljZUZsYWdzMTsKICBpbnQgaUFkZHJlc3NG
YW1pbHk7CiAgaW50IGlQcm90b2NvbDsKICBjaGFyIHN6UHJvdG9jb2xbMjU1KzFdOwp9OwojIDQ5
MTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpj
bGFzcyBBQ0VfRmxvd19TcGVjCgoKCnsKcHVibGljOgoKCiAgQUNFX0Zsb3dfU3BlYyAodm9pZCk7
CgoKICBBQ0VfRmxvd19TcGVjICh1X2xvbmcgdG9rZW5fcmF0ZSwKICAgICAgICAgICAgICAgICB1
X2xvbmcgdG9rZW5fYnVja2V0X3NpemUsCiAgICAgICAgICAgICAgICAgdV9sb25nIHBlYWtfYmFu
ZHdpZHRoLAogICAgICAgICAgICAgICAgIHVfbG9uZyBsYXRlbmN5LAogICAgICAgICAgICAgICAg
IHVfbG9uZyBkZWxheV92YXJpYXRpb24sCiAgICAgICAgICAgICAgICAgQUNFX1NFUlZJQ0VfVFlQ
RSBzZXJ2aWNlX3R5cGUsCiAgICAgICAgICAgICAgICAgdV9sb25nIG1heF9zZHVfc2l6ZSwKICAg
ICAgICAgICAgICAgICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUsCiAgICAgICAgICAgICAg
ICAgaW50IHR0bCwKICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHkpOwoKCiAgdV9sb25nIHRv
a2VuX3JhdGUgKHZvaWQpIGNvbnN0OwogIHZvaWQgdG9rZW5fcmF0ZSAodV9sb25nIHRyKTsKCgog
IHVfbG9uZyB0b2tlbl9idWNrZXRfc2l6ZSAodm9pZCkgY29uc3Q7CiAgdm9pZCB0b2tlbl9idWNr
ZXRfc2l6ZSAodV9sb25nIHRicyk7CgoKICB1X2xvbmcgcGVha19iYW5kd2lkdGggKHZvaWQpIGNv
bnN0OwogIHZvaWQgcGVha19iYW5kd2lkdGggKHVfbG9uZyBwYik7CgoKICB1X2xvbmcgbGF0ZW5j
eSAodm9pZCkgY29uc3Q7CiAgdm9pZCBsYXRlbmN5ICh1X2xvbmcgbCk7CgoKICB1X2xvbmcgZGVs
YXlfdmFyaWF0aW9uICh2b2lkKSBjb25zdDsKICB2b2lkIGRlbGF5X3ZhcmlhdGlvbiAodV9sb25n
IGR2KTsKCgogIEFDRV9TRVJWSUNFX1RZUEUgc2VydmljZV90eXBlICh2b2lkKSBjb25zdDsKICB2
b2lkIHNlcnZpY2VfdHlwZSAoQUNFX1NFUlZJQ0VfVFlQRSBzdCk7CgoKICB1X2xvbmcgbWF4X3Nk
dV9zaXplICh2b2lkKSBjb25zdDsKICB2b2lkIG1heF9zZHVfc2l6ZSAodV9sb25nIG1zcyk7CgoK
ICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUgKHZvaWQpIGNvbnN0OwogIHZvaWQgbWluaW11
bV9wb2xpY2VkX3NpemUgKHVfbG9uZyBtcHMpOwoKCiAgaW50IHR0bCAodm9pZCkgY29uc3Q7CiAg
dm9pZCB0dGwgKGludCB0KTsKCgogIGludCBwcmlvcml0eSAodm9pZCkgY29uc3Q7CiAgdm9pZCBw
cmlvcml0eSAoaW50IHApOwoKCgoKcHJpdmF0ZToKICB1X2xvbmcgdG9rZW5fcmF0ZV87CiAgdV9s
b25nIHRva2VuX2J1Y2tldF9zaXplXzsKICB1X2xvbmcgcGVha19iYW5kd2lkdGhfOwogIHVfbG9u
ZyBsYXRlbmN5XzsKICB1X2xvbmcgZGVsYXlfdmFyaWF0aW9uXzsKICBBQ0VfU0VSVklDRV9UWVBF
IHNlcnZpY2VfdHlwZV87CiAgdV9sb25nIG1heF9zZHVfc2l6ZV87CiAgdV9sb25nIG1pbmltdW1f
cG9saWNlZF9zaXplXzsKICBpbnQgdHRsXzsKICBpbnQgcHJpb3JpdHlfOwoKCn07CgoKCgoKCgpj
bGFzcyBBQ0VfUW9TCgoKCnsKcHVibGljOgoKICBBQ0VfRmxvd19TcGVjIHNlbmRpbmdfZmxvd3Nw
ZWMgKHZvaWQpIGNvbnN0OwogIHZvaWQgc2VuZGluZ19mbG93c3BlYyAoY29uc3QgQUNFX0Zsb3df
U3BlYyAmZnMpOwoKCiAgQUNFX0Zsb3dfU3BlYyByZWNlaXZpbmdfZmxvd3NwZWMgKHZvaWQpIGNv
bnN0OwogIHZvaWQgcmVjZWl2aW5nX2Zsb3dzcGVjIChjb25zdCBBQ0VfRmxvd19TcGVjICZmcyk7
CgoKICBpb3ZlYyBwcm92aWRlcl9zcGVjaWZpYyAodm9pZCkgY29uc3Q7CiAgdm9pZCBwcm92aWRl
cl9zcGVjaWZpYyAoY29uc3QgaW92ZWMgJnBzKTsKCgoKcHJpdmF0ZToKCiAgQUNFX0Zsb3dfU3Bl
YyBzZW5kaW5nX2Zsb3dzcGVjXzsKICBBQ0VfRmxvd19TcGVjIHJlY2VpdmluZ19mbG93c3BlY187
CgoKfTsKCgoKCgoKCmNsYXNzIEFDRV9Rb1NfUGFyYW1zCnsKcHVibGljOgojIDUwNDQgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIEFDRV9Rb1Nf
UGFyYW1zIChpb3ZlYyAqY2FsbGVyX2RhdGEgPSAwLAogICAgICAgICAgICAgICAgICBpb3ZlYyAq
Y2FsbGVlX2RhdGEgPSAwLAogICAgICAgICAgICAgICAgICBBQ0VfUW9TICpzb2NrZXRfcW9zID0g
MCwKICAgICAgICAgICAgICAgICAgQUNFX1FvUyAqZ3JvdXBfc29ja2V0X3FvcyA9IDAsCiAgICAg
ICAgICAgICAgICAgIHVfbG9uZyBmbGFncyA9IDApOwoKCiAgaW92ZWMgKmNhbGxlcl9kYXRhICh2
b2lkKSBjb25zdDsKICB2b2lkIGNhbGxlcl9kYXRhIChpb3ZlYyAqKTsKCgogIGlvdmVjICpjYWxs
ZWVfZGF0YSAodm9pZCkgY29uc3Q7CiAgdm9pZCBjYWxsZWVfZGF0YSAoaW92ZWMgKik7CgoKICBB
Q0VfUW9TICpzb2NrZXRfcW9zICh2b2lkKSBjb25zdDsKICB2b2lkIHNvY2tldF9xb3MgKEFDRV9R
b1MgKik7CgoKICBBQ0VfUW9TICpncm91cF9zb2NrZXRfcW9zICh2b2lkKSBjb25zdDsKICB2b2lk
IGdyb3VwX3NvY2tldF9xb3MgKEFDRV9Rb1MgKik7CgoKICB1X2xvbmcgZmxhZ3MgKHZvaWQpIGNv
bnN0OwogIHZvaWQgZmxhZ3MgKHVfbG9uZyk7Cgpwcml2YXRlOgoKCiAgaW92ZWMgKmNhbGxlcl9k
YXRhXzsKCgoKICBpb3ZlYyAqY2FsbGVlX2RhdGFfOwoKCgogIEFDRV9Rb1MgKnNvY2tldF9xb3Nf
OwoKCgogIEFDRV9Rb1MgKmdyb3VwX3NvY2tldF9xb3NfOwoKCiAgdV9sb25nIGZsYWdzXzsKfTsK
CgoKdHlwZWRlZiBpbnQgKCpBQ0VfUU9TX0NPTkRJVElPTl9GVU5DKSAoaW92ZWMgKmNhbGxlcl9p
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmNhbGxlcl9k
YXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUW9TICpzb2Nr
ZXRfcW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUW9TICpn
cm91cF9zb2NrZXRfcW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3ZlYyAqY2FsbGVlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3ZlYyAqY2FsbGVlX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFDRV9TT0NLX0dST1VQICpnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1X2xvbmcgY2FsbGJhY2tkYXRhKTsKCgoKCgoKdHlwZWRlZiB2b2lkICgqQUNFX09WRVJMQVBQ
RURfQ09NUExFVElPTl9GVU5DKSAodV9sb25nIGVycm9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgYnl0ZXNfdHJhbnNmZXJyZWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVE
ICpvdmVybGFwcGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1X2xvbmcgZmxhZ3MpOwojIDUxMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfQWNjZXB0X1FvU19QYXJhbXMKewpwdWJs
aWM6CiMgNTEzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmgiCiAgQUNFX0FjY2VwdF9Rb1NfUGFyYW1zIChBQ0VfUU9TX0NPTkRJVElPTl9GVU5DIHFv
c19jb25kaXRpb25fY2FsbGJhY2sgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25n
IGNhbGxiYWNrX2RhdGEgPSAwKTsKCgogIEFDRV9RT1NfQ09ORElUSU9OX0ZVTkMgcW9zX2NvbmRp
dGlvbl9jYWxsYmFjayAodm9pZCkgY29uc3Q7CiAgdm9pZCBxb3NfY29uZGl0aW9uX2NhbGxiYWNr
IChBQ0VfUU9TX0NPTkRJVElPTl9GVU5DIHFjYyk7CgoKICB1X2xvbmcgY2FsbGJhY2tfZGF0YSAo
dm9pZCkgY29uc3Q7CiAgdm9pZCBjYWxsYmFja19kYXRhICh1X2xvbmcgY2QpOwoKcHJpdmF0ZToK
CgoKCgoKCiAgQUNFX1FPU19DT05ESVRJT05fRlVOQyBxb3NfY29uZGl0aW9uX2NhbGxiYWNrXzsK
CgoKCgoKICB1X2xvbmcgY2FsbGJhY2tfZGF0YV87Cn07CiMgNTE3MSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmlubGluZSBsb25nIGFjZV90aW1l
em9uZSgpCnsKCgoKCgogIGxvbmcgcmVzdWx0ID0gMDsKICBzdHJ1Y3QgdGltZXZhbCB0aW1lOwog
IHN0cnVjdCB0aW1lem9uZSB6b25lOwogIGRvIHsgfSB3aGlsZSAoJnJlc3VsdCA9PSAwKTsKICBk
byB7IHJlc3VsdCA9IChpbnQpIDo6Z2V0dGltZW9mZGF5ICgmdGltZSwgJnpvbmUpOyB9IHdoaWxl
ICgwKTsKICByZXR1cm4gem9uZS50el9taW51dGVzd2VzdCAqIDYwOwoKCgoKCgp9CiMgNTIwMyAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCmlubGlu
ZSBkb3VibGUgYWNlX2RpZmZ0aW1lKHRpbWVfdCB0MSwgdGltZV90IHQwKQp7CgoKCgoKCiAgcmV0
dXJuIGRpZmZ0aW1lICh0MSwgdDApOwoKfQojIDUyODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpjbGFzcyBBQ0VfT1MKICA6IHB1YmxpYyBBQ0Vf
T1NfRGlyZW50LAogICAgcHVibGljIEFDRV9PU19TdHJpbmcsCiAgICBwdWJsaWMgQUNFX09TX01l
bW9yeSwKICAgIHB1YmxpYyBBQ0VfT1NfVExJCnsKCiAgcHJpdmF0ZTogQUNFX09TICh2b2lkKTsg
QUNFX09TIChjb25zdCBBQ0VfT1MmKTsgZnJpZW5kIGNsYXNzIGFjZV9kZXdhcm5fZ3BsdXNwbHVz
OwpwdWJsaWM6CiAgZnJpZW5kIGNsYXNzIEFDRV9UaW1lb3V0X01hbmFnZXI7CiMgNTMwMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgZW51bSBB
Q0VfSFJUaW1lcl9PcAogICAgewogICAgICBBQ0VfSFJUSU1FUl9TVEFSVCA9IDB4MCwKICAgICAg
QUNFX0hSVElNRVJfSU5DUiA9IDB4MSwKICAgICAgQUNFX0hSVElNRVJfU1RPUCA9IDB4MiwKICAg
ICAgQUNFX0hSVElNRVJfR0VUVElNRSA9IDB4RkZGRgogICAgfTsKCgoKCgoKCiAgY2xhc3MgYWNl
X2Zsb2NrX3QKICB7CiAgcHVibGljOgoKICAgIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgog
ICAgc3RydWN0IGZsb2NrIGxvY2tfOwoKCgogICAgY29uc3QgQUNFX1RDSEFSICpsb2NrbmFtZV87
CgoKICAgIEFDRV9IQU5ETEUgaGFuZGxlXzsKCgoKCgoKICB9OwojIDUzNjIgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBpbnQgYXRv
aSAoY29uc3QgY2hhciAqcyk7CgoKCgoKCiAgc3RhdGljIGRvdWJsZSBmbG9vciAoZG91YmxlIHgp
OwoKCiAgc3RhdGljIGRvdWJsZSBjZWlsIChkb3VibGUgeCk7CgoKICBzdGF0aWMgY2hhciAqZ2V0
ZW52IChjb25zdCBjaGFyICpzeW1ib2wpOwoKCgoKICBzdGF0aWMgaW50IHB1dGVudiAoY29uc3Qg
QUNFX1RDSEFSICpzdHJpbmcpOwogIHN0YXRpYyBBQ0VfVENIQVIgKnN0cmVudmR1cCAoY29uc3Qg
QUNFX1RDSEFSICpzdHIpOwogIHN0YXRpYyBBQ0VfVENIQVIgKmdldGVudnN0cmluZ3MgKHZvaWQp
OwoKCgogIHN0YXRpYyBpbnQgZ2V0b3B0IChpbnQgYXJnYywKICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqY29uc3QgKmFyZ3YsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wdHN0
cmluZyk7CiAgc3RhdGljIGludCBhcmd2X3RvX3N0cmluZyAoQUNFX1RDSEFSICoqYXJndiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVENIQVIgKiZidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHN1YnN0aXR1dGVfZW52X2FyZ3MgPSAxKTsKICBzdGF0aWMgaW50
IHN0cmluZ190b19hcmd2IChBQ0VfVENIQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgJmFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFS
ICoqJmFyZ3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN1YnN0aXR1dGVfZW52
X2FyZ3MgPSAxKTsKICBzdGF0aWMgbG9uZyBzeXNjb25mIChpbnQpOwoKCiAgc3RhdGljIGludCBj
b25kYXR0cl9pbml0IChBQ0VfY29uZGF0dHJfdCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUpOwogIHN0YXRp
YyBpbnQgY29uZGF0dHJfZGVzdHJveSAoQUNFX2NvbmRhdHRyX3QgJmF0dHJpYnV0ZXMpOwogIHN0
YXRpYyBpbnQgY29uZF9icm9hZGNhc3QgKEFDRV9jb25kX3QgKmN2KTsKICBzdGF0aWMgaW50IGNv
bmRfZGVzdHJveSAoQUNFX2NvbmRfdCAqY3YpOwogIHN0YXRpYyBpbnQgY29uZF9pbml0IChBQ0Vf
Y29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnQgdHlwZSA9IFBUSFJFQURf
UFJPQ0VTU19QUklWQVRFLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CiAgc3RhdGljIGlu
dCBjb25kX2luaXQgKEFDRV9jb25kX3QgKmN2LAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf
Y29uZGF0dHJfdCAmYXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwojIDU0
MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgog
IHN0YXRpYyBpbnQgY29uZF9zaWduYWwgKEFDRV9jb25kX3QgKmN2KTsKICBzdGF0aWMgaW50IGNv
bmRfdGltZWR3YWl0IChBQ0VfY29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBQ0VfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9W
YWx1ZSAqKTsKICBzdGF0aWMgaW50IGNvbmRfd2FpdCAoQUNFX2NvbmRfdCAqY3YsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9tdXRleF90ICptKTsKIyA1NDQzICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgY2hhciAqY3VzZXJp
ZCAoY2hhciAqdXNlciwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbiA9IDkp
OwojIDU0NTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5oIgogIHN0YXRpYyBpbnQgdW5hbWUgKEFDRV91dHNuYW1lICpuYW1lKTsKICBzdGF0aWMgbG9u
ZyBzeXNpbmZvIChpbnQgY21kLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICBsb25nIGNvdW50KTsKICBzdGF0aWMgaW50IGhvc3RuYW1lIChj
aGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtYXhuYW1lbGVuKTsKIyA1
NDY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK
ICBzdGF0aWMgaW50IGRsY2xvc2UgKEFDRV9TSExJQl9IQU5ETEUgaGFuZGxlKTsKCiAgc3RhdGlj
IEFDRV9UQ0hBUiAqZGxlcnJvciAodm9pZCk7CiAgc3RhdGljIEFDRV9TSExJQl9IQU5ETEUgZGxv
cGVuIChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG1vZGUgPSAweDAwMDAxKTsKICBzdGF0aWMgdm9pZCAqZGxzeW0gKEFDRV9T
SExJQl9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFS
ICpzeW1ib2wpOwoKCgogIHN0YXRpYyBpbnQgbGFzdF9lcnJvciAodm9pZCk7CiAgc3RhdGljIHZv
aWQgbGFzdF9lcnJvciAoaW50KTsKICBzdGF0aWMgaW50IHNldF9lcnJub190b19sYXN0X2Vycm9y
ICh2b2lkKTsKICBzdGF0aWMgaW50IHNldF9lcnJub190b193c2FfbGFzdF9lcnJvciAodm9pZCk7
CiAgc3RhdGljIGludCBmY2xvc2UgKEZJTEUgKmZwKTsKICBzdGF0aWMgaW50IGZjbnRsIChBQ0Vf
SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICBpbnQgY21kLAogICAgICAgICAgICAg
ICAgICAgIGxvbmcgYXJnID0gMCk7CiAgc3RhdGljIGludCBmZGV0YWNoIChjb25zdCBjaGFyICpm
aWxlKTsKCiAgc3RhdGljIGludCBmc3luYyAoQUNFX0hBTkRMRSBoYW5kbGUpOwoKICBzdGF0aWMg
RklMRSAqZm9wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsIGNvbnN0IEFDRV9UQ0hBUiAq
bW9kZSk7CgoKCiAgc3RhdGljIEZJTEUgKmZkb3BlbiAoQUNFX0hBTkRMRSBoYW5kbGUsIGNvbnN0
IEFDRV9UQ0hBUiAqbW9kZSk7CiAgc3RhdGljIEFDRV9UQ0hBUiAqZmdldHMgKEFDRV9UQ0hBUiAq
YnVmLCBpbnQgc2l6ZSwgRklMRSAqZnApOwogIHN0YXRpYyBpbnQgc3RhdCAoY29uc3QgQUNFX1RD
SEFSICpmaWxlLCBBQ0Vfc3RhdCAqKTsKICBzdGF0aWMgaW50IHRydW5jYXRlIChjb25zdCBBQ0Vf
VENIQVIgKmZpbGVuYW1lLCBvZmZfdCBsZW5ndGgpOwoKICBzdGF0aWMgaW50IGZwcmludGYgKEZJ
TEUgKmZwLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAgc3RhdGljIGludCBzcHJpbnRmIChj
aGFyICpidWYsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKICBzdGF0aWMgaW50IHZzcHJpbnRm
IChjaGFyICpidWZmZXIsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCBhcmdwdHIpOwogIHN0
YXRpYyBpbnQgcHJpbnRmIChjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CgoKCgoKCiAgc3RhdGlj
IHZvaWQgcGVycm9yIChjb25zdCBBQ0VfVENIQVIgKnMpOwojIDU1MjAgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBjaGFyICpnZXRz
IChjaGFyICpzdHIsIGludCBuID0gMCk7CiAgc3RhdGljIGludCBwdXRzIChjb25zdCBBQ0VfVENI
QVIgKnMpOwogIHN0YXRpYyBpbnQgZnB1dHMgKGNvbnN0IEFDRV9UQ0hBUiAqcywKICAgICAgICAg
ICAgICAgICAgICBGSUxFICpzdHJlYW0pOwoKICBzdGF0aWMgaW50IGZmbHVzaCAoRklMRSAqZnAp
OwogIHN0YXRpYyBzaXplX3QgZnJlYWQgKHZvaWQgKnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmVsZW1zLAogICAg
ICAgICAgICAgICAgICAgICAgIEZJTEUgKmZwKTsKICBzdGF0aWMgaW50IGZzZWVrIChGSUxFICpm
cCwKICAgICAgICAgICAgICAgICAgICBsb25nIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICBp
bnQgcHRybmFtZSk7CiAgc3RhdGljIGludCBmc3RhdCAoQUNFX0hBTkRMRSwKICAgICAgICAgICAg
ICAgICAgICBBQ0Vfc3RhdCAqKTsKICBzdGF0aWMgaW50IGxzdGF0IChjb25zdCBjaGFyICosCiAg
ICAgICAgICAgICAgICAgICAgQUNFX3N0YXQgKik7CiAgc3RhdGljIGludCBmdHJ1bmNhdGUgKEFD
RV9IQU5ETEUsCiAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90KTsKICBzdGF0aWMgc2l6ZV90
IGZ3cml0ZSAoY29uc3Qgdm9pZCAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5pdGVtcywKICAgICAgICAgICAg
ICAgICAgICAgICAgRklMRSAqZnApOwogIHN0YXRpYyB2b2lkIHJld2luZCAoRklMRSAqZnApOwoK
CgogIHN0YXRpYyB2b2lkICpic2VhcmNoIChjb25zdCB2b2lkICprZXksCiAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKmJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBuZWwsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAg
ICAgICAgICAgICBBQ0VfQ09NUEFSRV9GVU5DKTsKICBzdGF0aWMgdm9pZCBxc29ydCAodm9pZCAq
YmFzZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5lbCwKICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQ09NUEFSRV9GVU5DKTsK
CgoKICBzdGF0aWMgaW50IGZsb2NrX2luaXQgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxvY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1vZGVfdCBwZXJtcyA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfZGVzdHJveSAoQUNFX09TOjph
Y2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB1bmxpbmtf
ZmlsZSA9IDEpOwoKCgoKCgogIHN0YXRpYyBpbnQgZmxvY2tfcmRsb2NrIChBQ0VfT1M6OmFjZV9m
bG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAw
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfdHJ5cmRs
b2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZf
dCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDAp
OwogIHN0YXRpYyBpbnQgZmxvY2tfdHJ5d3Jsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2Nr
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQgZmxvY2tfdW5sb2NrIChB
Q0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9y
dCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCA9IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDApOwogIHN0YXRpYyBpbnQg
ZmxvY2tfd3Jsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaG9ydCB3aGVuY2UgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmZfdCBzdGFydCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbiA9IDAp
OwoKCgogIHN0YXRpYyBpbnQgYXRleGl0IChBQ0VfRVhJVF9IT09LIGZ1bmMpOwogIHN0YXRpYyBp
bnQgZXhlY2wgKGNvbnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqYXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4ZWNsZSAoY29uc3QgY2hhciAqcGF0aCwKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4
ZWNscCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
YXJnMCwgLi4uKTsKICBzdGF0aWMgaW50IGV4ZWN2IChjb25zdCBjaGFyICpwYXRoLAogICAgICAg
ICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7CiAgc3RhdGljIGludCBleGVjdnAgKGNv
bnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSk7
CiAgc3RhdGljIGludCBleGVjdmUgKGNvbnN0IGNoYXIgKnBhdGgsCiAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3Qg
ZW52cFtdKTsKICBzdGF0aWMgdm9pZCBfZXhpdCAoaW50IHN0YXR1cyA9IDApOwogIHN0YXRpYyB2
b2lkIGV4aXQgKGludCBzdGF0dXMgPSAwKTsKICBzdGF0aWMgdm9pZCBhYm9ydCAodm9pZCk7CiAg
c3RhdGljIHBpZF90IGZvcmsgKHZvaWQpOwoKCgoKICBzdGF0aWMgcGlkX3QgZm9yayAoY29uc3Qg
QUNFX1RDSEFSICpwcm9ncmFtX25hbWUpOwogIHN0YXRpYyBwaWRfdCBmb3JrX2V4ZWMgKEFDRV9U
Q0hBUiAqYXJndltdKTsKCgogIHN0YXRpYyBpbnQgZ2V0cGFnZXNpemUgKHZvaWQpOwogIHN0YXRp
YyBpbnQgYWxsb2NhdGlvbl9ncmFudWxhcml0eSAodm9pZCk7CgogIHN0YXRpYyBnaWRfdCBnZXRn
aWQgKHZvaWQpOwogIHN0YXRpYyBpbnQgc2V0Z2lkIChnaWRfdCk7CiAgc3RhdGljIHBpZF90IGdl
dHBpZCAodm9pZCk7CiAgc3RhdGljIHBpZF90IGdldHBnaWQgKHBpZF90IHBpZCk7CiAgc3RhdGlj
IHBpZF90IGdldHBwaWQgKHZvaWQpOwogIHN0YXRpYyB1aWRfdCBnZXR1aWQgKHZvaWQpOwogIHN0
YXRpYyBpbnQgc2V0dWlkICh1aWRfdCk7CiAgc3RhdGljIHBpZF90IHNldHNpZCAodm9pZCk7CiAg
c3RhdGljIGludCBzZXRwZ2lkIChwaWRfdCBwaWQsIHBpZF90IHBnaWQpOwogIHN0YXRpYyBpbnQg
c2V0cmV1aWQgKHVpZF90IHJ1aWQsIHVpZF90IGV1aWQpOwogIHN0YXRpYyBpbnQgc2V0cmVnaWQg
KGdpZF90IHJnaWQsIGdpZF90IGVnaWQpOwogIHN0YXRpYyBpbnQgc3lzdGVtIChjb25zdCBBQ0Vf
VENIQVIgKnMpOwojIDU2NDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBwaWRfdCB3YWl0cGlkIChwaWRfdCBwaWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9leGl0Y29kZSAqc3RhdHVzID0gMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHdhaXRfb3B0aW9ucyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9IQU5ETEUgaGFuZGxlID0gMCk7CiMgNTY1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIHBpZF90IHdhaXQgKHBpZF90IHBpZCwK
ICAgICAgICAgICAgICAgICAgICAgQUNFX2V4aXRjb2RlICpzdGF0dXMsCiAgICAgICAgICAgICAg
ICAgICAgIGludCB3YWl0X29wdGlvbnMgPSAwLAogICAgICAgICAgICAgICAgICAgICBBQ0VfSEFO
RExFIGhhbmRsZSA9IDApOwoKCgogIHN0YXRpYyBwaWRfdCB3YWl0IChpbnQgKiA9IDApOwoKCiAg
c3RhdGljIHVfaW50IGFsYXJtICh1X2ludCBzZWNzKTsKICBzdGF0aWMgdV9pbnQgdWFsYXJtICh1
X2ludCB1c2VjcywKICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBpbnRlcnZhbCA9IDApOwog
IHN0YXRpYyB1X2ludCB1YWxhcm0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0diwKICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwgPSBBQ0VfVGlt
ZV9WYWx1ZTo6emVybyk7CiAgc3RhdGljIEFDRV9ocnRpbWVfdCBnZXRocnRpbWUgKGNvbnN0IEFD
RV9IUlRpbWVyX09wID0gQUNFX0hSVElNRVJfR0VUVElNRSk7CgoKCgogIHN0YXRpYyBpbnQgY2xv
Y2tfZ2V0dGltZSAoY2xvY2tpZF90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHRpbWVzcGVjICopOwogIHN0YXRpYyBBQ0VfVGltZV9WYWx1ZSBnZXR0aW1lb2ZkYXkgKHZvaWQp
OwogIHN0YXRpYyBpbnQgZ2V0cnVzYWdlIChpbnQgd2hvLAogICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgcnVzYWdlICpydXNhZ2UpOwogIHN0YXRpYyBpbnQgZ2V0cmxpbWl0IChpbnQgcmVz
b3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBybGltaXQgKnJsKTsKICBzdGF0
aWMgaW50IHNldHJsaW1pdCAoaW50IHJlc291cmNlLAogICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfU0VUUkxJTUlUX1RZUEUgKnJsKTsKICBzdGF0aWMgaW50IHNsZWVwICh1X2ludCBzZWNvbmRz
KTsKICBzdGF0aWMgaW50IHNsZWVwIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpOwogIHN0YXRp
YyBpbnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcXVlc3RlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpyZW1haW5pbmcgPSAwKTsKIyA1NzAz
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBz
dGF0aWMgdGltZV90IG1rdGltZSAoc3RydWN0IHRtICp0aW1lcHRyKTsKCgoKICBzdGF0aWMgdm9p
ZCB0enNldCAodm9pZCk7CgoKCgogIHN0YXRpYyBsb25nIHRpbWV6b25lICh2b2lkKTsKCgoKCiAg
c3RhdGljIGRvdWJsZSBkaWZmdGltZSAodGltZV90IHQxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVfdCB0MCk7CiAgc3RhdGljIHRpbWVfdCB0aW1lICh0aW1lX3QgKnRsb2MgPSAwKTsK
ICBzdGF0aWMgc3RydWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqY2xvY2spOwogIHN0
YXRpYyBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKmNsb2NrLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKnJlcyk7CiAgc3RhdGljIHN0cnVj
dCB0bSAqZ210aW1lIChjb25zdCB0aW1lX3QgKmNsb2NrKTsKICBzdGF0aWMgc3RydWN0IHRtICpn
bXRpbWVfciAoY29uc3QgdGltZV90ICpjbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHRtICpyZXMpOwogIHN0YXRpYyBjaGFyICphc2N0aW1lIChjb25zdCBzdHJ1Y3Qg
dG0gKnRtKTsKICBzdGF0aWMgY2hhciAqYXNjdGltZV9yIChjb25zdCBzdHJ1Y3QgdG0gKnRtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1Zmxlbik7CiAgc3RhdGlj
IEFDRV9UQ0hBUiAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqdCk7CiAgc3RhdGljIEFDRV9UQ0hBUiAq
Y3RpbWVfciAoY29uc3QgdGltZV90ICpjbG9jaywgQUNFX1RDSEFSICpidWYsIGludCBidWZsZW4p
OwogIHN0YXRpYyBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IG1heHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0bSAqdGlt
ZXB0cik7CgoKCiAgc3RhdGljIGludCBtc2djdGwgKGludCBtc3FpZCwKICAgICAgICAgICAgICAg
ICAgICAgaW50IGNtZCwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1zcWlkX2RzICopOwog
IHN0YXRpYyBpbnQgbXNnZ2V0IChrZXlfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgIGludCBt
c2dmbGcpOwogIHN0YXRpYyBpbnQgbXNncmN2IChpbnQgaW50X2lkLAogICAgICAgICAgICAgICAg
ICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCiAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsK
ICBzdGF0aWMgaW50IG1zZ3NuZCAoaW50IGludF9pZCwKICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg
ICAgICAgICAgICBpbnQgZmxhZ3MpOwoKCgogIHN0YXRpYyBpbnQgbWFkdmlzZSAoY2FkZHJfdCBh
ZGRyLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgIGludCBhZHZpY2UpOwogIHN0YXRpYyB2b2lkICptbWFwICh2b2lkICphZGRyLAogICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICBpbnQgcHJvdCwK
ICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBBQ0Vf
SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgQUNFX0hBTkRMRSAqZmlsZV9tYXBwaW5nID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgaW50IHNhID0gMCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFS
ICpmaWxlX21hcHBpbmdfbmFtZSA9IDApOwogIHN0YXRpYyBpbnQgbXByb3RlY3QgKHZvaWQgKmFk
ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgcHJvdCk7CiAgc3RhdGljIGludCBtc3luYyAodm9pZCAqYWRkciwKICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgIGludCBzeW5jKTsKICBz
dGF0aWMgaW50IG11bm1hcCAodm9pZCAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGxlbik7CgoKCiAgc3RhdGljIGludCByZWN1cnNpdmVfbXV0ZXhfaW5pdCAoQUNFX3JlY3Vyc2l2
ZV90aHJlYWRfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFDRV9tdXRleGF0dHJfdCAqYXJnID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgc2EgPSAwKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2ZV9tdXRleF9kZXN0cm95
IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2
ZV9tdXRleF9sb2NrIChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKTsKICBzdGF0aWMg
aW50IHJlY3Vyc2l2ZV9tdXRleF90cnlsb2NrIChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90
ICptKTsKICBzdGF0aWMgaW50IHJlY3Vyc2l2ZV9tdXRleF91bmxvY2sgKEFDRV9yZWN1cnNpdmVf
dGhyZWFkX211dGV4X3QgKm0pOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfaW5pdCAoQUNFX211dGV4
X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSA9IFBUSFJFQURfUFJPQ0VT
U19QUklWQVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRyX3QgKmFyZyA9IDAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKCgoKCgoKCiAgc3RhdGljIGludCBtdXRl
eF9kZXN0cm95IChBQ0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGljIGludCBtdXRleF9sb2NrIChB
Q0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGljIGludCBtdXRleF9sb2NrIChBQ0VfbXV0ZXhfdCAq
bSwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmYWJhbmRvbmVkKTsKIyA1ODIyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMg
aW50IG11dGV4X2xvY2sgKEFDRV9tdXRleF90ICptLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQUNFX1RpbWVfVmFsdWUgJnRpbWVvdXQpOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfdHJ5
bG9jayAoQUNFX211dGV4X3QgKm0pOwoKCgogIHN0YXRpYyBpbnQgbXV0ZXhfdHJ5bG9jayAoQUNF
X211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmFiYW5kb25lZCk7
CgogIHN0YXRpYyBpbnQgbXV0ZXhfdW5sb2NrIChBQ0VfbXV0ZXhfdCAqbSk7CgoKCiAgc3RhdGlj
IGludCB0aHJlYWRfbXV0ZXhfaW5pdCAoQUNFX3RocmVhZF9tdXRleF90ICptLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX211dGV4YXR0cl90ICphcmcgPSAwKTsK
CgoKCgoKICBzdGF0aWMgaW50IHRocmVhZF9tdXRleF9kZXN0cm95IChBQ0VfdGhyZWFkX211dGV4
X3QgKm0pOwogIHN0YXRpYyBpbnQgdGhyZWFkX211dGV4X2xvY2sgKEFDRV90aHJlYWRfbXV0ZXhf
dCAqbSk7CiAgc3RhdGljIGludCB0aHJlYWRfbXV0ZXhfbG9jayAoQUNFX3RocmVhZF9tdXRleF90
ICptLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl
ICZ0aW1lb3V0KTsKICBzdGF0aWMgaW50IHRocmVhZF9tdXRleF90cnlsb2NrIChBQ0VfdGhyZWFk
X211dGV4X3QgKm0pOwogIHN0YXRpYyBpbnQgdGhyZWFkX211dGV4X3VubG9jayAoQUNFX3RocmVh
ZF9tdXRleF90ICptKTsKCgoKICBzdGF0aWMgaW50IGFjY2VzcyAoY29uc3QgY2hhciAqcGF0aCwg
aW50IGFtb2RlKTsKCgoKCiAgc3RhdGljIGludCBjbG9zZSAoQUNFX0hBTkRMRSBoYW5kbGUpOwog
IHN0YXRpYyBBQ0VfSEFORExFIGNyZWF0IChjb25zdCBBQ0VfVENIQVIgKmZpbGVuYW1lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBtb2RlX3QgbW9kZSk7CiAgc3RhdGljIEFDRV9IQU5ETEUg
ZHVwIChBQ0VfSEFORExFIGhhbmRsZSk7CiAgc3RhdGljIGludCBkdXAyIChBQ0VfSEFORExFIG9s
ZGZkLAogICAgICAgICAgICAgICAgICAgQUNFX0hBTkRMRSBuZXdmZCk7CiAgc3RhdGljIGludCBm
YXR0YWNoIChpbnQgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0
aCk7CiAgc3RhdGljIGxvbmcgZmlsZXNpemUgKEFDRV9IQU5ETEUgaGFuZGxlKTsKICBzdGF0aWMg
bG9uZyBmaWxlc2l6ZSAoY29uc3QgQUNFX1RDSEFSICpoYW5kbGUpOwogIHN0YXRpYyBpbnQgZ2V0
bXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1
ZiAqY3RsLAogICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmCiAgICAgICAgICAgICAg
ICAgICAgICpkYXRhLCBpbnQgKmZsYWdzKTsKICBzdGF0aWMgaW50IGdldHBtc2cgKEFDRV9IQU5E
TEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZgogICAgICAgICAgICAgICAgICAgICAgKmRh
dGEsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJhbmQsCiAgICAgICAgICAgICAgICAgICAg
ICBpbnQgKmZsYWdzKTsKCgogIHN0YXRpYyBpbnQgaW9jdGwgKEFDRV9IQU5ETEUgaGFuZGxlLAog
ICAgICAgICAgICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqID0g
MCk7CgoKICBzdGF0aWMgaW50IGlvY3RsIChBQ0VfSEFORExFIHNvY2tldCwKICAgICAgICAgICAg
ICAgICAgICB1X2xvbmcgaW9fY29udHJvbF9jb2RlLAogICAgICAgICAgICAgICAgICAgIHZvaWQg
KmluX2J1ZmZlcl9wLAogICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpbl9idWZmZXIsCiAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqb3V0X2J1ZmZlcl9wLAogICAgICAgICAgICAgICAgICAgIHVf
bG9uZyBvdXRfYnVmZmVyLAogICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqYnl0ZXNfcmV0dXJu
ZWQsCiAgICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAg
ICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9GVU5DIGZ1bmMpOwoKCgog
IHN0YXRpYyBpbnQgaW9jdGwgKEFDRV9IQU5ETEUgc29ja2V0LAogICAgICAgICAgICAgICAgICAg
IHVfbG9uZyBpb19jb250cm9sX2NvZGUsCiAgICAgICAgICAgICAgICAgICAgQUNFX1FvUyAmYWNl
X3FvcywKICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmJ5dGVzX3JldHVybmVkLAogICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcl9wID0gMCwKICAgICAgICAgICAgICAgICAgICB1X2xv
bmcgYnVmZmVyID0gMCwKICAgICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3Zlcmxh
cHBlZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9G
VU5DIGZ1bmMgPSAwKTsKCiAgc3RhdGljIGludCBpc2FzdHJlYW0gKEFDRV9IQU5ETEUgaGFuZGxl
KTsKICBzdGF0aWMgaW50IGlzYXR0eSAoaW50IGhhbmRsZSk7CgoKCiAgc3RhdGljIG9mZl90IGxz
ZWVrIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNl
dCwKICAgICAgICAgICAgICAgICAgICAgIGludCB3aGVuY2UpOwoKICBBQ0VfTE9GRl9UIGxsc2Vl
ayAoQUNFX0hBTkRMRSBoYW5kbGUsIEFDRV9MT0ZGX1Qgb2Zmc2V0LCBpbnQgd2hlbmNlKTsKIyA1
OTM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIK
ICBzdGF0aWMgQUNFX0hBTkRMRSBvcGVuIChjb25zdCBjaGFyICpmaWxlbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
cGVybXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYSA9IDApOwoKCgoKCgog
IHN0YXRpYyBpbnQgcHV0bXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3Qgc3RyYnVmICpkYXRhLAogICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0
YXRpYyBpbnQgcHV0cG1zZyAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3Qgc3RyYnVmICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgaW50IGJhbmQsCiAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBzc2l6ZV90IHJlYWQgKEFDRV9I
QU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKICBzdGF0aWMgc3NpemVfdCByZWFkIChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxB
UFBFRCAqKTsKIyA1OTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaCIKICBzdGF0aWMgc3NpemVfdCByZWFkX24gKEFDRV9IQU5ETEUgaGFuZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJh
bnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIGludCByZWFkbGluayAoY29uc3QgY2hhciAqcGF0aCwK
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGJ1ZnNpeik7CiAgc3RhdGljIHNzaXplX3QgcHJlYWQgKEFDRV9IQU5ETEUgaGFuZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBuYnl0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0KTsK
ICBzdGF0aWMgaW50IHJlY3Ztc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IG1zZ2hkciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdz
KTsKICBzdGF0aWMgaW50IHNlbmRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc3RydWN0IG1zZ2hkciAqbXNnLAogICAgICAgICAgICAgICAgICAgICAg
aW50IGZsYWdzKTsKICBzdGF0aWMgc3NpemVfdCB3cml0ZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IG5ieXRlKTsKICBzdGF0aWMgc3NpemVfdCB3cml0ZSAoQUNFX0hBTkRMRSBo
YW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IG5ieXRlLAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf
T1ZFUkxBUFBFRCAqKTsKIyA2MDA1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgc3NpemVfdCB3cml0ZV9uIChBQ0VfSEFORExFIGhh
bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHB3cml0ZSAo
QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpi
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmJ5dGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBvZmZfdCBvZmZzZXQpOwogIHN0YXRpYyBzc2l6ZV90IHJlYWR2IChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmlvdiwKICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGlvdmxlbik7CiAgc3RhdGljIHNzaXplX3Qgd3JpdGV2IChBQ0Vf
SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlvdmVjICppb3Ys
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW92Y250KTsKICBzdGF0aWMgc3NpemVfdCBy
ZWN2diAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjICpp
b3YsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZsZW4pOwogIHN0YXRpYyBzc2l6ZV90
IHNlbmR2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
aW92ZWMgKmlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCk7CgoKCiAgc3Rh
dGljIGludCBzZWxlY3QgKGludCB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpy
ZmRzLAogICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndmZHMgPSAwLAogICAgICAgICAgICAg
ICAgICAgICBmZF9zZXQgKmVmZHMgPSAwLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf
VGltZV9WYWx1ZSAqdHYgPSAwKTsKICBzdGF0aWMgaW50IHNlbGVjdCAoaW50IHdpZHRoLAogICAg
ICAgICAgICAgICAgICAgICBmZF9zZXQgKnJmZHMsCiAgICAgICAgICAgICAgICAgICAgIGZkX3Nl
dCAqd2ZkcywKICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpOwogIHN0YXRpYyBpbnQgcG9sbCAoc3Ry
dWN0IHBvbGxmZCAqcG9sbGZkcywKICAgICAgICAgICAgICAgICAgIHVfbG9uZyBsZW4sCiAgICAg
ICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdHYgPSAwKTsKICBzdGF0aWMgaW50
IHBvbGwgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsCiAgICAgICAgICAgICAgICAgICB1X2xvbmcg
bGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKICBzdGF0
aWMgaW50IHBpcGUgKEFDRV9IQU5ETEUgaGFuZGxlc1tdKTsKCiAgc3RhdGljIEFDRV9IQU5ETEUg
c2htX29wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBtb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVy
bXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKICBzdGF0
aWMgaW50IHNobV91bmxpbmsgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0aCk7CgoKCiAgc3RhdGljIG1v
ZGVfdCB1bWFzayAobW9kZV90IGNtYXNrKTsKCgogIHN0YXRpYyBpbnQgY2hkaXIgKGNvbnN0IGNo
YXIgKnBhdGgpOwoKCgoKCgogIHN0YXRpYyBpbnQgbWtkaXIgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0
aCwKICAgICAgICAgICAgICAgICAgICBtb2RlX3QgbW9kZSA9IDA3NTUpOwogIHN0YXRpYyBpbnQg
bWtmaWZvIChjb25zdCBBQ0VfVENIQVIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgIG1vZGVf
dCBtb2RlID0gMDY0NCk7CiAgc3RhdGljIEFDRV9UQ0hBUiAqbWt0ZW1wIChBQ0VfVENIQVIgKnQp
OwogIHN0YXRpYyBBQ0VfVENIQVIgKmdldGN3ZCAoQUNFX1RDSEFSICosIHNpemVfdCk7CiAgc3Rh
dGljIGludCByZW5hbWUgKGNvbnN0IEFDRV9UQ0hBUiAqb2xkX25hbWUsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmV3X25hbWUsCiAgICAgICAgICAgICAgICAgICAgIGlu
dCBmbGFncyA9IC0xKTsKICBzdGF0aWMgaW50IHVubGluayAoY29uc3QgQUNFX1RDSEFSICpwYXRo
KTsKICBzdGF0aWMgQUNFX1RDSEFSICp0ZW1wbmFtIChjb25zdCBBQ0VfVENIQVIgKmRpciA9IDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpwZnggPSAwKTsK
CgoKICBzdGF0aWMgaW50IHJhbmQgKHZvaWQpOwogIHN0YXRpYyBpbnQgcmFuZF9yIChBQ0VfUkFO
RFJfVFlQRSAmc2VlZCk7CiAgc3RhdGljIHZvaWQgc3JhbmQgKHVfaW50IHNlZWQpOwoKCgogIHN0
YXRpYyBpbnQgcndsb2NrX2luaXQgKEFDRV9yd2xvY2tfdCAqcncsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwogIHN0YXRpYyBpbnQgcndsb2NrX2Rlc3Ryb3kgKEFD
RV9yd2xvY2tfdCAqcncpOwogIHN0YXRpYyBpbnQgcndfcmRsb2NrIChBQ0Vfcndsb2NrX3QgKnJ3
KTsKICBzdGF0aWMgaW50IHJ3X3dybG9jayAoQUNFX3J3bG9ja190ICpydyk7CiAgc3RhdGljIGlu
dCByd190cnlyZGxvY2sgKEFDRV9yd2xvY2tfdCAqcncpOwogIHN0YXRpYyBpbnQgcndfdHJ5d3Js
b2NrIChBQ0Vfcndsb2NrX3QgKnJ3KTsKICBzdGF0aWMgaW50IHJ3X3RyeXdybG9ja191cGdyYWRl
IChBQ0Vfcndsb2NrX3QgKnJ3KTsKICBzdGF0aWMgaW50IHJ3X3VubG9jayAoQUNFX3J3bG9ja190
ICpydyk7CgoKCiAgc3RhdGljIGludCBldmVudF9pbml0IChBQ0VfZXZlbnRfdCAqZXZlbnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFudWFsX3Jlc2V0ID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EgPSAwKTsKIyA2MTE2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBz
dGF0aWMgaW50IGV2ZW50X2Rlc3Ryb3kgKEFDRV9ldmVudF90ICpldmVudCk7CiAgc3RhdGljIGlu
dCBldmVudF93YWl0IChBQ0VfZXZlbnRfdCAqZXZlbnQpOwogIHN0YXRpYyBpbnQgZXZlbnRfdGlt
ZWR3YWl0IChBQ0VfZXZlbnRfdCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKICBzdGF0aWMgaW50IGV2ZW50X3NpZ25hbCAoQUNF
X2V2ZW50X3QgKmV2ZW50KTsKICBzdGF0aWMgaW50IGV2ZW50X3B1bHNlIChBQ0VfZXZlbnRfdCAq
ZXZlbnQpOwogIHN0YXRpYyBpbnQgZXZlbnRfcmVzZXQgKEFDRV9ldmVudF90ICpldmVudCk7CgoK
CiAgc3RhdGljIGludCBzZW1hX2Rlc3Ryb3kgKEFDRV9zZW1hX3QgKnMpOwogIHN0YXRpYyBpbnQg
c2VtYV9pbml0IChBQ0Vfc2VtYV90ICpzLAogICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBj
b3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1Nf
UFJJVkFURSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBtYXggPSAweDdmZmZmZmZmLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2Eg
PSAwKTsKIyA2MTQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaCIKICBzdGF0aWMgaW50IHNlbWFfcG9zdCAoQUNFX3NlbWFfdCAqcyk7CiAgc3RhdGlj
IGludCBzZW1hX3Bvc3QgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCByZWxlYXNlX2NvdW50KTsKICBzdGF0aWMgaW50IHNlbWFfdHJ5d2FpdCAoQUNFX3NlbWFf
dCAqcyk7CiAgc3RhdGljIGludCBzZW1hX3dhaXQgKEFDRV9zZW1hX3QgKnMpOwogIHN0YXRpYyBp
bnQgc2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzLAogICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf
VGltZV9WYWx1ZSAmdHYpOwoKCgogIHN0YXRpYyBpbnQgc2VtY3RsIChpbnQgaW50X2lkLAogICAg
ICAgICAgICAgICAgICAgICBpbnQgc2VtbnVtLAogICAgICAgICAgICAgICAgICAgICBpbnQgY21k
LAogICAgICAgICAgICAgICAgICAgICBzZW11bik7CiAgc3RhdGljIGludCBzZW1nZXQgKGtleV90
IGtleSwKICAgICAgICAgICAgICAgICAgICAgaW50IG5zZW1zLAogICAgICAgICAgICAgICAgICAg
ICBpbnQgZmxhZ3MpOwogIHN0YXRpYyBpbnQgc2Vtb3AgKGludCBpbnRfaWQsCiAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNlbWJ1ZiAqc29wcywKICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
bnNvcHMpOwoKCgoKCiAgc3RhdGljIGludCBzY2hlZF9wYXJhbXMgKGNvbnN0IEFDRV9TY2hlZF9Q
YXJhbXMgJiwgQUNFX2lkX3QgaWQgPSAoLTEpKTsKCgoKICBzdGF0aWMgdm9pZCAqc2htYXQgKGlu
dCBpbnRfaWQsCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzaG1hZGRyLAogICAgICAgICAg
ICAgICAgICAgICAgaW50IHNobWZsZyk7CiAgc3RhdGljIGludCBzaG1jdGwgKGludCBpbnRfaWQs
CiAgICAgICAgICAgICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzaG1pZF9kcyAqYnVmKTsKICBzdGF0aWMgaW50IHNobWR0ICh2b2lkICpzaG1hZGRyKTsKICBz
dGF0aWMgaW50IHNobWdldCAoa2V5X3Qga2V5LAogICAgICAgICAgICAgICAgICAgICBpbnQgc2l6
ZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKCgoKICBzdGF0aWMgaW50IGtpbGwg
KHBpZF90IHBpZCwKICAgICAgICAgICAgICAgICAgIGludCBzaWdudW0pOwogIHN0YXRpYyBpbnQg
c2lnYWN0aW9uIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
Y3Qgc2lnYWN0aW9uICpuc2EsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rp
b24gKm9zYSk7CiAgc3RhdGljIGludCBzaWdhZGRzZXQgKHNpZ3NldF90ICpzLAogICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgc2lnbnVtKTsKICBzdGF0aWMgaW50IHNpZ2RlbHNldCAoc2lnc2V0
X3QgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdudW0pOwogIHN0YXRpYyBpbnQg
c2lnZW1wdHlzZXQgKHNpZ3NldF90ICpzKTsKICBzdGF0aWMgaW50IHNpZ2ZpbGxzZXQgKHNpZ3Nl
dF90ICpzKTsKICBzdGF0aWMgaW50IHNpZ2lzbWVtYmVyIChzaWdzZXRfdCAqcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2lnbnVtKTsKICBzdGF0aWMgQUNFX1NpZ25hbEhhbmRsZXIg
c2lnbmFsIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9TaWduYWxIYW5kbGVyKTsKICBzdGF0aWMgaW50IHNpZ3N1c3BlbmQgKGNvbnN0IHNpZ3NldF90
ICpzZXQpOwogIHN0YXRpYyBpbnQgc2lncHJvY21hc2sgKGludCBob3csCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgc2lnc2V0X3QgKm5zcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaWdzZXRfdCAqb3NwKTsKCiAgc3RhdGljIGludCBwdGhyZWFkX3NpZ21hc2sgKGludCBob3cs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ3NldF90ICpuc3AsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpvc3ApOwoKCgoKICBzdGF0aWMgQUNF
X0hBTkRMRSBhY2NlcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICphZGRybGVuKTsKCgoKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBhY2NlcHQgKEFDRV9IQU5E
TEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICph
ZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0FjY2VwdF9Rb1NfUGFyYW1zICZxb3NfcGFyYW1z
KTsKCiAgc3RhdGljIGludCBjb25uZWN0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgIGlu
dCBhZGRybGVuKTsKCgoKCgogIHN0YXRpYyBpbnQgY29ubmVjdCAoQUNFX0hBTkRMRSBoYW5kbGUs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAg
ICAgICAgICAgIGludCBhZGRybGVuLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Fv
U19QYXJhbXMgJnFvc19wYXJhbXMpOwoKICBzdGF0aWMgaW50IGJpbmQgKEFDRV9IQU5ETEUgcywK
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgIGludCBuYW1lbGVuKTsKCiAgc3RhdGljIGludCBjbG9zZXNvY2tldCAoQUNFX0hBTkRMRSBz
KTsKICBzdGF0aWMgc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIgKGNvbnN0IGNoYXIgKmFk
ZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUpOwogIHN0YXRp
YyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZSAoY29uc3QgY2hhciAqbmFtZSk7CiAgc3Rh
dGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lMiAoY29uc3QgY2hhciAqbmFtZSwgaW50
IHR5cGUpOwogIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcl9yIChjb25zdCBj
aGFyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
bGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGhvc3Rl
bnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF
X0hPU1RFTlRfREFUQSBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCAqaF9lcnJub3ApOwogIHN0YXRpYyBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5
bmFtZV9yIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBQ0VfSE9TVEVOVF9EQVRBIGJ1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpoX2Vycm5vcCk7CiAgc3RhdGljIGlu
dCBnZXRwZWVybmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq
YWRkcmxlbik7CiAgc3RhdGljIHN0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUgKGNvbnN0
IGNoYXIgKm5hbWUpOwogIHN0YXRpYyBzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnluYW1lX3Ig
KGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHByb3RvZW50ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX1BST1RPRU5UX0RBVEEgYnVmZmVyKTsKICBzdGF0aWMgc3Ry
dWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyIChpbnQgcHJvdG8pOwogIHN0YXRpYyBzdHJ1
Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXJfciAoaW50IHByb3RvLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHByb3RvZW50ICpyZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUFJPVE9F
TlRfREFUQSBidWZmZXIpOwogIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZSAo
Y29uc3QgY2hhciAqc3ZjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqcHJvdG8pOwogIHN0YXRpYyBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFt
ZV9yIChjb25zdCBjaGFyICpzdmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2VydmVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBQ0VfU0VSVkVOVF9EQVRBIGJ1Zik7CiAgc3RhdGljIGludCBn
ZXRzb2NrbmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqYWRk
cmxlbik7CiAgc3RhdGljIGludCBnZXRzb2Nrb3B0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBvcHRuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqb3B0dmFsLAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICpvcHRsZW4pOwogIHN0YXRpYyBsb25nIGluZXRfYWRkciAo
Y29uc3QgY2hhciAqbmFtZSk7CiAgc3RhdGljIGNoYXIgKmluZXRfbnRvYSAoY29uc3Qgc3RydWN0
IGluX2FkZHIgYWRkcik7CiAgc3RhdGljIGludCBpbmV0X2F0b24gKGNvbnN0IGNoYXIgKnN0cnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgKmFkZHIpOwogIHN0YXRp
YyBjb25zdCBjaGFyICppbmV0X250b3AgKGludCBmYW1pbHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3Qgdm9pZCAqYWRkcnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICpzdHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBsZW4pOwogIHN0YXRpYyBpbnQgaW5ldF9wdG9uIChpbnQgZmFtaWx5LAogICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpzdHJwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgKmFkZHJwdHIpOwoKCiAgc3RhdGljIGludCBlbnVtX3Byb3RvY29scyAoaW50ICpwcm90
b2NvbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1Byb3RvY29sX0luZm8gKnBy
b3RvY29sX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmJ1ZmZl
cl9sZW5ndGgpOwoKICBzdGF0aWMgQUNFX0hBTkRMRSBqb2luX2xlYWYgKEFDRV9IQU5ETEUgc29j
a2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ja2FkZHIgKm5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmFtZWxlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9Rb1NfUGFyYW1zICZxb3NfcGFyYW1zKTsKICBz
dGF0aWMgaW50IGxpc3RlbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg
IGludCBiYWNrbG9nKTsKICBzdGF0aWMgaW50IHJlY3YgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAg
ICAgICAgICAgICAgICAgIGludCBmbGFncyA9IDApOwogIHN0YXRpYyBpbnQgcmVjdmZyb20gKEFD
RV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFn
cywKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICphZGRybGVuKTsKICBzdGF0aWMgaW50IHJlY3Zmcm9tIChBQ0Vf
SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqYnVmZmVycywKICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVyX2NvdW50LAogICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAmbnVtYmVyX29mX2J5dGVzX3JlY3ZkLAogICAgICAgICAgICAgICAgICAgICAg
IGludCAmZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRy
LAogICAgICAgICAgICAgICAgICAgICAgIGludCAqYWRkcmxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCwKICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYyk7CiAgc3RhdGljIGludCBzZW5kIChB
Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAg
ICAgICAgICAgICAgICAgIGludCBsZW4sCiAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAw
KTsKICBzdGF0aWMgaW50IHNlbmR0byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAg
ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICAgICAgIGludCBhZGRybGVuKTsK
ICBzdGF0aWMgaW50IHNlbmR0byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGlvdmVjICpidWZmZXJzLAogICAgICAgICAgICAgICAgICAgICBpbnQgYnVmZmVy
X2NvdW50LAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgJm51bWJlcl9vZl9ieXRlc19zZW50
LAogICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJs
ZW4sCiAgICAgICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAogICAg
ICAgICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYyk7CgoK
ICBzdGF0aWMgaW50IHNldHNvY2tvcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wdG5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpvcHR2YWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgb3B0bGVuKTsKICBzdGF0aWMgaW50IHNodXRkb3duIChBQ0Vf
SEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgaG93KTsKCgogIHN0YXRp
YyBBQ0VfSEFORExFIHNvY2tldCAoaW50IHByb3RvY29sX2ZhbWlseSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBy
b3RvKTsKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBzb2NrZXQgKGludCBwcm90b2NvbF9mYW1pbHks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9Qcm90
b2NvbF9JbmZvICpwcm90b2NvbGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf
U09DS19HUk9VUCBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGZsYWdzKTsK
CiAgc3RhdGljIGludCBzb2NrZXRwYWlyIChpbnQgZG9tYWluLAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2wsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSEFORExFIHN2WzJdKTsKCgoKICBzdGF0aWMgaW50
IHNvY2tldF9pbml0IChpbnQgdmVyc2lvbl9oaWdoID0gMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgdmVyc2lvbl9sb3cgPSAxKTsKCgogIHN0YXRpYyBpbnQgc29ja2V0X2ZpbmkgKHZv
aWQpOwoKCgogIHN0YXRpYyB2b2lkIHNldHB3ZW50ICh2b2lkKTsKICBzdGF0aWMgdm9pZCBlbmRw
d2VudCAodm9pZCk7CiAgc3RhdGljIHN0cnVjdCBwYXNzd2QgKmdldHB3ZW50ICh2b2lkKTsKICBz
dGF0aWMgc3RydWN0IHBhc3N3ZCAqZ2V0cHduYW0gKGNvbnN0IGNoYXIgKnVzZXIpOwogIHN0YXRp
YyBzdHJ1Y3QgcGFzc3dkICpnZXRwd25hbV9yIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFzc3dkICpwd2VudCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYnVmbGVuKTsKCgoKICBzdGF0aWMgY2hhciAqY29tcGls
ZSAoY29uc3QgY2hhciAqaW5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4
cGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZW5kYnVmKTsKICBzdGF0aWMgaW50
IHN0ZXAgKGNvbnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgIGNoYXIgKmV4cGJ1Zik7
CiMgNjQwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmgiCiAgdHlwZWRlZiBBQ0VfVUlOVDE2IFdDaGFyOwogIHN0YXRpYyB1X2ludCB3c2xlbiAoY29u
c3QgV0NoYXIgKik7CiAgc3RhdGljIFdDaGFyICp3c2NweSAoV0NoYXIgKiwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXQ2hhciAqKTsKICBzdGF0aWMgaW50IHdzY21wIChjb25zdCBXQ2hh
ciAqLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IFdDaGFyICopOwogIHN0YXRpYyBpbnQgd3Nu
Y21wIChjb25zdCBXQ2hhciAqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBXQ2hhciAqLAog
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKIyA2NDQ5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgaW50IHRocl9jb250
aW51ZSAoQUNFX2h0aHJlYWRfdCB0YXJnZXRfdGhyZWFkKTsKIyA2NDgwICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgaW50IHRocl9j
cmVhdGUgKEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBBQ0VfdGhyZWFkX3QgKnRocl9pZCwKICAgICAgICAgICAgICAgICAgICAgICAg
IEFDRV9odGhyZWFkX3QgKnRfaGFuZGxlID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqc3RhY2sgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHN0YWNr
c2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRl
ciAqdGhyZWFkX2FkYXB0ZXIgPSAwKTsKCiAgc3RhdGljIGludCB0aHJfZ2V0cHJpbyAoQUNFX2h0
aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZwcmlvKTsKICBz
dGF0aWMgaW50IHRocl9qb2luIChBQ0VfaHRocmVhZF90IHdhaXRlcl9pZCwKICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICoqc3RhdHVzKTsKICBzdGF0aWMgaW50IHRocl9qb2luIChBQ0VfdGhy
ZWFkX3Qgd2FpdGVyX2lkLAogICAgICAgICAgICAgICAgICAgICAgIEFDRV90aHJlYWRfdCAqdGhy
X2lkLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipzdGF0dXMpOwogIHN0YXRpYyBpbnQg
dGhyX2tpbGwgKEFDRV90aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgaW50
IHNpZ251bSk7CiAgc3RhdGljIEFDRV90aHJlYWRfdCB0aHJfc2VsZiAodm9pZCk7CiAgc3RhdGlj
IHZvaWQgdGhyX3NlbGYgKEFDRV9odGhyZWFkX3QgJik7CiAgc3RhdGljIGludCB0aHJfc2V0cHJp
byAoQUNFX2h0aHJlYWRfdCB0aHJfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBy
aW8pOwogIHN0YXRpYyBpbnQgdGhyX3NldHByaW8gKGNvbnN0IEFDRV9TY2hlZF9Qcmlvcml0eSBw
cmlvKTsKICBzdGF0aWMgaW50IHRocl9zdXNwZW5kIChBQ0VfaHRocmVhZF90IHRhcmdldF90aHJl
YWQpOwogIHN0YXRpYyBpbnQgdGhyX2NhbmNlbCAoQUNFX3RocmVhZF90IHRfaWQpOwoKICBzdGF0
aWMgaW50IHRocl9jbXAgKEFDRV9odGhyZWFkX3QgdDEsCiAgICAgICAgICAgICAgICAgICAgICBB
Q0VfaHRocmVhZF90IHQyKTsKICBzdGF0aWMgaW50IHRocl9lcXVhbCAoQUNFX3RocmVhZF90IHQx
LAogICAgICAgICAgICAgICAgICAgICAgICBBQ0VfdGhyZWFkX3QgdDIpOwogIHN0YXRpYyB2b2lk
IHRocl9leGl0ICh2b2lkICpzdGF0dXMgPSAwKTsKICBzdGF0aWMgaW50IHRocl9nZXRjb25jdXJy
ZW5jeSAodm9pZCk7CiAgc3RhdGljIGludCBsd3BfZ2V0cGFyYW1zIChBQ0VfU2NoZWRfUGFyYW1z
ICYpOwoKCgoKICBzdGF0aWMgaW50IHRocl9nZXRzcGVjaWZpYyAoQUNFX3RocmVhZF9rZXlfdCBr
ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhKTsKICBzdGF0aWMg
aW50IHRocl9rZXlmcmVlIChBQ0VfdGhyZWFkX2tleV90IGtleSk7CiAgc3RhdGljIGludCB0aHJf
a2V5X2RldGFjaCAodm9pZCAqaW5zdCk7CiMgNjUzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIGludCB0aHJfa2V5Y3JlYXRlIChB
Q0VfdGhyZWFkX2tleV90ICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhS
X0RFU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0ID0gMCk7CgogIHN0
YXRpYyBpbnQgdGhyX2tleV91c2VkIChBQ0VfdGhyZWFkX2tleV90IGtleSk7CiAgc3RhdGljIHNp
emVfdCB0aHJfbWluX3N0YWNrICh2b2lkKTsKICBzdGF0aWMgaW50IHRocl9zZXRjb25jdXJyZW5j
eSAoaW50IGhpbnQpOwogIHN0YXRpYyBpbnQgbHdwX3NldHBhcmFtcyAoY29uc3QgQUNFX1NjaGVk
X1BhcmFtcyAmKTsKCgoKCiAgc3RhdGljIGludCB0aHJfc2V0c3BlY2lmaWMgKEFDRV90aHJlYWRf
a2V5X3Qga2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKICBz
dGF0aWMgaW50IHRocl9zaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHNpZ3NldF90ICpuc20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2lnc2V0X3QgKm9zbSk7CiAgc3RhdGljIGludCB0aHJfc2V0Y2FuY2Vsc3RhdGUgKGludCBuZXdf
c3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqb2xkX3N0YXRlKTsK
ICBzdGF0aWMgaW50IHRocl9zZXRjYW5jZWx0eXBlIChpbnQgbmV3X3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ICpvbGRfdHlwZSk7CiAgc3RhdGljIGludCBzaWd3YWl0
IChzaWdzZXRfdCAqc2V0LAogICAgICAgICAgICAgICAgICAgICAgaW50ICpzaWcgPSAwKTsKICBz
dGF0aWMgaW50IHNpZ3RpbWVkd2FpdCAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2lnaW5mb190ICppbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCk7CiAgc3RhdGljIHZvaWQgdGhyX3Rlc3Rj
YW5jZWwgKHZvaWQpOwogIHN0YXRpYyB2b2lkIHRocl95aWVsZCAodm9pZCk7CiMgNjU3NCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGlj
IHZvaWQgdW5pcXVlX25hbWUgKGNvbnN0IHZvaWQgKm9iamVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQUNFX1RDSEFSICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGVuZ3RoKTsKCgoKICBzdGF0aWMgQUNFX3RocmVhZF90IE5VTExfdGhyZWFkOwoKCgogIHN0
YXRpYyBBQ0VfaHRocmVhZF90IE5VTExfaHRocmVhZDsKCgoKICBzdGF0aWMgQUNFX3RocmVhZF9r
ZXlfdCBOVUxMX2tleTsKIyA2NjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaCIKICBzdGF0aWMgdm9pZCBtdXRleF9sb2NrX2NsZWFudXAgKHZvaWQg
Km11dGV4KTsKCgoKCgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwX3RzcyAoY29uc3QgdV9pbnQgbWFp
bl90aHJlYWQpOwoKCgoKCgoKICBzdGF0aWMgaW50IHNjaGVkdWxpbmdfY2xhc3MgKGNvbnN0IGNo
YXIgKmNsYXNzX25hbWUsIEFDRV9pZF90ICYpOwoKCiAgc3RhdGljIGludCBzZXRfc2NoZWR1bGlu
Z19wYXJhbXMgKGNvbnN0IEFDRV9TY2hlZF9QYXJhbXMgJiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX2lkX3QgaWQgPSAoLTEpKTsKCgoKCgoKICBzdGF0aWMgaW50IHBy
aW9yaXR5X2NvbnRyb2wgKEFDRV9pZHR5cGVfdCwgQUNFX2lkX3QsIGludCwgdm9pZCAqKTsKCgog
IHN0YXRpYyBjaGFyICpzdHJwdGltZSAoY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt
ICp0bSk7CiMgNjY0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmgiCnByaXZhdGU6CiMgNjY1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgc3RhdGljIEFDRV9FWElUX0hPT0sgZXhpdF9ob29rXzsK
CgogIHN0YXRpYyBBQ0VfRVhJVF9IT09LIHNldF9leGl0X2hvb2sgKEFDRV9FWElUX0hPT0sgaG9v
ayk7CgoKICBmcmllbmQgY2xhc3MgQUNFX09TX09iamVjdF9NYW5hZ2VyOwojIDY2OTAgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgogIHN0YXRpYyBp
bnQgY29uZF90aW1lZHdhaXRfaSAoQUNFX2NvbmRfdCAqY3YsCiAgICAgICAgICAgICAgICAgICAg
ICAgQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUg
Kik7CgogIHN0YXRpYyB1X2ludCBhbGFybV9pICh1X2ludCBzZWNzKTsKCiAgc3RhdGljIHVfaW50
IHVhbGFybV9pICh1X2ludCB1c2VjcywgdV9pbnQgaW50ZXJ2YWwgPSAwKTsKCiAgc3RhdGljIHVf
aW50IHVhbGFybV9pIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwgPSBBQ0VfVGltZV9WYWx1
ZTo6emVybyk7CgogIHN0YXRpYyBpbnQgc2xlZXBfaSAodV9pbnQgc2Vjb25kcyk7CgogIHN0YXRp
YyBpbnQgc2xlZXBfaSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBu
YW5vc2xlZXBfaSAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICpyZXF1ZXN0ZWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpyZW1haW5pbmcgPSAwKTsKCiAgc3RhdGlj
IGludCBzZWxlY3RfaSAoaW50IHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgIGZkX3NldCAq
cmZkcywKICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKndmZHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9U
aW1lX1ZhbHVlICp0diA9IDApOwoKICBzdGF0aWMgaW50IHNlbGVjdF9pIChpbnQgd2lkdGgsCiAg
ICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpyZmRzLAogICAgICAgICAgICAgICAgICAgICAg
IGZkX3NldCAqd2ZkcywKICAgICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKmVmZHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGlu
dCBwb2xsX2kgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsCiAgICAgICAgICAgICAgICAgICAgIHVf
bG9uZyBsZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0diA9
IDApOwoKICBzdGF0aWMgaW50IHBvbGxfaSAoc3RydWN0IHBvbGxmZCAqcG9sbGZkcywKICAgICAg
ICAgICAgICAgICAgICAgdV9sb25nIGxlbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBzZW1hX3dhaXRfaSAoQUNFX3NlbWFfdCAq
cyk7CgogIHN0YXRpYyBpbnQgc2VtYV93YWl0X2kgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUgJnR2KTsKCiAgc3RhdGljIGludCBzaWd0aW1l
ZHdhaXRfaSAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaWdpbmZvX3QgKmluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1RpbWVfVmFsdWUgKnRpbWVvdXQpOwoKICBzdGF0aWMgQUNFX1RpbWVfVmFsdWUgZ2V0dGltZW9m
ZGF5X2kgKHZvaWQpOwoKfTsKIyA2NzQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaCIKY2xhc3MgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UKewoKCgoK
CgoKcHJvdGVjdGVkOgoKCiAgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UgKHZvaWQpOwoKCiAgdmly
dHVhbCB+QUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UgKHZvaWQpOwoKcHVibGljOgoKCgoKCiAgdmly
dHVhbCBpbnQgaW5pdCAodm9pZCkgPSAwOwoKCgoKCgogIHZpcnR1YWwgaW50IGZpbmkgKHZvaWQp
ID0gMDsKCiAgZW51bSBPYmplY3RfTWFuYWdlcl9TdGF0ZQogICAgewogICAgICBPQkpfTUFOX1VO
SU5JVElBTElaRUQgPSAwLAogICAgICBPQkpfTUFOX0lOSVRJQUxJWklORywKICAgICAgT0JKX01B
Tl9JTklUSUFMSVpFRCwKICAgICAgT0JKX01BTl9TSFVUVElOR19ET1dOLAogICAgICBPQkpfTUFO
X1NIVVRfRE9XTgogICAgfTsKCnByb3RlY3RlZDoKIyA2Nzk5ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKICBpbnQgc3RhcnRpbmdfdXBfaSAodm9p
ZCk7CiMgNjgwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmgiCiAgaW50IHNodXR0aW5nX2Rvd25faSAodm9pZCk7CgoKICBPYmplY3RfTWFuYWdlcl9T
dGF0ZSBvYmplY3RfbWFuYWdlcl9zdGF0ZV87CgoKCgoKCgogIHVfaW50IGR5bmFtaWNhbGx5X2Fs
bG9jYXRlZF87CgoKICBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAqbmV4dF87CnByaXZhdGU6Cgog
IEFDRV9PYmplY3RfTWFuYWdlcl9CYXNlIChjb25zdCBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAm
KTsKICBBQ0VfT2JqZWN0X01hbmFnZXJfQmFzZSAmb3BlcmF0b3I9IChjb25zdCBBQ0VfT2JqZWN0
X01hbmFnZXJfQmFzZSAmKTsKfTsKCmV4dGVybiAiQyIKdm9pZApBQ0VfT1NfT2JqZWN0X01hbmFn
ZXJfSW50ZXJuYWxfRXhpdF9Ib29rICh2b2lkKTsKCgoKY2xhc3MgQUNFX0xvZ19Nc2c7CgpjbGFz
cyBBQ0VfT1NfT2JqZWN0X01hbmFnZXIgOiBwdWJsaWMgQUNFX09iamVjdF9NYW5hZ2VyX0Jhc2UK
ewpwdWJsaWM6CgogIHZpcnR1YWwgaW50IGluaXQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgZmlu
aSAodm9pZCk7CgoKCgoKCiAgc3RhdGljIGludCBzdGFydGluZ191cCAodm9pZCk7CgoKCiAgc3Rh
dGljIGludCBzaHV0dGluZ19kb3duICh2b2lkKTsKCgogIGVudW0gUHJlYWxsb2NhdGVkX09iamVj
dAogICAgewoKICAgICAgQUNFX09TX01PTklUT1JfTE9DSywKICAgICAgQUNFX1RTU19DTEVBTlVQ
X0xPQ0ssCiAgICAgIEFDRV9MT0dfTVNHX0lOU1RBTkNFX0xPQ0ssCiMgNjg3OCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgICAgIEFDRV9PU19Q
UkVBTExPQ0FURURfT0JKRUNUUwogICAgfTsKCgoKICBzdGF0aWMgc2lnc2V0X3QgKmRlZmF1bHRf
bWFzayAodm9pZCk7CgoKICBzdGF0aWMgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAodm9p
ZCk7CgoKICBzdGF0aWMgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAoQUNFX1RocmVhZF9I
b29rICpuZXdfdGhyZWFkX2hvb2spOwojIDY5MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpwdWJsaWM6CgoKCgoKCiAgQUNFX09TX09iamVjdF9N
YW5hZ2VyICh2b2lkKTsKCgogIH5BQ0VfT1NfT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKcHJpdmF0
ZToKCiAgc3RhdGljIEFDRV9PU19PYmplY3RfTWFuYWdlciAqaW5zdGFuY2UgKHZvaWQpOwoKCiAg
c3RhdGljIEFDRV9PU19PYmplY3RfTWFuYWdlciAqaW5zdGFuY2VfOwoKCiAgc3RhdGljIHZvaWQg
KnByZWFsbG9jYXRlZF9vYmplY3RbQUNFX09TX1BSRUFMTE9DQVRFRF9PQkpFQ1RTXTsKCgogIHNp
Z3NldF90ICpkZWZhdWx0X21hc2tfOwoKCiAgQUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9va187
CgoKICBBQ0VfT1NfRXhpdF9JbmZvIGV4aXRfaW5mb187CiMgNjkzOSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiCiAgaW50IGF0X2V4aXQgKEFDRV9F
WElUX0hPT0sgZnVuYyk7CgoKICBzdGF0aWMgdm9pZCBwcmludF9lcnJvcl9tZXNzYWdlICh1X2lu
dCBsaW5lX251bWJlciwgY29uc3QgQUNFX1RDSEFSICptZXNzYWdlKTsKCgogIGZyaWVuZCBjbGFz
cyBBQ0VfT1M7CiAgZnJpZW5kIGNsYXNzIEFDRV9PYmplY3RfTWFuYWdlcjsKICBmcmllbmQgY2xh
c3MgQUNFX09TX09iamVjdF9NYW5hZ2VyX01hbmFnZXI7CiAgZnJpZW5kIGNsYXNzIEFDRV9UU1Nf
Q2xlYW51cDsKICBmcmllbmQgY2xhc3MgQUNFX1RTU19FbXVsYXRpb247CiAgZnJpZW5kIGNsYXNz
IEFDRV9Mb2dfTXNnOwogIGZyaWVuZCB2b2lkIEFDRV9PU19PYmplY3RfTWFuYWdlcl9JbnRlcm5h
bF9FeGl0X0hvb2sgKCk7Cn07CiMgNzUzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiCmV4dGVybiAiQyIgdm9pZCBhY2VfbXV0ZXhfbG9ja19jbGVh
bnVwX2FkYXB0ZXIgKHZvaWQgKmFyZ3MpOwojIDc3MzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgpzdHJ1Y3QgQUNFX1RSQU5TTUlUX0ZJTEVfQlVG
RkVSUwp7CiAgdm9pZCAqSGVhZDsKICBzaXplX3QgSGVhZExlbmd0aDsKICB2b2lkICpUYWlsOwog
IHNpemVfdCBUYWlsTGVuZ3RoOwp9Owp0eXBlZGVmIEFDRV9UUkFOU01JVF9GSUxFX0JVRkZFUlMq
IEFDRV9QVFJBTlNNSVRfRklMRV9CVUZGRVJTOwp0eXBlZGVmIEFDRV9UUkFOU01JVF9GSUxFX0JV
RkZFUlMqIEFDRV9MUFRSQU5TTUlUX0ZJTEVfQlVGRkVSUzsKIyA3NzU2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVHJhY2UuaCIgMQojIDE1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVHJhY2UuaCIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDIK
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgi
IDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1Ry
YWNlLmgiIDIKIyAyOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL1RyYWNlLmgiCmNsYXNzIEFDRV9UcmFjZQp7CnB1YmxpYzoKCgoKCiAgQUNFX1RyYWNlIChj
b25zdCBBQ0VfVENIQVIgKm4sCiAgICAgICAgICAgICBpbnQgbGluZSA9IDAsCiAgICAgICAgICAg
ICBjb25zdCBBQ0VfVENIQVIgKmZpbGUgPSAiIik7CgoKCiAgfkFDRV9UcmFjZSAodm9pZCk7CgoK
CiAgc3RhdGljIGludCBpc190cmFjaW5nKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgc3RhcnRfdHJh
Y2luZyAodm9pZCk7CgoKICBzdGF0aWMgdm9pZCBzdG9wX3RyYWNpbmcgKHZvaWQpOwoKCiAgc3Rh
dGljIHZvaWQgc2V0X25lc3RpbmdfaW5kZW50IChpbnQgaW5kZW50KTsKCgogIHN0YXRpYyBpbnQg
Z2V0X25lc3RpbmdfaW5kZW50ICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7Cgpw
cml2YXRlOgoKCgoKCiAgY29uc3QgQUNFX1RDSEFSICpuYW1lXzsKCgogIHN0YXRpYyBpbnQgbmVz
dGluZ19pbmRlbnRfOwoKCiAgc3RhdGljIGludCBlbmFibGVfdHJhY2luZ187CgoKICBlbnVtCiAg
ewogICAgREVGQVVMVF9JTkRFTlQgPSAzLAogICAgREVGQVVMVF9UUkFDSU5HID0gMQogIH07Cn07
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0
LmgiIDEKIyA4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L1RyYWNlLmgiIDIKIyA3NzU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaCIgMgoKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKdHlwZWRlZiBzb2NrbGVuX3QgQUNFX1NPQ0tFVF9M
RU47CiMgNDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCBzdHJidWYgKkFDRV9TVFJCVUZfVFlQRTsKCgoKdHlw
ZWRlZiB2b2lkICpBQ0VfU09DS09QVF9UWVBFMTsKIyA3OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCnR5cGVkZWYgY2hhciAqQUNFX01NQVBfVFlQ
RTsKIyAxMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgp0eXBlZGVmIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqIEFDRV9USU1FU1BFQ19QVFI7CgoK
CiMgMSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL21hbGxv
Yy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1
ZGUvbWFsbG9jLmgiIDIgMwojIDQ0ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDMKIyAxICIvdXNy
L2xvY2FsL2djYy0zLjAvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvbWFsbG9jLmgiIDIgMwojIDEwNCAiL3Vz
ci9pbmNsdWRlL21hbGxvYy5oIiAzCmV4dGVybiAiQyIgewojIDExMyAiL3Vzci9pbmNsdWRlL21h
bGxvYy5oIiAzCmV4dGVybiBpbnQgX19tYWxsb2NfaW5pdGlhbGl6ZWQ7CgoKCgoKCgpleHRlcm4g
dm9pZCAqIG1hbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
bWFsbG9jX18pKTsKCgpleHRlcm4gdm9pZCAqIGNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVf
dCBfX3NpemUpIHRocm93ICgpCiAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgpleHRlcm4gdm9pZCAqIHJlYWxsb2MgKHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCkKCiAgICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCmV4dGVybiB2b2lk
IGZyZWUgKHZvaWQgKiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQg
KiBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBtZW1hbGlnbiAoc2l6ZV90IF9fYWxp
Z25tZW50LCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqIHZhbGxvYyAo
c2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK
ZXh0ZXJuIHZvaWQgKiBwdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKQogICAgICAgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgKiAoKl9fbW9yZWNvcmUp
IChwdHJkaWZmX3QgX19zaXplKTsKCgpleHRlcm4gdm9pZCAqIF9fZGVmYXVsdF9tb3JlY29yZSAo
cHRyZGlmZl90IF9fc2l6ZSkgdGhyb3cgKCkKICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKc3RydWN0IG1hbGxpbmZvIHsKICBpbnQgYXJlbmE7CiAgaW50IG9yZGJsa3M7CiAg
aW50IHNtYmxrczsKICBpbnQgaGJsa3M7CiAgaW50IGhibGtoZDsKICBpbnQgdXNtYmxrczsKICBp
bnQgZnNtYmxrczsKICBpbnQgdW9yZGJsa3M7CiAgaW50IGZvcmRibGtzOwogIGludCBrZWVwY29z
dDsKfTsKCgpleHRlcm4gc3RydWN0IG1hbGxpbmZvIG1hbGxpbmZvICh2b2lkKSB0aHJvdyAoKTsK
IyAxOTcgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwpleHRlcm4gaW50IG1hbGxvcHQgKGludCBf
X3BhcmFtLCBpbnQgX192YWwpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1hbGxvY190cmltIChz
aXplX3QgX19wYWQpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1hbGxvY191c2FibGVfc2l6
ZSAodm9pZCAqIF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBtYWxsb2Nfc3RhdHMgKHZv
aWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWFsbG9jX2dldF9zdGF0ZSAodm9pZCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgbWFsbG9jX3NldF9zdGF0ZSAodm9pZCAqIF9fcHRyKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCAoKl9fbWFsbG9jX2luaXRpYWxpemVfaG9vaykgKHZvaWQp
OwoKZXh0ZXJuIHZvaWQgKCpfX2ZyZWVfaG9vaykgKHZvaWQgKiBfX3B0ciwgX19jb25zdCB2b2lk
ICopOwoKZXh0ZXJuIHZvaWQgKiAoKl9fbWFsbG9jX2hvb2spIChzaXplX3QgX19zaXplLCBfX2Nv
bnN0IHZvaWQgKik7CgpleHRlcm4gdm9pZCAqICgqX19yZWFsbG9jX2hvb2spICh2b2lkICogX19w
dHIsIHNpemVfdCBfX3NpemUsIF9fY29uc3Qgdm9pZCAqKTsKCgpleHRlcm4gdm9pZCAqICgqX19t
ZW1hbGlnbl9ob29rKSAoc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplLCBfX2NvbnN0
IHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQgKCpfX2FmdGVyX21vcmVjb3JlX2hvb2spICh2b2lkKTsK
CgpleHRlcm4gdm9pZCBfX21hbGxvY19jaGVja19pbml0ICh2b2lkKSB0aHJvdyAoKTsKCgoKfTsK
IyAxMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p
IiAyCgoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIHRpbWV2YWwgKCkgY29uc3QK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
cmV0dXJuIHRoaXMtPnR2XzsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIGNv
bnN0IHRpbWV2YWwgKiAoKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAoY29uc3QgdGltZXZhbCAqKSAm
dGhpcy0+dHZfOwp9CgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChsb25nIHNlYywg
bG9uZyB1c2VjKQp7CgogIHRoaXMtPnR2Xy50dl9zZWMgPSBzZWM7CiAgdGhpcy0+dHZfLnR2X3Vz
ZWMgPSB1c2VjOwp9CgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChkb3VibGUgZCkK
ewoKICBsb25nIGwgPSAobG9uZykgZDsKICB0aGlzLT50dl8udHZfc2VjID0gbDsKICB0aGlzLT50
dl8udHZfdXNlYyA9IChsb25nKSAoKGQgLSAoZG91YmxlKSBsKSAqIDEwMDAwMDBMKTsKICB0aGlz
LT5ub3JtYWxpemUgKCk7Cn0KCgoKCgppbmxpbmUgdm9pZApBQ0VfVGltZV9WYWx1ZTo6c2V0IChj
b25zdCB0aW1lc3BlY190ICZ0dikKewoKCiAgdGhpcy0+dHZfLnR2X3NlYyA9IHR2LnR2X3NlYzsK
CiAgdGhpcy0+dHZfLnR2X3VzZWMgPSB0di50dl9uc2VjIC8gMTAwMDsKCgoKCgoKICB0aGlzLT5u
b3JtYWxpemUgKCk7Cn0KCmlubGluZSB2b2lkCkFDRV9UaW1lX1ZhbHVlOjpzZXQgKGNvbnN0IHRp
bWV2YWwgJnR2KQp7CgogIHRoaXMtPnR2Xy50dl9zZWMgPSB0di50dl9zZWM7CiAgdGhpcy0+dHZf
LnR2X3VzZWMgPSB0di50dl91c2VjOwoKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCmlubGluZQpB
Q0VfVGltZV9WYWx1ZTo6QUNFX1RpbWVfVmFsdWUgKGNvbnN0IHRpbWV2YWwgJnR2KQoKewoKICB0
aGlzLT5zZXQgKHR2KTsKfQoKaW5saW5lCkFDRV9UaW1lX1ZhbHVlOjpBQ0VfVGltZV9WYWx1ZSAo
dm9pZCkKCnsKCiAgdGhpcy0+c2V0ICgwLCAwKTsKCgp9CgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6
OkFDRV9UaW1lX1ZhbHVlIChsb25nIHNlYywgbG9uZyB1c2VjKQp7CgogIHRoaXMtPnNldCAoc2Vj
LCB1c2VjKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIGxvbmcKQUNFX1RpbWVf
VmFsdWU6OnNlYyAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHZfLnR2X3NlYzsKfQoKCgppbmxpbmUgdm9pZApBQ0Vf
VGltZV9WYWx1ZTo6c2VjIChsb25nIHNlYykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICB0aGlzLT50dl8udHZfc2VjID0gc2VjOwp9CgoKCmlubGluZSBsb25nCkFD
RV9UaW1lX1ZhbHVlOjptc2VjICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHZfLnR2X3NlYyAqIDEwMDAgKyB0aGlz
LT50dl8udHZfdXNlYyAvIDEwMDA7Cn0KCgoKaW5saW5lIHZvaWQKQUNFX1RpbWVfVmFsdWU6Om1z
ZWMgKGxvbmcgbWlsbGlzZWNvbmRzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgdGhpcy0+dHZfLnR2X3NlYyA9IG1pbGxpc2Vjb25kcyAvIDEwMDA7CgogIHRo
aXMtPnR2Xy50dl91c2VjID0gKG1pbGxpc2Vjb25kcyAtICh0aGlzLT50dl8udHZfc2VjICogMTAw
MCkpICogMTAwMDsKfQoKCgppbmxpbmUgbG9uZwpBQ0VfVGltZV9WYWx1ZTo6dXNlYyAodm9pZCkg
Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu
IHRoaXMtPnR2Xy50dl91c2VjOwp9CgoKCmlubGluZSB2b2lkCkFDRV9UaW1lX1ZhbHVlOjp1c2Vj
IChsb25nIHVzZWMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHRoaXMtPnR2Xy50dl91c2VjID0gdXNlYzsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6OkFD
RV9UaW1lX1ZhbHVlIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpCiAgOiB0dl8gKHR2LnR2XykK
ewoKfQoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlICYKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yICo9
IChkb3VibGUgZCkKewogIGRvdWJsZSB0aW1lID0gdGhpcy0+c2VjICgpICogMTAwMDAwMEwgKyB0
aGlzLT51c2VjICgpOwogIHRpbWUgKj0gZDsKICB0aGlzLT5zZWMgKChsb25nKSh0aW1lIC8gMTAw
MDAwMEwpKTsKICB0aGlzLT51c2VjICgoKGxvbmcpdGltZSkgJSAxMDAwMDAwTCk7CgogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlCm9wZXJhdG9yICogKGRvdWJsZSBkLCBj
b25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYpCnsKICByZXR1cm4gQUNFX1RpbWVfVmFsdWUgKHR2KSAq
PSBkOwp9CgppbmxpbmUgQUNFX1RpbWVfVmFsdWUKb3BlcmF0b3IgKiAoY29uc3QgQUNFX1RpbWVf
VmFsdWUgJnR2LCBkb3VibGUgZCkKewogIHJldHVybiBBQ0VfVGltZV9WYWx1ZSAodHYpICo9IGQ7
Cn0KCgoKaW5saW5lIGludApvcGVyYXRvciA+IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAog
ICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYyKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogIGlmICh0djEuc2VjICgpID4gdHYyLnNlYyAoKSkKICAgIHJldHVybiAx
OwogIGVsc2UgaWYgKHR2MS5zZWMgKCkgPT0gdHYyLnNlYyAoKQogICAgICAgICAgICYmIHR2MS51
c2VjICgpID4gdHYyLnVzZWMgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsK
fQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yID49IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYxLAog
ICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MikKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgaWYgKHR2MS5zZWMgKCkgPiB0djIuc2VjICgpKQogICAgcmV0dXJu
IDE7CiAgZWxzZSBpZiAodHYxLnNlYyAoKSA9PSB0djIuc2VjICgpCiAgICAgICAgICAgJiYgdHYx
LnVzZWMgKCkgPj0gdHYyLnVzZWMgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKCgppbmxpbmUKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yIHRpbWVzcGVjX3QgKCkgY29u
c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgdGltZXNwZWNfdCB0djsKCiAgdHYudHZfc2VjID0gdGhpcy0+c2VjICgpOwoKICB0di50
dl9uc2VjID0gdGhpcy0+dHZfLnR2X3VzZWMgKiAxMDAwOwoKCgoKCiAgcmV0dXJuIHR2Owp9CgoK
CmlubGluZQpBQ0VfVGltZV9WYWx1ZTo6QUNFX1RpbWVfVmFsdWUgKGNvbnN0IHRpbWVzcGVjX3Qg
JnR2KQoKewoKICB0aGlzLT5zZXQgKHR2KTsKfQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yIDwgKGNv
bnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl
ICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHR2MiA+IHR2
MTsKfQoKCgppbmxpbmUgaW50Cm9wZXJhdG9yIDw9IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYx
LAogICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MikKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHR2MiA+PSB0djE7Cn0KCgoKaW5saW5lIGludApv
cGVyYXRvciA9PSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAgICAgIGNvbnN0
IEFDRV9UaW1lX1ZhbHVlICZ0djIpCnsKCiAgcmV0dXJuIHR2MS5zZWMgKCkgPT0gdHYyLnNlYyAo
KQogICAgJiYgdHYxLnVzZWMgKCkgPT0gdHYyLnVzZWMgKCk7Cn0KCgoKaW5saW5lIGludApvcGVy
YXRvciAhPSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnR2MSwKICAgICAgICAgICAgIGNvbnN0IEFD
RV9UaW1lX1ZhbHVlICZ0djIpCnsKCiAgcmV0dXJuICEodHYxID09IHR2Mik7Cn0KCgoKaW5saW5l
IHZvaWQKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yKz0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0
dikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhp
cy0+c2VjICh0aGlzLT5zZWMgKCkgKyB0di5zZWMgKCkpOwogIHRoaXMtPnVzZWMgKHRoaXMtPnVz
ZWMgKCkgKyB0di51c2VjICgpKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIHZv
aWQKQUNFX1RpbWVfVmFsdWU6Om9wZXJhdG9yLT0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0dikK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+
c2VjICh0aGlzLT5zZWMgKCkgLSB0di5zZWMgKCkpOwogIHRoaXMtPnVzZWMgKHRoaXMtPnVzZWMg
KCkgLSB0di51c2VjICgpKTsKICB0aGlzLT5ub3JtYWxpemUgKCk7Cn0KCgoKaW5saW5lIEFDRV9U
aW1lX1ZhbHVlCm9wZXJhdG9yICsgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAg
ICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgQUNFX1RpbWVfVmFsdWUgc3VtICh0djEuc2VjICgpICsgdHYyLnNlYyAoKSwKICAg
ICAgICAgICAgICAgICAgICAgIHR2MS51c2VjICgpICsgdHYyLnVzZWMgKCkpOwoKICBzdW0ubm9y
bWFsaXplICgpOwogIHJldHVybiBzdW07Cn0KCgoKaW5saW5lIEFDRV9UaW1lX1ZhbHVlCm9wZXJh
dG9yIC0gKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0djEsCiAgICAgICAgICAgIGNvbnN0IEFDRV9U
aW1lX1ZhbHVlICZ0djIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX1Rp
bWVfVmFsdWUgZGVsdGEgKHR2MS5zZWMgKCkgLSB0djIuc2VjICgpLAogICAgICAgICAgICAgICAg
ICAgICAgICB0djEudXNlYyAoKSAtIHR2Mi51c2VjICgpKTsKICBkZWx0YS5ub3JtYWxpemUgKCk7
CiAgcmV0dXJuIGRlbHRhOwp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZmNudGwgKEFDRV9IQU5ETEUg
aGFuZGxlLCBpbnQgY21kLCBsb25nIGFyZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKIyA0ODUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl
c3VsdF87IHJldHVybiA6OmZjbnRsIChoYW5kbGUsIGNtZCwgYXJnKTsgfSB3aGlsZSAoMCk7Cgp9
CgoKaW5saW5lIGludApBQ0VfT1M6OmNoZGlyIChjb25zdCBjaGFyICpwYXRoKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDUxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y2hkaXIgKHBhdGgpOyB9IHdoaWxl
ICgwKTsKCgp9CiMgNTM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKaW5saW5lIEFDRV9UQ0hBUiAqCkFDRV9PUzo6bWt0ZW1wIChBQ0VfVENIQVIg
KnMpCnsKCgoKCgogIHJldHVybiA6Om1rdGVtcCAocyk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6
Om1rZmlmbyAoY29uc3QgQUNFX1RDSEFSICpmaWxlLCBtb2RlX3QgbW9kZSkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0g
LTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6Om1rZmlmbyAoZmlsZSwgbW9k
ZSk7IH0gd2hpbGUgKDApOwoKfQojIDU3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiMgMSAiL3Vzci9pbmNsdWRlL21lbW9yeS5oIiAxIDMKIyA1
NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIiAy
CgoKCgoKZXh0ZXJuICJDIiBpbnQgaXNhc3RyZWFtIChpbnQpOwojIDYwOCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9zeXNjYWxsLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3N5c2NhbGwuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9hc20vdW5pc3RkLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3N5c2NhbGwuaCIgMiAzCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3lzY2FsbC5oIiAx
IDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N5cy9zeXNjYWxsLmgiIDIgMwojIDYwOSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiIDIKIyA2MjUgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50
CkFDRV9PUzo6ZnN0YXQgKEFDRV9IQU5ETEUgaGFuZGxlLCBBQ0Vfc3RhdCAqc3RwKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDY0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICBkbyB7IGludCBhY2VfcmVzdWx0XyA9
IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc3RhdCAoaGFuZGxlLCBz
dHApOyB9IHdoaWxlICgwKTsKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bHN0YXQgKGNvbnN0IGNo
YXIgKmZpbGUsIEFDRV9zdGF0ICpzdHApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiMgNjY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1
bHRfOyByZXR1cm4gOjpsc3RhdCAoZmlsZSwgc3RwKTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5saW5l
IGludApBQ0VfT1M6OmZzeW5jIChBQ0VfSEFORExFIGhhbmRsZSkKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf
cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc3luYyAoaGFuZGxlKTsgfSB3aGlsZSAo
MCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Z2V0b3B0IChpbnQgYXJnYywgY2hhciAqY29uc3Qg
KmFyZ3YsIGNvbnN0IGNoYXIgKm9wdHN0cmluZykKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiMgNzAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRvcHQgKGFyZ2MsIGFyZ3YsIG9wdHN0cmluZyk7IH0gd2hp
bGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnBpcGUgKEFDRV9IQU5ETEUgZmRzW10pCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVz
dWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpwaXBlIChmZHMp
OyB9IHdoaWxlICgwKTsKCn0KIyA3NDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6cmFuZF9yIChBQ0VfUkFORFJf
VFlQRSAmc2VlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzYwICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7
IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4g
OjpyYW5kX3IgKCZzZWVkKTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIHBpZF90CkFDRV9P
Uzo6c2V0c2lkICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6OnNldHNpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgbW9kZV90CkFDRV9P
Uzo6dW1hc2sgKG1vZGVfdCBjbWFzaykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgoKCgoKICByZXR1cm4gOjp1bWFzayAoY21hc2spOwoKfQojIDkzNiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09T
OjpjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHRpbWVzcGVjICp0cykK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk1MSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdo
aWxlICgmY2xvY2tpZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZ0cyA9PSAwKTsKICBkbyB7ICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9Cgpp
bmxpbmUgQUNFX1RpbWVfVmFsdWUKQUNFX09TOjpnZXR0aW1lb2ZkYXkgKHZvaWQpCnsKCgoKICB0
aW1ldmFsIHR2OwogIGludCByZXN1bHQgPSAwOwojIDEwMDIgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgcmVzdWx0ID0gKGludCkgOjpn
ZXR0aW1lb2ZkYXkgKCZ0diwgMCk7IH0gd2hpbGUgKDApOwojIDEwMTcgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlmIChyZXN1bHQgPT0gLTEp
CiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAgcmV0dXJuIEFDRV9UaW1lX1ZhbHVlICh0dik7Cgp9
CgppbmxpbmUgaW50CkFDRV9PUzo6c3RhdCAoY29uc3QgQUNFX1RDSEFSICpmaWxlLCBBQ0Vfc3Rh
dCAqc3RwKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA3NCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQg
YWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c3Rh
dCAoZmlsZSwgc3RwKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdGltZV90CkFDRV9PUzo6dGlt
ZSAodGltZV90ICp0bG9jKQp7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
CgoKCgogIGRvIHsgdGltZV90IGFjZV9yZXN1bHRfID0gKHRpbWVfdCkgLTE7IGFjZV9yZXN1bHRf
ID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnRpbWUgKHRsb2MpOyB9IHdoaWxlICgwKTsKCgoKCgoK
Cn0KCmlubGluZSB2b2lkCkFDRV9PUzo6c3JhbmQgKHVfaW50IHNlZWQpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgOjpzcmFuZCAoc2VlZCk7Cgp9CgppbmxpbmUgaW50
CkFDRV9PUzo6cmFuZCAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6OnJhbmQgKCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnVu
bGluayAoY29uc3QgQUNFX1RDSEFSICpwYXRoKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKIyAxMTQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjp1bmxpbmsgKHBhdGgpOyB9IHdoaWxlICgwKTsKCn0KCmlubGlu
ZSBpbnQKQUNFX09TOjpyZW5hbWUgKGNvbnN0IEFDRV9UQ0hBUiAqb2xkX25hbWUsCiAgICAgICAg
ICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5ld19uYW1lLAogICAgICAgICAgICAgICAgaW50IGZs
YWdzKQp7CiMgMTE4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyBpbnQgYWNlX3Jl
c3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6cmVuYW1lIChv
bGRfbmFtZSwgbmV3X25hbWUpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfVENIQVIgKgpB
Q0VfT1M6OnRlbXBuYW0gKGNvbnN0IEFDRV9UQ0hBUiAqZGlyLCBjb25zdCBBQ0VfVENIQVIgKnBm
eCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEyMDYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgY2hhciAq
IGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6dGVt
cG5hbSAoZGlyLCBwZngpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfSEFORExFCkFDRV9P
Uzo6c2htX29wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAg
IGludCBtb2RlLAogICAgICAgICAgICAgICAgICBpbnQgcGVybXMsCiAgICAgICAgICAgICAgICAg
IGludCBzYSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMjI1ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1
cm4gQUNFX09TOjpvcGVuIChmaWxlbmFtZSwgbW9kZSwgcGVybXMsIHNhKTsKCn0KCmlubGluZSBp
bnQKQUNFX09TOjpzaG1fdW5saW5rIChjb25zdCBBQ0VfVENIQVIgKnBhdGgpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICByZXR1cm4gQUNFX09TOjp1bmxp
bmsgKHBhdGgpOwoKfQoKCmlubGluZSBjaGFyICoKQUNFX09TOjpjdXNlcmlkIChjaGFyICp1c2Vy
LCBzaXplX3QgbWF4bGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg
MTI4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki
CiAgaWYgKG1heGxlbiA9PSAwKQogICAgewoKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
IDIyOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgc3RydWN0IHBhc3N3ZCAqcHcgPSAwOwoKCiAg
OjpzZXRwd2VudCAoKTsKCgoKCiAgcHcgPSA6OmdldHB3dWlkICg6OmdldGV1aWQgKCkpOwoKCiAg
OjplbmRwd2VudCAoKTsKCiAgc2l6ZV90IG1heF9sZW5ndGggPSAwOwogIGNoYXIgKnVzZXJpZCA9
IDA7CgogIGlmICh1c2VyID09IDApCiAgICB7CgoKCgogICAgICBjb25zdCBzaXplX3QgQUNFX0xf
Y3VzZXJpZCA9IDk7CgoKCgogICAgICBzdGF0aWMgQUNFX1RDSEFSIHRtcFtBQ0VfTF9jdXNlcmlk
XSA9IHsgMCB9OwogICAgICBtYXhfbGVuZ3RoID0gQUNFX0xfY3VzZXJpZCAtIDE7CgogICAgICB1
c2VyaWQgPSB0bXA7CiAgICB9CiAgZWxzZQogICAgewogICAgICBtYXhfbGVuZ3RoID0gbWF4bGVu
OwogICAgICB1c2VyaWQgPSB1c2VyOwogICAgfQoKCiAgaWYgKEFDRV9PU19TdHJpbmc6OnN0cmxl
biAocHctPnB3X25hbWUpIDw9IG1heF9sZW5ndGgpCiAgICB7CiAgICAgIHJldHVybiBBQ0VfT1Nf
U3RyaW5nOjpzdHJjcHkgKHVzZXJpZCwgcHctPnB3X25hbWUpOwogICAgfQogIGVsc2UKICAgIHsK
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDI4OwogICAgICByZXR1cm4gMDsKICAgIH0K
CgoKCgp9CiMgMTM3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjphdGV4aXQgKEFDRV9FWElUX0hPT0sgZnVuYykK
ewogIHJldHVybiBBQ0VfT1NfT2JqZWN0X01hbmFnZXI6Omluc3RhbmNlICgpLT5hdF9leGl0IChm
dW5jKTsKfQoKCgppbmxpbmUgdm9pZApBQ0VfT1M6Ol9leGl0IChpbnQgc3RhdHVzKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEzOTggIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6X2V4aXQgKHN0YXR1cyk7CgoKCgp9
CgppbmxpbmUgdm9pZApBQ0VfT1M6OmFib3J0ICh2b2lkKQp7CgoKCiAgOjphYm9ydCAoKTsKCgoK
Cn0KCgppbmxpbmUgaW50CkFDRV9PUzo6dnNwcmludGYgKGNoYXIgKmJ1ZmZlciwgY29uc3QgY2hh
ciAqZm9ybWF0LCB2YV9saXN0IGFyZ3B0cikKewoKCgogIHJldHVybiA6OnZzcHJpbnRmIChidWZm
ZXIsIGZvcm1hdCwgYXJncHRyKTsKCn0KIyAxNDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGxvbmcKQUNFX09TOjpzeXNjb25mIChp
bnQgbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRv
IHsgbG9uZyBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1
cm4gOjpzeXNjb25mIChuYW1lKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6
bXV0ZXhfaW5pdCAoQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAg
ICBBQ0VfbXV0ZXhhdHRyX3QgKmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgaW50IHNh
KQp7CiMgMTUxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCiAgZG8geyB9IHdoaWxlICgmbmFtZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZhdHRy
aWJ1dGVzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnNhID09IDApOwoKICBwdGhyZWFkX211dGV4
YXR0cl90IGxfYXR0cmlidXRlczsKICBpZiAoYXR0cmlidXRlcyA9PSAwKQogICAgYXR0cmlidXRl
cyA9ICZsX2F0dHJpYnV0ZXM7CiAgaW50IHJlc3VsdCA9IDA7CiAgaW50IGF0dHJfaW5pdCA9IDA7
CgoKCiAgaWYgKGF0dHJpYnV0ZXMgPT0gJmxfYXR0cmlidXRlcykKICAgIHsKCgoKICAgICAgaWYg
KCgocmVzdWx0ID0gKDo6cHRocmVhZF9tdXRleGF0dHJfaW5pdCAoYXR0cmlidXRlcykpKSAhPSAw
ID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSByZXN1bHQsIC0xKSA6IDApID09IDApCgoKCiAg
ICAgICAgewogICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICAgIGF0dHJfaW5pdCA9IDE7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgcmVzdWx0ID0gLTE7CiAgICB9CgogIGlmIChyZXN1
bHQgPT0gMCkKICAgIHsKCgoKCgoKCiAgICAgIGlmICgKCgoKCiAgICAgICAgICAgKChyZXN1bHQg
PSAoOjpwdGhyZWFkX211dGV4X2luaXQgKG0sIGF0dHJpYnV0ZXMpKSkgIT0gMCA/ICgoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKSA9PSAwKQojIDE1NjUgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICAgIHJlc3Vs
dCA9IDA7CiAgICAgIGVsc2UKICAgICAgICByZXN1bHQgPSAtMTsKICAgIH0KCgoKICBkbyB7IH0g
d2hpbGUgKCZ0eXBlID09IDApOwoKCgoKICBpZiAoYXR0cmlidXRlcyA9PSAmbF9hdHRyaWJ1dGVz
ICYmIGF0dHJfaW5pdCkKCgoKICAgIDo6cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSAoJmxfYXR0
cmlidXRlcyk7CgoKICByZXR1cm4gcmVzdWx0OwojIDE2OTYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CiMgMTczNyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpt
dXRleF9kZXN0cm95IChBQ0VfbXV0ZXhfdCAqbSkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwojIDE3NTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1
bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRocmVhZF9tdXRl
eF9kZXN0cm95IChtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGFjZV9yZXN1
bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgMTc4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRl
eF9sb2NrIChBQ0VfbXV0ZXhfdCAqbSkKewojIDE4MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7
IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKHB0aHJl
YWRfbXV0ZXhfbG9jayAobSkpKSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2Vf
cmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDE4NDggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6
bXV0ZXhfbG9jayAoQUNFX211dGV4X3QgKm0sCiAgICAgICAgICAgICAgICAgICAgaW50ICZhYmFu
ZG9uZWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxODgzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7
IH0gd2hpbGUgKCZtID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmFiYW5kb25lZCA9PSAwKTsKICBk
byB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7
Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXV0ZXhfdHJ5bG9jayAoQUNFX211dGV4X3QgKm0pCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxOTEwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBh
Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2Vf
cmVzdWx0XyA9IChwdGhyZWFkX211dGV4X3RyeWxvY2sgKG0pKSkgIT0gMCA/ICgoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAxOTgx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK
aW5saW5lIGludApBQ0VfT1M6Om11dGV4X3RyeWxvY2sgKEFDRV9tdXRleF90ICptLCBpbnQgJmFi
YW5kb25lZCkKewojIDIwMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm0gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm
YWJhbmRvbmVkID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0
dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRleF9sb2NrIChB
Q0VfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAm
dGltZW91dCkKewoKCgogIGludCByZXN1bHQ7CgoKCiAgdGltZXNwZWNfdCB0cyA9IHRpbWVvdXQ7
CgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3Vs
dF87IHJldHVybiAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfbXV0ZXhfdGltZWRsb2NrIChtLCAmdHMp
KSkgIT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKTsgfSB3
aGlsZSAoMCk7CiMgMjExOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdXRleF91bmxvY2sgKEFDRV9tdXRl
eF90ICptKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAyMTM0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBk
byB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1
cm4gKChhY2VfcmVzdWx0XyA9IChwdGhyZWFkX211dGV4X3VubG9jayAobSkpKSAhPSAwID8gKCgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDAp
OwojIDIxNjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyZWFkX211dGV4X2luaXQgKEFDRV90aHJlYWRf
bXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFDRV9tdXRleGF0dHJfdCAqYXJnKQp7CiMgMjE4NiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmdHlwZSA9
PSAwKTsKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfaW5pdCAobSwgUFRIUkVBRF9QUk9DRVNTX1BS
SVZBVEUsIG5hbWUsIGFyZyk7CiMgMjIwMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyAyMjQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGludApBQ0VfT1M6OnRocmVhZF9tdXRl
eF9kZXN0cm95IChBQ0VfdGhyZWFkX211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhf
ZGVzdHJveSAobSk7CiMgMjI2NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJlYWRfbXV0ZXhfbG9jayAo
QUNFX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfbG9j
ayAobSk7CgoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKEFD
RV90aHJlYWRfbXV0ZXhfdCAqbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1RpbWVfVmFsdWUgJnRpbWVvdXQpCnsKIyAyMzAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gQUNFX09TOjptdXRleF9sb2NrICht
LCB0aW1lb3V0KTsKIyAyMzEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2Nr
IChBQ0VfdGhyZWFkX211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiMgMjMzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfdHJ5bG9jayAobSk7
CiMgMjM0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJlYWRfbXV0ZXhfdW5sb2NrIChBQ0VfdGhyZWFk
X211dGV4X3QgKm0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4X3VubG9jayAobSk7CgoKCgoKCgp9CgoK
CgoKCgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9kZXN0cm95IChBQ0VfY29uZF90ICpjdikKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMjM4MSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl
X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jl
c3VsdF8gPSAoOjpwdGhyZWFkX2NvbmRfZGVzdHJveSAoY3YpKSkgIT0gMCA/ICgoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAyMzkz
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK
aW5saW5lIGludApBQ0VfT1M6OmNvbmRhdHRyX2luaXQgKEFDRV9jb25kYXR0cl90ICZhdHRyaWJ1
dGVzLAogICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlKQp7CiAgZG8geyB9IHdoaWxlICgm
dHlwZSA9PSAwKTsKIyAyNDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaSIKICBpbnQgcmVzdWx0ID0gLTE7CgogIGlmICgKCgoKICAgICAgKChyZXN1
bHQgPSAoOjpwdGhyZWFkX2NvbmRhdHRyX2luaXQgKCZhdHRyaWJ1dGVzKSkpICE9IDAgPyAoKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IHJlc3VsdCwgLTEpIDogMCkgPT0gMAojIDI0MzYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICApCiAg
ICAgcmVzdWx0ID0gMDsKICBlbHNlCiAgICAgcmVzdWx0ID0gLTE7CgogIHJldHVybiByZXN1bHQ7
CiMgMjQ3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpjb25kYXR0cl9kZXN0cm95IChBQ0VfY29uZGF0dHJf
dCAmYXR0cmlidXRlcykKewojIDI0ODUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6cHRocmVhZF9jb25kYXR0cl9kZXN0cm95ICgmYXR0cmli
dXRlcyk7CiMgMjQ5NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmkiCiAgcmV0dXJuIDA7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9pbml0
IChBQ0VfY29uZF90ICpjdiwKICAgICAgICAgICAgICAgICAgIEFDRV9jb25kYXR0cl90ICZhdHRy
aWJ1dGVzLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAg
ICAgICAgIHZvaWQgKmFyZykKewoKICBkbyB7IH0gd2hpbGUgKCZuYW1lID09IDApOwogIGRvIHsg
fSB3aGlsZSAoJmFyZyA9PSAwKTsKCgoKCgogIGludCByZXN1bHQgPSAtMTsKCiAgaWYgKAoKCgog
ICAgICAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfY29uZF9pbml0IChjdiwgJmF0dHJpYnV0ZXMpKSkg
IT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKSA9PSAwCgoK
CiAgICAgICkKICAgICByZXN1bHQgPSAwOwogIGVsc2UKICAgICByZXN1bHQgPSAtMTsKCiAgcmV0
dXJuIHJlc3VsdDsKIyAyNTUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvT1MuaSIKfQojIDI1NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF9pbml0IChBQ0VfY29u
ZF90ICpjdiwgc2hvcnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYXJnKQp7CiAgQUNF
X2NvbmRhdHRyX3QgYXR0cmlidXRlczsKICBpZiAoQUNFX09TOjpjb25kYXR0cl9pbml0IChhdHRy
aWJ1dGVzLCB0eXBlKSA9PSAwCiAgICAgICYmIEFDRV9PUzo6Y29uZF9pbml0IChjdiwgYXR0cmli
dXRlcywgbmFtZSwgYXJnKSA9PSAwKQogICAgewogICAgICAodm9pZCkgQUNFX09TOjpjb25kYXR0
cl9kZXN0cm95IChhdHRyaWJ1dGVzKTsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgcmV0dXJuIC0x
Owp9CiMgMjU4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpjb25kX3NpZ25hbCAoQUNFX2NvbmRfdCAqY3YpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50
IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFj
ZV9yZXN1bHRfID0gKDo6cHRocmVhZF9jb25kX3NpZ25hbCAoY3YpKSkgIT0gMCA/ICgoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAy
NjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK
fQoKaW5saW5lIGludApBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0IChBQ0VfY29uZF90ICpjdikKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAgZG8geyBp
bnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgo
YWNlX3Jlc3VsdF8gPSAoOjpwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChjdikpKSAhPSAwID8gKCgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDAp
OwojIDI2MzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF93YWl0IChBQ0VfY29uZF90ICpjdiwKICAg
ICAgICAgICAgICAgICAgIEFDRV9tdXRleF90ICpleHRlcm5hbF9tdXRleCkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRf
ID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0g
KDo6cHRocmVhZF9jb25kX3dhaXQgKGN2LCBleHRlcm5hbF9tdXRleCkpKSAhPSAwID8gKCgqX19l
cnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwoj
IDI2NjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p
Igp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29uZF90aW1lZHdhaXQgKEFDRV9jb25kX3QgKmN2LAog
ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhfdCAqZXh0ZXJuYWxfbXV0ZXgsCiAgICAg
ICAgICAgICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDI3MDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCByZXN1bHQ7CiAgdGltZXNw
ZWNfdCB0czsKCiAgaWYgKHRpbWVvdXQgIT0gMCkKICAgIHRzID0gKnRpbWVvdXQ7CiMgMjczNSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8g
eyByZXN1bHQgPSAoaW50KSAoKHJlc3VsdCA9ICh0aW1lb3V0ID09IDAgPyA6OnB0aHJlYWRfY29u
ZF93YWl0IChjdiwgZXh0ZXJuYWxfbXV0ZXgpIDogOjpwdGhyZWFkX2NvbmRfdGltZWR3YWl0IChj
diwgZXh0ZXJuYWxfbXV0ZXgsIChBQ0VfVElNRVNQRUNfUFRSKSAmdHMpKSkgIT0gMCA/ICgoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID0gcmVzdWx0LCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgMjc0
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAg
aWYgKHJlc3VsdCA9PSAtMSAmJgogICAgICAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAxMTAg
fHwgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAxMSB8fCAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID09IDQpKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDYyOwojIDI3OTEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlmICh0aW1lb3V0
ICE9IDApCiAgICB0aW1lb3V0LT5zZXQgKHRzKTsKCiAgcmV0dXJuIHJlc3VsdDsKCgoKCgoKfQoK
CmlubGluZSBpbnQKQUNFX09TOjp0aHJfZXF1YWwgKEFDRV90aHJlYWRfdCB0MSwgQUNFX3RocmVh
ZF90IHQyKQp7CgoKCgoKCgogIHJldHVybiA6OnB0aHJlYWRfZXF1YWwgKHQxLCB0Mik7CiMgMjgy
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0K
CmlubGluZSB2b2lkCkFDRV9PUzo6dGhyX3NlbGYgKEFDRV9odGhyZWFkX3QgJnNlbGYpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBzZWxmID0gcHRocmVhZF9z
ZWxmICgpOwojIDI4NDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PUy5pIgp9CgppbmxpbmUgQUNFX3RocmVhZF90CkFDRV9PUzo6dGhyX3NlbGYgKHZvaWQp
CnsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y
ZXN1bHRfOyByZXR1cm4gcHRocmVhZF9zZWxmICgpOyB9IHdoaWxlICgwKTsKIyAyODc1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5l
IGludApBQ0VfT1M6OnJlY3Vyc2l2ZV9tdXRleF9pbml0IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9t
dXRleF90ICptLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIg
Km5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9tdXRleGF0dHJfdCAqYXJn
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2EpCnsKICBkbyB7IH0gd2hpbGUg
KCZzYSA9PSAwKTsKCgoKCiAgaWYgKEFDRV9PUzo6dGhyZWFkX211dGV4X2luaXQgKCZtLT5uZXN0
aW5nX211dGV4XywgMCwgbmFtZSwgYXJnKSA9PSAtMSkKICAgIHJldHVybiAtMTsKICBlbHNlIGlm
IChBQ0VfT1M6OmNvbmRfaW5pdCAoJm0tPmxvY2tfYXZhaWxhYmxlXywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHNob3J0KSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCkgPT0gLTEpCiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAgewogICAgICBtLT5uZXN0aW5nX2xl
dmVsXyA9IDA7CiAgICAgIG0tPm93bmVyX2lkXyA9IEFDRV9PUzo6TlVMTF90aHJlYWQ7CiAgICAg
IHJldHVybiAwOwogICAgfQoKCgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Vyc2l2ZV9t
dXRleF9kZXN0cm95IChBQ0VfcmVjdXJzaXZlX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgogIGlm
IChBQ0VfT1M6OnRocmVhZF9tdXRleF9kZXN0cm95ICgmbS0+bmVzdGluZ19tdXRleF8pID09IC0x
KQogICAgcmV0dXJuIC0xOwogIGVsc2UgaWYgKEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmbS0+bG9j
a19hdmFpbGFibGVfKSA9PSAtMSkKICAgIHJldHVybiAtMTsKICBlbHNlCiAgICByZXR1cm4gMDsK
CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cmVjdXJzaXZlX211dGV4X2xvY2sgKEFDRV9yZWN1
cnNpdmVfdGhyZWFkX211dGV4X3QgKm0pCnsKCgoKCiAgQUNFX3RocmVhZF90IHRfaWQgPSBBQ0Vf
T1M6OnRocl9zZWxmICgpOwogIGludCByZXN1bHQgPSAwOwoKCiAgaWYgKEFDRV9PUzo6dGhyZWFk
X211dGV4X2xvY2sgKCZtLT5uZXN0aW5nX211dGV4XykgPT0gLTEpCiAgICByZXN1bHQgPSAtMTsK
ICBlbHNlCiAgICB7CgoKICAgICAgaWYgKG0tPm5lc3RpbmdfbGV2ZWxfID09IDApCiAgICAgICAg
bS0+b3duZXJfaWRfID0gdF9pZDsKCgogICAgICBlbHNlIGlmIChBQ0VfT1M6OnRocl9lcXVhbCAo
dF9pZCwgbS0+b3duZXJfaWRfKSA9PSAwKQogICAgICAgIHsKCgogICAgICAgICAgd2hpbGUgKG0t
Pm5lc3RpbmdfbGV2ZWxfID4gMCkKICAgICAgICAgICAgQUNFX09TOjpjb25kX3dhaXQgKCZtLT5s
b2NrX2F2YWlsYWJsZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbS0+bmVzdGlu
Z19tdXRleF8pOwoKCiAgICAgICAgICAgICAgbS0+b3duZXJfaWRfID0gdF9pZDsKICAgICAgICB9
CgoKCiAgICAgIG0tPm5lc3RpbmdfbGV2ZWxfKys7CiAgICB9CgogIHsKCiAgICBBQ0VfRXJybm9f
R3VhcmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwogICAgQUNFX09TOjp0aHJlYWRf
bXV0ZXhfdW5sb2NrICgmbS0+bmVzdGluZ19tdXRleF8pOwogIH0KICByZXR1cm4gcmVzdWx0OwoK
CgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpyZWN1cnNpdmVfbXV0ZXhfdHJ5bG9jayAoQUNFX3Jl
Y3Vyc2l2ZV90aHJlYWRfbXV0ZXhfdCAqbSkKewoKCgoKICBBQ0VfdGhyZWFkX3QgdF9pZCA9IEFD
RV9PUzo6dGhyX3NlbGYgKCk7CiAgaW50IHJlc3VsdCA9IDA7CgoKICBpZiAoQUNFX09TOjp0aHJl
YWRfbXV0ZXhfbG9jayAoJm0tPm5lc3RpbmdfbXV0ZXhfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0x
OwogIGVsc2UKICAgIHsKCiAgICAgIGlmIChtLT5uZXN0aW5nX2xldmVsXyA9PSAwKQogICAgICAg
IHsKICAgICAgICAgIG0tPm93bmVyX2lkXyA9IHRfaWQ7CiAgICAgICAgICBtLT5uZXN0aW5nX2xl
dmVsXyA9IDE7CiAgICAgICAgfQoKCiAgICAgIGVsc2UgaWYgKEFDRV9PUzo6dGhyX2VxdWFsICh0
X2lkLCBtLT5vd25lcl9pZF8pKQogICAgICAgIG0tPm5lc3RpbmdfbGV2ZWxfKys7CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTY7CiAgICAg
ICAgICByZXN1bHQgPSAtMTsKICAgICAgICB9CiAgICB9CgogIHsKCiAgICBBQ0VfRXJybm9fR3Vh
cmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwogICAgQUNFX09TOjp0aHJlYWRfbXV0
ZXhfdW5sb2NrICgmbS0+bmVzdGluZ19tdXRleF8pOwogIH0KICByZXR1cm4gcmVzdWx0OwoKCgoK
Cn0KCmlubGluZSBpbnQKQUNFX09TOjpyZWN1cnNpdmVfbXV0ZXhfdW5sb2NrIChBQ0VfcmVjdXJz
aXZlX3RocmVhZF9tdXRleF90ICptKQp7CgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICBBQ0VfdGhyZWFkX3QgdF9pZCA9IEFDRV9PUzo6dGhy
X3NlbGYgKCk7CgogIGludCByZXN1bHQgPSAwOwoKICBpZiAoQUNFX09TOjp0aHJlYWRfbXV0ZXhf
bG9jayAoJm0tPm5lc3RpbmdfbXV0ZXhfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0xOwogIGVsc2UK
ICAgIHsKCiAgICAgIGlmIChtLT5uZXN0aW5nX2xldmVsXyA9PSAwCiAgICAgICAgICB8fCBBQ0Vf
T1M6OnRocl9lcXVhbCAodF9pZCwgbS0+b3duZXJfaWRfKSA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAyMjsKICAgICAgICAgIHJlc3VsdCA9IC0xOwog
ICAgICAgIH0KICAgICAgZWxzZQoKICAgICAgICB7CiAgICAgICAgICBtLT5uZXN0aW5nX2xldmVs
Xy0tOwogICAgICAgICAgaWYgKG0tPm5lc3RpbmdfbGV2ZWxfID09IDApCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIG0tPm93bmVyX2lkXyA9IEFDRV9PUzo6TlVMTF90aHJlYWQ7CgoKICAg
ICAgICAgICAgICBpZiAoQUNFX09TOjpjb25kX3NpZ25hbCAoJm0tPmxvY2tfYXZhaWxhYmxlXykg
PT0gLTEpCiAgICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgIH0KCiAgewoKICAgIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSk7CiAgICBBQ0VfT1M6OnRocmVhZF9tdXRleF91bmxvY2sgKCZtLT5uZXN0aW5nX211
dGV4Xyk7CiAgfQogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl
bWFfZGVzdHJveSAoQUNFX3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiMgMzEzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL09TLmkiCiAgaW50IHIxID0gQUNFX09TOjptdXRleF9kZXN0cm95ICgmcy0+bG9j
a18pOwogIGludCByMiA9IEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmcy0+Y291bnRfbm9uemVyb18p
OwogIHJldHVybiByMSAhPSAwIHx8IHIyICE9IDAgPyAtMSA6IDA7CiMgMzE2MCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBp
bnQKQUNFX09TOjpjbG9zZSAoQUNFX0hBTkRMRSBoYW5kbGUpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiMgMzE4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3Vs
dF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y2xvc2UgKGhhbmRsZSk7IH0gd2hpbGUgKDApOwoK
fQoKCgoKaW5saW5lIGxvbmcKQUNFX09TOjpmaWxlc2l6ZSAoQUNFX0hBTkRMRSBoYW5kbGUpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgc3RydWN0IHN0YXQgc2I7
CiAgcmV0dXJuIEFDRV9PUzo6ZnN0YXQgKGhhbmRsZSwgJnNiKSA9PSAtMSA/IC0xIDogKGxvbmcp
IHNiLnN0X3NpemU7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZnRydW5jYXRlIChBQ0VfSEFORExF
IGhhbmRsZSwgb2ZmX3Qgb2Zmc2V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKIyAzMjIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y
ZXN1bHRfOyByZXR1cm4gOjpmdHJ1bmNhdGUgKGhhbmRsZSwgb2Zmc2V0KTsgfSB3aGlsZSAoMCk7
Cgp9CgppbmxpbmUgdm9pZCAqCkFDRV9PUzo6bW1hcCAodm9pZCAqYWRkciwKICAgICAgICAgICAg
ICBzaXplX3QgbGVuLAogICAgICAgICAgICAgIGludCBwcm90LAogICAgICAgICAgICAgIGludCBm
bGFncywKICAgICAgICAgICAgICBBQ0VfSEFORExFIGZpbGVfaGFuZGxlLAogICAgICAgICAgICAg
IG9mZl90IG9mZiwKICAgICAgICAgICAgICBBQ0VfSEFORExFICpmaWxlX21hcHBpbmcsCiAgICAg
ICAgICAgICAgaW50IHNhLAogICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqZmlsZV9tYXBw
aW5nX25hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyB9IHdo
aWxlICgmZmlsZV9tYXBwaW5nX25hbWUgPT0gMCk7CiMgMzM5MCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmc2EgPT0g
MCk7CgoKCgogIGRvIHsgfSB3aGlsZSAoJmZpbGVfbWFwcGluZyA9PSAwKTsKICBkbyB7IHZvaWQg
KiBhY2VfcmVzdWx0XyA9ICgodm9pZCAqKSAtMSk7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiAodm9pZCAqKSA6Om1tYXAgKChBQ0VfTU1BUF9UWVBFKSBhZGRyLCBsZW4sIHByb3Qs
IGZsYWdzLCBmaWxlX2hhbmRsZSwgb2ZmKTsgfSB3aGlsZSAoMCk7CiMgMzQxNCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBp
bnQKQUNFX09TOjpzZW1hX2luaXQgKEFDRV9zZW1hX3QgKnMsCiAgICAgICAgICAgICAgICAgICB1
X2ludCBjb3VudCwKICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywKICAgICAg
ICAgICAgICAgICAgIGludCBtYXgsCiAgICAgICAgICAgICAgICAgICBpbnQgc2EpCnsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDM1NTEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm1heCA9
PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZzYSA9PSAwKTsKICBpbnQgcmVzdWx0ID0gLTE7CgogIGlm
IChBQ0VfT1M6Om11dGV4X2luaXQgKCZzLT5sb2NrXywgdHlwZSwgbmFtZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAoQUNFX211dGV4YXR0cl90ICopIGFyZykgPT0gMAogICAgICAmJiBBQ0Vf
T1M6OmNvbmRfaW5pdCAoJnMtPmNvdW50X25vbnplcm9fLCB0eXBlLCBuYW1lLCBhcmcpID09IDAK
ICAgICAgJiYgQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18pID09IDApCiAgICB7CiAgICAg
IHMtPmNvdW50XyA9IGNvdW50OwogICAgICBzLT53YWl0ZXJzXyA9IDA7CgogICAgICBpZiAoQUNF
X09TOjptdXRleF91bmxvY2sgKCZzLT5sb2NrXykgPT0gMCkKICAgICAgICByZXN1bHQgPSAwOwog
ICAgfQoKICBpZiAocmVzdWx0ID09IC0xKQogICAgewogICAgICBBQ0VfT1M6Om11dGV4X2Rlc3Ry
b3kgKCZzLT5sb2NrXyk7CiAgICAgIEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmcy0+Y291bnRfbm9u
emVyb18pOwogICAgfQogIHJldHVybiByZXN1bHQ7CiMgMzY1MiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyAzNzIyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIGludApBQ0VfT1M6
OnNlbWFfcG9zdCAoQUNFX3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiMgMzczNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCiAgaW50IHJlc3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2Nr
ICgmcy0+bG9ja18pID09IDApCiAgICB7CgogICAgICBpZiAocy0+d2FpdGVyc18gPiAwKQogICAg
ICAgIHJlc3VsdCA9IEFDRV9PUzo6Y29uZF9zaWduYWwgKCZzLT5jb3VudF9ub256ZXJvXyk7CiAg
ICAgIGVsc2UKICAgICAgICByZXN1bHQgPSAwOwoKICAgICAgcy0+Y291bnRfKys7CiAgICAgIEFD
RV9PUzo6bXV0ZXhfdW5sb2NrICgmcy0+bG9ja18pOwogICAgfQogIHJldHVybiByZXN1bHQ7CiMg
Mzc4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki
Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzZW1hX3Bvc3QgKEFDRV9zZW1hX3QgKnMsIHNpemVfdCBy
ZWxlYXNlX2NvdW50KQp7CiMgMzgwNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmkiCiAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZWxlYXNlX2NvdW50
OyBpKyspCiAgICBpZiAoQUNFX09TOjpzZW1hX3Bvc3QgKHMpID09IC0xKQogICAgICByZXR1cm4g
LTE7CgogIHJldHVybiAwOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNlbWFfdHJ5d2FpdCAoQUNF
X3NlbWFfdCAqcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMg
MzgzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki
CiAgaW50IHJlc3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18p
ID09IDApCiAgICB7CiAgICAgIGlmIChzLT5jb3VudF8gPiAwKQogICAgICAgIHsKICAgICAgICAg
IC0tcy0+Y291bnRfOwogICAgICAgICAgcmVzdWx0ID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTY7CgogICAgICBBQ0VfT1M6Om11dGV4
X3VubG9jayAoJnMtPmxvY2tfKTsKICAgIH0KICByZXR1cm4gcmVzdWx0OwojIDM5MjYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUg
aW50CkFDRV9PUzo6c2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKIyAzOTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpbnQgcmVzdWx0ID0gMDsKCiAgeyBzdHJ1Y3QgX3B0
aHJlYWRfY2xlYW51cF9idWZmZXIgX2J1ZmZlcjsgX3B0aHJlYWRfY2xlYW51cF9wdXNoICgmX2J1
ZmZlciwgKGFjZV9tdXRleF9sb2NrX2NsZWFudXBfYWRhcHRlciksICgodm9pZCAqKSAmcy0+bG9j
a18pKTs7OwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcy0+bG9ja18pICE9IDApCiAgICBy
ZXN1bHQgPSAtMTsKICBlbHNlCiAgICB7CgoKICAgICAgcy0+d2FpdGVyc18rKzsKCgogICAgICB3
aGlsZSAocy0+Y291bnRfID09IDApCiAgICAgICAgaWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmcy0+
Y291bnRfbm9uemVyb18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcy0+bG9ja18p
ID09IC0xKQogICAgICAgICAgewogICAgICAgICAgICByZXN1bHQgPSAtMjsKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICB9CgogICAgICAtLXMtPndhaXRlcnNfOwogICAgfQoKICBpZiAocmVz
dWx0ID09IDApCiAgICAtLXMtPmNvdW50XzsKCiAgaWYgKHJlc3VsdCAhPSAtMSkKICAgIEFDRV9P
Uzo6bXV0ZXhfdW5sb2NrICgmcy0+bG9ja18pOwogIF9wdGhyZWFkX2NsZWFudXBfcG9wICgmX2J1
ZmZlciwgKDApKTsgfTsKICByZXR1cm4gcmVzdWx0IDwgMCA/IC0xIDogcmVzdWx0OwojIDQwMzYg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9Cgpp
bmxpbmUgaW50CkFDRV9PUzo6c2VtYV93YWl0IChBQ0Vfc2VtYV90ICpzLCBBQ0VfVGltZV9WYWx1
ZSAmdHYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQwNTIgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCBy
ZXN1bHQgPSAwOwogIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0aW9uICgp
KSk7CgogIHsgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyIF9idWZmZXI7IF9wdGhyZWFk
X2NsZWFudXBfcHVzaCAoJl9idWZmZXIsIChhY2VfbXV0ZXhfbG9ja19jbGVhbnVwX2FkYXB0ZXIp
LCAoKHZvaWQgKikgJnMtPmxvY2tfKSk7OzsKCiAgaWYgKEFDRV9PUzo6bXV0ZXhfbG9jayAoJnMt
PmxvY2tfKSAhPSAwKQogICAgcmVzdWx0ID0gLTE7CiAgZWxzZQogICAgewoKCiAgICAgIHMtPndh
aXRlcnNfKys7CgoKICAgICAgd2hpbGUgKHMtPmNvdW50XyA9PSAwKQogICAgICAgIGlmIChBQ0Vf
T1M6OmNvbmRfdGltZWR3YWl0ICgmcy0+Y291bnRfbm9uemVyb18sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZzLT5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnR2KSA9PSAtMSkKICAgICAgICAgIHsKICAgICAgICAgICAgZXJyb3IgPSAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpOwogICAgICAgICAgICByZXN1bHQgPSAtMjsKICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICB9CgogICAgICAtLXMtPndhaXRlcnNfOwogICAgfQoKICBpZiAocmVz
dWx0ID09IDApCiAgICB7CgoKCiAgICAgIC0tcy0+Y291bnRfOwogICAgfQoKICBpZiAocmVzdWx0
ICE9IC0xKQogICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZzLT5sb2NrXyk7CiAgX3B0aHJlYWRf
Y2xlYW51cF9wb3AgKCZfYnVmZmVyLCAoMCkpOyB9OwogIHJldHVybiByZXN1bHQgPCAwID8gLTEg
OiByZXN1bHQ7CiMgNDIzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpyd190cnlyZGxvY2sgKEFDRV9yd2xv
Y2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQy
NDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgog
IGludCByZXN1bHQgPSAtMTsKCiAgaWYgKEFDRV9PUzo6bXV0ZXhfbG9jayAoJnJ3LT5sb2NrXykg
IT0gLTEpCiAgICB7CiAgICAgIEFDRV9FcnJub19HdWFyZCBlcnJvciAoKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSk7CgogICAgICBpZiAocnctPnJlZl9jb3VudF8gPT0gLTEgfHwgcnctPm51bV93YWl0
aW5nX3dyaXRlcnNfID4gMCkKICAgICAgICB7CiAgICAgICAgICBlcnJvciA9IDE2OwogICAgICAg
ICAgcmVzdWx0ID0gLTE7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
cnctPnJlZl9jb3VudF8rKzsKICAgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgICAgfQoKICAgICAg
QUNFX09TOjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwogICAgfQogIHJldHVybiByZXN1bHQ7
CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJ3X3RyeXdybG9jayAoQUNFX3J3bG9ja190ICpy
dykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNDI5MCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaW50IHJl
c3VsdCA9IC0xOwoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSAhPSAtMSkK
ICAgIHsKICAgICAgQUNFX0Vycm5vX0d1YXJkIGVycm9yICgoKl9fZXJybm9fbG9jYXRpb24gKCkp
KTsKCiAgICAgIGlmIChydy0+cmVmX2NvdW50XyAhPSAwKQogICAgICAgIHsKICAgICAgICAgIGVy
cm9yID0gMTY7CiAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBydy0+cmVmX2NvdW50XyA9IC0xOwogICAgICAgICAgcmVzdWx0ID0g
MDsKICAgICAgICB9CgogICAgICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJnJ3LT5sb2NrXyk7CiAg
ICB9CiAgcmV0dXJuIHJlc3VsdDsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cndfcmRsb2Nr
IChBQ0Vfcndsb2NrX3QgKnJ3KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKIyA0MzMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKICB7IHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciBfYnVmZmVyOyBfcHRocmVh
ZF9jbGVhbnVwX3B1c2ggKCZfYnVmZmVyLCAoYWNlX211dGV4X2xvY2tfY2xlYW51cF9hZGFwdGVy
KSwgKCh2b2lkICopICZydy0+bG9ja18pKTs7OwoKICBpbnQgcmVzdWx0ID0gMDsKICBpZiAoQUNF
X09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSA9PSAtMSkKICAgIHJlc3VsdCA9IC0xOwogIGVs
c2UKICAgIHsKCiAgICAgIHdoaWxlIChydy0+cmVmX2NvdW50XyA8IDAgfHwgcnctPm51bV93YWl0
aW5nX3dyaXRlcnNfID4gMCkKICAgICAgICB7CiAgICAgICAgICBydy0+bnVtX3dhaXRpbmdfcmVh
ZGVyc18rKzsKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfd2FpdCAoJnJ3LT53YWl0aW5nX3Jl
YWRlcnNfLCAmcnctPmxvY2tfKSA9PSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHJl
c3VsdCA9IC0yOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBy
dy0+bnVtX3dhaXRpbmdfcmVhZGVyc18tLTsKICAgICAgICB9CiAgICB9CiAgaWYgKHJlc3VsdCA9
PSAwKQogICAgcnctPnJlZl9jb3VudF8rKzsKICBpZiAocmVzdWx0ICE9IC0xKQogICAgQUNFX09T
OjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9i
dWZmZXIsICgwKSk7IH07CgogIHJldHVybiAwOwoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpy
d193cmxvY2sgKEFDRV9yd2xvY2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwojIDQzODEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIHsgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyIF9idWZmZXI7
IF9wdGhyZWFkX2NsZWFudXBfcHVzaCAoJl9idWZmZXIsIChhY2VfbXV0ZXhfbG9ja19jbGVhbnVw
X2FkYXB0ZXIpLCAoKHZvaWQgKikgJnJ3LT5sb2NrXykpOzs7CgogIGludCByZXN1bHQgPSAwOwoK
ICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmcnctPmxvY2tfKSA9PSAtMSkKICAgIHJlc3VsdCA9
IC0xOwogIGVsc2UKICAgIHsKICAgICAgd2hpbGUgKHJ3LT5yZWZfY291bnRfICE9IDApCiAgICAg
ICAgewogICAgICAgICAgcnctPm51bV93YWl0aW5nX3dyaXRlcnNfKys7CgogICAgICAgICAgaWYg
KEFDRV9PUzo6Y29uZF93YWl0ICgmcnctPndhaXRpbmdfd3JpdGVyc18sICZydy0+bG9ja18pID09
IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVzdWx0ID0gLTI7CiAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBydy0+bnVtX3dhaXRpbmdfd3JpdGVy
c18tLTsKICAgICAgICB9CiAgICB9CiAgaWYgKHJlc3VsdCA9PSAwKQogICAgcnctPnJlZl9jb3Vu
dF8gPSAtMTsKICBpZiAocmVzdWx0ICE9IC0xKQogICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZy
dy0+bG9ja18pOwoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9idWZmZXIsICgwKSk7IH07Cgog
IHJldHVybiAwOwoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpyd191bmxvY2sgKEFDRV9yd2xv
Y2tfdCAqcncpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDQ0MzEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGlm
IChBQ0VfT1M6Om11dGV4X2xvY2sgKCZydy0+bG9ja18pID09IC0xKQogICAgcmV0dXJuIC0xOwoK
ICBpZiAocnctPnJlZl9jb3VudF8gPiAwKQogICAgcnctPnJlZl9jb3VudF8tLTsKICBlbHNlIGlm
IChydy0+cmVmX2NvdW50XyA9PSAtMSkKICAgIHJ3LT5yZWZfY291bnRfID0gMDsKICBlbHNlCiAg
ICByZXR1cm4gLTE7CgoKICBpbnQgcmVzdWx0ID0gMDsKICBBQ0VfRXJybm9fR3VhcmQgZXJyb3Ig
KCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwoKICBpZiAocnctPmltcG9ydGFudF93cml0ZXJfICYm
IHJ3LT5yZWZfY291bnRfID09IDEpCgogICAgewogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNvbmRf
c2lnbmFsICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl8pOwogICAgICBlcnJvciA9ICgq
X19lcnJub19sb2NhdGlvbiAoKSk7CiAgICB9CiAgZWxzZSBpZiAocnctPm51bV93YWl0aW5nX3dy
aXRlcnNfID4gMCAmJiBydy0+cmVmX2NvdW50XyA9PSAwKQoKICAgIHsKICAgICAgcmVzdWx0ID0g
QUNFX09TOjpjb25kX3NpZ25hbCAoJnJ3LT53YWl0aW5nX3dyaXRlcnNfKTsKICAgICAgZXJyb3Ig
PSAoKl9fZXJybm9fbG9jYXRpb24gKCkpOwogICAgfQogIGVsc2UgaWYgKHJ3LT5udW1fd2FpdGlu
Z19yZWFkZXJzXyA+IDAgJiYgcnctPm51bV93YWl0aW5nX3dyaXRlcnNfID09IDApCiAgICB7CiAg
ICAgIHJlc3VsdCA9IEFDRV9PUzo6Y29uZF9icm9hZGNhc3QgKCZydy0+d2FpdGluZ19yZWFkZXJz
Xyk7CiAgICAgIGVycm9yID0gKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKICAgIH0KCiAgQUNFX09T
OjptdXRleF91bmxvY2sgKCZydy0+bG9ja18pOwogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKCgoK
CgoKaW5saW5lIGludApBQ0VfT1M6OnJ3X3RyeXdybG9ja191cGdyYWRlIChBQ0Vfcndsb2NrX3Qg
KnJ3KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoj
IDQ0OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p
IgogIGludCByZXN1bHQgPSAwOwoKCiAgeyBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIg
X2J1ZmZlcjsgX3B0aHJlYWRfY2xlYW51cF9wdXNoICgmX2J1ZmZlciwgKGFjZV9tdXRleF9sb2Nr
X2NsZWFudXBfYWRhcHRlciksICgodm9pZCAqKSAmcnctPmxvY2tfKSk7OzsKCgogIGlmIChBQ0Vf
T1M6Om11dGV4X2xvY2sgKCZydy0+bG9ja18pID09IC0xKQogICAgcmV0dXJuIC0xOwoKICBlbHNl
IGlmIChydy0+aW1wb3J0YW50X3dyaXRlcl8pCgogICAgewogICAgICByZXN1bHQgPSAtMTsKICAg
ICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwogICAgfQogIGVsc2UKICAgIHsKICAgICAg
d2hpbGUgKHJ3LT5yZWZfY291bnRfID4gMSkKICAgICAgICB7CiAgICAgICAgICBydy0+bnVtX3dh
aXRpbmdfd3JpdGVyc18rKzsKICAgICAgICAgIHJ3LT5pbXBvcnRhbnRfd3JpdGVyXyA9IDE7Cgog
ICAgICAgICAgaWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dy
aXRlcl8sICZydy0+bG9ja18pID09IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVz
dWx0ID0gLTE7CgoKICAgICAgICAgICAgfQogICAgICAgICAgcnctPmltcG9ydGFudF93cml0ZXJf
ID0gMDsKICAgICAgICAgIHJ3LT5udW1fd2FpdGluZ193cml0ZXJzXy0tOwogICAgICAgIH0KICAg
ICAgaWYgKHJlc3VsdCA9PSAwKQogICAgICAgIHsKCiAgICAgICAgICBydy0+cmVmX2NvdW50XyA9
IC0xOwoKCiAgICAgICAgfQogICAgfQoKICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJnJ3LT5sb2Nr
Xyk7CgoKICBfcHRocmVhZF9jbGVhbnVwX3BvcCAoJl9idWZmZXIsICgwKSk7IH07CgoKICByZXR1
cm4gcmVzdWx0OwoKCgoKCgp9CiMgNDU3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpyd2xvY2tfZGVzdHJveSAo
QUNFX3J3bG9ja190ICpydykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKIyA0NTkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKICBBQ0VfT1M6Om11dGV4X2Rlc3Ryb3kgKCZydy0+bG9ja18pOwogIEFDRV9PUzo6
Y29uZF9kZXN0cm95ICgmcnctPndhaXRpbmdfcmVhZGVyc18pOwogIEFDRV9PUzo6Y29uZF9kZXN0
cm95ICgmcnctPndhaXRpbmdfaW1wb3J0YW50X3dyaXRlcl8pOwogIHJldHVybiBBQ0VfT1M6OmNv
bmRfZGVzdHJveSAoJnJ3LT53YWl0aW5nX3dyaXRlcnNfKTsKCgoKCgp9CgppbmxpbmUgaW50CkFD
RV9PUzo6ZXZlbnRfaW5pdCAoQUNFX2V2ZW50X3QgKmV2ZW50LAogICAgICAgICAgICAgICAgICAg
IGludCBtYW51YWxfcmVzZXQsCiAgICAgICAgICAgICAgICAgICAgaW50IGluaXRpYWxfc3RhdGUs
CiAgICAgICAgICAgICAgICAgICAgaW50IHR5cGUsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcsCiAgICAgICAgICAgICAg
ICAgICAgaW50IHNhKQp7CiMgNDYzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmc2EgPT0gMCk7CiAgZXZlbnQtPm1h
bnVhbF9yZXNldF8gPSBtYW51YWxfcmVzZXQ7CiAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IGluaXRp
YWxfc3RhdGU7CiAgZXZlbnQtPndhaXRpbmdfdGhyZWFkc18gPSAwOwoKICBpbnQgcmVzdWx0ID0g
QUNFX09TOjpjb25kX2luaXQgKCZldmVudC0+Y29uZGl0aW9uXywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNob3J0PiAodHlwZSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJnKTsKICBpZiAocmVzdWx0ID09IDApCiAgICByZXN1bHQgPSBBQ0VfT1M6Om11dGV4X2lu
aXQgKCZldmVudC0+bG9ja18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChBQ0VfbXV0ZXhhdHRyX3QgKikgYXJnKTsKICByZXR1cm4gcmVzdWx0
OwojIDQ2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgp9CiMgNDY5MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpldmVudF9kZXN0cm95IChBQ0VfZXZlbnRfdCAq
ZXZlbnQpCnsKCgoKICBpbnQgcjEgPSBBQ0VfT1M6Om11dGV4X2Rlc3Ryb3kgKCZldmVudC0+bG9j
a18pOwogIGludCByMiA9IEFDRV9PUzo6Y29uZF9kZXN0cm95ICgmZXZlbnQtPmNvbmRpdGlvbl8p
OwogIHJldHVybiByMSAhPSAwIHx8IHIyICE9IDAgPyAtMSA6IDA7CgoKCgp9CgppbmxpbmUgaW50
CkFDRV9PUzo6ZXZlbnRfd2FpdCAoQUNFX2V2ZW50X3QgKmV2ZW50KQp7CiMgNDcxOSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaW50IHJlc3Vs
dCA9IDA7CiAgaW50IGVycm9yID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xvY2sgKCZldmVu
dC0+bG9ja18pID09IDApCiAgICB7CiAgICAgIGlmIChldmVudC0+aXNfc2lnbmFsZWRfID09IDEp
CgogICAgICAgIHsKICAgICAgICAgIGlmIChldmVudC0+bWFudWFsX3Jlc2V0XyA9PSAwKQoKICAg
ICAgICAgICAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCgog
ICAgICAgIHsKICAgICAgICAgIGV2ZW50LT53YWl0aW5nX3RocmVhZHNfKys7CgogICAgICAgICAg
aWYgKEFDRV9PUzo6Y29uZF93YWl0ICgmZXZlbnQtPmNvbmRpdGlvbl8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZldmVudC0+bG9ja18pICE9IDApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICBlcnJvciA9ICgqX19lcnJub19s
b2NhdGlvbiAoKSk7CgogICAgICAgICAgICB9CgogICAgICAgICAgZXZlbnQtPndhaXRpbmdfdGhy
ZWFkc18tLTsKICAgICAgICB9CgoKICAgICAgQUNFX09TOjptdXRleF91bmxvY2sgKCZldmVudC0+
bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKCiAgICAgICAgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAgIHJlc3VsdCA9IC0xOwogIHJldHVybiBy
ZXN1bHQ7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZXZlbnRfdGltZWR3YWl0IChBQ0VfZXZl
bnRfdCAqZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGlt
ZW91dCkKewojIDQ4MDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PUy5pIgogIGludCByZXN1bHQgPSAwOwogIGludCBlcnJvciA9IDA7CgoKICBpZiAoQUNF
X09TOjptdXRleF9sb2NrICgmZXZlbnQtPmxvY2tfKSA9PSAwKQogICAgewogICAgICBpZiAoZXZl
bnQtPmlzX3NpZ25hbGVkXyA9PSAxKQoKICAgICAgICB7CiAgICAgICAgICBpZiAoZXZlbnQtPm1h
bnVhbF9yZXNldF8gPT0gMCkKCiAgICAgICAgICAgIGV2ZW50LT5pc19zaWduYWxlZF8gPSAwOwog
ICAgICAgIH0KICAgICAgZWxzZQoKICAgICAgICB7CiAgICAgICAgICBldmVudC0+d2FpdGluZ190
aHJlYWRzXysrOwoKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfdGltZWR3YWl0ICgmZXZlbnQt
PmNvbmRpdGlvbl8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50
LT5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0KSAh
PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAgICAg
ICAgZXJyb3IgPSAoKl9fZXJybm9fbG9jYXRpb24gKCkpOwogICAgICAgICAgICB9CgogICAgICAg
ICAgZXZlbnQtPndhaXRpbmdfdGhyZWFkc18tLTsKICAgICAgICB9CgoKICAgICAgQUNFX09TOjpt
dXRleF91bmxvY2sgKCZldmVudC0+bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKCiAg
ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAgIHJl
c3VsdCA9IC0xOwogIHJldHVybiByZXN1bHQ7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmV2
ZW50X3NpZ25hbCAoQUNFX2V2ZW50X3QgKmV2ZW50KQp7CgoKCiAgaW50IHJlc3VsdCA9IDA7CiAg
aW50IGVycm9yID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xvY2sgKCZldmVudC0+bG9ja18p
ID09IDApCiAgICB7CgogICAgICBpZiAoZXZlbnQtPm1hbnVhbF9yZXNldF8gPT0gMSkKICAgICAg
ICB7CgogICAgICAgICAgZXZlbnQtPmlzX3NpZ25hbGVkXyA9IDE7CgogICAgICAgICAgaWYgKEFD
RV9PUzo6Y29uZF9icm9hZGNhc3QgKCZldmVudC0+Y29uZGl0aW9uXykgIT0gMCkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICAgICAgIGVycm9yID0gKCpf
X2Vycm5vX2xvY2F0aW9uICgpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBpZiAoZXZlbnQtPndhaXRpbmdfdGhyZWFkc18gPT0gMCkKCiAg
ICAgICAgICAgIGV2ZW50LT5pc19zaWduYWxlZF8gPSAxOwoKCiAgICAgICAgICBlbHNlIGlmIChB
Q0VfT1M6OmNvbmRfc2lnbmFsICgmZXZlbnQtPmNvbmRpdGlvbl8pICE9IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAgICAgICAgICAgICBlcnJvciA9ICgqX19l
cnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKICAgICAgQUNFX09T
OjptdXRleF91bmxvY2sgKCZldmVudC0+bG9ja18pOwoKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkK
CiAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwogICAgfQogIGVsc2UKICAg
IHJlc3VsdCA9IC0xOwogIHJldHVybiByZXN1bHQ7CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6
ZXZlbnRfcHVsc2UgKEFDRV9ldmVudF90ICpldmVudCkKewoKCgogIGludCByZXN1bHQgPSAwOwog
IGludCBlcnJvciA9IDA7CgoKICBpZiAoQUNFX09TOjptdXRleF9sb2NrICgmZXZlbnQtPmxvY2tf
KSA9PSAwKQogICAgewoKICAgICAgaWYgKGV2ZW50LT5tYW51YWxfcmVzZXRfID09IDEpCiAgICAg
ICAgewoKICAgICAgICAgIGlmIChBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0ICgmZXZlbnQtPmNvbmRp
dGlvbl8pICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICByZXN1bHQgPSAtMTsKICAg
ICAgICAgICAgICBlcnJvciA9ICgqX19lcnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CgogICAgICBlbHNlIGlmIChBQ0VfT1M6OmNvbmRfc2lnbmFsICgmZXZlbnQtPmNv
bmRpdGlvbl8pICE9IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ID0gLTE7CiAgICAgICAg
ICBlcnJvciA9ICgqX19lcnJub19sb2NhdGlvbiAoKSk7CiAgICAgICAgfQoKCiAgICAgIGV2ZW50
LT5pc19zaWduYWxlZF8gPSAwOwoKCiAgICAgIEFDRV9PUzo6bXV0ZXhfdW5sb2NrICgmZXZlbnQt
PmxvY2tfKTsKCiAgICAgIGlmIChyZXN1bHQgPT0gLTEpCgogICAgICAgICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPSBlcnJvcjsKICAgIH0KICBlbHNlCiAgICByZXN1bHQgPSAtMTsKICByZXR1cm4g
cmVzdWx0OwoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmV2ZW50X3Jlc2V0IChBQ0VfZXZlbnRf
dCAqZXZlbnQpCnsKCgoKICBpbnQgcmVzdWx0ID0gMDsKCgogIGlmIChBQ0VfT1M6Om11dGV4X2xv
Y2sgKCZldmVudC0+bG9ja18pID09IDApCiAgICB7CgogICAgICBldmVudC0+aXNfc2lnbmFsZWRf
ID0gMDsKCgogICAgICBBQ0VfT1M6Om11dGV4X3VubG9jayAoJmV2ZW50LT5sb2NrXyk7CiAgICB9
CiAgZWxzZQogICAgcmVzdWx0ID0gLTE7CiAgcmV0dXJuIHJlc3VsdDsKCgoKCn0KIyA1MDI3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5l
CkFDRV9GbG93X1NwZWM6OkFDRV9GbG93X1NwZWMgKHVfbG9uZyB0b2tlbl9yYXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdG9rZW5fYnVja2V0X3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBwZWFrX2JhbmR3aWR0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdV9sb25nIGxhdGVuY3ksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVfbG9uZyBkZWxheV92YXJpYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFDRV9TRVJWSUNFX1RZUEUgc2VydmljZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1X2xvbmcgbWF4X3NkdV9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1X2xvbmcgbWluaW11bV9wb2xpY2VkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCB0dGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSkK
ewojIDUwNTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5pIgogIHRoaXMtPnRva2VuX3JhdGVfID0gdG9rZW5fcmF0ZTsKICB0aGlzLT50b2tlbl9idWNr
ZXRfc2l6ZV8gPSB0b2tlbl9idWNrZXRfc2l6ZTsKICB0aGlzLT5wZWFrX2JhbmR3aWR0aF8gPSBw
ZWFrX2JhbmR3aWR0aDsKICB0aGlzLT5sYXRlbmN5XyA9IGxhdGVuY3k7CiAgdGhpcy0+ZGVsYXlf
dmFyaWF0aW9uXyA9IGRlbGF5X3ZhcmlhdGlvbjsKICB0aGlzLT5zZXJ2aWNlX3R5cGVfID0gc2Vy
dmljZV90eXBlOwogIHRoaXMtPm1heF9zZHVfc2l6ZV8gPSBtYXhfc2R1X3NpemU7CiAgdGhpcy0+
bWluaW11bV9wb2xpY2VkX3NpemVfID0gbWluaW11bV9wb2xpY2VkX3NpemU7CiAgdGhpcy0+dHRs
XyA9IHR0bDsKICB0aGlzLT5wcmlvcml0eV8gPSBwcmlvcml0eTsKCgp9CgppbmxpbmUKQUNFX0Zs
b3dfU3BlYzo6QUNFX0Zsb3dfU3BlYyAodm9pZCkKewojIDUwODggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIHRoaXMtPnRva2VuX3JhdGVfID0g
MDsKICB0aGlzLT50b2tlbl9idWNrZXRfc2l6ZV8gPSAwOwogIHRoaXMtPnBlYWtfYmFuZHdpZHRo
XyA9IDA7CiAgdGhpcy0+bGF0ZW5jeV8gPSAwOwogIHRoaXMtPmRlbGF5X3ZhcmlhdGlvbl8gPSAw
OwogIHRoaXMtPnNlcnZpY2VfdHlwZV8gPSAwOwogIHRoaXMtPm1heF9zZHVfc2l6ZV8gPSAwOwog
IHRoaXMtPm1pbmltdW1fcG9saWNlZF9zaXplXyA9IDA7CiAgdGhpcy0+dHRsXyA9IDA7CiAgdGhp
cy0+cHJpb3JpdHlfID0gMDsKCgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6OnRva2Vu
X3JhdGUgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4gdGhpcy0+dG9rZW5fcmF0ZV87Cgp9Cgpp
bmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjp0b2tlbl9yYXRlICh1X2xvbmcgdHIpCnsKCgoKICB0
aGlzLT50b2tlbl9yYXRlXyA9IHRyOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVjOjp0
b2tlbl9idWNrZXRfc2l6ZSAodm9pZCkgY29uc3QKewoKCgogIHJldHVybiB0aGlzLT50b2tlbl9i
dWNrZXRfc2l6ZV87Cgp9CgppbmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjp0b2tlbl9idWNrZXRf
c2l6ZSAodV9sb25nIHRicykKewoKCgogIHRoaXMtPnRva2VuX2J1Y2tldF9zaXplXyA9IHRiczsK
Cn0KCmlubGluZSB1X2xvbmcKQUNFX0Zsb3dfU3BlYzo6cGVha19iYW5kd2lkdGggKHZvaWQpIGNv
bnN0CnsKCgoKICByZXR1cm4gdGhpcy0+cGVha19iYW5kd2lkdGhfOwoKfQoKaW5saW5lIHZvaWQK
QUNFX0Zsb3dfU3BlYzo6cGVha19iYW5kd2lkdGggKHVfbG9uZyBwYikKewoKCgogIHRoaXMtPnBl
YWtfYmFuZHdpZHRoXyA9IHBiOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVjOjpsYXRl
bmN5ICh2b2lkKSBjb25zdAp7CgoKCiAgcmV0dXJuIHRoaXMtPmxhdGVuY3lfOwoKfQoKaW5saW5l
IHZvaWQKQUNFX0Zsb3dfU3BlYzo6bGF0ZW5jeSAodV9sb25nIGwpCnsKCgoKICB0aGlzLT5sYXRl
bmN5XyA9IGw7Cgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6OmRlbGF5X3ZhcmlhdGlv
biAodm9pZCkgY29uc3QKewoKCgogIHJldHVybiB0aGlzLT5kZWxheV92YXJpYXRpb25fOwoKfQpp
bmxpbmUgdm9pZApBQ0VfRmxvd19TcGVjOjpkZWxheV92YXJpYXRpb24gKHVfbG9uZyBkdikKewoK
CgogIHRoaXMtPmRlbGF5X3ZhcmlhdGlvbl8gPSBkdjsKCn0KCmlubGluZSBBQ0VfU0VSVklDRV9U
WVBFCkFDRV9GbG93X1NwZWM6OnNlcnZpY2VfdHlwZSAodm9pZCkgY29uc3QKewoKCgoKICByZXR1
cm4gdGhpcy0+c2VydmljZV90eXBlXzsKCn0KCmlubGluZSB2b2lkCkFDRV9GbG93X1NwZWM6OnNl
cnZpY2VfdHlwZSAoQUNFX1NFUlZJQ0VfVFlQRSBzdCkKewoKCgoKICB0aGlzLT5zZXJ2aWNlX3R5
cGVfID0gc3Q7Cgp9CgppbmxpbmUgdV9sb25nCkFDRV9GbG93X1NwZWM6Om1heF9zZHVfc2l6ZSAo
dm9pZCkgY29uc3QKewoKCgoKICByZXR1cm4gdGhpcy0+bWF4X3NkdV9zaXplXzsKCn0KCmlubGlu
ZSB2b2lkCkFDRV9GbG93X1NwZWM6Om1heF9zZHVfc2l6ZSAodV9sb25nIG1zcykKewoKCgoKICB0
aGlzLT5tYXhfc2R1X3NpemVfID0gbXNzOwoKfQoKaW5saW5lIHVfbG9uZwpBQ0VfRmxvd19TcGVj
OjptaW5pbXVtX3BvbGljZWRfc2l6ZSAodm9pZCkgY29uc3QKewoKCgoKICByZXR1cm4gdGhpcy0+
bWluaW11bV9wb2xpY2VkX3NpemVfOwoKfQoKaW5saW5lIHZvaWQKQUNFX0Zsb3dfU3BlYzo6bWlu
aW11bV9wb2xpY2VkX3NpemUgKHVfbG9uZyBtcHMpCnsKCgoKCiAgdGhpcy0+bWluaW11bV9wb2xp
Y2VkX3NpemVfID0gbXBzOwoKfQoKaW5saW5lIGludApBQ0VfRmxvd19TcGVjOjp0dGwgKHZvaWQp
IGNvbnN0CnsKCgoKCiAgcmV0dXJuIHRoaXMtPnR0bF87Cgp9CgppbmxpbmUgdm9pZApBQ0VfRmxv
d19TcGVjOjp0dGwgKGludCB0KQp7CgoKCgoKICB0aGlzLT50dGxfID0gdDsKCn0KCmlubGluZSBp
bnQKQUNFX0Zsb3dfU3BlYzo6cHJpb3JpdHkgKHZvaWQpIGNvbnN0CnsKCgoKCiAgcmV0dXJuIHRo
aXMtPnByaW9yaXR5XzsKCn0KCmlubGluZSB2b2lkCkFDRV9GbG93X1NwZWM6OnByaW9yaXR5IChp
bnQgcCkKewoKCgoKCiAgdGhpcy0+cHJpb3JpdHlfID0gcDsKCn0KCmlubGluZSBBQ0VfRmxvd19T
cGVjCkFDRV9Rb1M6OnNlbmRpbmdfZmxvd3NwZWMgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4g
dGhpcy0+c2VuZGluZ19mbG93c3BlY187Cgp9CgppbmxpbmUgdm9pZApBQ0VfUW9TOjpzZW5kaW5n
X2Zsb3dzcGVjIChjb25zdCBBQ0VfRmxvd19TcGVjICZmcykKewoKCgogIHRoaXMtPnNlbmRpbmdf
Zmxvd3NwZWNfID0gZnM7Cgp9CgppbmxpbmUgQUNFX0Zsb3dfU3BlYwpBQ0VfUW9TOjpyZWNlaXZp
bmdfZmxvd3NwZWMgKHZvaWQpIGNvbnN0CnsKCgoKICByZXR1cm4gcmVjZWl2aW5nX2Zsb3dzcGVj
XzsKCn0KCmlubGluZSB2b2lkCkFDRV9Rb1M6OnJlY2VpdmluZ19mbG93c3BlYyAoY29uc3QgQUNF
X0Zsb3dfU3BlYyAmZnMpCnsKCgoKICB0aGlzLT5yZWNlaXZpbmdfZmxvd3NwZWNfID0gZnM7Cgp9
CgppbmxpbmUgaW92ZWMKQUNFX1FvUzo6cHJvdmlkZXJfc3BlY2lmaWMgKHZvaWQpIGNvbnN0CnsK
CgoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiBpb3ZlYyAoKTsg
fSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgdm9pZApBQ0VfUW9TOjpwcm92aWRlcl9zcGVjaWZpYyAo
Y29uc3QgaW92ZWMgJnBzKQp7CgoKCiAgZG8geyB9IHdoaWxlICgmcHMgPT0gMCk7Cgp9Cgppbmxp
bmUKQUNFX1FvU19QYXJhbXM6OkFDRV9Rb1NfUGFyYW1zIChpb3ZlYyAqY2FsbGVyX2RhdGEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92ZWMgKmNhbGxlZV9kYXRhLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9Rb1MgKnNvY2tldF9xb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQUNFX1FvUyAqZ3JvdXBfc29ja2V0X3FvcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZmxhZ3MpCiAgOiBjYWxsZXJfZGF0YV8gKGNh
bGxlcl9kYXRhKSwKICAgIGNhbGxlZV9kYXRhXyAoY2FsbGVlX2RhdGEpLAogICAgc29ja2V0X3Fv
c18gKHNvY2tldF9xb3MpLAogICAgZ3JvdXBfc29ja2V0X3Fvc18gKGdyb3VwX3NvY2tldF9xb3Mp
LAogICAgZmxhZ3NfIChmbGFncykKewp9CgppbmxpbmUgaW92ZWMgKgpBQ0VfUW9TX1BhcmFtczo6
Y2FsbGVyX2RhdGEgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGVyX2RhdGFfOwp9
CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Y2FsbGVyX2RhdGEgKGlvdmVjICpjZCkKewog
IHRoaXMtPmNhbGxlcl9kYXRhXyA9IGNkOwp9CgppbmxpbmUgaW92ZWMgKgpBQ0VfUW9TX1BhcmFt
czo6Y2FsbGVlX2RhdGEgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGVlX2RhdGFf
Owp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Y2FsbGVlX2RhdGEgKGlvdmVjICpjZCkK
ewogIHRoaXMtPmNhbGxlZV9kYXRhXyA9IGNkOwp9CgppbmxpbmUgQUNFX1FvUyAqCkFDRV9Rb1Nf
UGFyYW1zOjpzb2NrZXRfcW9zICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnNvY2tldF9x
b3NfOwp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6c29ja2V0X3FvcyAoQUNFX1FvUyAq
c3EpCnsKICB0aGlzLT5zb2NrZXRfcW9zXyA9IHNxOwp9CgppbmxpbmUgQUNFX1FvUyAqCkFDRV9R
b1NfUGFyYW1zOjpncm91cF9zb2NrZXRfcW9zICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt
Pmdyb3VwX3NvY2tldF9xb3NfOwp9CgppbmxpbmUgdm9pZApBQ0VfUW9TX1BhcmFtczo6Z3JvdXBf
c29ja2V0X3FvcyAoQUNFX1FvUyAqZ3NxKQp7CiAgdGhpcy0+Z3JvdXBfc29ja2V0X3Fvc18gPSBn
c3E7Cn0KCmlubGluZSB1X2xvbmcKQUNFX1FvU19QYXJhbXM6OmZsYWdzICh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIHRoaXMtPmZsYWdzXzsKfQoKaW5saW5lIHZvaWQKQUNFX1FvU19QYXJhbXM6OmZs
YWdzICh1X2xvbmcgZikKewogIHRoaXMtPmZsYWdzXyA9IGY7Cn0KCmlubGluZQpBQ0VfQWNjZXB0
X1FvU19QYXJhbXM6OkFDRV9BY2NlcHRfUW9TX1BhcmFtcyAoQUNFX1FPU19DT05ESVRJT05fRlVO
QyBxb3NfY29uZGl0aW9uX2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdV9sb25nIGNhbGxiYWNrX2RhdGEpCiAgOiBxb3NfY29uZGl0aW9uX2Nh
bGxiYWNrXyAocW9zX2NvbmRpdGlvbl9jYWxsYmFjayksCiAgICBjYWxsYmFja19kYXRhXyAoY2Fs
bGJhY2tfZGF0YSkKewp9CgppbmxpbmUgQUNFX1FPU19DT05ESVRJT05fRlVOQwpBQ0VfQWNjZXB0
X1FvU19QYXJhbXM6OnFvc19jb25kaXRpb25fY2FsbGJhY2sgKHZvaWQpIGNvbnN0CnsKICByZXR1
cm4gdGhpcy0+cW9zX2NvbmRpdGlvbl9jYWxsYmFja187Cn0KCmlubGluZSB2b2lkCkFDRV9BY2Nl
cHRfUW9TX1BhcmFtczo6cW9zX2NvbmRpdGlvbl9jYWxsYmFjayAoQUNFX1FPU19DT05ESVRJT05f
RlVOQyBxY2MpCnsKICB0aGlzLT5xb3NfY29uZGl0aW9uX2NhbGxiYWNrXyA9IHFjYzsKfQoKaW5s
aW5lIHVfbG9uZwpBQ0VfQWNjZXB0X1FvU19QYXJhbXM6OmNhbGxiYWNrX2RhdGEgKHZvaWQpIGNv
bnN0CnsKICByZXR1cm4gdGhpcy0+Y2FsbGJhY2tfZGF0YV87Cn0KCmlubGluZSB2b2lkCkFDRV9B
Y2NlcHRfUW9TX1BhcmFtczo6Y2FsbGJhY2tfZGF0YSAodV9sb25nIGNkKQp7CiAgdGhpcy0+Y2Fs
bGJhY2tfZGF0YV8gPSBjZDsKfQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjphY2NlcHQgKEFD
RV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAog
ICAgICAgICAgICAgICAgaW50ICphZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKIyA1NTMzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBBQ0VfSEFORExFIGFjZV9yZXN1bHQgPSA6OmFjY2VwdCAoKEFDRV9TT0NL
RVQpIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFDRV9TT0NLRVRfTEVOICopIGFkZHJs
ZW4pIDsKICBpZiAoYWNlX3Jlc3VsdCA9PSAtMSAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09
IDExKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDExOwogIHJldHVybiBhY2VfcmVzdWx0
OwoKCgp9CgppbmxpbmUgQUNFX0hBTkRMRQpBQ0VfT1M6OmFjY2VwdCAoQUNFX0hBTkRMRSBoYW5k
bGUsCiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAg
ICBpbnQgKmFkZHJsZW4sCiAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQWNjZXB0X1FvU19QYXJh
bXMgJnFvc19wYXJhbXMpCnsKIyA1NTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUgKCZxb3NfcGFyYW1zID09IDApOwog
IHJldHVybiBBQ0VfT1M6OmFjY2VwdCAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
YWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJsZW4pOwoKfQoKaW5saW5lIGludApB
Q0VfT1M6OmVudW1fcHJvdG9jb2xzIChpbnQgKnByb3RvY29scywKICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX1Byb3RvY29sX0luZm8gKnByb3RvY29sX2J1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgdV9sb25nICpidWZmZXJfbGVuZ3RoKQp7CiMgNTU4MCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmcHJv
dG9jb2xzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJnByb3RvY29sX2J1ZmZlciA9PSAwKTsKICBk
byB7IH0gd2hpbGUgKCZidWZmZXJfbGVuZ3RoID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfSEFO
RExFCkFDRV9PUzo6am9pbl9sZWFmIChBQ0VfSEFORExFIHNvY2tldCwKICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHNvY2thZGRyICpuYW1lLAogICAgICAgICAgICAgICAgICAgaW50IG5hbWVsZW4s
CiAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfUW9TX1BhcmFtcyAmcW9zX3BhcmFtcykKewoj
IDU2MTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p
IgogIGRvIHsgfSB3aGlsZSAoJnNvY2tldCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZuYW1lID09
IDApOwogIGRvIHsgfSB3aGlsZSAoJm5hbWVsZW4gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmcW9z
X3BhcmFtcyA9PSAwKTsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVy
biAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6aW9jdGwgKEFDRV9IQU5E
TEUgc29ja2V0LAogICAgICAgICAgICAgICB1X2xvbmcgaW9fY29udHJvbF9jb2RlLAogICAgICAg
ICAgICAgICB2b2lkICppbl9idWZmZXJfcCwKICAgICAgICAgICAgICAgdV9sb25nIGluX2J1ZmZl
ciwKICAgICAgICAgICAgICAgdm9pZCAqb3V0X2J1ZmZlcl9wLAogICAgICAgICAgICAgICB1X2xv
bmcgb3V0X2J1ZmZlciwKICAgICAgICAgICAgICAgdV9sb25nICpieXRlc19yZXR1cm5lZCwKICAg
ICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAgICAgICAgICAgIEFD
RV9PVkVSTEFQUEVEX0NPTVBMRVRJT05fRlVOQyBmdW5jKQp7CiMgNTY0NiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgm
c29ja2V0ID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmlvX2NvbnRyb2xfY29kZSA9PSAwKTsKICBk
byB7IH0gd2hpbGUgKCZpbl9idWZmZXJfcCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpbl9idWZm
ZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3V0X2J1ZmZlcl9wID09IDApOwogIGRvIHsgfSB3
aGlsZSAoJm91dF9idWZmZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYnl0ZXNfcmV0dXJuZWQg
PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3ZlcmxhcHBlZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUg
KCZmdW5jID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJu
IC0xOyB9IHdoaWxlICgwKTsKCn0KCgoKaW5saW5lIGludApBQ0VfT1M6OmlvY3RsIChBQ0VfSEFO
RExFIHNvY2tldCwKICAgICAgICAgICAgICAgdV9sb25nIGlvX2NvbnRyb2xfY29kZSwKICAgICAg
ICAgICAgICAgQUNFX1FvUyAmYWNlX3FvcywKICAgICAgICAgICAgICAgdV9sb25nICpieXRlc19y
ZXR1cm5lZCwKICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVyX3AsCiAgICAgICAgICAgICAgIHVf
bG9uZyBidWZmZXIsCiAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAog
ICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRF9DT01QTEVUSU9OX0ZVTkMgZnVuYykKewojIDU3
OTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgog
IGRvIHsgfSB3aGlsZSAoJnNvY2tldCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpb19jb250cm9s
X2NvZGUgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYWNlX3FvcyA9PSAwKTsKICBkbyB7IH0gd2hp
bGUgKCZieXRlc19yZXR1cm5lZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXJfcCA9PSAw
KTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXIgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmb3Zlcmxh
cHBlZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmdW5jID09IDApOwogIGRvIHsgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBp
bnQKQUNFX09TOjpiaW5kIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IHNvY2thZGRyICphZGRy
LCBpbnQgYWRkcmxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgog
IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl
dHVybiA6OmJpbmQgKChBQ0VfU09DS0VUKSBoYW5kbGUsIGFkZHIsIChBQ0VfU09DS0VUX0xFTikg
YWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6Y29ubmVjdCAo
QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRy
LAogICAgICAgICAgICAgICAgIGludCBhZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3Vs
dF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y29ubmVjdCAoKEFDRV9TT0NLRVQpIGhhbmRsZSwg
YWRkciwgKEFDRV9TT0NLRVRfTEVOKSBhZGRybGVuKTsgfSB3aGlsZSAoMCk7CgoKCn0KCmlubGlu
ZSBpbnQKQUNFX09TOjpjb25uZWN0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAg
ICBjb25zdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICBpbnQgYWRkcmxlbiwKICAg
ICAgICAgICAgICAgICBjb25zdCBBQ0VfUW9TX1BhcmFtcyAmcW9zX3BhcmFtcykKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDU4NTYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJnFvc19wYXJh
bXMgPT0gMCk7CiAgcmV0dXJuIEFDRV9PUzo6Y29ubmVjdCAoaGFuZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIChzb2NrYWRkciAqKSBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGFkZHJsZW4pOwoKfQoKCmlubGluZSBzdHJ1Y3QgaG9zdGVudCAqCkFDRV9PUzo6Z2V0aG9zdGJ5
bmFtZSAoY29uc3QgY2hhciAqbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwojIDU4NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGRvIHsgc3RydWN0IGhvc3RlbnQgKiBhY2VfcmVzdWx0XyA9IDA7IGFj
ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldGhvc3RieW5hbWUgKG5hbWUpOyB9
IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIHN0cnVjdCBob3N0ZW50ICoKQUNFX09TOjpnZXRob3N0
YnluYW1lMiAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZhbWlseSkKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA1OTAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpZiAoZmFtaWx5ID09IDIpCiAgICByZXR1
cm4gQUNFX09TOjpnZXRob3N0YnluYW1lIChuYW1lKTsKCiAgZG8geyAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gOTUgOyByZXR1cm4gMDsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgc3RydWN0IGhv
c3RlbnQgKgpBQ0VfT1M6OmdldGhvc3RieWFkZHIgKGNvbnN0IGNoYXIgKmFkZHIsIGludCBsZW5n
dGgsIGludCB0eXBlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiMgNTkyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgZG8geyBzdHJ1Y3QgaG9zdGVudCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8g
PSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0aG9zdGJ5YWRkciAoYWRkciwgKEFDRV9TT0NLRVRf
TEVOKSBsZW5ndGgsIHR5cGUpOyB9IHdoaWxlICgwKTsKCgoKCgp9CgoKCgppbmxpbmUgaW50CkFD
RV9PUzo6c2VsZWN0IChpbnQgd2lkdGgsCiAgICAgICAgICAgICAgICBmZF9zZXQgKnJmZHMsIGZk
X3NldCAqd2ZkcywgZmRfc2V0ICplZmRzLAogICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVf
VmFsdWUgKnRpbWVvdXQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
dGltZXZhbCBjb3B5OwogIHRpbWV2YWwgKnRpbWVwOwoKICBpZiAodGltZW91dCAhPSAwKQogICAg
ewogICAgICBjb3B5ID0gKnRpbWVvdXQ7CiAgICAgIHRpbWVwID0gJmNvcHk7CiAgICB9CiAgZWxz
ZQogICAgdGltZXAgPSAwOwoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1
bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAod2lkdGgsIChBQ0VfRkRfU0VUX1RZ
UEUgKikgcmZkcywgKEFDRV9GRF9TRVRfVFlQRSAqKSB3ZmRzLCAoQUNFX0ZEX1NFVF9UWVBFICop
IGVmZHMsIHRpbWVwKTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl
bGVjdCAoaW50IHdpZHRoLAogICAgICAgICAgICAgICAgZmRfc2V0ICpyZmRzLCBmZF9zZXQgKndm
ZHMsIGZkX3NldCAqZWZkcywKICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0
aW1lb3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHRpbWV2YWwg
Y29weSA9IHRpbWVvdXQ7CgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1
bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAod2lkdGgsIChBQ0VfRkRfU0VUX1RZ
UEUgKikgcmZkcywgKEFDRV9GRF9TRVRfVFlQRSAqKSB3ZmRzLCAoQUNFX0ZEX1NFVF9UWVBFICop
IGVmZHMsICZjb3B5KTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpy
ZWN2IChBQ0VfSEFORExFIGhhbmRsZSwgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgZmxhZ3MpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2MDA1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBpbnQgYWNlX3Jlc3VsdF87CiAg
YWNlX3Jlc3VsdF8gPSA6OnJlY3YgKChBQ0VfU09DS0VUKSBoYW5kbGUsIGJ1ZiwgbGVuLCBmbGFn
cyk7CiAgaWYgKGFjZV9yZXN1bHRfID09IC0xICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0g
MTEpCiAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJuIGFjZV9yZXN1bHRf
OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Zmcm9tIChBQ0VfSEFORExFIGhhbmRsZSwKICAg
ICAgICAgICAgICAgICAgY2hhciAqYnVmLAogICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAg
ICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk
ciAqYWRkciwKICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVuKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwojIDYwNTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFj
ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnJlY3Zmcm9tICgoQUNFX1NPQ0tFVCkg
aGFuZGxlLCBidWYsIChBQ0VfU09DS0VUX0xFTikgbGVuLCBmbGFncywgYWRkciwgKEFDRV9TT0NL
RVRfTEVOICopIGFkZHJsZW4pOyB9IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6
OnNlbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBjb25zdCBjaGFyICpidWYsIGludCBsZW4sIGludCBm
bGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYwNzQgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCBhY2VfcmVz
dWx0XzsKCgoKICBhY2VfcmVzdWx0XyA9IDo6c2VuZCAoKEFDRV9TT0NLRVQpIGhhbmRsZSwgYnVm
LCBsZW4sIGZsYWdzKTsKCiAgaWYgKGFjZV9yZXN1bHRfID09IC0xICYmICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPT0gMTEpCiAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJu
IGFjZV9yZXN1bHRfOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnJlY3Zmcm9tIChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAg
ICAgIGludCBidWZmZXJfY291bnQsCiAgICAgICAgICAgICAgICAgIHNpemVfdCAmbnVtYmVyX29m
X2J5dGVzX3JlY3ZkLAogICAgICAgICAgICAgICAgICBpbnQgJmZsYWdzLAogICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICAgIGludCAqYWRkcmxl
biwKICAgICAgICAgICAgICAgICAgQUNFX09WRVJMQVBQRUQgKm92ZXJsYXBwZWQsCiAgICAgICAg
ICAgICAgICAgIEFDRV9PVkVSTEFQUEVEX0NPTVBMRVRJT05fRlVOQyBmdW5jKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYxMTUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9
PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZidWZmZXJzID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmJ1
ZmZlcl9jb3VudCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZudW1iZXJfb2ZfYnl0ZXNfcmVjdmQg
PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYWRk
ciA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZhZGRybGVuID09IDApOwogIGRvIHsgfSB3aGlsZSAo
Jm92ZXJsYXBwZWQgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZnVuYyA9PSAwKTsKICBkbyB7ICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9Cgpp
bmxpbmUgaW50CkFDRV9PUzo6c2VuZHRvIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgIGludCBsZW4sCiAgICAgICAgICAg
ICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsCiAgICAgICAgICAgICAgICBpbnQgYWRkcmxlbikKewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiMgNjE1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8g
PSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2VuZHRvICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBidWYs
IGxlbiwgZmxhZ3MsIGNvbnN0X2Nhc3Q8c3RydWN0IHNvY2thZGRyICo+IChhZGRyKSwgYWRkcmxl
bik7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2VuZHRvIChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgIGNvbnN0IGlvdmVjICpidWZmZXJzLAogICAgICAg
ICAgICAgICAgaW50IGJ1ZmZlcl9jb3VudCwKICAgICAgICAgICAgICAgIHNpemVfdCAmbnVtYmVy
X29mX2J5dGVzX3NlbnQsCiAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAg
ICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCiAgICAgICAgICAgICAgICBpbnQgYWRkcmxl
biwKICAgICAgICAgICAgICAgIEFDRV9PVkVSTEFQUEVEICpvdmVybGFwcGVkLAogICAgICAgICAg
ICAgICAgQUNFX09WRVJMQVBQRURfQ09NUExFVElPTl9GVU5DIGZ1bmMpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwojIDYxODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgfSB3aGlsZSAoJm92ZXJsYXBwZWQgPT0g
MCk7CiAgZG8geyB9IHdoaWxlICgmZnVuYyA9PSAwKTsKCiAgbnVtYmVyX29mX2J5dGVzX3NlbnQg
PSAwOwoKICBpbnQgcmVzdWx0ID0gMDsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZmZXJfY291
bnQ7IGkrKykKICAgIHsKICAgICAgIHJlc3VsdCA9IEFDRV9PUzo6c2VuZHRvIChoYW5kbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyICo+IChi
dWZmZXJzW2ldLmlvdl9iYXNlKSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVm
ZmVyc1tpXS5pb3ZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYWRkcmxlbik7CiAgICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICBi
cmVhazsKICAgICAgIG51bWJlcl9vZl9ieXRlc19zZW50ICs9IHJlc3VsdDsKICAgIH0KCiAgcmV0
dXJuIHJlc3VsdDsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpnZXRwZWVybmFtZSAoQUNFX0hBTkRM
RSBoYW5kbGUsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50
ICphZGRybGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6OmdldHBlZXJuYW1lICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBhZGRyLCAoQUNFX1NP
Q0tFVF9MRU4gKikgYWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIHN0cnVjdCBw
cm90b2VudCAqCkFDRV9PUzo6Z2V0cHJvdG9ieW5hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCnsKIyA2
MjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK
ICBkbyB7IHN0cnVjdCBwcm90b2VudCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBh
Y2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0cHJvdG9ieW5hbWUgKG5hbWUpOyB9IHdoaWxlICgwKTsK
CgoKfQoKaW5saW5lIHN0cnVjdCBwcm90b2VudCAqCkFDRV9PUzo6Z2V0cHJvdG9ieW5hbWVfciAo
Y29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvdG9l
bnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfUFJPVE9FTlRfREFUQSBi
dWZmZXIpCnsKIyA2MjYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBpZiAoOjpnZXRwcm90b2J5bmFtZV9yIChuYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChBQ0VfUFJPVE9FTlRfREFUQSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCkgPT0gMCkKICAgIHJldHVybiByZXN1bHQ7CiAg
ZWxzZQogICAgcmV0dXJuIDA7CiMgNjI5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBzdHJ1Y3QgcHJvdG9lbnQgKgpBQ0VfT1M6
OmdldHByb3RvYnludW1iZXIgKGludCBwcm90bykKewoKCgoKICBkbyB7IHN0cnVjdCBwcm90b2Vu
dCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6
Z2V0cHJvdG9ieW51bWJlciAocHJvdG8pOyB9IHdoaWxlICgwKTsKCgp9CgppbmxpbmUgc3RydWN0
IHByb3RvZW50ICoKQUNFX09TOjpnZXRwcm90b2J5bnVtYmVyX3IgKGludCBwcm90bywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm90b2VudCAqcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX1BST1RPRU5UX0RBVEEgYnVmZmVyKQp7CiMgNjMyOSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgaWYgKDo6
Z2V0cHJvdG9ieW51bWJlcl9yIChwcm90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVvZiAoQUNFX1BST1RPRU5UX0RBVEEpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnJlc3VsdCkgPT0gMCkKICAgIHJldHVybiByZXN1bHQ7CiAgZWxzZQogICAg
cmV0dXJuIDA7CiMgNjM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCn0KCmlubGluZSBzdHJ1Y3Qgc2VydmVudCAqCkFDRV9PUzo6Z2V0c2VydmJ5
bmFtZSAoY29uc3QgY2hhciAqc3ZjLCBjb25zdCBjaGFyICpwcm90bykKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDYzNzEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgc3RydWN0IHNlcnZlbnQgKiBh
Y2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHNl
cnZieW5hbWUgKHN2YywgcHJvdG8pOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQKQUNF
X09TOjpnZXRzb2NrbmFtZSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVu
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsg
aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6
OmdldHNvY2tuYW1lICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBhZGRyLCAoQUNFX1NPQ0tFVF9MRU4g
KikgYWRkcmxlbik7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmdldHNv
Y2tvcHQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwK
ICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKICAgICAgICAgICAgICAgICAgICBjaGFy
ICpvcHR2YWwsCiAgICAgICAgICAgICAgICAgICAgaW50ICpvcHRsZW4pCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBh
Y2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRzb2Nrb3B0ICgoQUNFX1NPQ0tF
VCkgaGFuZGxlLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCAoQUNFX1NPQ0tFVF9MRU4gKikgb3B0
bGVuKTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpsaXN0ZW4gKEFD
RV9IQU5ETEUgaGFuZGxlLCBpbnQgYmFja2xvZykKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2Vf
cmVzdWx0XzsgcmV0dXJuIDo6bGlzdGVuICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBiYWNrbG9nKTsg
fSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzZXRzb2Nrb3B0IChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCiAgICAgICAgICAgICAgICAg
ICAgaW50IG9wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3B0dmFsLAog
ICAgICAgICAgICAgICAgICAgIGludCBvcHRsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9
IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZXRzb2Nrb3B0ICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBs
ZXZlbCwgb3B0bmFtZSwgKEFDRV9TT0NLT1BUX1RZUEUxKSBvcHR2YWwsIG9wdGxlbik7IH0gd2hp
bGUgKDApOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2h1dGRvd24gKEFDRV9IQU5ETEUg
aGFuZGxlLCBpbnQgaG93KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl
dHVybiA6OnNodXRkb3duICgoQUNFX1NPQ0tFVCkgaGFuZGxlLCBob3cpOyB9IHdoaWxlICgwKTsK
fQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjpzb2NrZXQgKGludCBkb21haW4sCiAgICAgICAg
ICAgICAgICBpbnQgdHlwZSwKICAgICAgICAgICAgICAgIGludCBwcm90bykKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRfID0g
LTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNvY2tldCAoZG9tYWluLCB0
eXBlLCBwcm90byk7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09T
Ojpzb2NrZXQgKGludCBkb21haW4sCiAgICAgICAgICAgICAgICBpbnQgdHlwZSwKICAgICAgICAg
ICAgICAgIGludCBwcm90bywKICAgICAgICAgICAgICAgIEFDRV9Qcm90b2NvbF9JbmZvICpwcm90
b2NvbGluZm8sCiAgICAgICAgICAgICAgICBBQ0VfU09DS19HUk9VUCBnLAogICAgICAgICAgICAg
ICAgdV9sb25nIGZsYWdzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2
NDc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK
ICBkbyB7IH0gd2hpbGUgKCZwcm90b2NvbGluZm8gPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZyA9
PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFncyA9PSAwKTsKCiAgcmV0dXJuIEFDRV9PUzo6c29j
a2V0IChkb21haW4sCiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgcHJvdG8pOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmF0b2kgKGNvbnN0IGNo
YXIgKnMpCnsKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjphdG9pIChzKTsgfSB3aGlsZSAoMCk7Cgp9CiMgNjUxMCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBk
b3VibGUKQUNFX09TOjpmbG9vciAoZG91YmxlIHgpCnsKCiAgcmV0dXJuIGRvdWJsZSAoc3RhdGlj
X2Nhc3Q8bG9uZz4gKHgpKTsKfQoKaW5saW5lIGRvdWJsZQpBQ0VfT1M6OmNlaWwgKGRvdWJsZSB4
KQp7CgogIGRvdWJsZSBmbG9vciA9IEFDRV9PUzo6Zmxvb3IgKHgpOwogIGlmIChmbG9vciA9PSB4
KQogICAgcmV0dXJuIGZsb29yOwogIGVsc2UKICAgIHJldHVybiBmbG9vciArIDE7Cn0KCmlubGlu
ZSBpbnQKQUNFX09TOjpyZWN2bXNnIChBQ0VfSEFORExFIGhhbmRsZSwgc3RydWN0IG1zZ2hkciAq
bXNnLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2
NTU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK
ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy
ZXR1cm4gOjpyZWN2bXNnIChoYW5kbGUsIG1zZywgZmxhZ3MpOyB9IHdoaWxlICgwKTsKIyA2NTYz
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK
aW5saW5lIGludApBQ0VfT1M6OnNlbmRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAg
ICAgICAgIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZywKICAgICAgICAgICAgICAgICBpbnQgZmxh
Z3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2NTk0ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBh
Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZW5k
bXNnIChoYW5kbGUsIChBQ0VfU0VORE1TR19UWVBFICopIG1zZywgZmxhZ3MpOyB9IHdoaWxlICgw
KTsKIyA2NjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OmZjbG9zZSAoRklMRSAqZnApCnsKCgoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7
IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZjbG9zZSAoZnApOyB9IHdoaWxl
ICgwKTsKCgoKCgp9CgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpmZ2V0cyAoQUNFX1RDSEFS
ICpidWYsIGludCBzaXplLCBGSUxFICpmcCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKIyA2NjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKICBkbyB7IGNoYXIgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6OmZnZXRzIChidWYsIHNpemUsIGZwKTsgfSB3aGlsZSAoMCk7Cgp9
CgoKCgppbmxpbmUgRklMRSAqCkFDRV9PUzo6Zm9wZW4gKGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5h
bWUsIGNvbnN0IEFDRV9UQ0hBUiAqbW9kZSkKewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICBkbyB7IEZJTEUgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6OmZvcGVuIChmaWxlbmFtZSwgbW9kZSk7IH0gd2hpbGUgKDApOwoK
fQoKCmlubGluZSBpbnQKQUNFX09TOjpmZmx1c2ggKEZJTEUgKmZwKQp7CgoKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf
cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmZmx1c2ggKGZwKTsgfSB3aGlsZSAoMCk7
CgoKCgoKfQoKaW5saW5lIHNpemVfdApBQ0VfT1M6OmZyZWFkICh2b2lkICpwdHIsIHNpemVfdCBz
aXplLCBzaXplX3QgbmVsZW1zLCBGSUxFICpmcCkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKIyA2Njk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6OmZyZWFkIChwdHIsIHNpemUsIG5lbGVtcywgZnApOyB9IHdoaWxl
ICgwKTsKCn0KCmlubGluZSBzaXplX3QKQUNFX09TOjpmd3JpdGUgKGNvbnN0IHZvaWQgKnB0ciwg
c2l6ZV90IHNpemUsIHNpemVfdCBuaXRlbXMsIEZJTEUgKmZwKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKIyA2NzI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1
bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZ3cml0ZSAocHRyLCBzaXplLCBuaXRlbXMsIGZw
KTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dHJ1bmNhdGUgKGNvbnN0IEFD
RV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCkKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2NzYwICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0
XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp0cnVuY2F0ZSAoZmls
ZW5hbWUsIG9mZnNldCk7IH0gd2hpbGUgKDApOwoKCgoKCn0KCgoKaW5saW5lIHN0cnVjdCBwYXNz
d2QgKgpBQ0VfT1M6OmdldHB3bmFtIChjb25zdCBjaGFyICpuYW1lKQp7CgoKCgogIHJldHVybiA6
OmdldHB3bmFtIChuYW1lKTsKIyA2Nzg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIHZvaWQKQUNFX09TOjpzZXRwd2VudCAodm9p
ZCkKewoKCiAgOjpzZXRwd2VudCAoKTsKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6ZW5kcHdl
bnQgKHZvaWQpCnsKCgogIDo6ZW5kcHdlbnQgKCk7CgoKCgp9CgppbmxpbmUgc3RydWN0IHBhc3N3
ZCAqCkFDRV9PUzo6Z2V0cHdlbnQgKHZvaWQpCnsKCgogIHJldHVybiA6OmdldHB3ZW50ICgpOwoK
CgoKCgp9CgppbmxpbmUgc3RydWN0IHBhc3N3ZCAqCkFDRV9PUzo6Z2V0cHduYW1fciAoY29uc3Qg
Y2hhciAqbmFtZSwgc3RydWN0IHBhc3N3ZCAqcHdlbnQsCiAgICAgICAgICAgICAgICAgICAgY2hh
ciAqYnVmZmVyLCBpbnQgYnVmbGVuKQp7CiMgNjg1MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgc3RydWN0IHBhc3N3ZCAqcmVzdWx0OwogIGlu
dCBzdGF0dXM7CiMgNjg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCiAgc3RhdHVzID0gOjpnZXRwd25hbV9yIChuYW1lLCBwd2VudCwgYnVmZmVy
LCBidWZsZW4sICZyZXN1bHQpOwoKICBpZiAoc3RhdHVzICE9IDApCiAgICB7CiAgICAgICgqX19l
cnJub19sb2NhdGlvbiAoKSkgPSBzdGF0dXM7CiAgICAgIHJlc3VsdCA9IDA7CiAgICB9CgogIHJl
dHVybiByZXN1bHQ7CiMgNjkwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL09TLmkiCn0KCgoKCmlubGluZSBzdHJ1Y3QgaG9zdGVudCAqCkFDRV9PUzo6Z2V0
aG9zdGJ5YWRkcl9yIChjb25zdCBjaGFyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgaG9zdGVudCAqcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0hPU1RFTlRfREFUQSBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmhf
ZXJybm9wKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2
OTM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIK
ICA6Om1lbXNldCAoYnVmZmVyLCAwLCBzaXplb2YgKEFDRV9IT1NURU5UX0RBVEEpKTsKCiAgaWYg
KDo6Z2V0aG9zdGJ5YWRkcl9yICgoY2hhciAqKSBhZGRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQUNFX0hPU1RFTlRfREFUQSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgaF9lcnJub3Ap
ID09IDApCiAgICByZXR1cm4gcmVzdWx0OwogIGVsc2UKICAgIHJldHVybiAoc3RydWN0IGhvc3Rl
bnQgKikgMDsKIyA2OTg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKfQoKaW5saW5lIHN0cnVjdCBob3N0ZW50ICoKQUNFX09TOjpnZXRob3N0Ynlu
YW1lX3IgKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ZW50
ICpyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSE9TVEVOVF9EQVRBIGJ1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaF9lcnJub3ApCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDcwMjEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIDo6bWVtc2V0IChidWZmZXIsIDAs
IHNpemVvZiAoQUNFX0hPU1RFTlRfREFUQSkpOwoKICBpZiAoOjpnZXRob3N0YnluYW1lX3IgKG5h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKEFDRV9IT1NURU5U
X0RBVEEpLAogICAgICAgICAgICAgICAgICAgICAgICAgJnJlc3VsdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGhfZXJybm9wKSA9PSAwKQogICAgcmV0dXJuIHJlc3VsdDsKICBlbHNlCiAgICBy
ZXR1cm4gKHN0cnVjdCBob3N0ZW50ICopIDA7CiMgNzA2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KIyA3MDc5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIHN0cnVjdCBzZXJ2ZW50
ICoKQUNFX09TOjpnZXRzZXJ2YnluYW1lX3IgKGNvbnN0IGNoYXIgKnN2YywKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByb3RvLAogICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNlcnZlbnQgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TRVJW
RU5UX0RBVEEgYnVmKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKIyA3MTAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKICA6Om1lbXNldCAoYnVmLCAwLCBzaXplb2YgKEFDRV9TRVJWRU5UX0RBVEEpKTsKCiAg
aWYgKDo6Z2V0c2VydmJ5bmFtZV9yIChzdmMsCiAgICAgICAgICAgICAgICAgICAgICAgICBwcm90
bywKICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAoQUNFX1NFUlZFTlRfREFU
QSksCiAgICAgICAgICAgICAgICAgICAgICAgICAmcmVzdWx0KSA9PSAwKQogICAgcmV0dXJuIHJl
c3VsdDsKICBlbHNlCiAgICByZXR1cm4gKHN0cnVjdCBzZXJ2ZW50ICopIDA7CiMgNzE0MSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu
ZSBsb25nCkFDRV9PUzo6aW5ldF9hZGRyIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA3MTgzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gOjppbmV0X2FkZHIgKG5hbWUp
OwoKfQoKCgppbmxpbmUgY2hhciAqCkFDRV9PUzo6aW5ldF9udG9hIChjb25zdCBzdHJ1Y3QgaW5f
YWRkciBhZGRyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBkbyB7
IGNoYXIgKiBhY2VfcmVzdWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVy
biA6OmluZXRfbnRvYSAoYWRkcik7IH0gd2hpbGUgKDApOwoKCn0KCgppbmxpbmUgaW50CkFDRV9P
Uzo6aW5ldF9wdG9uIChpbnQgZmFtaWx5LCBjb25zdCBjaGFyICpzdHJwdHIsIHZvaWQgKmFkZHJw
dHIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBpZiAoZmFt
aWx5ID09IDIpCiAgICB7CiAgICAgIHN0cnVjdCBpbl9hZGRyIGluX3ZhbDsKCiAgICAgIGlmIChB
Q0VfT1M6OmluZXRfYXRvbiAoc3RycHRyLCAmaW5fdmFsKSkKICAgICAgICB7CiAgICAgICAgICBB
Q0VfT1M6Om1lbWNweSAoYWRkcnB0ciwgJmluX3ZhbCwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkcikp
OwogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIDA7CiAgICB9Cgog
IGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgw
KTsKCn0KCmlubGluZSBjb25zdCBjaGFyICoKQUNFX09TOjppbmV0X250b3AgKGludCBmYW1pbHks
IGNvbnN0IHZvaWQgKmFkZHJwdHIsIGNoYXIgKnN0cnB0ciwgc2l6ZV90IGxlbikKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGNvbnN0IHVfY2hhciAqcCA9CiAg
ICByZWludGVycHJldF9jYXN0PGNvbnN0IHVfY2hhciAqPiAoYWRkcnB0cik7CgogIGlmIChmYW1p
bHkgPT0gMikKICAgIHsKICAgICAgY2hhciB0ZW1wWzE2XTsKCgoKCiAgICAgIEFDRV9PUzo6c3By
aW50ZiAodGVtcCwKICAgICAgICAgICAgICAgICAgICAgICAiJWQuJWQuJWQuJWQiLAogICAgICAg
ICAgICAgICAgICAgICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOwoKICAgICAgaWYgKEFDRV9P
Uzo6c3RybGVuICh0ZW1wKSA+PSBsZW4pCiAgICAgICAgewogICAgICAgICAgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9IDI4OwogICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgQUNF
X09TOjpzdHJjcHkgKHN0cnB0ciwgdGVtcCk7CiAgICAgIHJldHVybiBzdHJwdHI7CiAgICB9Cgog
IGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hpbGUgKDAp
OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNldF9lcnJub190b19sYXN0X2Vycm9yICh2b2lkKQp7
CiMgNzI3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgcmV0dXJuICgqX19lcnJub19sb2NhdGlvbiAoKSk7Cgp9CgppbmxpbmUgaW50CkFDRV9P
Uzo6c2V0X2Vycm5vX3RvX3dzYV9sYXN0X2Vycm9yICh2b2lkKQp7CiMgNzI5NCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuICgqX19l
cnJub19sb2NhdGlvbiAoKSk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bGFzdF9lcnJvciAodm9p
ZCkKewoKCgoKCgoKICByZXR1cm4gKCpfX2Vycm5vX2xvY2F0aW9uICgpKTsKCn0KCmlubGluZSB2
b2lkCkFDRV9PUzo6bGFzdF9lcnJvciAoaW50IGVycm9yKQp7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGVycm9yOwoK
fQoKaW5saW5lIHZvaWQKQUNFX09TOjpwZXJyb3IgKGNvbnN0IEFDRV9UQ0hBUiAqcykKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzMzNSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgOjpwZXJyb3IgKHMpOwoKfQoKCgoK
aW5saW5lIGludApBQ0VfT1M6OnB1dHMgKGNvbnN0IEFDRV9UQ0hBUiAqcykKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6cHV0cyAocyk7IH0gd2hpbGUgKDAp
OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZwdXRzIChjb25zdCBBQ0VfVENIQVIgKnMsIEZJTEUg
KnN0cmVhbSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgogIGRvIHsg
aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6
OmZwdXRzIChzLCBzdHJlYW0pOyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX1NpZ25hbEhh
bmRsZXIKQUNFX09TOjpzaWduYWwgKGludCBzaWdudW0sIEFDRV9TaWduYWxIYW5kbGVyIGZ1bmMp
CnsKICBpZiAoc2lnbnVtID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlCiMgNzM5MiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICByZXR1cm4g
OjpzaWduYWwgKHNpZ251bSwgZnVuYyk7CiMgNzQwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpzeXN0ZW0g
KGNvbnN0IEFDRV9UQ0hBUiAqcykKewoKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0x
OyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzeXN0ZW0gKHMpOyB9IHdoaWxl
ICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjp0aHJfY29udGludWUgKEFDRV9odGhyZWFkX3Qg
dGFyZ2V0X3RocmVhZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiMgNzQzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgZG8geyB9IHdoaWxlICgmdGFyZ2V0X3RocmVhZCA9PSAwKTsKICBkbyB7ICgqX19lcnJu
b19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7CiMgNzQ0OSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu
ZSBpbnQKQUNFX09TOjp0aHJfY21wIChBQ0VfaHRocmVhZF90IHQxLCBBQ0VfaHRocmVhZF90IHQy
KQp7CgoKCgoKCgogIHJldHVybiA6OnB0aHJlYWRfZXF1YWwgKHQxLCB0Mik7CgoKCgoKCn0KCmlu
bGluZSBpbnQKQUNFX09TOjp0aHJfZ2V0Y29uY3VycmVuY3kgKHZvaWQpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7ICgqX19lcnJub19s
b2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7CgoKCgoKCn0KCmlubGlu
ZSBpbnQKQUNFX09TOjp0aHJfZ2V0cHJpbyAoQUNFX2h0aHJlYWRfdCB0aHJfaWQsIGludCAmcHJp
bykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA3NTI2ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBzdHJ1Y3Qg
c2NoZWRfcGFyYW0gcGFyYW07CiAgaW50IHJlc3VsdDsKICBpbnQgcG9saWN5ID0gMDsKCiAgZG8g
eyByZXN1bHQgPSAoaW50KSAoKHJlc3VsdCA9ICg6OnB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAodGhy
X2lkLCAmcG9saWN5LCAmcGFyYW0pKSkgIT0gMCA/ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
cmVzdWx0LCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CgoKICBwcmlvID0gcGFyYW0uX19zY2hlZF9w
cmlvcml0eTsKICByZXR1cm4gcmVzdWx0OwojIDc1NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CiMgNzY5OSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjp0aHJf
Z2V0c3BlY2lmaWMgKEFDRV90aHJlYWRfa2V5X3Qga2V5LCB2b2lkICoqZGF0YSkKewojIDc3Mjgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAg
ICAqZGF0YSA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7CiAgICAgIHJldHVybiAwOwojIDc3
NzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9
CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX2pvaW4gKEFDRV9odGhyZWFkX3QgdGhyX2hhbmRsZSwK
ICAgICAgICAgICAgICAgICAgdm9pZCAqKnN0YXR1cykKewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKIyA3ODE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0
XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0XyA9ICg6OnB0aHJlYWRfam9pbiAo
dGhyX2hhbmRsZSwgc3RhdHVzKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IGFj
ZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgNzg0OSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09T
Ojp0aHJfam9pbiAoQUNFX3RocmVhZF90IHdhaXRlcl9pZCwKICAgICAgICAgICAgICAgICAgQUNF
X3RocmVhZF90ICp0aHJfaWQsCiAgICAgICAgICAgICAgICAgIHZvaWQgKipzdGF0dXMpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzg2NyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB9IHdoaWxlICgmdGhy
X2lkID09IDApOwojIDc4NzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g
YWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRocmVhZF9qb2luICh3YWl0
ZXJfaWQsIHN0YXR1cykpKSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVz
dWx0XywgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDc5MDAgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhy
X3NldGNhbmNlbHN0YXRlIChpbnQgbmV3X3N0YXRlLCBpbnQgKm9sZF9zdGF0ZSkKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzkyMyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl
X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jl
c3VsdF8gPSAoOjpwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChuZXdfc3RhdGUsIG9sZF9zdGF0ZSkp
KSAhPSAwID8gKCgqX19lcnJub19sb2NhdGlvbiAoKSkgPSBhY2VfcmVzdWx0XywgLTEpIDogMCk7
IH0gd2hpbGUgKDApOwojIDc5NDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX3NldGNhbmNlbHR5cGUg
KGludCBuZXdfdHlwZSwgaW50ICpvbGRfdHlwZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKIyA3OTY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf
cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0XyA9ICg6OnB0aHJlYWRf
c2V0Y2FuY2VsdHlwZSAobmV3X3R5cGUsIG9sZF90eXBlKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgNzk4NCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlu
bGluZSBpbnQKQUNFX09TOjp0aHJfY2FuY2VsIChBQ0VfdGhyZWFkX3QgdGhyX2lkKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgNzk5OCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3Vs
dF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jlc3VsdF8g
PSAoOjpwdGhyZWFkX2NhbmNlbCAodGhyX2lkKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgODAxMCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBp
bnQKQUNFX09TOjpzaWd3YWl0IChzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGludCBsb2NhbF9zaWc7CiAgaWYgKHNpZyA9PSAw
KQogICAgc2lnID0gJmxvY2FsX3NpZzsKIyA4MDU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gOjpzaWd3YWl0IChzZXQsIHNpZyk7CiAgICAgICAgcmV0dXJuICgqX19lcnJub19sb2NhdGlv
biAoKSkgPT0gMCA/ICpzaWcgOiAtMTsKIyA4MDczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNpZ3RpbWVk
d2FpdCAoY29uc3Qgc2lnc2V0X3QgKnNldCwKICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9f
dCAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1l
b3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MDk0ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICB0aW1l
c3BlY190IHRzOwogIHRpbWVzcGVjX3QgKnRzcDsKCiAgaWYgKHRpbWVvdXQgIT0gMCkKICAgIHsK
ICAgICAgdHMgPSAqdGltZW91dDsKICAgICAgdHNwID0gJnRzOwogICAgfQogIGVsc2UKICAgIHRz
cCA9IDA7CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl
c3VsdF87IHJldHVybiA6OnNpZ3RpbWVkd2FpdCAoc2V0LCBpbmZvLCB0c3ApOyB9IHdoaWxlICgw
KTsKCgoKCgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6dGhyX3Rlc3RjYW5jZWwgKHZvaWQpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICA6OnB0aHJl
YWRfdGVzdGNhbmNlbCAoKTsKIyA4MTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocl9zaWdzZXRtYXNr
IChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWdzZXRfdCAqbnNtLAog
ICAgICAgICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqb3NtKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDgxNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7
IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiAoKGFjZV9yZXN1bHRfID0gKDo6cHRo
cmVhZF9zaWdtYXNrIChob3csIG5zbSwgb3NtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IGFjZV9yZXN1bHRfLCAtMSkgOiAwKTsgfSB3aGlsZSAoMCk7CiMgODIyMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBp
bnQKQUNFX09TOjp0aHJfa2lsbCAoQUNFX3RocmVhZF90IHRocl9pZCwgaW50IHNpZ251bSkKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4MjM3ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVz
dWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKChhY2VfcmVzdWx0
XyA9ICg6OnB0aHJlYWRfa2lsbCAodGhyX2lkLCBzaWdudW0pKSkgIT0gMCA/ICgoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyA4MjY5
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoK
aW5saW5lIHNpemVfdApBQ0VfT1M6OnRocl9taW5fc3RhY2sgKHZvaWQpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA4Mjg5ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gKHNpemVfdCkgQUNFX09T
OjpzeXNjb25mIChfU0NfVEhSRUFEX1NUQUNLX01JTik7CiMgODMxOCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09T
Ojp0aHJfc2V0Y29uY3VycmVuY3kgKGludCBoaW50KQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKICBkbyB7IH0gd2hpbGUgKCZoaW50ID09IDAp
OwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxl
ICgwKTsKIyA4MzQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnRocl9zZXRwcmlvIChBQ0VfaHRocmVhZF90
IHRocl9pZCwgaW50IHByaW8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiMgODM4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCiAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOwogIGludCBwb2xpY3kgPSAwOwogIGlu
dCByZXN1bHQ7CgogIGRvIHsgcmVzdWx0ID0gKGludCkgKChyZXN1bHQgPSAoOjpwdGhyZWFkX2dl
dHNjaGVkcGFyYW0gKHRocl9pZCwgJnBvbGljeSwgJnBhcmFtKSkpICE9IDAgPyAoKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9IHJlc3VsdCwgLTEpIDogMCk7IH0gd2hpbGUgKDApOwoKCiAgaWYgKHJl
c3VsdCA9PSAtMSkKICAgIHJldHVybiByZXN1bHQ7CiAgcGFyYW0uX19zY2hlZF9wcmlvcml0eSA9
IHByaW87CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz
dWx0XzsgcmV0dXJuICgocmVzdWx0ID0gKDo6cHRocmVhZF9zZXRzY2hlZHBhcmFtICh0aHJfaWQs
IHBvbGljeSwgJnBhcmFtKSkpICE9IDAgPyAoKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IHJlc3Vs
dCwgLTEpIDogMCk7IH0gd2hpbGUgKDApOwojIDg0MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6dGhyX3N1
c3BlbmQgKEFDRV9odGhyZWFkX3QgdGFyZ2V0X3RocmVhZCkKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKIyA4NDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUgKCZ0YXJnZXRfdGhyZWFkID09
IDApOwogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdo
aWxlICgwKTsKIyA4NDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKfQoKaW5saW5lIHZvaWQKQUNFX09TOjp0aHJfeWllbGQgKHZvaWQpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIDo6c2NoZWRfeWllbGQg
KCk7CiMgODQ4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjpwcmlvcml0eV9jb250cm9sIChBQ0VfaWR0eXBl
X3QgaWR0eXBlLCBBQ0VfaWRfdCBpZCwgaW50IGNtZCwgdm9pZCAqYXJnKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGRvIHsgfSB3aGlsZSAoJmlk
dHlwZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZpZCA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZj
bWQgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmYXJnID09IDApOwogIGRvIHsgKCpfX2Vycm5vX2xv
Y2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSB2b2lk
CkFDRV9PUzo6cmV3aW5kIChGSUxFICpmcCkKewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgOjpyZXdpbmQgKGZwKTsKCgoKCn0KCmlubGluZSBzc2l6ZV90CkFDRV9PUzo6
cmVhZHYgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAg
ICAgICAgICAgICBpbnQgaW92bGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgoKCiAgZG8geyBzc2l6ZV90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6OnJlYWR2IChoYW5kbGUsIGlvdiwgaW92bGVuKTsgfSB3aGlsZSAo
MCk7Cgp9CgppbmxpbmUgc3NpemVfdApBQ0VfT1M6OndyaXRldiAoQUNFX0hBTkRMRSBoYW5kbGUs
CiAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgaW50IGlv
dmNudCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBkbyB7IGlu
dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3
cml0ZXYgKGhhbmRsZSwgKEFDRV9XUklURVZfVFlQRSAqKSBpb3YsIGlvdmNudCk7IH0gd2hpbGUg
KDApOwoKCgp9CgppbmxpbmUgc3NpemVfdApBQ0VfT1M6OnJlY3Z2IChBQ0VfSEFORExFIGhhbmRs
ZSwKICAgICAgICAgICAgICAgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAgIGludCBuKQp7
CiMgODYwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgcmV0dXJuIEFDRV9PUzo6cmVhZHYgKGhhbmRsZSwgYnVmZmVycywgbik7Cgp9Cgppbmxp
bmUgc3NpemVfdApBQ0VfT1M6OnNlbmR2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg
ICAgY29uc3QgaW92ZWMgKmJ1ZmZlcnMsCiAgICAgICAgICAgICAgIGludCBuKQp7CiMgODY0NiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0
dXJuIEFDRV9PUzo6d3JpdGV2IChoYW5kbGUsIGJ1ZmZlcnMsIG4pOwoKfQoKaW5saW5lIGludApB
Q0VfT1M6OnBvbGwgKHN0cnVjdCBwb2xsZmQgKnBvbGxmZHMsIHVfbG9uZyBsZW4sIGNvbnN0IEFD
RV9UaW1lX1ZhbHVlICp0aW1lb3V0KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGludCB0byA9IHRpbWVvdXQgPT0gMCA/IC0xIDogaW50ICh0aW1lb3V0LT5tc2VjICgpKTsK
ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy
ZXR1cm4gOjpwb2xsIChwb2xsZmRzLCBsZW4sIHRvKTsgfSB3aGlsZSAoMCk7CgoKCgoKCgp9Cgpp
bmxpbmUgaW50CkFDRV9PUzo6cG9sbCAoc3RydWN0IHBvbGxmZCAqcG9sbGZkcywgdV9sb25nIGxl
biwgY29uc3QgQUNFX1RpbWVfVmFsdWUgJnRpbWVvdXQpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBh
Y2VfcmVzdWx0XzsgcmV0dXJuIDo6cG9sbCAocG9sbGZkcywgbGVuLCBpbnQgKHRpbWVvdXQubXNl
YyAoKSkpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0KCmlubGluZSBjaGFyICoKQUNFX09TOjpjb21w
aWxlIChjb25zdCBjaGFyICppbnN0cmluZywgY2hhciAqZXhwYnVmLCBjaGFyICplbmRidWYpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZp
bnN0cmluZyA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZleHBidWYgPT0gMCk7CiAgZG8geyB9IHdo
aWxlICgmZW5kYnVmID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7
IHJldHVybiAwOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBsb25nCkFDRV9PUzo6ZmlsZXNpemUg
KGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogIEFDRV9IQU5ETEUgaCA9IEFDRV9PUzo6b3BlbiAoZmlsZW5hbWUsIDAwKTsK
ICBpZiAoaCAhPSAtMSkKICAgIHsKICAgICAgbG9uZyBzaXplID0gQUNFX09TOjpmaWxlc2l6ZSAo
aCk7CiAgICAgIEFDRV9PUzo6Y2xvc2UgKGgpOwogICAgICByZXR1cm4gc2l6ZTsKICAgIH0KICBl
bHNlCiAgICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpjbG9zZXNvY2tldCAoQUNF
X0hBTkRMRSBoYW5kbGUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1
bHRfOyByZXR1cm4gOjpjbG9zZSAoaGFuZGxlKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50
CkFDRV9PUzo6YWNjZXNzIChjb25zdCBjaGFyICpwYXRoLCBpbnQgYW1vZGUpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwojIDg3NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7
IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmFjY2VzcyAocGF0aCwgYW1vZGUp
OyB9IHdoaWxlICgwKTsKCn0KIyA4NzYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIEFDRV9IQU5ETEUKQUNFX09TOjpjcmVhdCAoY29u
c3QgQUNFX1RDSEFSICpmaWxlbmFtZSwgbW9kZV90IG1vZGUpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiMgODc4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRfID0gLTE7IGFj
ZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmNyZWF0IChmaWxlbmFtZSwgbW9kZSk7
IH0gd2hpbGUgKDApOwoKCn0KCgoKCgppbmxpbmUgaW50CkFDRV9PUzo6dW5hbWUgKEFDRV91dHNu
YW1lICpuYW1lKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsg
aW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6
OnVuYW1lIChuYW1lKTsgfSB3aGlsZSAoMCk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6Omhvc3Ru
YW1lIChjaGFyIG5hbWVbXSwgc2l6ZV90IG1heG5hbWVsZW4pCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiMgODg0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgQUNFX3V0c25hbWUgaG9zdF9pbmZvOwoKICBpZiAoQUNF
X09TOjp1bmFtZSAoJmhvc3RfaW5mbykgPT0gLTEpCiAgICByZXR1cm4gLTE7CiAgZWxzZQogICAg
ewogICAgICBBQ0VfT1M6OnN0cm5jcHkgKG5hbWUsIGhvc3RfaW5mby5ub2RlbmFtZSwgbWF4bmFt
ZWxlbik7CiAgICAgIHJldHVybiAwOwogICAgfQoKfQojIDg4NzcgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgppbmxpbmUgaW50CkFDRV9PUzo6bXNn
Y3RsIChpbnQgbXNxaWQsIGludCBjbWQsIHN0cnVjdCBtc3FpZF9kcyAqdmFsKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNnY3RsIChtc3FpZCwgY21kLCB2
YWwpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjptc2dnZXQgKGtl
eV90IGtleSwgaW50IG1zZ2ZsZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6Om1zZ2dldCAoa2V5LCBtc2dmbGcpOyB9IHdoaWxlICgwKTsKCgoKCgoKfQoKaW5s
aW5lIGludApBQ0VfT1M6Om1zZ3JjdiAoaW50IGludF9pZCwgdm9pZCAqYnVmLCBzaXplX3QgbGVu
LAogICAgICAgICAgICAgICAgbG9uZyB0eXBlLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNl
X3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNncmN2IChpbnRfaWQsIGJ1ZiwgbGVu
LCB0eXBlLCBmbGFncyk7IH0gd2hpbGUgKDApOwojIDg5MjggIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXNn
c25kIChpbnQgaW50X2lkLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGludCBmbGFncykK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZG8geyBpbnQgYWNl
X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bXNnc25k
IChpbnRfaWQsIGJ1ZiwgbGVuLCBmbGFncyk7IH0gd2hpbGUgKDApOwojIDg5NTAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgdV9p
bnQKQUNFX09TOjphbGFybSAodV9pbnQgc2VjcykKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKCgoKCiAgcmV0dXJuIDo6YWxhcm0gKHNlY3MpOwoKfQoKaW5saW5lIHVfaW50
CkFDRV9PUzo6dWFsYXJtICh1X2ludCB1c2VjcywgdV9pbnQgaW50ZXJ2YWwpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7IH0gd2hpbGUgKCZpbnRlcnZhbCA9
PSAwKTsKICByZXR1cm4gOjphbGFybSAodXNlY3MgKiAxMDAwMDAwTCk7CgoKCgoKfQoKaW5saW5l
IHVfaW50CkFDRV9PUzo6dWFsYXJtIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAgICAg
ICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmdHZfaW50ZXJ2YWwpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsgfSB3aGlsZSAoJnR2X2ludGVydmFs
ID09IDApOwogIHJldHVybiA6OmFsYXJtICh0di5zZWMgKCkpOwoKCgoKCn0KCmlubGluZSBpbnQK
QUNFX09TOjpkbGNsb3NlIChBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSkKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwojIDkwMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6ZGxjbG9zZSAoaGFuZGxlKTsgfSB3
aGlsZSAoMCk7CiMgOTA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCn0KCmlubGluZSBBQ0VfVENIQVIgKgpBQ0VfT1M6OmRsZXJyb3IgKHZvaWQp
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZG8geyBjaGFyICog
YWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gKGNoYXIg
Kik6OmRsZXJyb3IgKCk7IH0gd2hpbGUgKDApOwojIDkwODEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgQUNFX1NITElCX0hBTkRM
RQpBQ0VfT1M6OmRsb3BlbiAoY29uc3QgQUNFX1RDSEFSICpmbmFtZSwKICAgICAgICAgICAgICAg
IGludCBtb2RlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIEFDRV9E
TF9UWVBFIGZpbGVuYW1lID0gY29uc3RfY2FzdDxBQ0VfRExfVFlQRT4gKGZuYW1lKTsKCgogIHZv
aWQgKmhhbmRsZTsKCgoKCgogIGRvIHsgaGFuZGxlID0gKHZvaWQgKikgOjpkbG9wZW4gKGZpbGVu
YW1lLCBtb2RlKTsgfSB3aGlsZSAoMCk7CiMgOTExOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgcmV0dXJuIGhhbmRsZTsKIyA5MTM2ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5l
IHZvaWQgKgpBQ0VfT1M6OmRsc3ltIChBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSwKICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1RDSEFSICpzbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgoKCgoKCiAgY29uc3QgY2hhciAqc3ltYm9sbmFtZSA9IHNuYW1lOwojIDkxNzAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRv
IHsgdm9pZCAqIGFjZV9yZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0
dXJuIDo6ZGxzeW0gKGhhbmRsZSwgc3ltYm9sbmFtZSk7IH0gd2hpbGUgKDApOwojIDkxOTYgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgp9Cgppbmxp
bmUgaW50CkFDRV9PUzo6c3RlcCAoY29uc3QgY2hhciAqc3RyLCBjaGFyICpleHBidWYpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZzdHIgPT0g
MCk7CiAgZG8geyB9IHdoaWxlICgmZXhwYnVmID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgbG9uZwpB
Q0VfT1M6OnN5c2luZm8gKGludCBjbWQsIGNoYXIgKmJ1ZiwgbG9uZyBjb3VudCkKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmNtZCA9PSAw
KTsKICBkbyB7IH0gd2hpbGUgKCZidWYgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmY291bnQgPT0g
MCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIDA7IH0gd2hp
bGUgKDApOwoKfQoKaW5saW5lIHNzaXplX3QKQUNFX09TOjp3cml0ZSAoQUNFX0hBTkRMRSBoYW5k
bGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlKQp7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwojIDkyNjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgc3NpemVfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVz
dWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3cml0ZSAoaGFuZGxlLCBidWYsIG5ieXRlKTsg
fSB3aGlsZSAoMCk7CgoKfQoKaW5saW5lIHNzaXplX3QKQUNFX09TOjp3cml0ZSAoQUNFX0hBTkRM
RSBoYW5kbGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IG5ieXRlLAogICAgICAgICAgICAgICBB
Q0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICBvdmVybGFwcGVkID0gb3ZlcmxhcHBlZDsKIyA5Mjc5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICByZXR1cm4gQUNFX09TOjp3cml0
ZSAoaGFuZGxlLCBidWYsIG5ieXRlKTsKCn0KCmlubGluZSBzc2l6ZV90CkFDRV9PUzo6cmVhZCAo
QUNFX0hBTkRMRSBoYW5kbGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbikKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwojIDkzMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGludCByZXN1bHQ7CgoKCgogIGRvIHsgcmVzdWx0ID0g
KHNzaXplX3QpIDo6cmVhZCAoaGFuZGxlLCBidWYsIGxlbik7IH0gd2hpbGUgKDApOwoKICBpZiAo
cmVzdWx0ID09IC0xICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEpCiAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMTE7CiAgcmV0dXJuIHJlc3VsdDsKCn0KCmlubGluZSBzc2l6ZV90
CkFDRV9PUzo6cmVhZCAoQUNFX0hBTkRMRSBoYW5kbGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwK
ICAgICAgICAgICAgICBBQ0VfT1ZFUkxBUFBFRCAqb3ZlcmxhcHBlZCkKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIG92ZXJsYXBwZWQgPSBvdmVybGFwcGVkOwoKCgoKICByZXR1
cm4gQUNFX09TOjpyZWFkIChoYW5kbGUsIGJ1ZiwgbGVuKTsKCn0KCmlubGluZSBpbnQKQUNFX09T
OjpyZWFkbGluayAoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6KQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDkzNTQgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICBkbyB7IGludCBh
Y2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpyZWFk
bGluayAocGF0aCwgYnVmLCBidWZzaXopOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQK
QUNFX09TOjpnZXRtc2cgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgc3RydWN0
IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgc3RydWN0IHN0cmJ1ZiAqZGF0YSwKICAgICAg
ICAgICAgICAgIGludCAqZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZjdGwg
PT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZGF0YSA9PSAwKTsKICBkbyB7IH0gd2hpbGUgKCZmbGFn
cyA9PSAwKTsKCgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0x
OyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpnZXRwbXNnIChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAg
ICAgICAgc3RydWN0IHN0cmJ1ZiAqZGF0YSwKICAgICAgICAgICAgICAgICBpbnQgKmJhbmQsCiAg
ICAgICAgICAgICAgICAgaW50ICpmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBkbyB7IH0gd2hpbGUg
KCZjdGwgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgmZGF0YSA9PSAwKTsKICBkbyB7IH0gd2hpbGUg
KCZiYW5kID09IDApOwogIGRvIHsgfSB3aGlsZSAoJmZsYWdzID09IDApOwoKCiAgZG8geyAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKfQoKaW5s
aW5lIGludApBQ0VfT1M6OmdldHJ1c2FnZSAoaW50IHdobywgc3RydWN0IHJ1c2FnZSAqcnUpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk0MjYgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9y
ZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHJ1c2Fn
ZSAoKGVudW0gX19ydXNhZ2Vfd2hvKSB3aG8sIHJ1KTsgfSB3aGlsZSAoMCk7CiMgOTQzNiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGlu
ZSBpbnQKQUNFX09TOjppc2FzdHJlYW0gKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBkbyB7IH0gd2hpbGUgKCZoYW5kbGUgPT0g
MCk7CgogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdo
aWxlICgwKTsKCn0KCgoKCgoKaW5saW5lIGludApBQ0VfT1M6Om1wcm90ZWN0ICh2b2lkICphZGRy
LCBzaXplX3QgbGVuLCBpbnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjptcHJvdGVjdCAoKEFDRV9NTUFQX1RZUEUpIGFkZHIsIGxlbiwg
cHJvdCk7IH0gd2hpbGUgKDApOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bXN5bmMgKHZv
aWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBzeW5jKQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwojIDk0ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g
YWNlX3Jlc3VsdF87IHJldHVybiA6Om1zeW5jICgoQUNFX01NQVBfVFlQRSkgYWRkciwgbGVuLCBz
eW5jKTsgfSB3aGlsZSAoMCk7CiMgOTQ5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0KCmlubGluZSBpbnQKQUNFX09TOjptdW5tYXAgKHZvaWQg
KmFkZHIsIHNpemVfdCBsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgoKCgoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1
bHRfOyByZXR1cm4gOjptdW5tYXAgKChBQ0VfTU1BUF9UWVBFKSBhZGRyLCBsZW4pOyB9IHdoaWxl
ICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bWFkdmlzZSAoY2FkZHJfdCBhZGRyLCBz
aXplX3QgbGVuLCBpbnQgYWR2aWNlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCgoKCgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6Om1hZHZpc2UgKGFkZHIsIGxlbiwgYWR2aWNlKTsgfSB3aGlsZSAo
MCk7CgoKCgoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpwdXRtc2cgKEFDRV9IQU5ETEUgaGFuZGxl
LCBjb25zdCBzdHJ1Y3Qgc3RyYnVmICpjdGwsCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qg
c3RyYnVmICpkYXRhLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCgoKCgogIGRvIHsgfSB3aGlsZSAoJmZsYWdzID09IDApOwogIGlmIChjdGwgPT0gMCAm
JiBkYXRhID09IDApCiAgICB7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAyMjsKICAg
ICAgcmV0dXJuIDA7CiAgICB9CgogIGVsc2UgaWYgKGN0bCAhPSAwKQogICAgcmV0dXJuIEFDRV9P
Uzo6d3JpdGUgKGhhbmRsZSwgY3RsLT5idWYsIGN0bC0+bGVuKTsKICBlbHNlIGlmIChkYXRhICE9
IDApCiAgICByZXR1cm4gQUNFX09TOjp3cml0ZSAoaGFuZGxlLCBkYXRhLT5idWYsIGRhdGEtPmxl
bik7CiAgZWxzZQogICAgewoKICAgICAgY2hhciAqYnVmOwogICAgICBkbyB7IHRyeSB7IGJ1ZiA9
IG5ldyBjaGFyIFtjdGwtPmxlbiArIGRhdGEtPmxlbl07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j
KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIC0xOyB9IH0gd2hpbGUgKDAp
OwogICAgICBBQ0VfT1M6Om1lbWNweSAoYnVmLCBjdGwtPmJ1ZiwgY3RsLT5sZW4pOwogICAgICBB
Q0VfT1M6Om1lbWNweSAoYnVmICsgY3RsLT5sZW4sIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAg
ICAgaW50IHJlc3VsdCA9IEFDRV9PUzo6d3JpdGUgKGhhbmRsZSwgYnVmLCBjdGwtPmxlbiArIGRh
dGEtPmxlbik7CiAgICAgIGRlbGV0ZSBbXSBidWY7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9
Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6cHV0cG1zZyAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgY29uc3Qgc3RydWN0IHN0cmJ1ZiAqY3RsLAogICAgICAgICAgICAgICAgIGNv
bnN0IHN0cnVjdCBzdHJidWYgKmRhdGEsCiAgICAgICAgICAgICAgICAgaW50IGJhbmQsCiAgICAg
ICAgICAgICAgICAgaW50IGZsYWdzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCgoKCiAgZG8geyB9IHdoaWxlICgmZmxhZ3MgPT0gMCk7CiAgZG8geyB9IHdoaWxlICgm
YmFuZCA9PSAwKTsKICByZXR1cm4gQUNFX09TOjpwdXRtc2cgKGhhbmRsZSwgY3RsLCBkYXRhLCBm
bGFncyk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2VtY3RsIChpbnQgaW50X2lkLCBpbnQgc2Vt
bnVtLCBpbnQgY21kLCBzZW11biB2YWx1ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jl
c3VsdF87IHJldHVybiA6OnNlbWN0bCAoaW50X2lkLCBzZW1udW0sIGNtZCwgdmFsdWUpOyB9IHdo
aWxlICgwKTsKIyA5NjA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNlbWdldCAoa2V5X3Qga2V5LCBpbnQg
bnNlbXMsIGludCBmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJl
dHVybiA6OnNlbWdldCAoa2V5LCBuc2VtcywgZmxhZ3MpOyB9IHdoaWxlICgwKTsKCgoKCgoKCn0K
CmlubGluZSBpbnQKQUNFX09TOjpzZW1vcCAoaW50IGludF9pZCwgc3RydWN0IHNlbWJ1ZiAqc29w
cywgc2l6ZV90IG5zb3BzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBk
byB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1
cm4gOjpzZW1vcCAoaW50X2lkLCBzb3BzLCBuc29wcyk7IH0gd2hpbGUgKDApOwoKCgoKCgoKfQoK
aW5saW5lIHZvaWQgKgpBQ0VfT1M6OnNobWF0IChpbnQgaW50X2lkLCB2b2lkICpzaG1hZGRyLCBp
bnQgc2htZmxnKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBkbyB7
IHZvaWQgKiBhY2VfcmVzdWx0XyA9ICh2b2lkICopIC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1
bHRfOyByZXR1cm4gOjpzaG1hdCAoaW50X2lkLCBzaG1hZGRyLCBzaG1mbGcpOyB9IHdoaWxlICgw
KTsKIyA5NjU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OnNobWN0bCAoaW50IGludF9pZCwgaW50IGNtZCwg
c3RydWN0IHNobWlkX2RzICpidWYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf
OyByZXR1cm4gOjpzaG1jdGwgKGludF9pZCwgY21kLCBidWYpOyB9IHdoaWxlICgwKTsKCgoKCgoK
Cn0KCmlubGluZSBpbnQKQUNFX09TOjpzaG1kdCAodm9pZCAqc2htYWRkcikKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNl
X3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2htZHQgKChjaGFyICopIHNobWFkZHIp
OyB9IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2htZ2V0IChrZXlfdCBr
ZXksIGludCBzaXplLCBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1
bHRfOyByZXR1cm4gOjpzaG1nZXQgKGtleSwgc2l6ZSwgZmxhZ3MpOyB9IHdoaWxlICgwKTsKCgoK
CgoKCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6dHpzZXQgKHZvaWQpCnsKCgoKCgoKICA6OnR6c2V0
ICgpOwoKCgoKfQoKaW5saW5lIGxvbmcKQUNFX09TOjp0aW1lem9uZSAodm9pZCkKewogIHJldHVy
biA6OmFjZV90aW1lem9uZSAoKTsKfQoKCmlubGluZSBkb3VibGUKQUNFX09TOjpkaWZmdGltZSAo
dGltZV90IHQxLCB0aW1lX3QgdDApCnsKICByZXR1cm4gOjphY2VfZGlmZnRpbWUgKHQxLCB0MCk7
Cn0KCgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpjdGltZSAoY29uc3QgdGltZV90ICp0KQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDk3NDkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgY2hhciAqIGFjZV9y
ZXN1bHRfID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Y3RpbWUgKHQp
OyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX1RDSEFSICoKQUNFX09TOjpjdGltZV9yIChj
b25zdCB0aW1lX3QgKnQsIEFDRV9UQ0hBUiAqYnVmLCBpbnQgYnVmbGVuKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBBQ0VfVENIQVIgKnJlc3VsdDsKCgoKICBk
byB7IHJlc3VsdCA9IChBQ0VfVENIQVIgKikgOjpjdGltZV9yICh0LCBidWYpOyB9IHdoaWxlICgw
KTsKCiAgaWYgKHJlc3VsdCAhPSAwKQogICAgOjpzdHJuY3B5IChidWYsIHJlc3VsdCwgYnVmbGVu
KTsKICByZXR1cm4gYnVmOwojIDk3OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgp9CgoKaW5saW5lIHN0cnVjdCB0bSAqCkFDRV9PUzo6bG9jYWx0
aW1lIChjb25zdCB0aW1lX3QgKnQpCnsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIGRvIHsgc3RydWN0IHRtICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9
IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpsb2NhbHRpbWUgKHQpOyB9IHdoaWxlICgwKTsKCgoKCgoK
fQoKaW5saW5lIHN0cnVjdCB0bSAqCkFDRV9PUzo6Z210aW1lIChjb25zdCB0aW1lX3QgKnQpCnsK
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGRvIHsgc3RydWN0IHRtICog
YWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnbXRp
bWUgKHQpOyB9IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgc3RydWN0IHRtICoKQUNFX09TOjpn
bXRpbWVfciAoY29uc3QgdGltZV90ICp0LCBzdHJ1Y3QgdG0gKnJlcykKewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKIyA5ODQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IHN0cnVjdCB0bSAqIGFjZV9yZXN1bHRf
ID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z210aW1lX3IgKHQsIHJl
cyk7IH0gd2hpbGUgKDApOwojIDk4NTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PUy5pIgp9CgppbmxpbmUgY2hhciAqCkFDRV9PUzo6YXNjdGltZSAoY29u
c3Qgc3RydWN0IHRtICp0KQp7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgZG8geyBjaGFyICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf
OyByZXR1cm4gOjphc2N0aW1lICh0KTsgfSB3aGlsZSAoMCk7CgoKCgoKfQoKaW5saW5lIGNoYXIg
KgpBQ0VfT1M6OmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICp0LCBjaGFyICpidWYsIGludCBi
dWZsZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCiAgY2hh
ciAqcmVzdWx0OwoKCgogIGRvIHsgcmVzdWx0ID0gKGNoYXIgKikgOjphc2N0aW1lX3IgKHQsIGJ1
Zik7IH0gd2hpbGUgKDApOwoKICA6OnN0cm5jcHkgKGJ1ZiwgcmVzdWx0LCBidWZsZW4pOwogIHJl
dHVybiBidWY7CiMgOTkxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCn0KCmlubGluZSBzaXplX3QKQUNFX09TOjpzdHJmdGltZSAoY2hhciAqcywg
c2l6ZV90IG1heHNpemUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RydWN0IHRtICp0aW1lcHRyKQp7CgoKCiAgcmV0dXJuIDo6c3RyZnRpbWUgKHMsIG1heHNp
emUsIGZvcm1hdCwgdGltZXB0cik7CgoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZmxvY2tf
aW5pdCAoQUNFX09TOjphY2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICBpbnQg
ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lLAogICAgICAg
ICAgICAgICAgICAgIG1vZGVfdCBwZXJtcykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwojIDk5OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGxvY2stPmhhbmRsZV8gPSAtMTsKICBsb2NrLT5sb2NrbmFtZV8gPSAw
OwoKICBpZiAobmFtZSAhPSAwKQogICAgewogICAgICBkbyB7IGxvY2stPmhhbmRsZV8gPSAoQUNF
X0hBTkRMRSkgQUNFX09TOjpvcGVuIChuYW1lLCBmbGFncywgcGVybXMpOyB9IHdoaWxlICgwKTsK
CgoKICAgICAgbG9jay0+bG9ja25hbWVfID0gQUNFX09TOjpzdHJkdXAgKG5hbWUpOwogICAgICBy
ZXR1cm4gbG9jay0+aGFuZGxlXyA9PSAtMSA/IC0xIDogMDsKICAgIH0KICBlbHNlCiAgICByZXR1
cm4gMDsKCn0KIyAxMDAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpmbG9ja193cmxvY2sgKEFDRV9PUzo6YWNl
X2Zsb2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAg
ICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90
IGxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAwNzQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGxv
Y2stPmxvY2tfLmxfd2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxvY2tfLmxfc3RhcnQgPSBzdGFy
dDsKICBsb2NrLT5sb2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5sb2NrXy5sX3R5cGUgPSAxOwoK
ICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyBy
ZXR1cm4gQUNFX09TOjpmY250bCAobG9jay0+aGFuZGxlXywgNywgcmVpbnRlcnByZXRfY2FzdDxs
b25nPiAoJmxvY2stPmxvY2tfKSk7IH0gd2hpbGUgKDApOwoKCgp9CgppbmxpbmUgaW50CkFDRV9P
Uzo6ZmxvY2tfcmRsb2NrIChBQ0VfT1M6OmFjZV9mbG9ja190ICpsb2NrLAogICAgICAgICAgICAg
ICAgICAgICAgc2hvcnQgd2hlbmNlLAogICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgc3RhcnQs
CiAgICAgICAgICAgICAgICAgICAgICBvZmZfdCBsZW4pCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwojIDEwMTIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBsb2NrLT5sb2NrXy5sX3doZW5jZSA9IHdoZW5jZTsK
ICBsb2NrLT5sb2NrXy5sX3N0YXJ0ID0gc3RhcnQ7CiAgbG9jay0+bG9ja18ubF9sZW4gPSBsZW47
CiAgbG9jay0+bG9ja18ubF90eXBlID0gMDsKCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIEFDRV9PUzo6ZmNudGwgKGxvY2stPmhh
bmRsZV8sIDcsIHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4gKCZsb2NrLT5sb2NrXykpOyB9IHdoaWxl
ICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZsb2NrX3RyeXdybG9jayAoQUNFX09TOjph
Y2VfZmxvY2tfdCAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0IHdoZW5jZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90IHN0YXJ0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgb2ZmX3QgbGVuKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiMgMTAxNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGxvY2stPmxvY2tfLmxfd2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxv
Y2tfLmxfc3RhcnQgPSBzdGFydDsKICBsb2NrLT5sb2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5s
b2NrXy5sX3R5cGUgPSAxOwoKICBpbnQgcmVzdWx0ID0gMDsKCiAgZG8geyByZXN1bHQgPSAoaW50
KSBBQ0VfT1M6OmZjbnRsIChsb2NrLT5oYW5kbGVfLCA2LCByZWludGVycHJldF9jYXN0PGxvbmc+
ICgmbG9jay0+bG9ja18pKTsgfSB3aGlsZSAoMCk7CgoKCgoKICBpZiAocmVzdWx0ID09IC0xICYm
ICgoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDEzIHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkg
PT0gMTEpKQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwoKCiAgcmV0dXJuIHJlc3Vs
dDsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpmbG9ja190cnlyZGxvY2sgKEFDRV9PUzo6YWNlX2Zs
b2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAg
IG9mZl90IGxlbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwojIDEwMjI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKICBsb2NrLT5sb2NrXy5sX3doZW5jZSA9IHdoZW5jZTsKICBsb2NrLT5sb2NrXy5s
X3N0YXJ0ID0gc3RhcnQ7CiAgbG9jay0+bG9ja18ubF9sZW4gPSBsZW47CiAgbG9jay0+bG9ja18u
bF90eXBlID0gMDsKCiAgaW50IHJlc3VsdCA9IDA7CgogIGRvIHsgcmVzdWx0ID0gKGludCkgQUNF
X09TOjpmY250bCAobG9jay0+aGFuZGxlXywgNiwgcmVpbnRlcnByZXRfY2FzdDxsb25nPiAoJmxv
Y2stPmxvY2tfKSk7IH0gd2hpbGUgKDApOwoKCgoKICBpZiAocmVzdWx0ID09IC0xICYmICgoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID09IDEzIHx8ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTEp
KQogICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDE2OwoKCiAgcmV0dXJuIHJlc3VsdDsKCn0K
CmlubGluZSBpbnQKQUNFX09TOjpmbG9ja191bmxvY2sgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxv
Y2ssCiAgICAgICAgICAgICAgICAgICAgICBzaG9ydCB3aGVuY2UsCiAgICAgICAgICAgICAgICAg
ICAgICBvZmZfdCBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgIG9mZl90IGxlbikKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAyNzMgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGxvY2stPmxvY2tfLmxf
d2hlbmNlID0gd2hlbmNlOwogIGxvY2stPmxvY2tfLmxfc3RhcnQgPSBzdGFydDsKICBsb2NrLT5s
b2NrXy5sX2xlbiA9IGxlbjsKICBsb2NrLT5sb2NrXy5sX3R5cGUgPSAyOwoKCiAgZG8geyBpbnQg
YWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIEFDRV9P
Uzo6ZmNudGwgKGxvY2stPmhhbmRsZV8sIDYsIHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4gKCZsb2Nr
LT5sb2NrXykpOyB9IHdoaWxlICgwKTsKCgoKfQoKaW5saW5lIGludApBQ0VfT1M6OmZsb2NrX2Rl
c3Ryb3kgKEFDRV9PUzo6YWNlX2Zsb2NrX3QgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAg
aW50IHVubGlua19maWxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgaWYgKGxvY2stPmhhbmRsZV8gIT0gLTEpCiAgICB7CiAgICAgIEFDRV9PUzo6ZmxvY2tf
dW5sb2NrIChsb2NrKTsKCiAgICAgIEFDRV9PUzo6Y2xvc2UgKGxvY2stPmhhbmRsZV8pOwogICAg
ICBsb2NrLT5oYW5kbGVfID0gLTE7CiMgMTAzMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogICAgICBpZiAobG9jay0+bG9ja25hbWVfICE9IDAp
CiAgICAgICAgewogICAgICAgICAgaWYgKHVubGlua19maWxlKQogICAgICAgICAgICBBQ0VfT1M6
OnVubGluayAobG9jay0+bG9ja25hbWVfKTsKICAgICAgICAgIEFDRV9PUzo6ZnJlZSAoc3RhdGlj
X2Nhc3Q8dm9pZCAqPiAoY29uc3RfY2FzdDxBQ0VfVENIQVIgKj4gKGxvY2stPmxvY2tuYW1lXykp
KTsKCgogICAgICAgIH0KCiAgICAgIGxvY2stPmxvY2tuYW1lXyA9IDA7CiAgICB9CiAgcmV0dXJu
IDA7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpleGVjdiAoY29uc3QgY2hhciAqcGF0aCwKICAgICAg
ICAgICAgICAgY2hhciAqY29uc3QgYXJndltdKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwojIDEwMzU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjpleGVjdiAocGF0aCwgYXJndik7IH0gd2hpbGUgKDApOwoKfQoK
aW5saW5lIGludApBQ0VfT1M6OmV4ZWN2ZSAoY29uc3QgY2hhciAqcGF0aCwKICAgICAgICAgICAg
ICAgIGNoYXIgKmNvbnN0IGFyZ3ZbXSwKICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGVudnBb
XSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTAzOTMgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj
ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmV4ZWN2
ZSAocGF0aCwgYXJndiwgZW52cCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6
OmV4ZWN2cCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgICAgIGNoYXIgKmNvbnN0IGFy
Z3ZbXSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA0MjYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50
IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmV4
ZWN2cCAoZmlsZSwgYXJndik7IH0gd2hpbGUgKDApOwoKfQoKCmlubGluZSBGSUxFICoKQUNFX09T
OjpmZG9wZW4gKEFDRV9IQU5ETEUgaGFuZGxlLCBjb25zdCBBQ0VfVENIQVIgKm1vZGUpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEwNDc0ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IEZJTEUgKiBhY2VfcmVz
dWx0XyA9IDA7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmZkb3BlbiAoaGFu
ZGxlLCBtb2RlKTsgfSB3aGlsZSAoMCk7Cgp9CgoKaW5saW5lIGludApBQ0VfT1M6OmdldHJsaW1p
dCAoaW50IHJlc291cmNlLCBzdHJ1Y3QgcmxpbWl0ICpybCkKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiMgMTA0OTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9y
ZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHJsaW1pdCAoKGVudW0gX19ybGltaXRf
cmVzb3VyY2UpIHJlc291cmNlLCBybCk7IH0gd2hpbGUgKDApOwoKCgoKfQoKaW5saW5lIGludApB
Q0VfT1M6OnNldHJsaW1pdCAoaW50IHJlc291cmNlLCBBQ0VfU0VUUkxJTUlUX1RZUEUgKnJsKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMDUxMCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNl
X3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2V0cmxp
bWl0ICgoZW51bSBfX3JsaW1pdF9yZXNvdXJjZSkgcmVzb3VyY2UsIHJsKTsgfSB3aGlsZSAoMCk7
CgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c29ja2V0cGFpciAoaW50IGRvbWFpbiwgaW50IHR5
cGUsCiAgICAgICAgICAgICAgICAgICAgaW50IHByb3RvY29sLCBBQ0VfSEFORExFIHN2WzJdKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA1MzAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj
ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNvY2tl
dHBhaXIgKGRvbWFpbiwgdHlwZSwgcHJvdG9jb2wsIHN2KTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5s
aW5lIEFDRV9IQU5ETEUKQUNFX09TOjpkdXAgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMDU2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBBQ0VfSEFORExFIGFjZV9yZXN1bHRf
ID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OmR1cCAoaGFuZGxlKTsg
fSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6ZHVwMiAoQUNFX0hBTkRMRSBvbGRo
YW5kbGUsIEFDRV9IQU5ETEUgbmV3aGFuZGxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiMgMTA1NzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNl
X3Jlc3VsdF87IHJldHVybiA6OmR1cDIgKG9sZGhhbmRsZSwgbmV3aGFuZGxlKTsgfSB3aGlsZSAo
MCk7Cgp9CgoKCgoKaW5saW5lIEFDRV9ocnRpbWVfdApBQ0VfT1M6OmdldGhydGltZSAoY29uc3Qg
QUNFX0hSVGltZXJfT3Agb3ApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwojIDEwNjA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKICBkbyB7IH0gd2hpbGUgKCZvcCA9PSAwKTsKCgoKCiAgQUNFX2hydGltZV90IG5vdzsK
CgoKCgoKCiAgYXNtIHZvbGF0aWxlICgicmR0c2MiIDogIj1BIiAobm93KSA6IDogIm1lbW9yeSIp
OwojIDEwNjMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaSIKICByZXR1cm4gbm93OwojIDEwNzI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKfQoKaW5saW5lIGludApBQ0VfT1M6OmZkZXRhY2ggKGNv
bnN0IGNoYXIgKmZpbGUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
ICBkbyB7IH0gd2hpbGUgKCZmaWxlID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAo
KSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6
ZmF0dGFjaCAoaW50IGhhbmRsZSwgY29uc3QgY2hhciAqcGF0aCkKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmhhbmRsZSA9PSAwKTsKICBk
byB7IH0gd2hpbGUgKCZwYXRoID09IDApOwoKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkg
PSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjpm
b3JrICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKICBkbyB7
IHBpZF90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVy
biA6OmZvcmsgKCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OmdldHBhZ2Vz
aXplICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoK
CiAgcmV0dXJuIChpbnQpIDo6c3lzY29uZiAoX1NDX1BBR0VTSVpFKTsKCgoKCgoKfQoKaW5saW5l
IGludApBQ0VfT1M6OmFsbG9jYXRpb25fZ3JhbnVsYXJpdHkgKHZvaWQpCnsKCgoKCgogIHJldHVy
biBBQ0VfT1M6OmdldHBhZ2VzaXplICgpOwoKfQoKaW5saW5lIHBpZF90CkFDRV9PUzo6Z2V0cGlk
ICh2b2lkKQp7CiMgMTA4MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0g
YWNlX3Jlc3VsdF87IHJldHVybiA6OmdldHBpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg
cGlkX3QKQUNFX09TOjpnZXRwZ2lkIChwaWRfdCBwaWQpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKIyAxMDgzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBwaWRfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVz
dWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpfX2dldHBnaWQgKHBpZCk7IH0gd2hpbGUgKDAp
OwoKCgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjpnZXRwcGlkICh2b2lkKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA4NTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgcGlkX3QgYWNlX3Jlc3VsdF8gPSAt
MTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0cHBpZCAoKTsgfSB3aGls
ZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2V0cGdpZCAocGlkX3QgcGlkLCBwaWRfdCBw
Z2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA4NzAgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50
IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNl
dHBnaWQgKHBpZCwgcGdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNl
dHJldWlkICh1aWRfdCBydWlkLCB1aWRfdCBldWlkKQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwojIDEwODg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0
XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzZXRyZXVpZCAocnVpZCwgZXVpZCk7IH0gd2hpbGUg
KDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNldHJlZ2lkIChnaWRfdCByZ2lkLCBnaWRfdCBl
Z2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDEwOTA2ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGlu
dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz
ZXRyZWdpZCAocmdpZCwgZWdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIG9mZl90CkFDRV9P
Uzo6bHNlZWsgKEFDRV9IQU5ETEUgaGFuZGxlLCBvZmZfdCBvZmZzZXQsIGludCB3aGVuY2UpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiMgMTA5NjUgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgb2ZmX3QgYWNlX3Jl
c3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6bHNlZWsgKGhh
bmRsZSwgb2Zmc2V0LCB3aGVuY2UpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxpbmUgQUNFX0xPRkZf
VApBQ0VfT1M6Omxsc2VlayAoQUNFX0hBTkRMRSBoYW5kbGUsIEFDRV9MT0ZGX1Qgb2Zmc2V0LCBp
bnQgd2hlbmNlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAg
ZG8geyBBQ0VfTE9GRl9UIGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3Vs
dF87IHJldHVybiA6OmxzZWVrNjQgKGhhbmRsZSwgb2Zmc2V0LCB3aGVuY2UpOyB9IHdoaWxlICgw
KTsKCgoKCgoKCn0KCgppbmxpbmUgaW50CkFDRV9PUzo6ZnNlZWsgKEZJTEUgKmZwLCBsb25nIG9m
ZnNldCwgaW50IHdoZW5jZSkKewojIDExMDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf
cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpmc2VlayAoZnAsIG9mZnNldCwgd2hlbmNl
KTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgcGlkX3QKQUNFX09TOjp3YWl0cGlkIChwaWRfdCBw
aWQsCiAgICAgICAgICAgICAgICAgQUNFX2V4aXRjb2RlICpzdGF0dXMsCiAgICAgICAgICAgICAg
ICAgaW50IHdhaXRfb3B0aW9ucywKICAgICAgICAgICAgICAgICBBQ0VfSEFORExFIGhhbmRsZSkK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDExMDkzICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IH0gd2hpbGUg
KCZoYW5kbGUgPT0gMCk7CiAgZG8geyBwaWRfdCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0
XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjp3YWl0cGlkIChwaWQsIHN0YXR1cywgd2FpdF9vcHRp
b25zKTsgfSB3aGlsZSAoMCk7CgoKfQoKaW5saW5lIHBpZF90CkFDRV9PUzo6d2FpdCAocGlkX3Qg
cGlkLAogICAgICAgICAgICAgIEFDRV9leGl0Y29kZSAqc3RhdHVzLAogICAgICAgICAgICAgIGlu
dCB3YWl0X29wdGlvbnMsCiAgICAgICAgICAgICAgQUNFX0hBTkRMRSBoYW5kbGUpCnsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjp3YWl0cGlkIChwaWQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIHdhaXRfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGUpOwp9Cgpp
bmxpbmUgcGlkX3QKQUNFX09TOjp3YWl0IChpbnQgKnN0YXR1cykKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwojIDExMTI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IHBpZF90IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9y
ZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OndhaXQgKHN0YXR1cyk7IH0gd2hpbGUgKDAp
OwoKCn0KCmlubGluZSBpbnQKQUNFX09TOjppb2N0bCAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAg
ICAgICAgICAgIGludCBjbWQsCiAgICAgICAgICAgICAgIHZvaWQgKnZhbCkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMTE1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsg
YWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6aW9jdGwgKGhhbmRsZSwgY21kLCB2
YWwpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNFX09TOjpraWxsIChwaWRfdCBwaWQs
IGludCBzaWdudW0pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoKCiAg
ZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0
dXJuIDo6a2lsbCAocGlkLCBzaWdudW0pOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBpbnQKQUNF
X09TOjpzaWdhY3Rpb24gKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1
Y3Qgc2lnYWN0aW9uICpuc2EsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uICpv
c2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChzaWdudW0g
PT0gMCkKICAgIHJldHVybiAwOwojIDExMjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2Vf
cmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzaWdhY3Rpb24gKHNpZ251bSwgbnNhLCBv
c2EpOyB9IHdoaWxlICgwKTsKCn0KCmlubGluZSBBQ0VfVENIQVIgKgpBQ0VfT1M6OmdldGN3ZCAo
QUNFX1RDSEFSICpidWYsIHNpemVfdCBzaXplKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKIyAxMTMwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09TLmkiCiAgZG8geyBjaGFyICogYWNlX3Jlc3VsdF8gPSAwOyBhY2VfcmVzdWx0XyA9
IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpnZXRjd2QgKGJ1Ziwgc2l6ZSk7IH0gd2hpbGUgKDApOwoK
fQoKaW5saW5lIGludApBQ0VfT1M6OnNsZWVwICh1X2ludCBzZWNvbmRzKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwojIDExMzM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBh
Y2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpzbGVlcCAoc2Vjb25kcyk7IH0gd2hp
bGUgKDApOwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNsZWVwIChjb25zdCBBQ0VfVGltZV9WYWx1
ZSAmdHYpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCgogIHRpbWV2
YWwgdHZfY29weSA9IHR2OwogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRf
ID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNlbGVjdCAoMCwgMCwgMCwgMCwgJnR2X2NvcHkpOyB9
IHdoaWxlICgwKTsKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6bmFub3NsZWVwIChjb25zdCBz
dHJ1Y3QgdGltZXNwZWMgKnJlcXVlc3RlZCwKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1l
c3BlYyAqcmVtYWluaW5nKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
IyAxMTQxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgZG8geyB9IHdoaWxlICgmcmVtYWluaW5nID09IDApOwoKCgogIEFDRV9UaW1lX1ZhbHVl
IHR2IChyZXF1ZXN0ZWQtPnR2X3NlYywKICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdGVkLT50
dl9uc2VjIC8gMTAwMCk7CgoKCgogIHJldHVybiBBQ0VfT1M6OnNsZWVwICh0dik7Cgp9Cgppbmxp
bmUgaW50CkFDRV9PUzo6bWtkaXIgKGNvbnN0IEFDRV9UQ0hBUiAqcGF0aCwgbW9kZV90IG1vZGUp
CnsKIyAxMTQ4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz
dWx0XzsgcmV0dXJuIDo6bWtkaXIgKHBhdGgsIG1vZGUpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxp
bmUgY2hhciAqCkFDRV9PUzo6Z2V0ZW52IChjb25zdCBjaGFyICpzeW1ib2wpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGRvIHsgY2hhciAqIGFjZV9yZXN1bHRf
ID0gMDsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6Z2V0ZW52IChzeW1ib2wp
OyB9IHdoaWxlICgwKTsKCn0KIyAxMTUxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpwdXRlbnYgKGNvbnN0IEFD
RV9UQ0hBUiAqc3RyaW5nKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAx
MTUyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmki
CiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0Xzsg
cmV0dXJuIDo6cHV0ZW52ICgoY2hhciAqKSBzdHJpbmcpOyB9IHdoaWxlICgwKTsKCn0KCgppbmxp
bmUKQUNFX1N0cl9CdWY6OkFDRV9TdHJfQnVmICh2b2lkICpiLCBpbnQgbCwgaW50IG1heCkKewog
IHRoaXMtPm1heGxlbiA9IG1heDsKICB0aGlzLT5sZW4gPSBsOwogIHRoaXMtPmJ1ZiA9IChjaGFy
ICopIGI7Cn0KCmlubGluZQpBQ0VfU3RyX0J1Zjo6QUNFX1N0cl9CdWYgKHN0cmJ1ZiAmc2IpCnsK
ICB0aGlzLT5tYXhsZW4gPSBzYi5tYXhsZW47CiAgdGhpcy0+bGVuID0gc2IubGVuOwogIHRoaXMt
PmJ1ZiA9IHNiLmJ1ZjsKfQoKaW5saW5lIHVfaW50CkFDRV9PUzo6d3NsZW4gKGNvbnN0IFdDaGFy
ICpzKQp7CiAgdV9pbnQgbGVuID0gMDsKCiAgd2hpbGUgKCpzKysgIT0gMCkKICAgIGxlbisrOwoK
ICByZXR1cm4gbGVuOwp9CgppbmxpbmUgQUNFX09TOjpXQ2hhciAqCkFDRV9PUzo6d3NjcHkgKFdD
aGFyICpkZXN0LCBjb25zdCBXQ2hhciAqc3JjKQp7CiAgV0NoYXIgKm9yaWdpbmFsX2Rlc3QgPSBk
ZXN0OwoKICB3aGlsZSAoKCpkZXN0KysgPSAqc3JjKyspICE9IDApCiAgICBjb250aW51ZTsKCiAg
cmV0dXJuIG9yaWdpbmFsX2Rlc3Q7Cn0KCmlubGluZSBpbnQKQUNFX09TOjp3c2NtcCAoY29uc3Qg
V0NoYXIgKnMsIGNvbnN0IFdDaGFyICp0KQp7CiAgY29uc3QgV0NoYXIgKnNjYW4xID0gczsKICBj
b25zdCBXQ2hhciAqc2NhbjIgPSB0OwoKICB3aGlsZSAoKnNjYW4xICE9IDAgJiYgKnNjYW4xID09
ICpzY2FuMikKICAgIHsKICAgICAgKytzY2FuMTsKICAgICAgKytzY2FuMjsKICAgIH0KCiAgcmV0
dXJuICpzY2FuMSAtICpzY2FuMjsKfQoKaW5saW5lIGludApBQ0VfT1M6OndzbmNtcCAoY29uc3Qg
V0NoYXIgKnMsIGNvbnN0IFdDaGFyICp0LCBzaXplX3QgbGVuKQp7CiAgY29uc3QgV0NoYXIgKnNj
YW4xID0gczsKICBjb25zdCBXQ2hhciAqc2NhbjIgPSB0OwoKICB3aGlsZSAobGVuICE9IDAgJiYg
KnNjYW4xICE9IDAgJiYgKnNjYW4xID09ICpzY2FuMikKICAgIHsKICAgICAgKytzY2FuMTsKICAg
ICAgKytzY2FuMjsKICAgICAgLS1sZW47CiAgICB9CgogIHJldHVybiBsZW4gPT0gMCA/IDAgOiAq
c2NhbjEgLSAqc2NhbjI7Cn0KIyAxMTY5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCmlubGluZSBpbnQKQUNFX09TOjpzaWdhZGRzZXQgKHNpZ3Nl
dF90ICpzLCBpbnQgc2lnbnVtKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKIyAxMTcyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVz
dWx0XzsgcmV0dXJuIDo6c2lnYWRkc2V0IChzLCBzaWdudW0pOyB9IHdoaWxlICgwKTsKCn0KCmlu
bGluZSBpbnQKQUNFX09TOjpzaWdkZWxzZXQgKHNpZ3NldF90ICpzLCBpbnQgc2lnbnVtKQp7CiMg
MTE3NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5p
IgogIGRvIHsgaW50IGFjZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6OnNpZ2RlbHNldCAocywgc2lnbnVtKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg
aW50CkFDRV9PUzo6c2lnZW1wdHlzZXQgKHNpZ3NldF90ICpzKQp7CiMgMTE3ODEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5pIgogIGRvIHsgaW50IGFj
ZV9yZXN1bHRfID0gLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87IHJldHVybiA6OnNpZ2Vt
cHR5c2V0IChzKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2lnZmlsbHNl
dCAoc2lnc2V0X3QgKnMpCnsKIyAxMTgwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyBpbnQgYWNlX3Jlc3VsdF8gPSAtMTsgYWNlX3Jl
c3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuIDo6c2lnZmlsbHNldCAocyk7IH0gd2hpbGUgKDAp
OwoKfQoKaW5saW5lIGludApBQ0VfT1M6OnNpZ2lzbWVtYmVyIChzaWdzZXRfdCAqcywgaW50IHNp
Z251bSkKewojIDExODQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFj
ZV9yZXN1bHRfOyByZXR1cm4gOjpzaWdpc21lbWJlciAocywgc2lnbnVtKTsgfSB3aGlsZSAoMCk7
Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2lnc3VzcGVuZCAoY29uc3Qgc2lnc2V0X3QgKnNpZ3Nl
dCkKewoKCgogIHNpZ3NldF90IHM7CgogIGlmIChzaWdzZXQgPT0gMCkKICAgIHsKICAgICAgc2ln
c2V0ID0gJnM7CiAgICAgIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZzKTsKICAgIH0KICBkbyB7IGlu
dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz
aWdzdXNwZW5kIChzaWdzZXQpOyB9IHdoaWxlICgwKTsKCgoKCn0KCmlubGluZSBpbnQKQUNFX09T
OjpzaWdwcm9jbWFzayAoaW50IGhvdywgY29uc3Qgc2lnc2V0X3QgKm5zcCwgc2lnc2V0X3QgKm9z
cCkKewojIDExODgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT1MuaSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9y
ZXN1bHRfOyByZXR1cm4gOjpzaWdwcm9jbWFzayAoaG93LCBuc3AsIG9zcCk7IH0gd2hpbGUgKDAp
OwoKCn0KCmlubGluZSBpbnQKQUNFX09TOjpwdGhyZWFkX3NpZ21hc2sgKGludCBob3csIGNvbnN0
IHNpZ3NldF90ICpuc3AsIHNpZ3NldF90ICpvc3ApCnsKCgoKCiAgZG8geyBpbnQgYWNlX3Jlc3Vs
dF8gPSAtMTsgYWNlX3Jlc3VsdF8gPSBhY2VfcmVzdWx0XzsgcmV0dXJuICgoYWNlX3Jlc3VsdF8g
PSAoOjpwdGhyZWFkX3NpZ21hc2sgKGhvdywgbnNwLCBvc3ApKSkgIT0gMCA/ICgoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gYWNlX3Jlc3VsdF8sIC0xKSA6IDApOyB9IHdoaWxlICgwKTsKIyAxMTkw
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCn0K
IyAxMTkyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCmlubGluZQpBQ0VfQ2xlYW51cDo6QUNFX0NsZWFudXAgKHZvaWQpCnsKfQoKaW5saW5lIHZv
aWQgKgpBQ0VfT1M6OmJzZWFyY2ggKGNvbnN0IHZvaWQgKmtleSwKICAgICAgICAgICAgICAgICBj
b25zdCB2b2lkICpiYXNlLAogICAgICAgICAgICAgICAgIHNpemVfdCBuZWwsCiAgICAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgQUNFX0NPTVBBUkVfRlVOQyBjb21w
YXIpCnsKCgoKICByZXR1cm4gOjpic2VhcmNoIChrZXksIGJhc2UsIG5lbCwgc2l6ZSwgY29tcGFy
KTsKIyAxMTk0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L09TLmkiCn0KCmlubGluZSB2b2lkCkFDRV9PUzo6cXNvcnQgKHZvaWQgKmJhc2UsCiAgICAgICAg
ICAgICAgIHNpemVfdCBuZWwsCiAgICAgICAgICAgICAgIHNpemVfdCB3aWR0aCwKICAgICAgICAg
ICAgICAgQUNFX0NPTVBBUkVfRlVOQyBjb21wYXIpCnsKCgoKICA6OnFzb3J0IChiYXNlLCBuZWws
IHdpZHRoLCBjb21wYXIpOwoKCgoKCgp9CgppbmxpbmUgaW50CkFDRV9PUzo6c2V0dWlkICh1aWRf
dCB1aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDExOTgwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKICBkbyB7IGlu
dCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRfOyByZXR1cm4gOjpz
ZXR1aWQgKHVpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIHVpZF90CkFDRV9PUzo6Z2V0dWlk
ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyAxMTk5NiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgZG8geyB1
aWRfdCBhY2VfcmVzdWx0XyA9ICh1aWRfdCkgLTE7IGFjZV9yZXN1bHRfID0gYWNlX3Jlc3VsdF87
IHJldHVybiA6OmdldHVpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUgaW50CkFDRV9PUzo6
c2V0Z2lkIChnaWRfdCBnaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoj
IDEyMDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1Mu
aSIKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf
OyByZXR1cm4gOjpzZXRnaWQgKGdpZCk7IH0gd2hpbGUgKDApOwoKfQoKaW5saW5lIGdpZF90CkFD
RV9PUzo6Z2V0Z2lkICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
IyAxMjAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
LmkiCiAgZG8geyBnaWRfdCBhY2VfcmVzdWx0XyA9IChnaWRfdCkgLTE7IGFjZV9yZXN1bHRfID0g
YWNlX3Jlc3VsdF87IHJldHVybiA6OmdldGdpZCAoKTsgfSB3aGlsZSAoMCk7Cgp9CgppbmxpbmUg
QUNFX0VYSVRfSE9PSwpBQ0VfT1M6OnNldF9leGl0X2hvb2sgKEFDRV9FWElUX0hPT0sgZXhpdF9o
b29rKQp7CiAgQUNFX0VYSVRfSE9PSyBvbGRfaG9vayA9IGV4aXRfaG9va187CiAgZXhpdF9ob29r
XyA9IGV4aXRfaG9vazsKICByZXR1cm4gb2xkX2hvb2s7Cn0KCmlubGluZSBpbnQKQUNFX09TOjpp
c2F0dHkgKGludCBoYW5kbGUpCnsKIyAxMjA1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmkiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICBkbyB7IGludCBhY2VfcmVzdWx0XyA9IC0xOyBhY2VfcmVzdWx0XyA9IGFjZV9yZXN1bHRf
OyByZXR1cm4gOjppc2F0dHkgKGhhbmRsZSk7IH0gd2hpbGUgKDApOwoKfQojIDEyMTIyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaSIKaW5saW5lIEFD
RV9UQ0hBUiAqCkFDRV9PUzo6c3RyZW52ZHVwIChjb25zdCBBQ0VfVENIQVIgKnN0cikKewoKCgoK
ICBBQ0VfVENIQVIgKnRlbXAgPSAwOwoKICBpZiAoc3RyWzBdID09ICckJwogICAgICAmJiAodGVt
cCA9IEFDRV9PUzo6Z2V0ZW52ICgmc3RyWzFdKSkgIT0gMCkKICAgIHJldHVybiBBQ0VfT1M6OnN0
cmR1cCAodGVtcCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRV9PUzo6c3RyZHVwIChzdHIpOwoKfQoK
CmlubGluZSBpbnQKQUNFX0NvdW50ZG93bl9UaW1lOjpzdGFydCAodm9pZCkKewogIGlmICh0aGlz
LT5tYXhfd2FpdF90aW1lXyAhPSAwKQogICAgewogICAgICB0aGlzLT5zdGFydF90aW1lXyA9IEFD
RV9PUzo6Z2V0dGltZW9mZGF5ICgpOwogICAgICB0aGlzLT5zdG9wcGVkXyA9IDA7CiAgICB9CiAg
cmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX0NvdW50ZG93bl9UaW1lOjpzdG9wICh2b2lkKQp7
CiAgaWYgKHRoaXMtPm1heF93YWl0X3RpbWVfICE9IDAgJiYgdGhpcy0+c3RvcHBlZF8gPT0gMCkK
ICAgIHsKICAgICAgQUNFX1RpbWVfVmFsdWUgZWxhcHNlZF90aW1lID0KICAgICAgICBBQ0VfT1M6
OmdldHRpbWVvZmRheSAoKSAtIHRoaXMtPnN0YXJ0X3RpbWVfOwoKICAgICAgaWYgKCp0aGlzLT5t
YXhfd2FpdF90aW1lXyA+IGVsYXBzZWRfdGltZSkKICAgICAgICAqdGhpcy0+bWF4X3dhaXRfdGlt
ZV8gLT0gZWxhcHNlZF90aW1lOwogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgICp0aGlz
LT5tYXhfd2FpdF90aW1lXyA9IEFDRV9UaW1lX1ZhbHVlOjp6ZXJvOwoKICAgICAgICB9CiAgICAg
IHRoaXMtPnN0b3BwZWRfID0gMTsKICAgIH0KICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0Vf
Q291bnRkb3duX1RpbWU6OnVwZGF0ZSAodm9pZCkKewogIHJldHVybiB0aGlzLT5zdG9wICgpID09
IDAgJiYgdGhpcy0+c3RhcnQgKCk7Cn0KIyA3NzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDc5NzQgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3OTc1ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMgojIDE5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDIKCgoKCgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GbGFnX01hbmlwLmgi
IDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Zs
YWdfTWFuaXAuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvcHJlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL0ZsYWdfTWFuaXAuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRmxhZ19NYW5pcC5oIiAyCgoKCgoKY2xhc3MgQUNFX0Zs
YWdfTWFuaXAKewogcHVibGljOgoKCgogIHN0YXRpYyBpbnQgc2V0X2ZsYWdzIChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKTsKCgogIHN0YXRpYyBp
bnQgY2xyX2ZsYWdzIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGZsYWdzKTsKCgogIHN0YXRpYyBpbnQgZ2V0X2ZsYWdzIChBQ0VfSEFORExFIGhhbmRsZSk7
CgoKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9GbGFnX01hbmlwLmkiIDEKCgoKCgppbmxpbmUgaW50CkFDRV9GbGFnX01hbmlwOjpnZXRfZmxh
Z3MgKEFDRV9IQU5ETEUgaGFuZGxlKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvRmxhZ19NYW5pcC5pIgogIHJldHVybiBBQ0VfT1M6OmZjbnRsIChoYW5kbGUsIDMsIDAp
OwoKfQojIDQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
RmxhZ19NYW5pcC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9GbGFnX01hbmlwLmgiIDIKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0hhbmRsZV9PcHMuaCIgMQojIDE4ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSGFuZGxlX09wcy5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg
MQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSGFu
ZGxlX09wcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9PUy5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9IYW5kbGVfT3BzLmgiIDIKCmNsYXNzIEFDRV9IYW5kbGVfT3BzCnsKcHVibGlj
OgoKCgoKCgoKICBzdGF0aWMgQUNFX0hBTkRMRSBoYW5kbGVfdGltZWRfb3BlbiAoQUNFX1RpbWVf
VmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9UQ0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
cGVybXMpOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL0hhbmRsZV9PcHMuaSIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvSGFuZGxlX09wcy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDMgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9IYW5kbGVfT3BzLmgiIDIKIyAyNiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xpYl9GaW5k
LmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L0xpYl9GaW5kLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9MaWJfRmluZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9MaWJfRmluZC5oIiAyCgoKCgoKCgpjbGFzcyBBQ0VfTGli
X0ZpbmQKewogcHVibGljOgojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIKICBzdGF0aWMgaW50IGxkZmluZCAoY29uc3QgQUNFX1RD
SEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSICpwYXRobmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1heGxlbik7CgoKCgoKCiAgc3RhdGljIEZJTEUg
Kmxkb3BlbiAoY29uc3QgQUNFX1RDSEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBBQ0VfVENIQVIgKnR5cGUpOwojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIKICBzdGF0aWMgQUNFX1RDSEFSICpsZG5h
bWUgKGNvbnN0IEFDRV9UQ0hBUiAqZW50cnlfcG9pbnQpOwoKCgoKCgogIHN0YXRpYyBpbnQgZ2V0
X3RlbXBfZGlyIChBQ0VfVENIQVIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9sZW4pOwoKCgogIHN0
YXRpYyBBQ0VfSEFORExFIG9wZW5fdGVtcF9maWxlIChjb25zdCBBQ0VfVENIQVIgKm5hbWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2RlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVybSA9IDApOwoKCgoKCgoKICBzdGF0aWMgc2l6
ZV90IHN0cnJlcGwgKGNoYXIgKnMsIGNoYXIgc2VhcmNoLCBjaGFyIHJlcGxhY2UpOwojIDg5ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaCIK
ICBzdGF0aWMgY2hhciAqc3Ryc3BsaXRfciAoY2hhciAqcywgY29uc3QgY2hhciAqdG9rZW4sIGNo
YXIgKiZuZXh0X3N0YXJ0KTsKIyA5OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL0xpYl9GaW5kLmgiCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTGliX0ZpbmQuaSIgMQojIDEwMyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xpYl9GaW5kLmgiIDIKCgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx
MDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9MaWJfRmlu
ZC5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9BQ0UuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9Jbml0X0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDIxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIgMgojIDMzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvSW5pdF9BQ0UuaCIK
Y2xhc3MgQUNFX0luaXRfQUNFCnsKcHVibGljOgoKCgoKCgogIHN0YXRpYyBpbnQgaW5pdCAodm9p
ZCk7CgoKCgoKCiAgc3RhdGljIGludCBmaW5pICh2b2lkKTsKCnByaXZhdGU6CgoKCgoKICBzdGF0
aWMgdV9pbnQgaW5pdF9maW5pX2NvdW50XzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5pIiAxCiMgNjIgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FDRS5oIiAyCgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg
NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Jbml0X0FD
RS5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9BQ0UuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMQojIDEzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU29ja19Db25uZWN0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTQgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU29ja19Db25u
ZWN0LmgiIDIKCgoKCgoKY2xhc3MgQUNFX0lORVRfQWRkcjsKCmNsYXNzIEFDRV9Tb2NrX0Nvbm5l
Y3QKewogcHVibGljOgoKCgoKICBzdGF0aWMgaW50IGJpbmRfcG9ydCAoQUNFX0hBTkRMRSBoYW5k
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9VSU5UMzIgaXBfYWRkciA9ICgoaW5fYWRk
cl90KSAweDAwMDAwMDAwKSk7CiMgNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIKICBzdGF0aWMgaW50IGdldF9iY2FzdF9hZGRy
IChBQ0VfVUlOVDMyICZiY2FzdF9hZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9UQ0hBUiAqaG9zdG5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFDRV9VSU5UMzIgaG9zdF9hZGRyID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfSEFORExFIGhhbmRsZSA9IC0xKTsKCgoKCgoKICBzdGF0aWMgaW50IGdldF9pcF9pbnRlcmZh
Y2VzIChzaXplX3QgJmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9J
TkVUX0FkZHIgKiZhZGRyX2FycmF5KTsKCgoKCgoKICBzdGF0aWMgaW50IGNvdW50X2ludGVyZmFj
ZXMgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICZob3dfbWFueSk7CgoKCiAgc3RhdGljIEFDRV9IQU5ETEUgZ2V0X2hhbmRsZSAodm9pZCk7
Cgp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L1NvY2tfQ29ubmVjdC5pIiAxCiMgNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9Tb2NrX0Nvbm5lY3QuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDc0ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU29ja19Db25uZWN0LmgiIDIKIyAyOSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAyCgoK
Y2xhc3MgQUNFX1RpbWVfVmFsdWU7CmNsYXNzIEFDRV9NZXNzYWdlX0Jsb2NrOwojIDQ1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCmNsYXNzIEFD
RSA6IHB1YmxpYyBBQ0VfRmxhZ19NYW5pcCwgcHVibGljIEFDRV9IYW5kbGVfT3BzLAogICAgICAg
ICAgICAgICAgICAgICAgIHB1YmxpYyBBQ0VfTGliX0ZpbmQsIHB1YmxpYyBBQ0VfSW5pdF9BQ0Us
CiAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIEFDRV9Tb2NrX0Nvbm5lY3QKewoKICBwcml2
YXRlOiBBQ0UgKHZvaWQpOyBBQ0UgKGNvbnN0IEFDRSYpOyBmcmllbmQgY2xhc3MgYWNlX2Rld2Fy
bl9ncGx1c3BsdXM7CnB1YmxpYzoKCgoKICBzdGF0aWMgdV9pbnQgbWFqb3JfdmVyc2lvbiAodm9p
ZCk7CgoKICBzdGF0aWMgdV9pbnQgbWlub3JfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3RhdGljIHVf
aW50IGJldGFfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3RhdGljIGNvbnN0IEFDRV9UQ0hBUiAqIGNv
bXBpbGVyX25hbWUgKHZvaWQpOwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX21ham9yX3ZlcnNp
b24gKHZvaWQpOwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX21pbm9yX3ZlcnNpb24gKHZvaWQp
OwoKCiAgc3RhdGljIHVfaW50IGNvbXBpbGVyX2JldGFfdmVyc2lvbiAodm9pZCk7CgoKCiAgc3Rh
dGljIGludCBvdXRfb2ZfaGFuZGxlcyAoaW50IGVycm9yKTsKIyAxMzAgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgc3NpemVfdCBy
ZWN2IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYs
CiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUg
KnRpbWVvdXQgPSAwKTsKIyAxNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgc3NpemVfdCByZWN2IChBQ0VfSEFORExFIGhhbmRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1
ZSAqdGltZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2bXNnIChBQ0VfSEFORExFIGhh
bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHJl
Y3Zmcm9tIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphZGRybGVu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91
dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKIyAxODIg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBz
dGF0aWMgc3NpemVfdCByZWN2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0g
MCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAw
KTsKCgogIHN0YXRpYyBzc2l6ZV90IHJlY3YgKEFDRV9IQU5ETEUgaGFuZGxlLCBzaXplX3Qgbiwg
Li4uKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdnYgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQg
aW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGlt
ZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCByZWN2dl9uIChBQ0VfSEFORExFIGhhbmRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1Rp
bWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq
Ynl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uIChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrICpt
ZXNzYWdlX2Jsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs
dWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190
cmFuc2ZlcnJlZCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kIChBQ0VfSEFORExFIGhhbmRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwKTsK
IyAyMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0Uu
aCIKICBzdGF0aWMgc3NpemVfdCBzZW5kIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91
dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kbXNnIChBQ0VfSEFORExFIGhhbmRsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2csCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHNlbmR0
byAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0
IHNvY2thZGRyICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkZHJsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCA9IDAp
OwoKICBzdGF0aWMgc3NpemVfdCBzZW5kX24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0ID0gMCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKIyAyNTkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBz
dGF0aWMgc3NpemVfdCBzZW5kX24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1l
b3V0ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJy
ZWQgPSAwKTsKCgogIHN0YXRpYyBzc2l6ZV90IHNlbmQgKEFDRV9IQU5ETEUgaGFuZGxlLCBzaXpl
X3QgbiwgLi4uKTsKCiAgc3RhdGljIHNzaXplX3Qgc2VuZHYgKEFDRV9IQU5ETEUgaGFuZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAogICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGlt
ZV9WYWx1ZSAqdGltZW91dCA9IDApOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kdl9uIChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpb3ZlYyAqaW92LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQgPSAwKTsKCiAgc3RhdGljIHNzaXpl
X3Qgc2VuZF9uIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9NZXNzYWdlX0Jsb2NrICptZXNzYWdlX2Jsb2NrLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQgPSAwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKCgogIHN0YXRpYyBzc2l6
ZV90IHJlYWRfbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKICBzdGF0aWMg
c3NpemVfdCB3cml0ZV9uIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxl
biwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkID0g
MCk7CgogIHN0YXRpYyBzc2l6ZV90IHJlYWR2X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGlvdmNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5z
ZmVycmVkID0gMCk7CgogIHN0YXRpYyBzc2l6ZV90IHdyaXRldl9uIChBQ0VfSEFORExFIGhhbmRs
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW92ZWMgKmlvdiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCA9IDApOwoKCgoKCgoKICBzdGF0aWMgaW50IGhhbmRs
ZV90aW1lZF9hY2NlcHQgKEFDRV9IQU5ETEUgbGlzdGVuZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCByZXN0YXJ0KTsKCgoKCgoKCiAgc3RhdGljIEFDRV9IQU5ETEUg
aGFuZGxlX3RpbWVkX2NvbXBsZXRlIChBQ0VfSEFORExFIGxpc3RlbmVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVv
dXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfdGxp
ID0gMCk7CgoKCgoKCiAgc3RhdGljIGludCBzZXRfaGFuZGxlX2xpbWl0IChpbnQgbmV3X2xpbWl0
ID0gLTEpOwoKCgoKCgogIHN0YXRpYyBpbnQgbWF4X2hhbmRsZXMgKHZvaWQpOwojIDM0OCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRp
YyBBQ0VfVENIQVIgKnN0cmVudmR1cCAoY29uc3QgQUNFX1RDSEFSICpzdHIpOwoKCgoKICBzdGF0
aWMgY29uc3QgY2hhciAqc3RyZW5kIChjb25zdCBjaGFyICpzKTsKCgoKICBzdGF0aWMgY2hhciAq
c3RybmV3IChjb25zdCBjaGFyICpzKTsKCgoKICBzdGF0aWMgY2hhciAqc3RybmR1cCAoY29uc3Qg
Y2hhciAqc3RyLCBzaXplX3Qgbik7CgoKCiAgc3RhdGljIGNoYXIgKnN0cm5uZXcgKGNvbnN0IGNo
YXIgKnN0ciwgc2l6ZV90IG4pOwojIDM4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyBjb25zdCBBQ0VfVENIQVIgKmV4ZWNuYW1l
IChjb25zdCBBQ0VfVENIQVIgKnBhdGhuYW1lKTsKCgoKCgoKICBzdGF0aWMgY29uc3QgQUNFX1RD
SEFSICpiYXNlbmFtZSAoY29uc3QgQUNFX1RDSEFSICpwYXRobmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSIGRlbGltID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnLycpOwoKCgoKCgoKICBzdGF0aWMgY29uc3QgQUNFX1RDSEFS
ICpkaXJuYW1lIChjb25zdCBBQ0VfVENIQVIgKnBhdGhuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9UQ0hBUiBkZWxpbSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLycpOwojIDQxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyBBQ0VfVENIQVIgKnRpbWVzdGFtcCAoQUNF
X1RDSEFSIGRhdGVfYW5kX3RpbWVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCB0aW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR1cm5fcG9p
bnRlcl90b19maXJzdF9kaWdpdCA9IDApOwoKCgoKCgoKICBzdGF0aWMgcGlkX3QgZm9yayAoY29u
c3QgQUNFX1RDSEFSICpwcm9ncmFtX25hbWUgPSAiPHVua25vd24+IiwKICAgICAgICAgICAgICAg
ICAgICAgaW50IGF2b2lkX3pvbWJpZXMgPSAwKTsKCgoKCgoKCiAgc3RhdGljIGludCBkYWVtb25p
emUgKGNvbnN0IEFDRV9UQ0hBUiBwYXRobmFtZVtdID0gIi8iLAogICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY2xvc2VfYWxsX2hhbmRsZXMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBQ0VfVENIQVIgcHJvZ3JhbV9uYW1lW10gPSAiPHVua25vd24+Iik7CgoKCgoKICBzdGF0
aWMgc2l6ZV90IHJvdW5kX3RvX3BhZ2VzaXplIChvZmZfdCBsZW5ndGgpOwoKCiAgc3RhdGljIHNp
emVfdCByb3VuZF90b19hbGxvY2F0aW9uX2dyYW51bGFyaXR5IChvZmZfdCBsZW4pOwoKCgoKICBz
dGF0aWMgaW50IGZvcm1hdF9oZXhkdW1wIChjb25zdCBjaGFyICpidWZmZXIsIGludCBzaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9UQ0hBUiAqb2J1ZiwgaW50IG9idWZfc3op
OwoKCiAgc3RhdGljIHVfbG9uZyBoYXNoX3BqdyAoY29uc3QgY2hhciAqc3RyKTsKCgogIHN0YXRp
YyB1X2xvbmcgaGFzaF9wancgKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90IGxlbik7CiMgNDcwICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3Rh
dGljIHVfbG9uZyBjcmMzMiAoY29uc3QgY2hhciAqc3RyKTsKCgoKICBzdGF0aWMgdV9sb25nIGNy
YzMyIChjb25zdCBjaGFyICpidWYsIEFDRV9VSU5UMzIgbGVuKTsKCgogIHN0YXRpYyB1X2xvbmcg
Z2NkICh1X2xvbmcgeCwgdV9sb25nIHkpOwoKCiAgc3RhdGljIHVfbG9uZyBtaW5pbXVtX2ZyYW1l
X3NpemUgKHVfbG9uZyBwZXJpb2QxLCB1X2xvbmcgcGVyaW9kMik7CiMgNDg5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3RhdGljIHVfbG9u
ZyBpc19wcmltZSAoY29uc3QgdV9sb25nIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdV9sb25nIG1pbl9mYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9s
b25nIG1heF9mYWN0b3IpOwoKCgogIHN0YXRpYyBpbnQgbWFwX2Vycm5vIChpbnQgZXJyb3IpOwoK
CgogIHN0YXRpYyBjb25zdCBBQ0VfVENIQVIgKnNvY2tfZXJyb3IgKGludCBlcnJvcik7CgoKCgoK
CiAgc3RhdGljIGludCBwcm9jZXNzX2FjdGl2ZSAocGlkX3QgcGlkKTsKIyA1MTYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIKICBzdGF0aWMgaW50
IHRlcm1pbmF0ZV9wcm9jZXNzIChwaWRfdCBwaWQpOwojIDUyNiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgogIHN0YXRpYyB2b2lkIHVuaXF1ZV9u
YW1lIChjb25zdCB2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9U
Q0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CgoK
ICBzdGF0aWMgdV9sb25nIGxvZzIgKHVfbG9uZyBudW0pOwoKCiAgc3RhdGljIEFDRV9UQ0hBUiBu
aWJibGUyaGV4ICh1X2ludCBuKTsKCgogIHN0YXRpYyB1X2NoYXIgaGV4MmJ5dGUgKEFDRV9UQ0hB
UiBjKTsKCgogIHN0YXRpYyBjaGFyIGRlYnVnICh2b2lkKTsKICBzdGF0aWMgdm9pZCBkZWJ1ZyAo
Y2hhciBkKTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3JlYWRfcmVhZHkgKEFDRV9IQU5ETEUgaGFu
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl
ICp0aW1lb3V0KTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3dyaXRlX3JlYWR5IChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVf
VmFsdWUgKnRpbWVvdXQpOwoKCiAgc3RhdGljIGludCBoYW5kbGVfZXhjZXB0aW9uX3JlYWR5IChB
Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKCgogIHN0YXRpYyBpbnQgaGFuZGxlX3JlYWR5
IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWFk
X3JlYWR5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd3JpdGVfcmVhZHksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBleGNlcHRpb25fcmVhZHkpOwoKCgogIHN0YXRpYyBp
bnQgZW50ZXJfcmVjdl90aW1lZHdhaXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmdmFsKTsKCgoKICBzdGF0aWMgaW50
IGVudGVyX3NlbmRfdGltZWR3YWl0IChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSogdGltZW91dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJnZhbCk7CgoKCiAgc3RhdGljIHZvaWQg
cmVjb3JkX2FuZF9zZXRfbm9uX2Jsb2NraW5nX21vZGUgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJnZhbCk7CgoK
CiAgc3RhdGljIHZvaWQgcmVzdG9yZV9ub25fYmxvY2tpbmdfbW9kZSAoQUNFX0hBTkRMRSBoYW5k
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7Cgpw
cml2YXRlOgoKCgoKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9pIChBQ0VfSEFORExFIGhhbmRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBsZW4pOwoKICBzdGF0aWMgc3NpemVfdCByZWN2X25faSAoQUNFX0hBTkRMRSBo
YW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy
cmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwojIDYy
NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIgog
IHN0YXRpYyBzc2l6ZV90IHJlY3Zfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy
cmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdl9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1l
X1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVz
X3RyYW5zZmVycmVkKTsKCiAgc3RhdGljIHNzaXplX3QgcmVjdnZfbl9pIChBQ0VfSEFORExFIGhh
bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CgogIHN0YXRpYyBzc2l6ZV90IHJlY3Z2X25faSAo
QUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3ZlYyAqaW92
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CgoKCgoKICBzdGF0aWMg
c3NpemVfdCBzZW5kX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7
CgogIHN0YXRpYyBzc2l6ZV90IHNlbmRfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYnVmLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwoKICBz
dGF0aWMgc3NpemVfdCBzZW5kX25faSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCk7CiMgNjg0ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiCiAgc3Rh
dGljIHNzaXplX3Qgc2VuZF9uX2kgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNm
ZXJyZWQpOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kX25faSAoQUNFX0hBTkRMRSBoYW5kbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCAqYnl0ZXNfdHJhbnNmZXJyZWQpOwoKICBzdGF0aWMgc3NpemVfdCBzZW5kdl9uX2kgKEFDRV9I
QU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW92ZWMgKmlv
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpb3ZjbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKTsKCiAgc3RhdGljIHNzaXpl
X3Qgc2VuZHZfbl9pIChBQ0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGlvdmVjICppb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW92
Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRp
bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVy
cmVkKTsKCgogIHN0YXRpYyBzaXplX3QgcGFnZXNpemVfOwoKCiAgc3RhdGljIHNpemVfdCBhbGxv
Y2F0aW9uX2dyYW51bGFyaXR5XzsKCgogIHN0YXRpYyB1X2xvbmcgY3JjX3RhYmxlX1tdOwoKCiAg
c3RhdGljIGNvbnN0IEFDRV9UQ0hBUiBoZXhfY2hhcnNfW107CgoKICBzdGF0aWMgY2hhciBkZWJ1
Z187Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvQUNFLmkiIDEKCgoKCgppbmxpbmUgc3NpemVfdApBQ0U6OnJlYWRfbiAoQUNFX0hBTkRMRSBo
YW5kbGUsCiAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVuLAog
ICAgICAgICAgICAgc2l6ZV90ICpieXRlc190cmFuc2ZlcnJlZCkKewogIHJldHVybiBBQ0VfT1M6
OnJlYWRfbiAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAg
ICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJhbnNm
ZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OndyaXRlX24gKEFDRV9IQU5ETEUgaGFuZGxl
LAogICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgICBzaXplX3QgbGVu
LAogICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICByZXR1cm4gQUNF
X09TOjp3cml0ZV9uIChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl
c190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFDRTo6cmVjdl9uIChBQ0VfSEFORExF
IGhhbmRsZSwKICAgICAgICAgICAgIHZvaWQgKmJ1ZiwKICAgICAgICAgICAgIHNpemVfdCBsZW4s
CiAgICAgICAgICAgICBpbnQgZmxhZ3MsCiAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1
ZSAqdGltZW91dCwKICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICBp
ZiAodGltZW91dCA9PSAwKQogICAgcmV0dXJuIEFDRTo6cmVjdl9uX2kgKGhhbmRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVzX3RyYW5zZmVycmVkKTsKICBlbHNlCiAgICByZXR1cm4gQUNFOjpyZWN2X25faSAoaGFu
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190cmFu
c2ZlcnJlZCk7Cn0KIyA4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL0FDRS5pIgppbmxpbmUgc3NpemVfdApBQ0U6OnJlY3ZfbiAoQUNFX0hBTkRMRSBoYW5k
bGUsCiAgICAgICAgICAgICB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAg
ICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFsdWUgKnRpbWVvdXQsCiAgICAgICAgICAgICBzaXpl
X3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAgaWYgKHRpbWVvdXQgPT0gMCkKICAgIHJldHVybiBB
Q0U6OnJlY3Zfbl9pIChoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBieXRl
c190cmFuc2ZlcnJlZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6cmVjdl9uX2kgKGhhbmRsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnl0ZXNfdHJhbnNmZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OnJlY3Z2
X24gKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgIGlvdmVjICppb3YsCiAgICAgICAg
ICAgICAgaW50IGlvdmNudCwKICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGlt
ZW91dCwKICAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAgaWYgKHRp
bWVvdXQgPT0gMCkKICAgIHJldHVybiBBQ0U6OnJlY3Z2X25faSAoaGFuZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBpb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmNudCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJhbnNmZXJyZWQpOwogIGVsc2UKICAg
IHJldHVybiBBQ0U6OnJlY3Z2X25faSAoaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpb3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmNudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJh
bnNmZXJyZWQpOwp9CgppbmxpbmUgc3NpemVfdApBQ0U6OnNlbmRfbiAoQUNFX0hBTkRMRSBoYW5k
bGUsCiAgICAgICAgICAgICBjb25zdCB2b2lkICpidWYsCiAgICAgICAgICAgICBzaXplX3QgbGVu
LAogICAgICAgICAgICAgaW50IGZsYWdzLAogICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs
dWUgKnRpbWVvdXQsCiAgICAgICAgICAgICBzaXplX3QgKmJ5dGVzX3RyYW5zZmVycmVkKQp7CiAg
aWYgKHRpbWVvdXQgPT0gMCkKICAgIHJldHVybiBBQ0U6OnNlbmRfbl9pIChoYW5kbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBieXRlc190cmFuc2ZlcnJlZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6c2VuZF9uX2kgKGhh
bmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfdHJh
bnNmZXJyZWQpOwp9CiMgMTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvQUNFLmkiCmlubGluZSBzc2l6ZV90CkFDRTo6c2VuZF9uIChBQ0VfSEFORExFIGhh
bmRsZSwKICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmJ1ZiwKICAgICAgICAgICAgIHNpemVfdCBs
ZW4sCiAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAgICAgICAg
ICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJyZWQpCnsKICBpZiAodGltZW91dCA9PSAwKQogICAg
cmV0dXJuIEFDRTo6c2VuZF9uX2kgKGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVzX3RyYW5zZmVycmVkKTsKICBlbHNlCiAgICByZXR1cm4gQUNFOjpzZW5kX25faSAo
aGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBieXRlc190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFD
RTo6c2VuZHZfbiAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgY29uc3QgaW92ZWMg
KmlvdiwKICAgICAgICAgICAgICBpbnQgaW92Y250LAogICAgICAgICAgICAgIGNvbnN0IEFDRV9U
aW1lX1ZhbHVlICp0aW1lb3V0LAogICAgICAgICAgICAgIHNpemVfdCAqYnl0ZXNfdHJhbnNmZXJy
ZWQpCnsKICBpZiAodGltZW91dCA9PSAwKQogICAgcmV0dXJuIEFDRTo6c2VuZHZfbl9pIChoYW5k
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW92Y250LAogICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc190cmFuc2ZlcnJl
ZCk7CiAgZWxzZQogICAgcmV0dXJuIEFDRTo6c2VuZHZfbl9pIChoYW5kbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlvdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW92Y250LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBieXRlc190cmFuc2ZlcnJlZCk7Cn0KCmlubGluZSBzc2l6ZV90CkFDRTo6c2VuZF9pIChB
Q0VfSEFORExFIGhhbmRsZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKQp7CgoKCiAgcmV0
dXJuIEFDRV9PUzo6d3JpdGUgKGhhbmRsZSwgKGNvbnN0IGNoYXIgKikgYnVmLCBsZW4pOwoKfQoK
aW5saW5lIHNzaXplX3QKQUNFOjpyZWN2X2kgKEFDRV9IQU5ETEUgaGFuZGxlLCB2b2lkICpidWYs
IHNpemVfdCBsZW4pCnsKCgoKICByZXR1cm4gQUNFX09TOjpyZWFkIChoYW5kbGUsIChjaGFyICop
IGJ1ZiwgbGVuKTsKCn0KCmlubGluZSBpbnQKQUNFOjpoYW5kbGVfcmVhZF9yZWFkeSAoQUNFX0hB
TkRMRSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl
ICp0aW1lb3V0KQp7CiAgcmV0dXJuIEFDRTo6aGFuZGxlX3JlYWR5IChoYW5kbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwKTsKfQoKaW5saW5lIGludApBQ0U6OmhhbmRsZV93cml0ZV9yZWFkeSAoQUNFX0hBTkRM
RSBoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAq
dGltZW91dCkKewogIHJldHVybiBBQ0U6OmhhbmRsZV9yZWFkeSAoaGFuZGxlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCk7Cn0KCmlubGluZSBpbnQKQUNFOjpoYW5kbGVfZXhjZXB0aW9uX3JlYWR5IChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9W
YWx1ZSAqdGltZW91dCkKewogIHJldHVybiBBQ0U6OmhhbmRsZV9yZWFkeSAoaGFuZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMSk7Cn0KCmlubGluZSB2b2lkCkFDRTo6dW5pcXVlX25hbWUgKGNvbnN0IHZvaWQg
Km9iamVjdCwKICAgICAgICAgICAgICAgICAgQUNFX1RDSEFSICpuYW1lLAogICAgICAgICAgICAg
ICAgICBzaXplX3QgbGVuZ3RoKQp7CiAgQUNFX09TOjp1bmlxdWVfbmFtZSAob2JqZWN0LCBuYW1l
LCBsZW5ndGgpOwp9CgppbmxpbmUgdV9sb25nCkFDRTo6bG9nMiAodV9sb25nIG51bSkKewogIHVf
bG9uZyBsb2cgPSAwOwoKICBmb3IgKDsKICAgICAgIG51bSA+IDA7CiAgICAgICBsb2crKykKICAg
IG51bSA+Pj0gMTsKCiAgcmV0dXJuIGxvZzsKfQoKaW5saW5lIEFDRV9UQ0hBUgpBQ0U6Om5pYmJs
ZTJoZXggKHVfaW50IG4pCnsKCiAgcmV0dXJuIEFDRTo6aGV4X2NoYXJzX1tuICYgMHgwZl07Cn0K
CmlubGluZSB1X2NoYXIKQUNFOjpoZXgyYnl0ZSAoQUNFX1RDSEFSIGMpCnsKICBpZiAoaXNkaWdp
dCAoYykpCiAgICByZXR1cm4gKHVfY2hhcikgKGMgLSAnMCcpOwogIGVsc2UgaWYgKGlzbG93ZXIg
KGMpKQogICAgcmV0dXJuICh1X2NoYXIpICgxMCArIGMgLSAnYScpOwogIGVsc2UKICAgIHJldHVy
biAodV9jaGFyKSAoMTAgKyBjIC0gJ0EnKTsKfQoKaW5saW5lIGNoYXIKQUNFOjpkZWJ1ZyAodm9p
ZCkKewogIHJldHVybiBBQ0U6OmRlYnVnXzsKfQoKaW5saW5lIHZvaWQKQUNFOjpkZWJ1ZyAoY2hh
ciBjKQp7CiAgQUNFOjpkZWJ1Z18gPSBjOwp9CgppbmxpbmUgY2hhciAqCkFDRTo6c3RybmV3IChj
b25zdCBjaGFyICpzKQp7CiAgY2hhciAqdCA9IG5ldyBjaGFyIFs6OnN0cmxlbihzKSArIDFdOwog
IGlmICh0ID09IDApCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICByZXR1cm4gQUNFX09TOjpzdHJj
cHkgKHQsIHMpOwp9CiMgNzI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvQUNFLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIgMgojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIiAyCgoKCgoKCgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIy
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9C
bG9jay5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9NYWxsb2MuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWFsbG9jLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvYy5oIiAyCgoKCgoKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIiAxCiMg
MTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNn
LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By
ZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9Mb2dfTXNnLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMgojIDkyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfUmVjb3JkLmgiIDEKIyAx
NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNv
cmQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
T1MuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvTG9nX1JlY29yZC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9Mb2dfUHJpb3JpdHkuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1ByaW9yaXR5LmgiCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfUHJpb3JpdHkuaCIg
MgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9n
X1ByaW9yaXR5LmgiCmVudW0gQUNFX0xvZ19Qcmlvcml0eQp7CgoKCiAgTE1fU0hVVERPV04gPSAw
MSwKCgogIExNX1RSQUNFID0gMDIsCgoKCiAgTE1fREVCVUcgPSAwNCwKCgogIExNX0lORk8gPSAw
MTAsCgoKCiAgTE1fTk9USUNFID0gMDIwLAoKCiAgTE1fV0FSTklORyA9IDA0MCwKCgogIExNX1NU
QVJUVVAgPSAwMTAwLAoKCiAgTE1fRVJST1IgPSAwMjAwLAoKCiAgTE1fQ1JJVElDQUwgPSAwNDAw
LAoKCgogIExNX0FMRVJUID0gMDEwMDAsCgoKCiAgTE1fRU1FUkdFTkNZID0gMDIwMDAsCgoKICBM
TV9NQVggPSBMTV9FTUVSR0VOQ1ksCgoKCiAgTE1fRU5TVVJFXzMyX0JJVFMgPSAweDdGRkZGRkZG
Cn07CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9w
b3N0LmgiIDEKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL0xvZ19Qcmlvcml0eS5oIiAyCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9Mb2dfUmVjb3JkLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyMyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNvcmQuaCIgMgoKCgoKCgpj
bGFzcyBBQ0VfTG9nX1JlY29yZAp7CnB1YmxpYzoKCiAgZW51bQogIHsKCiAgICBNQVhMT0dNU0dM
RU4gPSA0ICogMTAyNCwKCgogICAgQUxJR05fV09SREIgPSA4LAoKCgoKICAgIFZFUkJPU0VfTEVO
ID0gMTI4LAoKCiAgICBNQVhWRVJCT1NFTE9HTVNHTEVOID0gVkVSQk9TRV9MRU4gKyBNQVhMT0dN
U0dMRU4KICB9OwojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvTG9nX1JlY29yZC5oIgogIEFDRV9Mb2dfUmVjb3JkICh2b2lkKTsKICBBQ0VfTG9nX1Jl
Y29yZCAoQUNFX0xvZ19Qcmlvcml0eSBscCwKICAgICAgICAgICAgICAgICAgbG9uZyB0aW1lX3N0
YW1wLAogICAgICAgICAgICAgICAgICBsb25nIHBpZCk7CiAgQUNFX0xvZ19SZWNvcmQgKEFDRV9M
b2dfUHJpb3JpdHkgbHAsCiAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZ0
aW1lX3N0YW1wLAogICAgICAgICAgICAgICAgICBsb25nIHBpZCk7CgoKICB+QUNFX0xvZ19SZWNv
cmQgKHZvaWQpOwoKCgoKICBpbnQgcHJpbnQgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVbXSwK
ICAgICAgICAgICAgIHVfbG9uZyB2ZXJib3NlX2ZsYWcsCgogICAgICAgICAgICAgRklMRSAqZnAg
PSBzdGRlcnIpOwoKCgoKCgoKICBpbnQgcHJpbnQgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVb
XSwKICAgICAgICAgICAgIHVfbG9uZyB2ZXJib3NlX2ZsYWcsCiAgICAgICAgICAgICBvc3RyZWFt
ICZzdHJlYW0pOwoKCiAgaW50IGZvcm1hdF9tc2cgKGNvbnN0IEFDRV9UQ0hBUiBob3N0X25hbWVb
XSwKICAgICAgICAgICAgICAgICAgdV9sb25nIHZlcmJvc2VfZmxhZywKICAgICAgICAgICAgICAg
ICAgQUNFX1RDSEFSICp2ZXJib3NlX21zZyk7CiMgMTA0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1JlY29yZC5oIgogIHN0YXRpYyBjb25zdCBBQ0Vf
VENIQVIgKnByaW9yaXR5X25hbWUgKEFDRV9Mb2dfUHJpb3JpdHkgcCk7CgoKICBzdGF0aWMgdm9p
ZCBwcmlvcml0eV9uYW1lIChBQ0VfTG9nX1ByaW9yaXR5IHAsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lKTsKCgoKICB2b2lkIGVuY29kZSAodm9pZCk7
CgoKICB2b2lkIGRlY29kZSAodm9pZCk7CgoKCgogIGxvbmcgdHlwZSAodm9pZCkgY29uc3Q7CgoK
ICB2b2lkIHR5cGUgKGxvbmcpOwoKCgoKCgogIHVfbG9uZyBwcmlvcml0eSAodm9pZCkgY29uc3Q7
CgoKCiAgdm9pZCBwcmlvcml0eSAodV9sb25nIG51bSk7CgoKICBsb25nIGxlbmd0aCAodm9pZCkg
Y29uc3Q7CgoKICB2b2lkIGxlbmd0aCAobG9uZyk7CgoKICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAm
dGltZV9zdGFtcCAodm9pZCkgY29uc3Q7CgoKICB2b2lkIHRpbWVfc3RhbXAgKGNvbnN0IEFDRV9U
aW1lX1ZhbHVlICYpOwoKCiAgbG9uZyBwaWQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBwaWQgKGxv
bmcpOwoKCiAgQUNFX1RDSEFSICptc2dfZGF0YSAodm9pZCk7CgoKICB2b2lkIG1zZ19kYXRhIChj
b25zdCBBQ0VfVENIQVIgKmRhdGEpOwoKCiAgdm9pZCBtc2dfZGF0YV9sZW4gKHNpemVfdCBsZW4p
OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZh
dGU6CgogIHZvaWQgcm91bmRfdXAgKHZvaWQpOwoKCgoKCgoKICBBQ0VfSU5UMzIgbGVuZ3RoXzsK
CgogIGxvbmcgdHlwZV87CgoKICBBQ0VfVGltZV9WYWx1ZSB0aW1lX3N0YW1wXzsKCgogIGxvbmcg
cGlkXzsKCgogIEFDRV9UQ0hBUiBtc2dfZGF0YV9bTUFYTE9HTVNHTEVOXTsKCgogIHN0YXRpYyBj
b25zdCBBQ0VfVENIQVIgKnByaW9yaXR5X25hbWVzX1tdOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19SZWNvcmQuaSIgMQoKCgoKCmlu
bGluZQpBQ0VfTG9nX1JlY29yZDo6fkFDRV9Mb2dfUmVjb3JkICh2b2lkKQp7Cn0KCmlubGluZSB2
b2lkCkFDRV9Mb2dfUmVjb3JkOjplbmNvZGUgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+bGVuZ3RoXyA9IChfX2V4dGVuc2lvbl9fICh7IHJl
Z2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAodGhpcy0+
bGVuZ3RoXykpIF9fdiA9ICgoKCh0aGlzLT5sZW5ndGhfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8
ICgoKHRoaXMtPmxlbmd0aF8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT5sZW5ndGhf
KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGhpcy0+bGVuZ3RoXykgJiAweDAwMDAwMGZmKSA8
PCAyNCkpOyBlbHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwg
JDE2LCAlMDsiICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGlu
dCkgKHRoaXMtPmxlbmd0aF8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKICB0aGlzLT50eXBlXyA9IChf
X2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5f
Y29uc3RhbnRfcCAodGhpcy0+dHlwZV8pKSBfX3YgPSAoKCgodGhpcy0+dHlwZV8pICYgMHhmZjAw
MDAwMCkgPj4gMjQpIHwgKCgodGhpcy0+dHlwZV8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0
aGlzLT50eXBlXykgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnR5cGVfKSAmIDB4MDAw
MDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyb3J3ICQ4LCAldzA7
IiAicm9ybCAkMTYsICUwOyIgInJvcncgJDgsICV3MCIgOiAiPXIiIChfX3YpIDogIjAiICgodW5z
aWduZWQgaW50KSAodGhpcy0+dHlwZV8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKCgogIHRoaXMtPnRp
bWVfc3RhbXBfLnNlYyAoKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9f
djsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wICh0aGlzLT50aW1lX3N0YW1wXy5zZWMgKCkpKSBf
X3YgPSAoKCgodGhpcy0+dGltZV9zdGFtcF8uc2VjICgpKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8
ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRo
aXMtPnRpbWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnRp
bWVfc3RhbXBfLnNlYyAoKSkgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBlbHNlIF9fYXNtX18gX192
b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsiICJyb3J3ICQ4LCAldzAi
IDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMtPnRpbWVfc3RhbXBfLnNl
YyAoKSkpIDogImNjIik7IF9fdjsgfSkpKTsKICB0aGlzLT50aW1lX3N0YW1wXy51c2VjICgoX19l
eHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2Nv
bnN0YW50X3AgKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMgKCkpKSBfX3YgPSAoKCgodGhpcy0+dGlt
ZV9zdGFtcF8udXNlYyAoKSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0aGlzLT50aW1lX3N0
YW1wXy51c2VjICgpKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+dGltZV9zdGFtcF8u
dXNlYyAoKSkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMg
KCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJv
cncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcwIiA6ICI9ciIgKF9fdikg
OiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1wXy51c2VjICgpKSkgOiAiY2Mi
KTsgX192OyB9KSkpOwogIHRoaXMtPnBpZF8gPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1
bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRoaXMtPnBpZF8pKSBf
X3YgPSAoKCgodGhpcy0+cGlkXykgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0aGlzLT5waWRf
KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+cGlkXykgJiAweDAwMDBmZjAwKSA8PCA4
KSB8ICgoKHRoaXMtPnBpZF8pICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcw
IiA6ICI9ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT5waWRfKSkgOiAiY2Mi
KTsgX192OyB9KSk7Cn0KCmlubGluZSB2b2lkCkFDRV9Mb2dfUmVjb3JkOjpkZWNvZGUgKHZvaWQp
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+dGltZV9z
dGFtcF8gPSBBQ0VfVGltZV9WYWx1ZSAoKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWdu
ZWQgaW50IF9fdjsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wICh0aGlzLT50aW1lX3N0YW1wXy5z
ZWMoKSkpIF9fdiA9ICgoKCh0aGlzLT50aW1lX3N0YW1wXy5zZWMoKSkgJiAweGZmMDAwMDAwKSA+
PiAyNCkgfCAoKCh0aGlzLT50aW1lX3N0YW1wXy5zZWMoKSkgJiAweDAwZmYwMDAwKSA+PiA4KSB8
ICgoKHRoaXMtPnRpbWVfc3RhbXBfLnNlYygpKSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgodGhp
cy0+dGltZV9zdGFtcF8uc2VjKCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwg
JXcwIiA6ICI9ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1w
Xy5zZWMoKSkpIDogImNjIik7IF9fdjsgfSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlm
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAodGhpcy0+dGltZV9zdGFtcF8udXNlYygpKSkgX192ID0g
KCgoKHRoaXMtPnRpbWVfc3RhbXBfLnVzZWMoKSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKCh0
aGlzLT50aW1lX3N0YW1wXy51c2VjKCkpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT50
aW1lX3N0YW1wXy51c2VjKCkpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT50aW1lX3N0
YW1wXy51c2VjKCkpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoInJvcncgJDgsICV3MDsiICJyb3JsICQxNiwgJTA7IiAicm9ydyAkOCwgJXcwIiA6ICI9
ciIgKF9fdikgOiAiMCIgKCh1bnNpZ25lZCBpbnQpICh0aGlzLT50aW1lX3N0YW1wXy51c2VjKCkp
KSA6ICJjYyIpOyBfX3Y7IH0pKSk7CiAgdGhpcy0+dHlwZV8gPSAoX19leHRlbnNpb25fXyAoeyBy
ZWdpc3RlciB1bnNpZ25lZCBpbnQgX192OyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKHRoaXMt
PnR5cGVfKSkgX192ID0gKCgoKHRoaXMtPnR5cGVfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgo
KHRoaXMtPnR5cGVfKSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgodGhpcy0+dHlwZV8pICYgMHgw
MDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT50eXBlXykgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBl
bHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsi
ICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMt
PnR5cGVfKSkgOiAiY2MiKTsgX192OyB9KSk7CiAgdGhpcy0+cGlkXyA9IChfX2V4dGVuc2lvbl9f
ICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3Y7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAo
dGhpcy0+cGlkXykpIF9fdiA9ICgoKCh0aGlzLT5waWRfKSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8
ICgoKHRoaXMtPnBpZF8pICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKCh0aGlzLT5waWRfKSAmIDB4
MDAwMGZmMDApIDw8IDgpIHwgKCgodGhpcy0+cGlkXykgJiAweDAwMDAwMGZmKSA8PCAyNCkpOyBl
bHNlIF9fYXNtX18gX192b2xhdGlsZV9fICgicm9ydyAkOCwgJXcwOyIgInJvcmwgJDE2LCAlMDsi
ICJyb3J3ICQ4LCAldzAiIDogIj1yIiAoX192KSA6ICIwIiAoKHVuc2lnbmVkIGludCkgKHRoaXMt
PnBpZF8pKSA6ICJjYyIpOyBfX3Y7IH0pKTsKICB0aGlzLT5sZW5ndGhfID0gKF9fZXh0ZW5zaW9u
X18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdjsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w
ICh0aGlzLT5sZW5ndGhfKSkgX192ID0gKCgoKHRoaXMtPmxlbmd0aF8pICYgMHhmZjAwMDAwMCkg
Pj4gMjQpIHwgKCgodGhpcy0+bGVuZ3RoXykgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgoKHRoaXMt
Pmxlbmd0aF8pICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKCh0aGlzLT5sZW5ndGhfKSAmIDB4MDAw
MDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJyb3J3ICQ4LCAldzA7
IiAicm9ybCAkMTYsICUwOyIgInJvcncgJDgsICV3MCIgOiAiPXIiIChfX3YpIDogIjAiICgodW5z
aWduZWQgaW50KSAodGhpcy0+bGVuZ3RoXykpIDogImNjIik7IF9fdjsgfSkpOwp9CgppbmxpbmUg
bG9uZwpBQ0VfTG9nX1JlY29yZDo6dHlwZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnR5cGVfOwp9CgppbmxpbmUgdm9p
ZApBQ0VfTG9nX1JlY29yZDo6dHlwZSAobG9uZyB0KQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICB0aGlzLT50eXBlXyA9IHQ7Cn0KCmlubGluZSBsb25nCkFDRV9Mb2df
UmVjb3JkOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbmd0aF87Cn0KCmlubGluZSB2b2lkCkFDRV9M
b2dfUmVjb3JkOjpsZW5ndGggKGxvbmcgbCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICB0aGlzLT5sZW5ndGhfID0gc3RhdGljX2Nhc3Q8QUNFX1VJTlQzMj4gKGwp
Owp9CgppbmxpbmUgY29uc3QgQUNFX1RpbWVfVmFsdWUgJgpBQ0VfTG9nX1JlY29yZDo6dGltZV9z
dGFtcCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIHRoaXMtPnRpbWVfc3RhbXBfOwp9CgppbmxpbmUgdm9pZApBQ0VfTG9n
X1JlY29yZDo6dGltZV9zdGFtcCAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJnRzKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT50aW1lX3N0YW1wXyA9
IHRzOwp9CgppbmxpbmUgbG9uZwpBQ0VfTG9nX1JlY29yZDo6cGlkICh2b2lkKSBjb25zdAp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5waWRfOwp9
CgppbmxpbmUgdm9pZApBQ0VfTG9nX1JlY29yZDo6cGlkIChsb25nIHApCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cGlkXyA9IHA7Cn0KCmlubGluZSBBQ0Vf
VENIQVIgKgpBQ0VfTG9nX1JlY29yZDo6bXNnX2RhdGEgKHZvaWQpCnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bXNnX2RhdGFfOwp9CiMg
MTk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX1Jl
Y29yZC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvcG9zdC5oIiAxCiMgMjAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTG9nX1JlY29yZC5oIiAyCiMgOTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmgiIDEK
IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xv
Z19Nc2dfQXR0cmlidXRlcy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmgiIDIKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQoj
IDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfTG9n
X01zZ19BdHRyaWJ1dGVzLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2Uvc3RyZWFtcy5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDEgIi91
c3IvbG9jYWwvZ2NjLTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVk
ZS9zdGRhcmcuaCIgMSAzCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDEgIi91c3IvbG9jYWwvZ2Nj
LTMuMC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAx
IDMKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09T
X0xvZ19Nc2dfQXR0cmlidXRlcy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0LmgiIDEKIyAz
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xvZ19N
c2dfQXR0cmlidXRlcy5oIiAyCiMgNDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIKY2xhc3MgQUNFX09TX0xvZ19N
c2dfQXR0cmlidXRlcwp7CnB1YmxpYzoKCiAgQUNFX09TX0xvZ19Nc2dfQXR0cmlidXRlcyAodm9p
ZCk7Cgpwcm90ZWN0ZWQ6CiAgZnJpZW5kIGNsYXNzIEFDRV9Mb2dfTXNnOwoKCiAgb3N0cmVhbSAq
b3N0cmVhbV87CgoKICB1bnNpZ25lZCBsb25nIHByaW9yaXR5X21hc2tfOwoKCiAgaW50IHRyYWNp
bmdfZW5hYmxlZF87CgoKCiAgaW50IHJlc3RhcnRfOwoKCiAgaW50IHRyYWNlX2RlcHRoXzsKCgoK
CgoKfTsKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvT1NfTG9nX01zZ19BdHRyaWJ1dGVzLmlubCIgMQoKCmlubGluZQpBQ0VfT1NfTG9nX01z
Z19BdHRyaWJ1dGVzOjpBQ0VfT1NfTG9nX01zZ19BdHRyaWJ1dGVzICh2b2lkKQp7Cn0KIyA4NiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX0xvZ19Nc2df
QXR0cmlidXRlcy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMgojIDk0ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIiAyCiMgMTEw
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5o
IgpjbGFzcyBBQ0VfTG9nX01zZ19DYWxsYmFjazsKCgoKCgoKY2xhc3MgQUNFX1RocmVhZF9EZXNj
cmlwdG9yOwojIDE0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL0xvZ19Nc2cuaCIKY2xhc3MgQUNFX0xvZ19Nc2cKewoKcHVibGljOgoKICBlbnVtCiAgewoK
ICAgIFNUREVSUiA9IDEsCgogICAgTE9HR0VSID0gMiwKCgogICAgT1NUUkVBTSA9IDQsCgogICAg
TVNHX0NBTExCQUNLID0gOCwKCiAgICBWRVJCT1NFID0gMTYsCgoKICAgIFZFUkJPU0VfTElURSA9
IDMyLAoKCiAgICBTSUxFTlQgPSA2NCwKCiAgICBTWVNMT0cgPSAxMjgKIH07CgoKCgogIHN0YXRp
YyBBQ0VfTG9nX01zZyAqaW5zdGFuY2UgKHZvaWQpOwoKCiAgc3RhdGljIGludCBleGlzdHMgKHZv
aWQpOwoKCgogIHN0YXRpYyB2b2lkIGRpc2FibGVfZGVidWdfbWVzc2FnZXMgKEFDRV9Mb2dfUHJp
b3JpdHkgcHJpb3JpdHkgPSBMTV9ERUJVRyk7CgoKCiAgc3RhdGljIHZvaWQgZW5hYmxlX2RlYnVn
X21lc3NhZ2VzIChBQ0VfTG9nX1ByaW9yaXR5IHByaW9yaXR5ID0gTE1fREVCVUcpOwoKCiAgQUNF
X0xvZ19Nc2cgKHZvaWQpOwoKCiAgfkFDRV9Mb2dfTXNnICh2b2lkKTsKIyAyMTIgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgaW50IG9w
ZW4gKGNvbnN0IEFDRV9UQ0hBUiAqcHJvZ19uYW1lLAogICAgICAgICAgICB1X2xvbmcgb3B0aW9u
c19mbGFncyA9IEFDRV9Mb2dfTXNnOjpTVERFUlIsCiAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hB
UiAqbG9nZ2VyX2tleSA9IDApOwojIDIyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICB2b2lkIHNldF9mbGFncyAodV9sb25nIGYpOwog
IHZvaWQgY2xyX2ZsYWdzICh1X2xvbmcgZik7CiAgdV9sb25nIGZsYWdzICh2b2lkKTsKIyAyMzcg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgi
CiAgaW50IGFjcXVpcmUgKHZvaWQpOwoKCiAgaW50IHJlbGVhc2UgKHZvaWQpOwoKCgoKICB2b2lk
IHN5bmMgKGNvbnN0IEFDRV9UQ0hBUiAqcHJvZ3JhbV9uYW1lKTsKCgoKCgoKICB2b2lkIG9wX3N0
YXR1cyAoaW50IHN0YXR1cyk7CgoKCiAgaW50IG9wX3N0YXR1cyAodm9pZCk7CgoKCiAgdm9pZCBl
cnJudW0gKGludCk7CgoKCiAgaW50IGVycm51bSAodm9pZCk7CgoKICB2b2lkIGxpbmVudW0gKGlu
dCk7CgoKICBpbnQgbGluZW51bSAodm9pZCk7CgoKICB2b2lkIGZpbGUgKGNvbnN0IGNoYXIgKik7
CgoKICBjb25zdCBjaGFyICpmaWxlICh2b2lkKTsKCgogIHZvaWQgbXNnIChjb25zdCBBQ0VfVENI
QVIgKik7CgoKICBjb25zdCBBQ0VfVENIQVIgKm1zZyAodm9pZCk7CgoKCiAgdm9pZCByZXN0YXJ0
IChpbnQpOwoKCgogIGludCByZXN0YXJ0ICh2b2lkKTsKCgoKCgoKICB2b2lkIG1zZ19vc3RyZWFt
IChvc3RyZWFtICopOwoKCgoKCgogIHZvaWQgbXNnX29zdHJlYW0gKG9zdHJlYW0gKiwgaW50IGRl
bGV0ZV9vc3RyZWFtKTsKCgogIG9zdHJlYW0gKm1zZ19vc3RyZWFtICh2b2lkKSBjb25zdDsKCgoK
CgoKCiAgQUNFX0xvZ19Nc2dfQ2FsbGJhY2sgKm1zZ19jYWxsYmFjayAoQUNFX0xvZ19Nc2dfQ2Fs
bGJhY2sgKmMpOwogIEFDRV9Mb2dfTXNnX0NhbGxiYWNrICptc2dfY2FsbGJhY2sgKHZvaWQpIGNv
bnN0OwoKCiAgaW50IGluYyAodm9pZCk7CiAgaW50IGRlYyAodm9pZCk7CgoKICBpbnQgdHJhY2Vf
ZGVwdGggKHZvaWQpOwogIHZvaWQgdHJhY2VfZGVwdGggKGludCk7CgoKICBpbnQgdHJhY2VfYWN0
aXZlICh2b2lkKTsKICB2b2lkIHRyYWNlX2FjdGl2ZSAoaW50IHZhbHVlKTsKCgogIEFDRV9UaHJl
YWRfRGVzY3JpcHRvciAqdGhyX2Rlc2MgKHZvaWQpIGNvbnN0OwoKCgoKCgogIHZvaWQgdGhyX2Rl
c2MgKEFDRV9UaHJlYWRfRGVzY3JpcHRvciAqdGQpOwojIDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICB2b2lkIHN0b3BfdHJhY2lu
ZyAodm9pZCk7CiAgdm9pZCBzdGFydF90cmFjaW5nICh2b2lkKTsKICBpbnQgdHJhY2luZ19lbmFi
bGVkICh2b2lkKTsKCiAgdHlwZWRlZiBlbnVtCiAgewogICAgUFJPQ0VTUyA9IDAsCiAgICBUSFJF
QUQgPSAxCiAgfSBNQVNLX1RZUEU7CgoKCgogIHVfbG9uZyBwcmlvcml0eV9tYXNrIChNQVNLX1RZ
UEUgPSBUSFJFQUQpOwogIHVfbG9uZyBwcmlvcml0eV9tYXNrICh1X2xvbmcsIE1BU0tfVFlQRSA9
IFRIUkVBRCk7CgoKICBpbnQgbG9nX3ByaW9yaXR5X2VuYWJsZWQgKEFDRV9Mb2dfUHJpb3JpdHkg
bG9nX3ByaW9yaXR5KTsKCgogIGludCBsb2dfcHJpb3JpdHlfZW5hYmxlZCAoQUNFX0xvZ19Qcmlv
cml0eSBsb2dfcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwojIDM5MyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIKICBwaWRfdCBnZXRw
aWQgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1RDSEFSICpsb2NhbF9ob3N0ICh2b2lkKSBj
b25zdDsKICB2b2lkIGxvY2FsX2hvc3QgKGNvbnN0IEFDRV9UQ0hBUiAqKTsKCgoKCgoKICB2b2lk
IHNldCAoY29uc3QgY2hhciAqZmlsZSwKICAgICAgICAgICAgaW50IGxpbmUsCiAgICAgICAgICAg
IGludCBvcF9zdGF0dXMgPSAtMSwKICAgICAgICAgICAgaW50IGVycm51bSA9IDAsCiAgICAgICAg
ICAgIGludCByZXN0YXJ0ID0gMSwKICAgICAgICAgICAgb3N0cmVhbSAqb3MgPSAwLAogICAgICAg
ICAgICBBQ0VfTG9nX01zZ19DYWxsYmFjayAqYyA9IDApOwoKCgogIHZvaWQgY29uZGl0aW9uYWxf
c2V0IChjb25zdCBjaGFyICpmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9wX3N0YXR1cywKICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGVycm51bSk7CiMgNDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgogIHNzaXplX3QgbG9nIChBQ0VfTG9nX1ByaW9yaXR5
IHByaW9yaXR5LCBjb25zdCBBQ0VfVENIQVIgKmZvcm1hdCwgLi4uKTsKIyA0NjYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgc3NpemVf
dCBsb2cgKGNvbnN0IEFDRV9UQ0hBUiAqZm9ybWF0LAogICAgICAgICAgICAgICBBQ0VfTG9nX1By
aW9yaXR5IHByaW9yaXR5LAogICAgICAgICAgICAgICB2YV9saXN0IGFyZ3ApOwoKCgogIHNzaXpl
X3QgbG9nIChBQ0VfTG9nX1JlY29yZCAmbG9nX3JlY29yZCwKICAgICAgICAgICAgICAgaW50IHN1
cHByZXNzX3N0ZGVyciA9IDApOwoKCgoKCgogIGludCBsb2dfaGV4ZHVtcCAoQUNFX0xvZ19Qcmlv
cml0eSBsb2dfcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpidWZmZXIs
CiAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwKICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD
RV9UQ0hBUiAqdGV4dCA9IDApOwoKICBzdGF0aWMgdm9pZCBpbml0X2hvb2sgKEFDRV9PU19Mb2df
TXNnX0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMKIyA0OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiAgICAgICAgICAgICAgICAgICAgICAg
ICApOwoKCgoKCgogIHN0YXRpYyB2b2lkIGluaGVyaXRfaG9vayAoQUNFX09TX1RocmVhZF9EZXNj
cmlwdG9yICp0aHJfZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9PU19Mb2df
TXNnX0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK
CgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIGludCBzdGF0dXNfOwoKCiAgaW50IGVy
cm51bV87CgoKICBpbnQgbGluZW51bV87CgoKICBjaGFyIGZpbGVfWzQwOTUgKyAxXTsKCgoKCiAg
QUNFX1RDSEFSIG1zZ19bQUNFX0xvZ19SZWNvcmQ6Ok1BWExPR01TR0xFTl07CgoKCiAgaW50IHJl
c3RhcnRfOwoKCiAgb3N0cmVhbSAqb3N0cmVhbV87CgoKICBBQ0VfTG9nX01zZ19DYWxsYmFjayAq
bXNnX2NhbGxiYWNrXzsKCgogIGludCB0cmFjZV9kZXB0aF87CgoKICBpbnQgdHJhY2VfYWN0aXZl
XzsKCgogIGludCB0cmFjaW5nX2VuYWJsZWRfOwoKCiAgaW50IGRlbGV0ZV9vc3RyZWFtXzsKCgoK
CgoKCiAgQUNFX1RocmVhZF9EZXNjcmlwdG9yICp0aHJfZGVzY187CgoKCgoKCiAgdV9sb25nIHBy
aW9yaXR5X21hc2tfOwojIDU3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL0xvZ19Nc2cuaCIKICBzdGF0aWMgdV9sb25nIHByb2Nlc3NfcHJpb3JpdHlfbWFz
a187CgoKICBzdGF0aWMgY29uc3QgQUNFX1RDSEFSICpwcm9ncmFtX25hbWVfOwoKCiAgc3RhdGlj
IGNvbnN0IEFDRV9UQ0hBUiAqbG9jYWxfaG9zdF87CgoKICBzdGF0aWMgcGlkX3QgcGlkXzsKCgog
IHN0YXRpYyB1X2xvbmcgZmxhZ3NfOwoKCiAgc3RhdGljIGludCBtc2dfb2ZmXzsKCgoKCgoKICBz
dGF0aWMgaW50IGluc3RhbmNlX2NvdW50XzsKICBzdGF0aWMgdV9sb25nIGRlZmF1bHRfcHJpb3Jp
dHlfbWFza187CgoKCgogIHN0cnVjdAogIHsKICAgIGludCBpc19zZXRfOwogICAgY29uc3QgY2hh
ciAqZmlsZV87CiAgICBpbnQgbGluZV87CiAgICBpbnQgb3Bfc3RhdHVzXzsKICAgIGludCBlcnJu
dW1fOwogIH0gY29uZGl0aW9uYWxfdmFsdWVzXzsKCgogIHN0YXRpYyBpbnQga2V5X2NyZWF0ZWRf
OwoKCiAgc3RhdGljIEFDRV90aHJlYWRfa2V5X3QgbG9nX21zZ190c3Nfa2V5XzsKCgoKCiAgc3Rh
dGljIHZvaWQgY2xvc2UgKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgc3luY19ob29rIChjb25zdCBB
Q0VfVENIQVIgKnByZ19uYW1lKTsKCgogIHN0YXRpYyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3Ig
KnRocl9kZXNjX2hvb2sgKHZvaWQpOwoKICBmcmllbmQgdm9pZCBBQ0VfT1M6OmNsZWFudXBfdHNz
IChjb25zdCB1X2ludCk7CgoKICBBQ0VfTG9nX01zZyAmb3BlcmF0b3I9IChjb25zdCBBQ0VfTG9n
X01zZyAmKTsKICBBQ0VfTG9nX01zZyAoY29uc3QgQUNFX0xvZ19Nc2cgJik7Cn07CiMgNjQ2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTG9nX01zZy5oIgp2
b2lkCkFDRV9UU1NfY2xlYW51cCAodm9pZCAqcHRyKTsKIyA2NjAgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDY2MSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMgojIDI0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgi
IDIKIyAyNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N
YWxsb2MuaCIKY2xhc3MgQUNFX0NvbnRyb2xfQmxvY2sKewpwdWJsaWM6CiMgMjY2ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiCiAgY2xhc3Mg
QUNFX01hbGxvY19IZWFkZXIKICB7CiAgcHVibGljOgogICAgQUNFX01hbGxvY19IZWFkZXIgKHZv
aWQpOwoKCiAgICBBQ0VfTWFsbG9jX0hlYWRlciAqbmV4dF9ibG9ja187CgoKICAgIHN0YXRpYyB2
b2lkIGluaXRfcHRyIChBQ0VfTWFsbG9jX0hlYWRlciAqKnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfTWFsbG9jX0hlYWRlciAqaW5pdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpiYXNlX2FkZHIpOwoKCiAgICBzaXplX3Qgc2l6ZV87CiMgMjkwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiCiAgICBsb25nIHBh
ZGRpbmdfWygoaW50KSAoKDEgJSAoKGludCkgc2l6ZW9mIChsb25nKSkgPT0gMCA/IDEgOiAoKCgx
IC8gKChpbnQpIHNpemVvZiAobG9uZykpKSArIDEpICogKChpbnQpIHNpemVvZiAobG9uZykpKSkg
LSAoc2l6ZW9mIChBQ0VfTWFsbG9jX0hlYWRlciopICsgc2l6ZW9mIChzaXplX3QpKSkgLyAoaW50
KSBzaXplb2YgKGxvbmcpKSA8IDEgPyAxIDogKChpbnQpICgoMSAlICgoaW50KSBzaXplb2YgKGxv
bmcpKSA9PSAwID8gMSA6ICgoKDEgLyAoKGludCkgc2l6ZW9mIChsb25nKSkpICsgMSkgKiAoKGlu
dCkgc2l6ZW9mIChsb25nKSkpKSAtIChzaXplb2YgKEFDRV9NYWxsb2NfSGVhZGVyKikgKyBzaXpl
b2YgKHNpemVfdCkpKSAvIChpbnQpIHNpemVvZiAobG9uZykpXTsKCgoKICAgIHZvaWQgZHVtcCAo
dm9pZCkgY29uc3Q7CiAgfTsKIyAzMDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIKICBjbGFzcyBBQ0VfTmFtZV9Ob2RlCiAgewogIHB1Ymxp
YzoKCgogICAgQUNFX05hbWVfTm9kZSAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgIGNoYXIgKm5hbWVfcHRyLAogICAgICAgICAgICAgICAgICAgY2hhciAqcG9pbnRlciwKICAg
ICAgICAgICAgICAgICAgIEFDRV9OYW1lX05vZGUgKmhlYWQpOwoKCiAgICBBQ0VfTmFtZV9Ob2Rl
IChjb25zdCBBQ0VfTmFtZV9Ob2RlICYpOwoKCiAgICBBQ0VfTmFtZV9Ob2RlICh2b2lkKTsKCgog
ICAgfkFDRV9OYW1lX05vZGUgKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBpbml0X3B0ciAoQUNF
X05hbWVfTm9kZSAqKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfTmFtZV9Ob2Rl
ICppbml0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJhc2VfYWRkcik7CgoKICAg
IGNvbnN0IGNoYXIgKm5hbWUgKHZvaWQpIGNvbnN0OwoKCiAgICB2b2lkIG5hbWUgKGNvbnN0IGNo
YXIgKik7CgoKICAgIGNoYXIgKm5hbWVfOwoKCiAgICBjaGFyICpwb2ludGVyXzsKCgogICAgQUNF
X05hbWVfTm9kZSAqbmV4dF87CgoKICAgIEFDRV9OYW1lX05vZGUgKnByZXZfOwoKCiAgICB2b2lk
IGR1bXAgKHZvaWQpIGNvbnN0OwogIH07CgoKICBzdGF0aWMgdm9pZCBwcmludF9hbGlnbm1lbnRf
aW5mbyAodm9pZCk7CgoKICBpbnQgcmVmX2NvdW50ZXJfOwoKCiAgQUNFX05hbWVfTm9kZSAqbmFt
ZV9oZWFkXzsKCgogIEFDRV9NYWxsb2NfSGVhZGVyICpmcmVlcF87CgoKICBjaGFyIGxvY2tfbmFt
ZV9bNDA5NV07CiMgMzk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvTWFsbG9jLmgiCiAgbG9uZyBhbGlnbl9bKCgoKGludCkoc2l6ZW9mIChBQ0VfTmFtZV9O
b2RlKikgKyBzaXplb2YgKEFDRV9NYWxsb2NfSGVhZGVyKikgKyBzaXplb2YgKGludCkgKyA0MDk1
KSkgJSAoKGludCkgc2l6ZW9mIChsb25nKSkgIT0gMCA/ICgoaW50KSBzaXplb2YgKGxvbmcpKSAt
ICgoKGludCkoc2l6ZW9mIChBQ0VfTmFtZV9Ob2RlKikgKyBzaXplb2YgKEFDRV9NYWxsb2NfSGVh
ZGVyKikgKyBzaXplb2YgKGludCkgKyA0MDk1KSkgJSAoKGludCkgc2l6ZW9mIChsb25nKSkpIDog
KChpbnQpIHNpemVvZiAobG9uZykpKSAvIGludCAoc2l6ZW9mIChsb25nKSkpIDwgMSA/IDEgOiAo
KCgoaW50KShzaXplb2YgKEFDRV9OYW1lX05vZGUqKSArIHNpemVvZiAoQUNFX01hbGxvY19IZWFk
ZXIqKSArIHNpemVvZiAoaW50KSArIDQwOTUpKSAlICgoaW50KSBzaXplb2YgKGxvbmcpKSAhPSAw
ID8gKChpbnQpIHNpemVvZiAobG9uZykpIC0gKCgoaW50KShzaXplb2YgKEFDRV9OYW1lX05vZGUq
KSArIHNpemVvZiAoQUNFX01hbGxvY19IZWFkZXIqKSArIHNpemVvZiAoaW50KSArIDQwOTUpKSAl
ICgoaW50KSBzaXplb2YgKGxvbmcpKSkgOiAoKGludCkgc2l6ZW9mIChsb25nKSkpIC8gaW50IChz
aXplb2YgKGxvbmcpKSldOwoKCgoKICBBQ0VfTWFsbG9jX0hlYWRlciBiYXNlXzsKCgogIHZvaWQg
ZHVtcCAodm9pZCkgY29uc3Q7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmkiIDEKCgoKaW5saW5lCkFDRV9Db250cm9sX0Jsb2Nr
OjpBQ0VfTmFtZV9Ob2RlOjp+QUNFX05hbWVfTm9kZSAodm9pZCkKewp9CgppbmxpbmUgdm9pZApB
Q0VfQ29udHJvbF9CbG9jazo6QUNFX01hbGxvY19IZWFkZXI6OmluaXRfcHRyCiAgKEFDRV9NYWxs
b2NfSGVhZGVyICoqcHRyLCBBQ0VfTWFsbG9jX0hlYWRlciAqaW5pdCwgdm9pZCAqKQp7CiAgKnB0
ciA9IGluaXQ7Cn0KCmlubGluZSB2b2lkCkFDRV9Db250cm9sX0Jsb2NrOjpBQ0VfTmFtZV9Ob2Rl
Ojppbml0X3B0cgogIChBQ0VfTmFtZV9Ob2RlICoqcHRyLCBBQ0VfTmFtZV9Ob2RlICppbml0LCB2
b2lkICopCnsKICAqcHRyID0gaW5pdDsKfQojIDQwNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvYy5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiIDEKIyAxNSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMg
MTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2Nf
VC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9BQ0UuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvTWFsbG9jX1QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIiAyCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIgMQojIDIxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIgMgojIDMx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIK
Y2xhc3MgQUNFX1RpbWVfVmFsdWU7CiMgNDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfTG9jawp7CnB1YmxpYzoKCiAgQUNF
X0xvY2sgKHZvaWQpOwoKCiAgdmlydHVhbCB+QUNFX0xvY2sgKHZvaWQpOwoKCgoKCgogIHZpcnR1
YWwgaW50IHJlbW92ZSAodm9pZCkgPSAwOwoKCgogIHZpcnR1YWwgaW50IGFjcXVpcmUgKHZvaWQp
ID0gMDsKCgoKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlICh2b2lkKSA9IDA7CgoKICB2aXJ0
dWFsIGludCByZWxlYXNlICh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBpbnQgYWNxdWlyZV9y
ZWFkICh2b2lkKSA9IDA7CgoKCgoKCiAgdmlydHVhbCBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCkg
PSAwOwoKCgoKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpID0gMDsKCgoK
CgoKCiAgdmlydHVhbCBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCkgPSAwOwoKCgoKCgogIHZp
cnR1YWwgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkgPSAwOwp9OwojIDEyOSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNs
YXNzIEFDRV9BZGFwdGl2ZV9Mb2NrIDogcHVibGljIEFDRV9Mb2NrCnsKcHVibGljOgoKCiAgdmly
dHVhbCB+QUNFX0FkYXB0aXZlX0xvY2sgKHZvaWQpOwoKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAo
dm9pZCk7CiAgdmlydHVhbCBpbnQgYWNxdWlyZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgdHJ5YWNx
dWlyZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9pZCk7CiAgdmlydHVhbCBpbnQg
YWNxdWlyZV9yZWFkICh2b2lkKTsKICB2aXJ0dWFsIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsK
ICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwogIHZpcnR1YWwgaW50IHRyeWFj
cXVpcmVfd3JpdGUgKHZvaWQpOwogIHZpcnR1YWwgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFk
ZSAodm9pZCk7CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCnByb3RlY3RlZDoKCgoKCgogIEFD
RV9BZGFwdGl2ZV9Mb2NrICh2b2lkKTsKCiAgQUNFX0xvY2sgKmxvY2tfOwp9OwoKCgoKCgpjbGFz
cyBBQ0VfU2VtYXBob3JlCnsKcHVibGljOgoKCiAgQUNFX1NlbWFwaG9yZSAodV9pbnQgY291bnQg
PSAxLAogICAgICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUs
CiAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAg
ICAgICB2b2lkICogPSAwLAogICAgICAgICAgICAgICAgIGludCBtYXggPSAweDdmZmZmZmZmKTsK
CgogIH5BQ0VfU2VtYXBob3JlICh2b2lkKTsKCgoKCgoKICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoK
ICBpbnQgYWNxdWlyZSAodm9pZCk7CiMgMjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgYWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUg
JnR2KTsKCgoKCgoKCiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgogIGludCByZWxlYXNlICh2
b2lkKTsKCgoKICBpbnQgcmVsZWFzZSAoc2l6ZV90IHJlbGVhc2VfY291bnQpOwoKCgoKCgogIGlu
dCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCgoKCgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsK
IyAyNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aC5oIgogIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwojIDI1MSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmVf
d3JpdGUgKHZvaWQpOwoKCgoKCgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lk
KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307CgoKICBj
b25zdCBBQ0Vfc2VtYV90ICZsb2NrICh2b2lkKSBjb25zdDsKCnByb3RlY3RlZDoKICBBQ0Vfc2Vt
YV90IHNlbWFwaG9yZV87CgoKCiAgaW50IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBv
cGVyYXRvcj0gKGNvbnN0IEFDRV9TZW1hcGhvcmUgJik7CiAgQUNFX1NlbWFwaG9yZSAoY29uc3Qg
QUNFX1NlbWFwaG9yZSAmKTsKfTsKCgoKCgoKCmNsYXNzIEFDRV9OdWxsX1NlbWFwaG9yZQp7CnB1
YmxpYzoKICBBQ0VfTnVsbF9TZW1hcGhvcmUgKHVfaW50IGNvdW50ID0gMSwKICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgdHlwZSA9IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqID0gMCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF4ID0gMHg3ZmZm
ZmZmZik7CiAgfkFDRV9OdWxsX1NlbWFwaG9yZSAodm9pZCk7CiAgaW50IHJlbW92ZSAodm9pZCk7
CgogIGludCBhY3F1aXJlIChBQ0VfVGltZV9WYWx1ZSAmKTsKICBpbnQgYWNxdWlyZSAodm9pZCk7
CiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwogIGludCByZWxlYXNlICh2b2lkKTsKICBpbnQgcmVs
ZWFzZSAoc2l6ZV90KTsKICBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiAgaW50IHRyeWFjcXVp
cmVfd3JpdGUgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwog
IGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwoK
CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKfTsKIyAzMjkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpj
bGFzcyBBQ0VfUldfTXV0ZXgKewpwdWJsaWM6CgogIEFDRV9SV19NdXRleCAoaW50IHR5cGUgPSBQ
VEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAq
bmFtZSA9IDAsCiAgICAgICAgICAgICAgICB2b2lkICphcmcgPSAwKTsKCgogIH5BQ0VfUldfTXV0
ZXggKHZvaWQpOwoKCgoKCgogIGludCByZW1vdmUgKHZvaWQpOwoKCiAgaW50IGFjcXVpcmVfcmVh
ZCAodm9pZCk7CgoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpOwoKCgoKCgogIGludCB0cnlh
Y3F1aXJlX3JlYWQgKHZvaWQpOwoKCiAgaW50IHRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpOwojIDM3
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgi
CiAgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKCgoKCiAgaW50IGFjcXVp
cmUgKHZvaWQpOwojIDM4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCiAgaW50IHJlbGVhc2Ug
KHZvaWQpOwoKCiAgY29uc3QgQUNFX3J3bG9ja190ICZsb2NrICh2b2lkKSBjb25zdDsKCgogIHZv
aWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6Cgog
IEFDRV9yd2xvY2tfdCBsb2NrXzsKCgoKICBpbnQgcmVtb3ZlZF87CgoKCnByaXZhdGU6CgogIHZv
aWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfUldfTXV0ZXggJik7CiAgQUNFX1JXX011dGV4IChjb25z
dCBBQ0VfUldfTXV0ZXggJik7Cn07CgoKCgoKCgpjbGFzcyBBQ0VfTXV0ZXgKewpwdWJsaWM6Cgog
IEFDRV9NdXRleCAoaW50IHR5cGUgPSBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwKICAgICAgICAg
ICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRy
X3QgKmFyZyA9IDApOwoKCiAgfkFDRV9NdXRleCAodm9pZCk7CgoKCgoKCiAgaW50IHJlbW92ZSAo
dm9pZCk7CgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCgogIGludCBhY3F1aXJlIChBQ0Vf
VGltZV9WYWx1ZSAmdHYpOwoKCgoKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgogIGludCBy
ZWxlYXNlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZV9yZWFkICh2b2lkKTsKCgoKCgoKICBp
bnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiMgNDg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lk
KTsKIyA0OTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T
eW5jaC5oIgogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgoKCgoKICBpbnQgdHJ5YWNx
dWlyZV93cml0ZV91cGdyYWRlICh2b2lkKTsKCgogIGNvbnN0IEFDRV9tdXRleF90ICZsb2NrICh2
b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Ug
e307CgoKcHVibGljOgoKCiAgQUNFX211dGV4X3QgKnByb2Nlc3NfbG9ja187CgoKCgoKCiAgY29u
c3QgQUNFX1RDSEFSICpsb2NrbmFtZV87CgoKCiAgQUNFX211dGV4X3QgbG9ja187CgoKCiAgaW50
IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9NdXRl
eCAmKTsKICBBQ0VfTXV0ZXggKGNvbnN0IEFDRV9NdXRleCAmKTsKfTsKCgoKCgoKY2xhc3MgQUNF
X051bGxfQmFycmllcgp7CnB1YmxpYzoKCiAgQUNFX051bGxfQmFycmllciAodV9pbnQsCiAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqID0gMCwKICAgICAgICAgICAgICAgICAgICB2b2lk
ICogPSAwKTsKCgogIH5BQ0VfTnVsbF9CYXJyaWVyICh2b2lkKTsKCgoKICBpbnQgd2FpdCAodm9p
ZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJp
dmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9OdWxsX0JhcnJpZXIgJik7CiAgQUNF
X051bGxfQmFycmllciAoY29uc3QgQUNFX051bGxfQmFycmllciAmKTsKfTsKCgoKCgoKCmNsYXNz
IEFDRV9OdWxsX011dGV4CnsKcHVibGljOgogIEFDRV9OdWxsX011dGV4IChjb25zdCBBQ0VfVENI
QVIgKiA9IDApOwogIH5BQ0VfTnVsbF9NdXRleCAodm9pZCk7CiAgaW50IHJlbW92ZSAodm9pZCk7
CgogIGludCBhY3F1aXJlICh2b2lkKTsKICBpbnQgYWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUgJnRp
bWVvdXQpOwogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKICBpbnQgcmVsZWFzZSAodm9pZCk7CiAg
aW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpOwogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsK
ICBpbnQgdHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKTsKICBpbnQgYWNxdWlyZV9yZWFk
ICh2b2lkKTsKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9p
ZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07CgpjbGFzcyBBQ0VfTm9vcF9Ub2tlbiA6
IHB1YmxpYyBBQ0VfTnVsbF9NdXRleAp7CnB1YmxpYzoKICBpbnQgcmVuZXcgKGludCA9IDAsIEFD
RV9UaW1lX1ZhbHVlICogPTApOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVj
dCBfX0FjZSB7fTsKfTsKIyA2MjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfTnVsbF9Db25kaXRpb24KewpwdWJsaWM6CiAg
QUNFX051bGxfQ29uZGl0aW9uIChjb25zdCBBQ0VfTnVsbF9NdXRleCAmbSwKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqID0gMCwKICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKiA9IDApOwogIH5BQ0VfTnVsbF9Db25kaXRpb24gKHZvaWQpOwogIGludCByZW1vdmUgKHZv
aWQpOwogIGludCB3YWl0IChBQ0VfVGltZV9WYWx1ZSAqID0gMCk7CiAgaW50IHNpZ25hbCAodm9p
ZCk7CiAgaW50IGJyb2FkY2FzdCAodm9pZCk7CiAgQUNFX051bGxfTXV0ZXggJm11dGV4ICh2b2lk
KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgpwcm90ZWN0ZWQ6CiAgQUNFX051bGxf
TXV0ZXggJm11dGV4XzsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfTnVs
bF9Db25kaXRpb24gJik7CiAgQUNFX051bGxfQ29uZGl0aW9uIChjb25zdCBBQ0VfTnVsbF9Db25k
aXRpb24gJik7Cn07CiMgNjkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvU3luY2guaCIKY2xhc3MgQUNFX1RTU19BZGFwdGVyCnsKcHVibGljOgoKICBBQ0Vf
VFNTX0FkYXB0ZXIgKHZvaWQgKm9iamVjdCwgQUNFX1RIUl9ERVNUIGYpOwoKCiAgfkFDRV9UU1Nf
QWRhcHRlciAodm9pZCk7CgoKICB2b2lkIGNsZWFudXAgKHZvaWQpOwoKCgoKICB2b2lkICp0c19v
YmpfOwoKCiAgQUNFX1RIUl9ERVNUIGZ1bmNfOwp9OwojIDcyNCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFDRV9FdmVudAp7CnB1
YmxpYzoKCiAgQUNFX0V2ZW50IChpbnQgbWFudWFsX3Jlc2V0ID0gMCwKICAgICAgICAgICAgIGlu
dCBpbml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9D
RVNTX1BSSVZBVEUsCiAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAg
ICAgICAgICAgdm9pZCAqYXJnID0gMCk7CgoKICB+QUNFX0V2ZW50ICh2b2lkKTsKCgoKCgoKICBp
bnQgcmVtb3ZlICh2b2lkKTsKCgogIEFDRV9ldmVudF90IGhhbmRsZSAodm9pZCkgY29uc3Q7CiMg
NzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2gu
aCIKICB2b2lkIGhhbmRsZSAoQUNFX2V2ZW50X3QgbmV3X2hhbmRsZSk7CiMgNzY1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgd2Fp
dCAodm9pZCk7CgoKCiAgaW50IHdhaXQgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lKTsK
IyA3ODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aC5oIgogIGludCBzaWduYWwgKHZvaWQpOwojIDc5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHB1bHNlICh2b2lkKTsKCgogIGlu
dCByZXNldCAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9f
QWNlIHt9OwoKcHJvdGVjdGVkOgoKICBBQ0VfZXZlbnRfdCBoYW5kbGVfOwoKCgogIGludCByZW1v
dmVkXzsKCgoKCnByaXZhdGU6CgogIEFDRV9FdmVudCAoY29uc3QgQUNFX0V2ZW50JiBldmVudCk7
CiAgY29uc3QgQUNFX0V2ZW50ICZvcGVyYXRvcj0gKGNvbnN0IEFDRV9FdmVudCAmcmhzKTsKfTsK
IyA4MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aC5oIgpjbGFzcyBBQ0VfTWFudWFsX0V2ZW50IDogcHVibGljIEFDRV9FdmVudAp7CnB1YmxpYzoK
CiAgQUNFX01hbnVhbF9FdmVudCAoaW50IGluaXRpYWxfc3RhdGUgPSAwLAogICAgICAgICAgICAg
ICAgICAgIGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCiAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJn
ID0gMCk7CiMgODQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU3luY2guaCIKICB+QUNFX01hbnVhbF9FdmVudCAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZv
aWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwojIDg2MyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFDRV9BdXRvX0V2
ZW50IDogcHVibGljIEFDRV9FdmVudAp7CnB1YmxpYzoKCiAgQUNFX0F1dG9fRXZlbnQgKGludCBp
bml0aWFsX3N0YXRlID0gMCwKICAgICAgICAgICAgICAgICAgaW50IHR5cGUgPSBQVEhSRUFEX1BS
T0NFU1NfUFJJVkFURSwKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAg
ICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwojIDg4MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCiAgfkFDRV9BdXRvX0V2ZW50ICh2
b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07
CiMgOTIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu
Y2guaCIKY2xhc3MgQUNFX1RocmVhZF9NdXRleAp7CiAgZnJpZW5kIGNsYXNzIEFDRV9Db25kaXRp
b25fVGhyZWFkX011dGV4OwpwdWJsaWM6CgogIEFDRV9UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9U
Q0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX211dGV4YXR0cl90ICphdHRy
aWJ1dGVzID0gMCk7CgoKICB+QUNFX1RocmVhZF9NdXRleCAodm9pZCk7CgoKCgoKCiAgaW50IHJl
bW92ZSAodm9pZCk7CgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCgogIGludCBhY3F1aXJl
IChBQ0VfVGltZV9WYWx1ZSAmdHYpOwoKCgoKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgog
IGludCByZWxlYXNlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZV9yZWFkICh2b2lkKTsKCgoK
CgoKICBpbnQgYWNxdWlyZV93cml0ZSAodm9pZCk7CiMgOTgxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9yZWFk
ICh2b2lkKTsKIyA5OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TeW5jaC5oIgogIGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgoKCgoKCiAgaW50
IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKICBjb25zdCBBQ0VfdGhyZWFkX211
dGV4X3QgJmxvY2sgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgog
IHN0cnVjdCBfX0FjZSB7fTsKCgoKICBBQ0VfdGhyZWFkX211dGV4X3QgbG9ja187CgoKCiAgaW50
IHJlbW92ZWRfOwoKCgoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9UaHJl
YWRfTXV0ZXggJik7CiAgQUNFX1RocmVhZF9NdXRleCAoY29uc3QgQUNFX1RocmVhZF9NdXRleCAm
KTsKfTsKIyAxMDkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU3luY2guaCIKY2xhc3MgQUNFX0NvbmRpdGlvbl9BdHRyaWJ1dGVzCnsKcHVibGljOgoKICBB
Q0VfQ29uZGl0aW9uX0F0dHJpYnV0ZXMgKGludCB0eXBlID0gUFRIUkVBRF9QUk9DRVNTX1BSSVZB
VEUpOwoKCiAgfkFDRV9Db25kaXRpb25fQXR0cmlidXRlcyAodm9pZCk7Cgpwcml2YXRlOgogIGZy
aWVuZCBjbGFzcyBBQ0VfQ29uZGl0aW9uX1RocmVhZF9NdXRleDsKCgogIEFDRV9jb25kYXR0cl90
IGF0dHJpYnV0ZXNfOwoKcHJpdmF0ZToKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9Db25k
aXRpb25fQXR0cmlidXRlcyAmKTsKICBBQ0VfQ29uZGl0aW9uX0F0dHJpYnV0ZXMgKGNvbnN0IEFD
RV9Db25kaXRpb25fQXR0cmlidXRlcyAmKTsKfTsKIyAxMTMxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKY2xhc3MgQUNFX0NvbmRpdGlvbl9U
aHJlYWRfTXV0ZXgKewpwdWJsaWM6CgogIEFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4IChjb25z
dCBBQ0VfVGhyZWFkX011dGV4ICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICphcmcgPSAwKTsKCgogIEFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4IChjb25zdCBBQ0VfVGhy
ZWFkX011dGV4ICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ29uZGl0aW9u
X0F0dHJpYnV0ZXMgJmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKmFyZyA9IDApOwoKCiAgfkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4ICh2b2lkKTsKCgoK
CgoKICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoKCgoKCiAgaW50IHdhaXQgKGNvbnN0IEFDRV9UaW1l
X1ZhbHVlICphYnN0aW1lKTsKCgogIGludCB3YWl0ICh2b2lkKTsKIyAxMTc0ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgd2FpdCAo
QUNFX1RocmVhZF9NdXRleCAmbXV0ZXgsIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lID0g
MCk7CgoKICBpbnQgc2lnbmFsICh2b2lkKTsKCgogIGludCBicm9hZGNhc3QgKHZvaWQpOwoKCiAg
QUNFX1RocmVhZF9NdXRleCAmbXV0ZXggKHZvaWQpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25z
dDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAgQUNFX2NvbmRfdCBjb25kXzsK
CgogIEFDRV9UaHJlYWRfTXV0ZXggJm11dGV4XzsKCgoKICBpbnQgcmVtb3ZlZF87CgoKCgpwcml2
YXRlOgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXgg
Jik7CiAgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9Db25kaXRpb25fVGhy
ZWFkX011dGV4ICYpOwp9OwoKCgoKCgoKY2xhc3MgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXgK
ewpwdWJsaWM6CgogIEFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4IChjb25zdCBBQ0VfVENIQVIg
Km5hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfbXV0ZXhhdHRyX3Qg
KmFyZyA9IDApOwoKCiAgfkFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4ICh2b2lkKTsKCgoKCgoK
ICBpbnQgcmVtb3ZlICh2b2lkKTsKCgoKCgoKICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKCgoKCiAg
aW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgoKCgogIGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoK
CgoKCgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsKIyAxMjcwICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV9y
ZWFkICh2b2lkKTsKIyAxMjgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvU3luY2guaCIKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKCgoKCgog
IGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwoKCgoKCgogIGludCByZWxlYXNl
ICh2b2lkKTsKCgogIEFDRV90aHJlYWRfdCBnZXRfdGhyZWFkX2lkICh2b2lkKTsKCgoKCgoKCiAg
aW50IGdldF9uZXN0aW5nX2xldmVsICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7
CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgogIHZvaWQgc2V0X3RocmVhZF9pZCAo
QUNFX3RocmVhZF90IHQpOwoKCiAgQUNFX3JlY3Vyc2l2ZV90aHJlYWRfbXV0ZXhfdCByZWN1cnNp
dmVfbXV0ZXhfOwoKCgogIGludCByZW1vdmVkXzsKCgoKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0
b3I9IChjb25zdCBBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleCAmKTsKICBBQ0VfUmVjdXJzaXZl
X1RocmVhZF9NdXRleCAoY29uc3QgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXggJik7Cn07CgoK
CgoKCmNsYXNzIEFDRV9SV19UaHJlYWRfTXV0ZXggOiBwdWJsaWMgQUNFX1JXX011dGV4CnsKcHVi
bGljOgogIEFDRV9SV19UaHJlYWRfTXV0ZXggKGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CgoKICB+QUNFX1JXX1RocmVhZF9N
dXRleCAodm9pZCk7CiMgMTM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL1N5bmNoLmgiCiAgaW50IHRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7
CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwoKCgoK
CgoKY2xhc3MgQUNFX1RocmVhZF9TZW1hcGhvcmUgOiBwdWJsaWMgQUNFX1NlbWFwaG9yZQp7CnB1
YmxpYzoKCgogIEFDRV9UaHJlYWRfU2VtYXBob3JlICh1X2ludCBjb3VudCA9IDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UQ0hBUiAqbmFtZSA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKiA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBtYXggPSAw
eDdGRkZGRkZGKTsKCgogIH5BQ0VfVGhyZWFkX1NlbWFwaG9yZSAodm9pZCk7CgoKICB2b2lkIGR1
bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9Owp9OwoKc3RydWN0IEFDRV9TdWJf
QmFycmllcgp7CgogIEFDRV9TdWJfQmFycmllciAodV9pbnQgY291bnQsCiAgICAgICAgICAgICAg
ICAgICBBQ0VfVGhyZWFkX011dGV4ICZsb2NrLAogICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1RDSEFSICpuYW1lID0gMCwKICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDApOwoKICB+
QUNFX1N1Yl9CYXJyaWVyICh2b2lkKTsKCiAgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggYmFy
cmllcl9maW5pc2hlZF87CgoKICBpbnQgcnVubmluZ190aHJlYWRzXzsKCgogIHZvaWQgZHVtcCAo
dm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgp9OwojIDE0MjggIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgpjbGFzcyBBQ0VfQmFy
cmllcgp7CnB1YmxpYzoKCiAgQUNFX0JhcnJpZXIgKHVfaW50IGNvdW50LAogICAgICAgICAgICAg
ICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLAogICAgICAgICAgICAgICB2b2lkICphcmcgPSAw
KTsKCgogIH5BQ0VfQmFycmllciAodm9pZCk7CgoKCiAgaW50IHdhaXQgKHZvaWQpOwoKCiAgdm9p
ZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAg
QUNFX1RocmVhZF9NdXRleCBsb2NrXzsKCgoKICBpbnQgY3VycmVudF9nZW5lcmF0aW9uXzsKCgog
IGludCBjb3VudF87CiMgMTQ2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL1N5bmNoLmgiCiAgQUNFX1N1Yl9CYXJyaWVyIHN1Yl9iYXJyaWVyXzFfOwogIEFD
RV9TdWJfQmFycmllciBzdWJfYmFycmllcl8yXzsKICBBQ0VfU3ViX0JhcnJpZXIgKnN1Yl9iYXJy
aWVyX1syXTsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfQmFycmllciAm
KTsKICBBQ0VfQmFycmllciAoY29uc3QgQUNFX0JhcnJpZXIgJik7Cn07CiMgMTUzMyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiCmNsYXNzIEFD
RV9UaHJlYWRfQmFycmllciA6IHB1YmxpYyBBQ0VfQmFycmllcgp7CnB1YmxpYzoKCiAgQUNFX1Ro
cmVhZF9CYXJyaWVyICh1X2ludCBjb3VudCwgY29uc3QgQUNFX1RDSEFSICpuYW1lID0gMCk7CgoK
ICB+QUNFX1RocmVhZF9CYXJyaWVyICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7
CgoKICBzdHJ1Y3QgX19BY2Uge307Cn07CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmkiIDEKCgoKaW5saW5lCkFDRV9Mb2NrOjpBQ0Vf
TG9jayAodm9pZCkKewp9CgppbmxpbmUgY29uc3QgQUNFX3J3bG9ja190ICYKQUNFX1JXX011dGV4
Ojpsb2NrICh2b2lkKSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5sb2NrXzsKfQoKaW5saW5lIGlu
dApBQ0VfUldfTXV0ZXg6OnJlbW92ZSAodm9pZCkKewoKICBpbnQgcmVzdWx0ID0gMDsKICBpZiAo
dGhpcy0+cmVtb3ZlZF8gPT0gMCkKICAgIHsKICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwogICAg
ICByZXN1bHQgPSBBQ0VfT1M6OnJ3bG9ja19kZXN0cm95ICgmdGhpcy0+bG9ja18pOwogICAgfQog
IHJldHVybiByZXN1bHQ7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011dGV4OjphY3F1aXJlX3JlYWQg
KHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6cndfcmRsb2NrICgmdGhpcy0+bG9ja18pOwp9Cgpp
bmxpbmUgaW50CkFDRV9SV19NdXRleDo6YWNxdWlyZV93cml0ZSAodm9pZCkKewoKICByZXR1cm4g
QUNFX09TOjpyd193cmxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011
dGV4OjphY3F1aXJlICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnJ3X3dybG9jayAoJnRoaXMt
PmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0VfUldfTXV0ZXg6OnRyeWFjcXVpcmVfcmVhZCAodm9p
ZCkKewoKICByZXR1cm4gQUNFX09TOjpyd190cnlyZGxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlu
bGluZSBpbnQKQUNFX1JXX011dGV4Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CgogIHJldHVy
biBBQ0VfT1M6OnJ3X3RyeXdybG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0Vf
UldfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewoKICByZXR1cm4gQUNF
X09TOjpyd190cnl3cmxvY2tfdXBncmFkZSAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApB
Q0VfUldfTXV0ZXg6OnRyeWFjcXVpcmUgKHZvaWQpCnsKCiAgcmV0dXJuIHRoaXMtPnRyeWFjcXVp
cmVfd3JpdGUgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1JXX011dGV4OjpyZWxlYXNlICh2b2lkKQp7
CgogIHJldHVybiBBQ0VfT1M6OnJ3X3VubG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKCmlubGluZSBp
bnQKQUNFX1JXX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKQp7
CgogIHJldHVybiBBQ0VfT1M6OnJ3X3RyeXdybG9ja191cGdyYWRlICgmdGhpcy0+bG9ja18pOwp9
CgoKaW5saW5lIGludApBQ0VfTXV0ZXg6OmFjcXVpcmVfcmVhZCAodm9pZCkKewoKCgoKCiAgcmV0
dXJuIEFDRV9PUzo6bXV0ZXhfbG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0Vf
TXV0ZXg6OmFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4
X2xvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4Ojp0cnlhY3F1aXJl
X3JlYWQgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4X3RyeWxvY2sgKCZ0aGlz
LT5sb2NrXyk7Cn0KCmlubGluZSBjb25zdCBBQ0VfbXV0ZXhfdCAmCkFDRV9NdXRleDo6bG9jayAo
dm9pZCkgY29uc3QKewoKCgoKCiAgcmV0dXJuIHRoaXMtPmxvY2tfOwp9CgppbmxpbmUgaW50CkFD
RV9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZSAodm9pZCkKewoKCgoKCiAgcmV0dXJuIEFDRV9PUzo6
bXV0ZXhfdHJ5bG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5saW5lIGludApBQ0VfTXV0ZXg6OnRy
eWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewoKICByZXR1cm4gMDsKfQoKaW5saW5lIGlu
dApBQ0VfTXV0ZXg6OmFjcXVpcmUgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6Om11dGV4
X2xvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4OjphY3F1aXJlIChB
Q0VfVGltZV9WYWx1ZSAmdHYpCnsKCiAgcmV0dXJuIEFDRV9PUzo6bXV0ZXhfbG9jayAoJnRoaXMt
PmxvY2tfLCB0dik7Cn0KCmlubGluZSBpbnQKQUNFX011dGV4Ojp0cnlhY3F1aXJlICh2b2lkKQp7
CgoKCgoKICByZXR1cm4gQUNFX09TOjptdXRleF90cnlsb2NrICgmdGhpcy0+bG9ja18pOwp9Cgpp
bmxpbmUgaW50CkFDRV9NdXRleDo6cmVsZWFzZSAodm9pZCkKewoKCgoKCiAgcmV0dXJuIEFDRV9P
Uzo6bXV0ZXhfdW5sb2NrICgmdGhpcy0+bG9ja18pOwp9CgppbmxpbmUgaW50CkFDRV9NdXRleDo6
cmVtb3ZlICh2b2lkKQp7CgoKICAgaW50IHJlc3VsdCA9IDA7CgoKCgoKCiAgIGlmICh0aGlzLT5w
cm9jZXNzX2xvY2tfKQogICAgIHsKICAgICAgIGlmICh0aGlzLT5yZW1vdmVkXyA9PSAwKQogICAg
ICAgICB7CiAgICAgICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwoKCgogICAgICAgICAgIGlmICgh
dGhpcy0+bG9ja25hbWVfKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBBQ0VfT1M6Om11
bm1hcCAodGhpcy0+cHJvY2Vzc19sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVvZiAoQUNFX211dGV4X3QpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHJlc3VsdCA9IEFDRV9PUzo6bXV0ZXhfZGVzdHJv
eSAodGhpcy0+cHJvY2Vzc19sb2NrXyk7CiAgICAgICAgICAgICAgIEFDRV9PUzo6bXVubWFwICh0
aGlzLT5wcm9jZXNzX2xvY2tfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
IChBQ0VfbXV0ZXhfdCkpOwogICAgICAgICAgICAgICBBQ0VfT1M6OnNobV91bmxpbmsgKHRoaXMt
PmxvY2tuYW1lXyk7CiAgICAgICAgICAgICAgIEFDRV9PUzo6ZnJlZSAoc3RhdGljX2Nhc3Q8dm9p
ZCAqPiAoY29uc3RfY2FzdDxBQ0VfVENIQVIgKj4gKHRoaXMtPmxvY2tuYW1lXykpKTsKCgogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICByZXR1cm4gcmVzdWx0OwojIDI0MyAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmkiCn0KCmlu
bGluZSBjb25zdCBBQ0Vfc2VtYV90ICYKQUNFX1NlbWFwaG9yZTo6bG9jayAodm9pZCkgY29uc3QK
ewoKICByZXR1cm4gdGhpcy0+c2VtYXBob3JlXzsKfQoKaW5saW5lIGludApBQ0VfU2VtYXBob3Jl
OjpyZW1vdmUgKHZvaWQpCnsKCiAgaW50IHJlc3VsdCA9IDA7CiAgaWYgKHRoaXMtPnJlbW92ZWRf
ID09IDApCiAgICB7CiAgICAgIHRoaXMtPnJlbW92ZWRfID0gMTsKICAgICAgcmVzdWx0ID0gQUNF
X09TOjpzZW1hX2Rlc3Ryb3kgKCZ0aGlzLT5zZW1hcGhvcmVfKTsKICAgIH0KICByZXR1cm4gcmVz
dWx0Owp9CgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OmFjcXVpcmUgKHZvaWQpCnsKCiAgcmV0
dXJuIEFDRV9PUzo6c2VtYV93YWl0ICgmdGhpcy0+c2VtYXBob3JlXyk7Cn0KCmlubGluZSBpbnQK
QUNFX1NlbWFwaG9yZTo6YWNxdWlyZSAoQUNFX1RpbWVfVmFsdWUgJnR2KQp7CgogIHJldHVybiBB
Q0VfT1M6OnNlbWFfd2FpdCAoJnRoaXMtPnNlbWFwaG9yZV8sIHR2KTsKfQoKaW5saW5lIGludApB
Q0VfU2VtYXBob3JlOjp0cnlhY3F1aXJlICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnNlbWFf
dHJ5d2FpdCAoJnRoaXMtPnNlbWFwaG9yZV8pOwp9CgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6
OnJlbGVhc2UgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6c2VtYV9wb3N0ICgmdGhpcy0+c2Vt
YXBob3JlXyk7Cn0KCmlubGluZSBpbnQKQUNFX1NlbWFwaG9yZTo6cmVsZWFzZSAoc2l6ZV90IHJl
bGVhc2VfY291bnQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6c2VtYV9wb3N0ICgmdGhpcy0+c2VtYXBo
b3JlXywgcmVsZWFzZV9jb3VudCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OmFj
cXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT5hY3F1aXJlICgpOwp9CgoKCgoKaW5s
aW5lIGludApBQ0VfU2VtYXBob3JlOjphY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPmFjcXVpcmUgKCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OnRyeWFjcXVp
cmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT50cnlhY3F1aXJlICgpOwp9CgoKCgoKaW5s
aW5lIGludApBQ0VfU2VtYXBob3JlOjp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnRyeWFjcXVpcmUgKCk7Cn0KCgoKCgppbmxpbmUgaW50CkFDRV9TZW1hcGhvcmU6OnRy
eWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCkKewogIHJldHVybiAwOwp9CgoKCmlubGluZQpB
Q0VfTnVsbF9TZW1hcGhvcmU6OkFDRV9OdWxsX1NlbWFwaG9yZSAodV9pbnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCkKewp9CgppbmxpbmUKQUNFX051bGxfU2VtYXBob3JlOjp+QUNFX051bGxf
U2VtYXBob3JlICh2b2lkKQp7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfU2VtYXBob3JlOjpyZW1v
dmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6
OmFjcXVpcmUgKEFDRV9UaW1lX1ZhbHVlICYpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB
Q0VfTnVsbF9TZW1hcGhvcmU6OmFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5l
IGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnRyeWFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gMDsK
fQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnJlbGVhc2UgKHNpemVfdCkKewogIHJl
dHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9yZTo6cmVsZWFzZSAodm9pZCkK
ewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9yZTo6YWNxdWlyZV93
cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX1NlbWFwaG9y
ZTo6dHJ5YWNxdWlyZV93cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFD
RV9OdWxsX1NlbWFwaG9yZTo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lkKQp7CiAgcmV0
dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfU2VtYXBob3JlOjphY3F1aXJlX3JlYWQgKHZv
aWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9TZW1hcGhvcmU6OnRyeWFj
cXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgdm9pZApBQ0VfTnVsbF9T
ZW1hcGhvcmU6OmR1bXAgKHZvaWQpIGNvbnN0CnsKfQoKCgppbmxpbmUgY29uc3QgQUNFX3RocmVh
ZF9tdXRleF90ICYKQUNFX1RocmVhZF9NdXRleDo6bG9jayAodm9pZCkgY29uc3QKewoKICByZXR1
cm4gdGhpcy0+bG9ja187Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6YWNxdWlyZV9y
ZWFkICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF9sb2NrICgmdGhpcy0+
bG9ja18pOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OmFjcXVpcmVfd3JpdGUgKHZv
aWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKCZ0aGlzLT5sb2NrXyk7
Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV9yZWFkICh2b2lkKQp7
CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2NrICgmdGhpcy0+bG9ja18pOwp9
CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsK
CiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X3RyeWxvY2sgKCZ0aGlzLT5sb2NrXyk7Cn0K
CmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2
b2lkKQp7CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OmFjcXVp
cmUgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X2xvY2sgKCZ0aGlzLT5s
b2NrXyk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZF9NdXRleDo6YWNxdWlyZSAoQUNFX1RpbWVf
VmFsdWUgJnR2KQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF9sb2NrICgmdGhpcy0+
bG9ja18sIHR2KTsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkX011dGV4Ojp0cnlhY3F1aXJlICh2
b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocmVhZF9tdXRleF90cnlsb2NrICgmdGhpcy0+bG9j
a18pOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWRfTXV0ZXg6OnJlbGVhc2UgKHZvaWQpCnsKCiAg
cmV0dXJuIEFDRV9PUzo6dGhyZWFkX211dGV4X3VubG9jayAoJnRoaXMtPmxvY2tfKTsKfQoKaW5s
aW5lIGludApBQ0VfVGhyZWFkX011dGV4OjpyZW1vdmUgKHZvaWQpCnsKCiAgaW50IHJlc3VsdCA9
IDA7CiAgaWYgKHRoaXMtPnJlbW92ZWRfID09IDApCiAgICB7CiAgICAgIHRoaXMtPnJlbW92ZWRf
ID0gMTsKICAgICAgcmVzdWx0ID0gQUNFX09TOjp0aHJlYWRfbXV0ZXhfZGVzdHJveSAoJnRoaXMt
PmxvY2tfKTsKICAgIH0KICByZXR1cm4gcmVzdWx0Owp9CiMgNTk3ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2guaSIKaW5saW5lCkFDRV9Db25kaXRp
b25fQXR0cmlidXRlczo6QUNFX0NvbmRpdGlvbl9BdHRyaWJ1dGVzIChpbnQgdHlwZSkKewogICh2
b2lkKSBBQ0VfT1M6OmNvbmRhdHRyX2luaXQgKHRoaXMtPmF0dHJpYnV0ZXNfLCB0eXBlKTsKfQoK
aW5saW5lCkFDRV9Db25kaXRpb25fQXR0cmlidXRlczo6fkFDRV9Db25kaXRpb25fQXR0cmlidXRl
cyAodm9pZCkKewogIEFDRV9PUzo6Y29uZGF0dHJfZGVzdHJveSAodGhpcy0+YXR0cmlidXRlc18p
Owp9CgppbmxpbmUgaW50CkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4OjpyZW1vdmUgKHZvaWQp
CnsKIyA2MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T
eW5jaC5pIgogIGludCByZXN1bHQgPSAwOwoKICBpZiAodGhpcy0+cmVtb3ZlZF8gPT0gMCkKICAg
IHsKICAgICAgdGhpcy0+cmVtb3ZlZF8gPSAxOwoKICAgICAgd2hpbGUgKChyZXN1bHQgPSBBQ0Vf
T1M6OmNvbmRfZGVzdHJveSAoJnRoaXMtPmNvbmRfKSkgPT0gLTEKICAgICAgICAgICAgICYmICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgQUNFX09TOjpj
b25kX2Jyb2FkY2FzdCAoJnRoaXMtPmNvbmRfKTsKICAgICAgICAgIEFDRV9PUzo6dGhyX3lpZWxk
ICgpOwogICAgICAgIH0KICAgIH0KICByZXR1cm4gcmVzdWx0Owp9CgppbmxpbmUgQUNFX1RocmVh
ZF9NdXRleCAmCkFDRV9Db25kaXRpb25fVGhyZWFkX011dGV4OjptdXRleCAodm9pZCkKewoKICBy
ZXR1cm4gdGhpcy0+bXV0ZXhfOwp9CgppbmxpbmUgdm9pZApBQ0VfUmVjdXJzaXZlX1RocmVhZF9N
dXRleDo6c2V0X3RocmVhZF9pZCAoQUNFX3RocmVhZF90IHQpCnsKCgoKCiAgdGhpcy0+cmVjdXJz
aXZlX211dGV4Xy5vd25lcl9pZF8gPSB0OwoKfQoKaW5saW5lIGludApBQ0VfUmVjdXJzaXZlX1Ro
cmVhZF9NdXRleDo6YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUg
KCk7Cn0KCmlubGluZSBpbnQKQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXg6OmFjcXVpcmVfd3Jp
dGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+YWNxdWlyZSAoKTsKfQoKaW5saW5lIGludApBQ0Vf
UmVjdXJzaXZlX1RocmVhZF9NdXRleDo6dHJ5YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnRyeWFjcXVpcmUgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1JlY3Vyc2l2ZV9UaHJlYWRf
TXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWly
ZSAoKTsKfQoKaW5saW5lIGludApBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleDo6dHJ5YWNxdWly
ZV93cml0ZV91cGdyYWRlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCgoKaW5saW5lCkFDRV9OdWxs
X0JhcnJpZXI6OkFDRV9OdWxsX0JhcnJpZXIgKHVfaW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKikKewp9CgppbmxpbmUKQUNFX051bGxfQmFycmllcjo6fkFDRV9OdWxsX0Jh
cnJpZXIgKHZvaWQpCnsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9CYXJyaWVyOjp3YWl0ICh2b2lk
KQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxsX0JhcnJpZXI6OmR1bXAgKHZv
aWQpIGNvbnN0CnsKfQoKaW5saW5lCkFDRV9OdWxsX011dGV4OjpBQ0VfTnVsbF9NdXRleCAoY29u
c3QgQUNFX1RDSEFSICopCnsKfQoKaW5saW5lCkFDRV9OdWxsX011dGV4Ojp+QUNFX051bGxfTXV0
ZXggKHZvaWQpCnsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6cmVtb3ZlICh2b2lkKQp7
CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfTXV0ZXg6OmFjcXVpcmUgKHZvaWQp
CnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6YWNxdWlyZSAoQUNF
X1RpbWVfVmFsdWUgJikKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX011dGV4
Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxf
TXV0ZXg6OnJlbGVhc2UgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVs
bF9NdXRleDo6YWNxdWlyZV93cml0ZSAodm9pZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50
CkFDRV9OdWxsX011dGV4Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0K
CmlubGluZSBpbnQKQUNFX051bGxfTXV0ZXg6OnRyeWFjcXVpcmVfd3JpdGVfdXBncmFkZSAodm9p
ZCkKewogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX011dGV4OjphY3F1aXJlX3Jl
YWQgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVsbF9NdXRleDo6dHJ5
YWNxdWlyZV9yZWFkICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxs
X011dGV4OjpkdW1wICh2b2lkKSBjb25zdAp7Cn0KCmlubGluZSBpbnQKQUNFX05vb3BfVG9rZW46
OnJlbmV3IChpbnQsIEFDRV9UaW1lX1ZhbHVlICopCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIHZv
aWQKQUNFX05vb3BfVG9rZW46OmR1bXAgKHZvaWQpIGNvbnN0CnsKfQoKCmlubGluZQpBQ0VfTnVs
bF9Db25kaXRpb246OkFDRV9OdWxsX0NvbmRpdGlvbiAoY29uc3QgQUNFX051bGxfTXV0ZXggJm0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKQogIDogbXV0
ZXhfICgoQUNFX051bGxfTXV0ZXggJikgbSkKewp9CgppbmxpbmUgQUNFX051bGxfQ29uZGl0aW9u
Ojp+QUNFX051bGxfQ29uZGl0aW9uICh2b2lkKQp7Cn0KCmlubGluZSBpbnQgQUNFX051bGxfQ29u
ZGl0aW9uOjpyZW1vdmUgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTnVs
bF9Db25kaXRpb246OndhaXQgKEFDRV9UaW1lX1ZhbHVlICopCnsKICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gNjI7CiAgcmV0dXJuIC0xOwp9CgppbmxpbmUgaW50CkFDRV9OdWxsX0NvbmRpdGlv
bjo6c2lnbmFsICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX051bGxfQ29u
ZGl0aW9uOjpicm9hZGNhc3QgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIEFDRV9OdWxs
X011dGV4ICYKQUNFX051bGxfQ29uZGl0aW9uOjptdXRleCAodm9pZCkKewogIHJldHVybiB0aGlz
LT5tdXRleF87Cn0KCmlubGluZSB2b2lkCkFDRV9OdWxsX0NvbmRpdGlvbjo6ZHVtcCAodm9pZCkg
Y29uc3QKewp9CiMgODkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvU3luY2guaSIKaW5saW5lCkFDRV9UU1NfQWRhcHRlcjo6fkFDRV9UU1NfQWRhcHRlciAo
dm9pZCkKewp9CgppbmxpbmUKQUNFX01hbnVhbF9FdmVudDo6fkFDRV9NYW51YWxfRXZlbnQgKHZv
aWQpCnsKfQoKaW5saW5lCkFDRV9BdXRvX0V2ZW50Ojp+QUNFX0F1dG9fRXZlbnQgKHZvaWQpCnsK
fQoKCmlubGluZQpBQ0VfUldfVGhyZWFkX011dGV4Ojp+QUNFX1JXX1RocmVhZF9NdXRleCAodm9p
ZCkKewp9CgppbmxpbmUKQUNFX1RocmVhZF9TZW1hcGhvcmU6On5BQ0VfVGhyZWFkX1NlbWFwaG9y
ZSAodm9pZCkKewp9CgppbmxpbmUKQUNFX1N1Yl9CYXJyaWVyOjp+QUNFX1N1Yl9CYXJyaWVyICh2
b2lkKQp7Cn0KCmlubGluZQpBQ0VfQmFycmllcjo6fkFDRV9CYXJyaWVyICh2b2lkKQp7Cn0KCmlu
bGluZQpBQ0VfVGhyZWFkX0JhcnJpZXI6On5BQ0VfVGhyZWFkX0JhcnJpZXIgKHZvaWQpCnsKfQoj
IDE1NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aC5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL1N5bmNoX1QuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvU3luY2hfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMgoKCgoKCgpjbGFz
cyBBQ0VfVGltZV9WYWx1ZTsKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hB
TklTTT4KY2xhc3MgQUNFX0xvY2tfQWRhcHRlciA6IHB1YmxpYyBBQ0VfTG9jawp7CnB1YmxpYzoK
ICB0eXBlZGVmIEFDRV9MT0NLSU5HX01FQ0hBTklTTSBBQ0VfTE9DSzsKCgoKCiAgQUNFX0xvY2tf
QWRhcHRlciAoQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICZsb2NrKTsKCgoKICBBQ0VfTG9ja19BZGFw
dGVyICh2b2lkKTsKCgoKICB2aXJ0dWFsIH5BQ0VfTG9ja19BZGFwdGVyICh2b2lkKTsKCgoKICB2
aXJ0dWFsIGludCBhY3F1aXJlICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IHRyeWFjcXVpcmUgKHZv
aWQpOwoKCiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9pZCk7CgoKCgoKCiAgdmlydHVhbCBpbnQg
YWNxdWlyZV9yZWFkICh2b2lkKTsKCgoKCgoKICB2aXJ0dWFsIGludCBhY3F1aXJlX3dyaXRlICh2
b2lkKTsKCgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCgogIHZpcnR1
YWwgaW50IHRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHRyeWFj
cXVpcmVfd3JpdGVfdXBncmFkZSAodm9pZCk7CgoKICB2aXJ0dWFsIGludCByZW1vdmUgKHZvaWQp
OwoKcHJpdmF0ZToKCiAgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICpsb2NrXzsKCgoKICBpbnQgZGVs
ZXRlX2xvY2tfOwp9OwojIDEyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL1N5bmNoX1QuaCIKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklT
TT4KY2xhc3MgQUNFX1JldmVyc2VfTG9jayA6IHB1YmxpYyBBQ0VfTG9jawp7CnB1YmxpYzoKICB0
eXBlZGVmIEFDRV9MT0NLSU5HX01FQ0hBTklTTSBBQ0VfTE9DSzsKCgoKCiAgQUNFX1JldmVyc2Vf
TG9jayAoQUNFX0xPQ0tJTkdfTUVDSEFOSVNNICZsb2NrKTsKCgoKICB2aXJ0dWFsIH5BQ0VfUmV2
ZXJzZV9Mb2NrICh2b2lkKTsKCgoKICB2aXJ0dWFsIGludCBhY3F1aXJlICh2b2lkKTsKCgogIHZp
cnR1YWwgaW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVsZWFzZSAodm9p
ZCk7CgoKICB2aXJ0dWFsIGludCBhY3F1aXJlX3JlYWQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQg
YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKICB2aXJ0dWFsIGludCB0cnlhY3F1aXJlX3JlYWQgKHZv
aWQpOwoKCiAgdmlydHVhbCBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodm9pZCk7CgoKICB2aXJ0dWFs
IGludCB0cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVt
b3ZlICh2b2lkKTsKCnByaXZhdGU6CgogIEFDRV9MT0NLSU5HX01FQ0hBTklTTSAmbG9ja187Cn07
CiMgMTgyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu
Y2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CmNsYXNzIEFDRV9B
dG9taWNfT3AKewpwdWJsaWM6CgoKCiAgQUNFX0F0b21pY19PcCAodm9pZCk7CgoKICBBQ0VfQXRv
bWljX09wIChjb25zdCBUWVBFICZjKTsKCgoKCiAgVFlQRSBvcGVyYXRvcisrICh2b2lkKTsKCgog
IFRZUEUgb3BlcmF0b3IrKyAoaW50KTsKCgogIFRZUEUgb3BlcmF0b3IrPSAoY29uc3QgVFlQRSAm
aSk7CgoKICBUWVBFIG9wZXJhdG9yLS0gKHZvaWQpOwoKCiAgVFlQRSBvcGVyYXRvci0tIChpbnQp
OwoKCiAgVFlQRSBvcGVyYXRvci09IChjb25zdCBUWVBFICZpKTsKCgogIGludCBvcGVyYXRvcj09
IChjb25zdCBUWVBFICZpKSBjb25zdDsKCgogIGludCBvcGVyYXRvciE9IChjb25zdCBUWVBFICZp
KSBjb25zdDsKCgogIGludCBvcGVyYXRvcj49IChjb25zdCBUWVBFICZpKSBjb25zdDsKCgogIGlu
dCBvcGVyYXRvcj4gKGNvbnN0IFRZUEUgJnJocykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3I8PSAo
Y29uc3QgVFlQRSAmcmhzKSBjb25zdDsKCgogIGludCBvcGVyYXRvcjwgKGNvbnN0IFRZUEUgJnJo
cykgY29uc3Q7CgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVFlQRSAmaSk7CgoKICB2b2lkIG9w
ZXJhdG9yPSAoY29uc3QgQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT4gJnJocyk7CgoKICBU
WVBFIHZhbHVlICh2b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgoK
ICBBQ0VfQXRvbWljX09wIChjb25zdCBBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPiAmKTsK
IyAyNTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aF9ULmgiCiAgQUNFX0xPQ0sgJm11dGV4ICh2b2lkKTsKCgoKCgoKCiAgVFlQRSAmdmFsdWVfaSAo
dm9pZCk7Cgpwcml2YXRlOgoKICBBQ0VfTE9DSyBtdXRleF87CgoKICBUWVBFIHZhbHVlXzsKfTsK
IyAyOTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBUWVBFPgpjbGFzcyBBQ0VfVFNTCnsKcHVibGljOgojIDMw
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1Qu
aCIKICBBQ0VfVFNTIChUWVBFICp0c19vYmogPSAwKTsKCgogIHZpcnR1YWwgfkFDRV9UU1MgKHZv
aWQpOwojIDMxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L1N5bmNoX1QuaCIKICBUWVBFICp0c19vYmplY3QgKHZvaWQpIGNvbnN0OwoKCgogIFRZUEUgKnRz
X29iamVjdCAoVFlQRSAqKTsKCgoKICBUWVBFICpvcGVyYXRvci0+ICgpIGNvbnN0OwoKCiAgb3Bl
cmF0b3IgVFlQRSAqKHZvaWQpIGNvbnN0OwoKCiAgdmlydHVhbCBUWVBFICptYWtlX1RTU19UWVBF
ICh2b2lkKSBjb25zdDsKCgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKCnByb3RlY3Rl
ZDoKCgogIFRZUEUgKnRzX2dldCAodm9pZCkgY29uc3Q7CgoKCiAgaW50IHRzX2luaXQgKHZvaWQp
IGNvbnN0OwoKCgoKCgogIEFDRV9UaHJlYWRfTXV0ZXgga2V5bG9ja187CgoKICBpbnQgb25jZV87
CgoKICBBQ0VfdGhyZWFkX2tleV90IGtleV87CgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwICh2b2lk
ICpwdHIpOwoKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9UU1M8VFlQRT4gJik7CiAgQUNF
X1RTUyAoY29uc3QgQUNFX1RTUzxUWVBFPiAmKTsKfTsKIyAzODkgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBU
WVBFPgpjbGFzcyBBQ0VfVFNTX1R5cGVfQWRhcHRlcgp7CnB1YmxpYzoKCiAgQUNFX1RTU19UeXBl
X0FkYXB0ZXIgKGNvbnN0IFRZUEUgdmFsdWUgPSAwKTogdmFsdWVfICh2YWx1ZSkge30KCgoKICBv
cGVyYXRvciBUWVBFICgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlXzsgfTsKCgoKICBvcGVyYXRvciBU
WVBFICYoKSB7IHJldHVybiB2YWx1ZV87IH07Cgpwcml2YXRlOgoKICBUWVBFIHZhbHVlXzsKfTsK
IyA0MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0d1YXJkCnsKcHVibGlj
OgoKCiAgQUNFX0d1YXJkIChBQ0VfTE9DSyAmbCk7CgoKCgogIEFDRV9HdWFyZCAoQUNFX0xPQ0sg
JmwsIGludCBibG9jayk7CgoKCgoKCiAgQUNFX0d1YXJkIChBQ0VfTE9DSyAmbCwgaW50IGJsb2Nr
LCBpbnQgYmVjb21lX293bmVyKTsKCgogIH5BQ0VfR3VhcmQgKHZvaWQpOwoKCgoKICBpbnQgYWNx
dWlyZSAodm9pZCk7CgoKICBpbnQgdHJ5YWNxdWlyZSAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAo
dm9pZCk7CgoKCiAgdm9pZCBkaXNvd24gKHZvaWQpOwoKCgoKICBpbnQgbG9ja2VkICh2b2lkKSBj
b25zdDsKCgogIGludCByZW1vdmUgKHZvaWQpOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK
CgoKCnByb3RlY3RlZDoKCgogIEFDRV9HdWFyZCAoQUNFX0xPQ0sgKmxvY2spOiBsb2NrXyAobG9j
aykge30KCgogIEFDRV9MT0NLICpsb2NrXzsKCgogIGludCBvd25lcl87Cgpwcml2YXRlOgoKICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0d1YXJkPEFDRV9MT0NLPiAmKTsKICBBQ0VfR3VhcmQg
KGNvbnN0IEFDRV9HdWFyZDxBQ0VfTE9DSz4gJik7Cn07CiMgNDk3ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3Mg
QUNFX0xPQ0s+CmNsYXNzIEFDRV9Xcml0ZV9HdWFyZCA6IHB1YmxpYyBBQ0VfR3VhcmQ8QUNFX0xP
Q0s+CnsKcHVibGljOgoKCgogIEFDRV9Xcml0ZV9HdWFyZCAoQUNFX0xPQ0sgJm0pOwoKCgogIEFD
RV9Xcml0ZV9HdWFyZCAoQUNFX0xPQ0sgJm0sIGludCBibG9jayk7CgoKCgogIGludCBhY3F1aXJl
X3dyaXRlICh2b2lkKTsKCgogIGludCBhY3F1aXJlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJl
X3dyaXRlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgoKCiAgdm9pZCBkdW1w
ICh2b2lkKSBjb25zdDsKCgoKfTsKIyA1NDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xh
c3MgQUNFX1JlYWRfR3VhcmQgOiBwdWJsaWMgQUNFX0d1YXJkPEFDRV9MT0NLPgp7CnB1YmxpYzoK
CgoKICBBQ0VfUmVhZF9HdWFyZCAoQUNFX0xPQ0smIG0pOwoKCgogIEFDRV9SZWFkX0d1YXJkIChB
Q0VfTE9DSyAmbSwgaW50IGJsb2NrKTsKCgoKCiAgaW50IGFjcXVpcmVfcmVhZCAodm9pZCk7CgoK
ICBpbnQgYWNxdWlyZSAodm9pZCk7CgoKICBpbnQgdHJ5YWNxdWlyZV9yZWFkICh2b2lkKTsKCgog
IGludCB0cnlhY3F1aXJlICh2b2lkKTsKCgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoK
fTsKIyA1OTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T
eW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19HdWFyZAp7
CnB1YmxpYzoKCgoKICBBQ0VfVFNTX0d1YXJkIChBQ0VfTE9DSyAmbG9jaywgaW50IGJsb2NrID0g
MSk7CgoKICB+QUNFX1RTU19HdWFyZCAodm9pZCk7CgoKCgogIGludCBhY3F1aXJlICh2b2lkKTsK
CgoKICBpbnQgdHJ5YWNxdWlyZSAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAodm9pZCk7CgoKCiAg
aW50IHJlbW92ZSAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCgoKcHJvdGVj
dGVkOgoKICBBQ0VfVFNTX0d1YXJkICh2b2lkKTsKCgogIHZvaWQgaW5pdF9rZXkgKHZvaWQpOwoK
CiAgc3RhdGljIHZvaWQgY2xlYW51cCAodm9pZCAqcHRyKTsKCgogIEFDRV90aHJlYWRfa2V5X3Qg
a2V5XzsKCnByaXZhdGU6CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfVFNTX0d1YXJkPEFD
RV9MT0NLPiAmKTsKICBBQ0VfVFNTX0d1YXJkIChjb25zdCBBQ0VfVFNTX0d1YXJkPEFDRV9MT0NL
PiAmKTsKfTsKIyA2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19X
cml0ZV9HdWFyZCA6IHB1YmxpYyBBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPgp7CnB1YmxpYzoKCgoK
ICBBQ0VfVFNTX1dyaXRlX0d1YXJkIChBQ0VfTE9DSyAmbG9jaywgaW50IGJsb2NrID0gMSk7CgoK
CgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgogIGludCBhY3F1aXJlICh2b2lkKTsKCgog
IGludCB0cnlhY3F1aXJlX3dyaXRlICh2b2lkKTsKCgogIGludCB0cnlhY3F1aXJlICh2b2lkKTsK
CgoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKfTsKIyA2OTYgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCnRlbXBsYXRlIDxjbGFz
cyBBQ0VfTE9DSz4KY2xhc3MgQUNFX1RTU19SZWFkX0d1YXJkIDogcHVibGljIEFDRV9UU1NfR3Vh
cmQ8QUNFX0xPQ0s+CnsKcHVibGljOgoKCiAgQUNFX1RTU19SZWFkX0d1YXJkIChBQ0VfTE9DSyAm
bG9jaywgaW50IGJsb2NrID0gMSk7CgoKCiAgaW50IGFjcXVpcmVfcmVhZCAodm9pZCk7CgoKICBp
bnQgYWNxdWlyZSAodm9pZCk7CgoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodm9pZCk7CgoKCiAg
aW50IHRyeWFjcXVpcmUgKHZvaWQpOwoKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCn07
CiMgNzUwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu
Y2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CmNsYXNzIEFDRV9Db25kaXRpb24KewpwdWJs
aWM6CgoKICBBQ0VfQ29uZGl0aW9uIChNVVRFWCAmbSwgaW50IHR5cGUgPSBQVEhSRUFEX1BST0NF
U1NfUFJJVkFURSwKICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUgPSAwLCB2
b2lkICphcmcgPSAwKTsKCgogIH5BQ0VfQ29uZGl0aW9uICh2b2lkKTsKIyA3NjkgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCiAgaW50IHdh
aXQgKGNvbnN0IEFDRV9UaW1lX1ZhbHVlICphYnN0aW1lKTsKCgogIGludCB3YWl0ICh2b2lkKTsK
IyA3ODIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5j
aF9ULmgiCiAgaW50IHdhaXQgKE1VVEVYICZtdXRleCwgY29uc3QgQUNFX1RpbWVfVmFsdWUgKmFi
c3RpbWUgPSAwKTsKCgogIGludCBzaWduYWwgKHZvaWQpOwoKCiAgaW50IGJyb2FkY2FzdCAodm9p
ZCk7CgoKCiAgaW50IHJlbW92ZSAodm9pZCk7CgoKICBNVVRFWCAmbXV0ZXggKHZvaWQpOwoKCiAg
dm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgoKCnByb3RlY3RlZDoKIyA4MTcgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiCiAgQUNFX2NvbmRf
dCBjb25kXzsKCgogIE1VVEVYICZtdXRleF87Cgpwcml2YXRlOgoKICB2b2lkIG9wZXJhdG9yPSAo
Y29uc3QgQUNFX0NvbmRpdGlvbjxNVVRFWD4gJik7CiAgQUNFX0NvbmRpdGlvbiAoY29uc3QgQUNF
X0NvbmRpdGlvbjxNVVRFWD4gJik7Cn07CiMgODQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CmNs
YXNzIEFDRV9UaHJlYWRfQ29uZGl0aW9uIDogcHVibGljIEFDRV9Db25kaXRpb248TVVURVg+CnsK
cHVibGljOgoKICBBQ0VfVGhyZWFkX0NvbmRpdGlvbiAoTVVURVggJm0sIGNvbnN0IEFDRV9UQ0hB
UiAqbmFtZSA9IDAsIHZvaWQgKmFyZyA9IDApOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK
CgoKfTsKIyA4NjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9TeW5jaF9ULmgiCmNsYXNzIEFDRV9OVUxMX1NZTkNICnsKcHVibGljOgogIHR5cGVkZWYgQUNF
X051bGxfTXV0ZXggTVVURVg7CiAgdHlwZWRlZiBBQ0VfTnVsbF9NdXRleCBOVUxMX01VVEVYOwog
IHR5cGVkZWYgQUNFX051bGxfTXV0ZXggUFJPQ0VTU19NVVRFWDsKICB0eXBlZGVmIEFDRV9OdWxs
X011dGV4IFJFQ1VSU0lWRV9NVVRFWDsKICB0eXBlZGVmIEFDRV9OdWxsX011dGV4IFJXX01VVEVY
OwogIHR5cGVkZWYgQUNFX051bGxfQ29uZGl0aW9uIENPTkRJVElPTjsKICB0eXBlZGVmIEFDRV9O
dWxsX1NlbWFwaG9yZSBTRU1BUEhPUkU7CiAgdHlwZWRlZiBBQ0VfTnVsbF9NdXRleCBOVUxMX1NF
TUFQSE9SRTsKfTsKCgoKY2xhc3MgQUNFX1Byb2Nlc3NfTXV0ZXg7CiMgODk1ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIgpjbGFzcyBBQ0Vf
TVRfU1lOQ0gKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0VfVGhyZWFkX011dGV4IE1VVEVYOwogIHR5
cGVkZWYgQUNFX051bGxfTXV0ZXggTlVMTF9NVVRFWDsKICB0eXBlZGVmIEFDRV9Qcm9jZXNzX011
dGV4IFBST0NFU1NfTVVURVg7CiAgdHlwZWRlZiBBQ0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleCBS
RUNVUlNJVkVfTVVURVg7CiAgdHlwZWRlZiBBQ0VfUldfVGhyZWFkX011dGV4IFJXX01VVEVYOwog
IHR5cGVkZWYgQUNFX0NvbmRpdGlvbl9UaHJlYWRfTXV0ZXggQ09ORElUSU9OOwogIHR5cGVkZWYg
QUNFX1RocmVhZF9TZW1hcGhvcmUgU0VNQVBIT1JFOwogIHR5cGVkZWYgQUNFX051bGxfU2VtYXBo
b3JlIE5VTExfU0VNQVBIT1JFOwp9OwojIDk2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5pIiAxCgoKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAxCiMgMTYgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAx
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5o
IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9B
Q0UuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvVGhyZWFkLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvVGhyZWFkX0FkYXB0ZXIuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkX0FkYXB0ZXIuaCIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgi
IDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jh
c2VfVGhyZWFkX0FkYXB0ZXIuaCIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRlci5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRl
ci5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PU19Mb2dfTXNnX0F0dHJpYnV0ZXMuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQmFzZV9UaHJlYWRfQWRhcHRlci5oIiAyCgoKCgoKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1NfRXhwb3J0
LmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIgMgoKCgoKCgpleHRlcm4gIkMiIHZvaWQgKmFjZV90aHJl
YWRfYWRhcHRlciAodm9pZCAqYXJncyk7CiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9CYXNlX1RocmVhZF9BZGFwdGVyLmgiCmNsYXNzIEFDRV9PU19U
aHJlYWRfRGVzY3JpcHRvcgp7CnB1YmxpYzoKCiAgbG9uZyBmbGFncyAodm9pZCkgY29uc3Q7Cgpw
cm90ZWN0ZWQ6CgogIEFDRV9PU19UaHJlYWRfRGVzY3JpcHRvciAobG9uZyBmbGFncyA9IDApOwoK
CgoKCgoKICBsb25nIGZsYWdzXzsKfTsKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIKY2xhc3MgQUNFX0Jhc2Vf
VGhyZWFkX0FkYXB0ZXIKewpwdWJsaWM6CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXIgKEFDRV9U
SFJfRlVOQyB1c2VyX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RIUl9DX0ZVTkMgZW50cnlfcG9pbnQgPSAo
QUNFX1RIUl9DX0ZVTkMpIGFjZV90aHJlYWRfYWRhcHRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX09TX1RocmVhZF9EZXNjcmlwdG9yICp0ZCA9IDAKCgoKCgogICAgICAgICAgICAg
ICAgICAgICAgKTsKCgogIHZpcnR1YWwgdm9pZCAqaW52b2tlICh2b2lkKSA9IDA7CgoKCiAgQUNF
X1RIUl9DX0ZVTkMgZW50cnlfcG9pbnQgKHZvaWQpOwoKCiAgc3RhdGljIHZvaWQgY2xvc2VfbG9n
X21zZyAodm9pZCk7CgoKICBzdGF0aWMgdm9pZCBzeW5jX2xvZ19tc2cgKGNvbnN0IEFDRV9UQ0hB
UiAqcHJvZ19uYW1lKTsKCgogIHN0YXRpYyBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKnRocl9k
ZXNjX2xvZ19tc2cgKHZvaWQpOwoKcHJvdGVjdGVkOgoKCiAgdmlydHVhbCB+QUNFX0Jhc2VfVGhy
ZWFkX0FkYXB0ZXIgKHZvaWQpOwoKCgogIHZvaWQgaW5oZXJpdF9sb2dfbXNnICh2b2lkKTsKCnBy
aXZhdGU6CgogIHN0YXRpYyBBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9sb2dfbXNnX2hvb2tf
OwogIHN0YXRpYyBBQ0VfSU5IRVJJVF9MT0dfTVNHX0hPT0sgaW5oZXJpdF9sb2dfbXNnX2hvb2tf
OwogIHN0YXRpYyBBQ0VfQ0xPU0VfTE9HX01TR19IT09LIGNsb3NlX2xvZ19tc2dfaG9va187CiAg
c3RhdGljIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBzeW5jX2xvZ19tc2dfaG9va187CiAgc3RhdGlj
IEFDRV9USFJfREVTQ19MT0dfTVNHX0hPT0sgdGhyX2Rlc2NfbG9nX21zZ19ob29rXzsKCgogIHN0
YXRpYyB2b2lkIHNldF9sb2dfbXNnX2hvb2tzIChBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9o
b29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfSU5IRVJJVF9MT0dfTVNH
X0hPT0sgaW5oZXJpdF9ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0Vf
Q0xPU0VfTE9HX01TR19IT09LIGNsb3NlX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBzeW5jX2hvb2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9USFJfREVTQ19MT0dfTVNHX0hPT0sgdGhyX2Rlc2MpOwoKCiAg
ZnJpZW5kIGNsYXNzIEFDRV9Mb2dfTXNnOwoKcHJvdGVjdGVkOgoKICBBQ0VfVEhSX0ZVTkMgdXNl
cl9mdW5jXzsKCgogIHZvaWQgKmFyZ187CgoKCiAgQUNFX1RIUl9DX0ZVTkMgZW50cnlfcG9pbnRf
OwoKCgoKCgoKICBBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKnRocl9kZXNjXzsKCgogIEFDRV9P
U19Mb2dfTXNnX0F0dHJpYnV0ZXMgbG9nX21zZ19hdHRyaWJ1dGVzXzsKCgoKICBmcmllbmQgY2xh
c3MgQUNFX1RocmVhZF9BZGFwdGVyX0hhc19Qcml2YXRlX0Rlc3RydWN0b3I7Cn07CgoKCgoKCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhy
ZWFkX0FkYXB0ZXIuaW5sIiAxCgoKaW5saW5lIGxvbmcKQUNFX09TX1RocmVhZF9EZXNjcmlwdG9y
OjpmbGFncyAodm9pZCkgY29uc3QKewogIHJldHVybiBmbGFnc187Cn0KCgppbmxpbmUKQUNFX09T
X1RocmVhZF9EZXNjcmlwdG9yOjpBQ0VfT1NfVGhyZWFkX0Rlc2NyaXB0b3IgKGxvbmcgZmxhZ3Mp
CiAgOiBmbGFnc18gKGZsYWdzKQp7Cn0KCmlubGluZSB2b2lkCkFDRV9CYXNlX1RocmVhZF9BZGFw
dGVyOjpzZXRfbG9nX21zZ19ob29rcyAoCiAgICBBQ0VfSU5JVF9MT0dfTVNHX0hPT0sgaW5pdF9o
b29rLAogICAgQUNFX0lOSEVSSVRfTE9HX01TR19IT09LIGluaGVyaXRfaG9vaywKICAgIEFDRV9D
TE9TRV9MT0dfTVNHX0hPT0sgY2xvc2VfaG9vaywKICAgIEFDRV9TWU5DX0xPR19NU0dfSE9PSyBz
eW5jX2hvb2ssCiAgICBBQ0VfVEhSX0RFU0NfTE9HX01TR19IT09LIHRocl9kZXNjX2hvb2spCnsK
ICBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRlcjo6aW5pdF9sb2dfbXNnX2hvb2tfID0gaW5pdF9ob29r
OwogIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOjppbmhlcml0X2xvZ19tc2dfaG9va18gPSBpbmhl
cml0X2hvb2s7CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXI6OmNsb3NlX2xvZ19tc2dfaG9va18g
PSBjbG9zZV9ob29rOwogIEFDRV9CYXNlX1RocmVhZF9BZGFwdGVyOjpzeW5jX2xvZ19tc2dfaG9v
a18gPSBzeW5jX2hvb2s7CiAgQUNFX0Jhc2VfVGhyZWFkX0FkYXB0ZXI6OnRocl9kZXNjX2xvZ19t
c2dfaG9va18gPSB0aHJfZGVzY19ob29rOwp9CgppbmxpbmUgQUNFX1RIUl9DX0ZVTkMKQUNFX0Jh
c2VfVGhyZWFkX0FkYXB0ZXI6OmVudHJ5X3BvaW50ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmVu
dHJ5X3BvaW50XzsKfQojIDE2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE2OSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0Jhc2VfVGhyZWFkX0FkYXB0ZXIu
aCIgMgojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
VGhyZWFkX0FkYXB0ZXIuaCIgMgoKCgoKCgpjbGFzcyBBQ0VfVGhyZWFkX01hbmFnZXI7CmNsYXNz
IEFDRV9UaHJlYWRfRGVzY3JpcHRvcjsKIyA0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgiCmNsYXNzIEFDRV9UaHJlYWRfQWRh
cHRlciA6IHB1YmxpYyBBQ0VfQmFzZV9UaHJlYWRfQWRhcHRlcgp7CnB1YmxpYzoKICBBQ0VfVGhy
ZWFkX0FkYXB0ZXIgKEFDRV9USFJfRlVOQyB1c2VyX2Z1bmMsCiAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICphcmcsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhSX0NfRlVOQyBlbnRyeV9w
b2ludCA9IChBQ0VfVEhSX0NfRlVOQykgYWNlX3RocmVhZF9hZGFwdGVyLAogICAgICAgICAgICAg
ICAgICAgICAgQUNFX1RocmVhZF9NYW5hZ2VyICp0aHJfbWdyID0gMCwKICAgICAgICAgICAgICAg
ICAgICAgIEFDRV9UaHJlYWRfRGVzY3JpcHRvciAqdGQgPSAwCgoKCgoKICAgICAgICAgICAgICAg
ICAgICAgICk7CgoKCgoKCiAgdmlydHVhbCB2b2lkICppbnZva2UgKHZvaWQpOwoKCiAgQUNFX1Ro
cmVhZF9NYW5hZ2VyICp0aHJfbWdyICh2b2lkKTsKCnByaXZhdGU6CgogIH5BQ0VfVGhyZWFkX0Fk
YXB0ZXIgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCAqaW52b2tlX2kgKHZvaWQpOwoKcHJpdmF0
ZToKCiAgQUNFX1RocmVhZF9NYW5hZ2VyICp0aHJfbWdyXzsKCgoKICBmcmllbmQgY2xhc3MgQUNF
X1RocmVhZF9BZGFwdGVyX0hhc19Qcml2YXRlX0Rlc3RydWN0b3I7Cn07CgoKCgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVy
LmlubCIgMQoKCmlubGluZSBBQ0VfVGhyZWFkX01hbmFnZXIgKgpBQ0VfVGhyZWFkX0FkYXB0ZXI6
OnRocl9tZ3IgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+dGhyX21ncl87Cn0KIyA5MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZF9BZGFwdGVyLmgi
IDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9w
b3N0LmgiIDEKIyA5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL1RocmVhZF9BZGFwdGVyLmgiIDIKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAyCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKY2xhc3MgQUNFX1RocmVhZAp7CnB1
YmxpYzoKIyA2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L1RocmVhZC5oIgogIHN0YXRpYyBpbnQgc3Bhd24gKEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmFyZyA9IDAsCiAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFn
cyA9IDB4MDAwMDAwMDIgfCAweDAwMDEwMDAwLAogICAgICAgICAgICAgICAgICAgIEFDRV90aHJl
YWRfdCAqdF9pZCA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX2h0aHJlYWRfdCAqdF9oYW5k
bGUgPSAwLAogICAgICAgICAgICAgICAgICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZM
IC0gMUwpLAogICAgICAgICAgICAgICAgICAgIHZvaWQgKnN0YWNrID0gMCwKICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc3RhY2tfc2l6ZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgQUNFX1Ro
cmVhZF9BZGFwdGVyICp0aHJlYWRfYWRhcHRlciA9IDApOwojIDkzICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkLmgiCiAgc3RhdGljIGludCBzcGF3
bl9uIChzaXplX3QgbiwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9USFJfRlVOQyBmdW5jLAog
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnID0gMCwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgZmxhZ3MgPSAweDAwMDAwMDAyIHwgMHgwMDAxMDAwMCwKICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqc3RhY2tbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc3Rh
Y2tfc2l6ZVtdID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9UaHJlYWRfQWRhcHRlciAq
dGhyZWFkX2FkYXB0ZXIgPSAwKTsKIyAxMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaCIKICBzdGF0aWMgaW50IHNwYXduX24gKEFDRV90aHJl
YWRfdCB0aHJlYWRfaWRzW10sCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbiwKICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9USFJfRlVOQyBmdW5jLAogICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqYXJnLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBmbGFncywKICAgICAgICAgICAg
ICAgICAgICAgIGxvbmcgcHJpb3JpdHkgPSAoLTB4N2ZmZmZmZmZMIC0gMUwpLAogICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqc3RhY2tbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3Qgc3RhY2tfc2l6ZVtdID0gMCwKICAgICAgICAgICAgICAgICAgICAgIEFDRV9odGhyZWFkX3Qg
dGhyZWFkX2hhbmRsZXNbXSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGhyZWFkX0Fk
YXB0ZXIgKnRocmVhZF9hZGFwdGVyID0gMCk7CgoKICBzdGF0aWMgaW50IGpvaW4gKEFDRV90aHJl
YWRfdCwKICAgICAgICAgICAgICAgICAgIEFDRV90aHJlYWRfdCAqLAogICAgICAgICAgICAgICAg
ICAgdm9pZCAqKnN0YXR1cyk7CgoKICBzdGF0aWMgaW50IGpvaW4gKEFDRV9odGhyZWFkX3QsCiAg
ICAgICAgICAgICAgICAgICB2b2lkICoqID0gMCk7CgoKICBzdGF0aWMgaW50IHJlc3VtZSAoQUNF
X2h0aHJlYWRfdCk7CgoKICBzdGF0aWMgaW50IHN1c3BlbmQgKEFDRV9odGhyZWFkX3QpOwoKCiAg
c3RhdGljIGludCBnZXRwcmlvIChBQ0VfaHRocmVhZF90LCBpbnQgJnByaW8pOwoKCiAgc3RhdGlj
IGludCBzZXRwcmlvIChBQ0VfaHRocmVhZF90LCBpbnQgcHJpbyk7CgoKICBzdGF0aWMgaW50IGtp
bGwgKEFDRV90aHJlYWRfdCwgaW50IHNpZ251bSk7CgoKICBzdGF0aWMgdm9pZCB5aWVsZCAodm9p
ZCk7CgoKCgoKCgogIHN0YXRpYyB2b2lkIHNlbGYgKEFDRV9odGhyZWFkX3QgJnRfaGFuZGxlKTsK
CgogIHN0YXRpYyBBQ0VfdGhyZWFkX3Qgc2VsZiAodm9pZCk7CgoKCiAgc3RhdGljIHZvaWQgZXhp
dCAodm9pZCAqc3RhdHVzID0gMCk7CgoKICBzdGF0aWMgaW50IGdldGNvbmN1cnJlbmN5ICh2b2lk
KTsKCgogIHN0YXRpYyBpbnQgc2V0Y29uY3VycmVuY3kgKGludCBuZXdfbGV2ZWwpOwoKCiAgc3Rh
dGljIGludCBzaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc2lnc2V0X3QgKnNpZ3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpv
c2lnc2V0ID0gMCk7CgogIHN0YXRpYyBpbnQga2V5Y3JlYXRlIChBQ0VfdGhyZWFkX2tleV90ICpr
ZXlwLAoKCgogICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVEhSX0RFU1QgZGVzdHJ1Y3RvciwK
CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqID0gMCk7CgoKICBzdGF0aWMgaW50
IGtleWZyZWUgKEFDRV90aHJlYWRfa2V5X3Qga2V5KTsKCgoKICBzdGF0aWMgaW50IHNldHNwZWNp
ZmljIChBQ0VfdGhyZWFkX2tleV90IGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICp2YWx1ZSk7CgoKCiAgc3RhdGljIGludCBnZXRzcGVjaWZpYyAoQUNFX3RocmVhZF9rZXlfdCBr
ZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKnZhbHVlcCk7CgoKICBzdGF0aWMg
aW50IGRpc2FibGVjYW5jZWwgKHN0cnVjdCBjYW5jZWxfc3RhdGUgKm9sZF9zdGF0ZSk7CgoKICBz
dGF0aWMgaW50IGVuYWJsZWNhbmNlbCAoc3RydWN0IGNhbmNlbF9zdGF0ZSAqb2xkX3N0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZyk7CgoKICBzdGF0aWMgaW50IHNldGNh
bmNlbHN0YXRlIChzdHJ1Y3QgY2FuY2VsX3N0YXRlICZuZXdfc3RhdGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IGNhbmNlbF9zdGF0ZSAqb2xkX3N0YXRlKTsKCgoKCgoKICBz
dGF0aWMgaW50IGNhbmNlbCAoQUNFX3RocmVhZF90IHRfaWQpOwoKCiAgc3RhdGljIHZvaWQgdGVz
dGNhbmNlbCAodm9pZCk7Cgpwcml2YXRlOgoKICBBQ0VfVGhyZWFkICh2b2lkKTsKfTsKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9UaHJlYWQuaSIg
MQojIDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhy
ZWFkLmkiCmlubGluZSBpbnQKQUNFX1RocmVhZDo6a2V5Y3JlYXRlIChBQ0VfdGhyZWFkX2tleV90
ICprZXlwLAoKCgogICAgICAgICAgICAgICAgICAgICAgIEFDRV9USFJfREVTVCBkZXN0cnVjdG9y
LAoKICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppbnN0KQp7CgogIHJldHVybiBBQ0VfT1M6
OnRocl9rZXljcmVhdGUgKGtleXAsIGRlc3RydWN0b3IsIGluc3QpOwp9CgoKCmlubGluZSBpbnQK
QUNFX1RocmVhZDo6a2V5ZnJlZSAoQUNFX3RocmVhZF9rZXlfdCBrZXkpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2tleWZyZWUgKGtl
eSk7Cn0KCgoKCmlubGluZSBpbnQKQUNFX1RocmVhZDo6c2V0c3BlY2lmaWMgKEFDRV90aHJlYWRf
a2V5X3Qga2V5LCB2b2lkICp2YWx1ZSkKewoKICByZXR1cm4gQUNFX09TOjp0aHJfc2V0c3BlY2lm
aWMgKGtleSwgdmFsdWUpOwp9CgoKCgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmdldHNwZWNpZmlj
IChBQ0VfdGhyZWFkX2tleV90IGtleSwgdm9pZCAqKnZhbHVlcCkKewoKICByZXR1cm4gQUNFX09T
Ojp0aHJfZ2V0c3BlY2lmaWMgKGtleSwgdmFsdWVwKTsKfQoKaW5saW5lIEFDRV90aHJlYWRfdApB
Q0VfVGhyZWFkOjpzZWxmICh2b2lkKQp7CgogIHJldHVybiBBQ0VfT1M6OnRocl9zZWxmICgpOwp9
CgppbmxpbmUgdm9pZApBQ0VfVGhyZWFkOjpleGl0ICh2b2lkICpzdGF0dXMpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX09TOjp0aHJfZXhpdCAoc3RhdHVzKTsKfQoK
aW5saW5lIHZvaWQKQUNFX1RocmVhZDo6eWllbGQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogIEFDRV9PUzo6dGhyX3lpZWxkICgpOwp9CgppbmxpbmUgaW50CkFD
RV9UaHJlYWQ6OnNwYXduIChBQ0VfVEhSX0ZVTkMgZnVuYywKICAgICAgICAgICAgICAgICAgIHZv
aWQgKmFyZywKICAgICAgICAgICAgICAgICAgIGxvbmcgZmxhZ3MsCiAgICAgICAgICAgICAgICAg
ICBBQ0VfdGhyZWFkX3QgKnRfaWQsCiAgICAgICAgICAgICAgICAgICBBQ0VfaHRocmVhZF90ICp0
X2hhbmRsZSwKICAgICAgICAgICAgICAgICAgIGxvbmcgcHJpb3JpdHksCiAgICAgICAgICAgICAg
ICAgICB2b2lkICp0aHJfc3RhY2ssCiAgICAgICAgICAgICAgICAgICBzaXplX3QgdGhyX3N0YWNr
X3NpemUsCiAgICAgICAgICAgICAgICAgICBBQ0VfVGhyZWFkX0FkYXB0ZXIgKnRocmVhZF9hZGFw
dGVyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIEFDRV9P
Uzo6dGhyX2NyZWF0ZSAoZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0X2hhbmRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJfc3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyX3N0YWNrX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkX2FkYXB0ZXIpOwp9Cgppbmxp
bmUgaW50CkFDRV9UaHJlYWQ6OnJlc3VtZSAoQUNFX2h0aHJlYWRfdCB0X2lkKQp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2NvbnRpbnVl
ICh0X2lkKTsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkOjpzdXNwZW5kIChBQ0VfaHRocmVhZF90
IHRfaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFD
RV9PUzo6dGhyX3N1c3BlbmQgKHRfaWQpOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmtpbGwg
KEFDRV90aHJlYWRfdCB0X2lkLCBpbnQgc2lnbnVtKQp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6OnRocl9raWxsICh0X2lkLCBzaWdudW0pOwp9Cgpp
bmxpbmUgaW50CkFDRV9UaHJlYWQ6OmpvaW4gKEFDRV90aHJlYWRfdCB3YWl0X2ZvciwKICAgICAg
ICAgICAgICAgICAgQUNFX3RocmVhZF90ICpkZXBhcnRlZCwKICAgICAgICAgICAgICAgICAgdm9p
ZCAqKnN0YXR1cykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g
QUNFX09TOjp0aHJfam9pbiAod2FpdF9mb3IsIGRlcGFydGVkLCBzdGF0dXMpOwp9CgppbmxpbmUg
aW50CkFDRV9UaHJlYWQ6OmpvaW4gKEFDRV9odGhyZWFkX3Qgd2FpdF9mb3IsCiAgICAgICAgICAg
ICAgICAgIHZvaWQgKipzdGF0dXMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2pvaW4gKHdhaXRfZm9yLCBzdGF0dXMpOwp9CgppbmxpbmUg
aW50CkFDRV9UaHJlYWQ6OmdldGNvbmN1cnJlbmN5ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjp0aHJfZ2V0Y29uY3Vy
cmVuY3kgKCk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZDo6c2V0Y29uY3VycmVuY3kgKGludCBu
ZXdfbGV2ZWwpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiBBQ0VfT1M6OnRocl9zZXRjb25jdXJyZW5jeSAobmV3X2xldmVsKTsKfQoKaW5saW5l
IGludApBQ0VfVGhyZWFkOjpzaWdzZXRtYXNrIChpbnQgaG93LAogICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBzaWdzZXRfdCAqc2lnc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBzaWdz
ZXRfdCAqb3NpZ3NldCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICByZXR1cm4gQUNFX09TOjp0aHJfc2lnc2V0bWFzayAoaG93LCBzaWdzZXQsIG9zaWdzZXQpOwp9
CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmRpc2FibGVjYW5jZWwgKHN0cnVjdCBjYW5jZWxfc3Rh
dGUgKm9sZF9zdGF0ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICBpbnQgb2xkX2NzdGF0ZSA9IDA7CiAgaW50IHJlc3VsdCA9IEFDRV9PUzo6dGhyX3NldGNh
bmNlbHN0YXRlIChQVEhSRUFEX0NBTkNFTF9ESVNBQkxFLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJm9sZF9jc3RhdGUpOwogIGlmIChyZXN1bHQgPT0gMCAmJiBv
bGRfc3RhdGUgIT0gMCkKICAgIHsKICAgICAgQUNFX09TOjptZW1zZXQgKG9sZF9zdGF0ZSwKICAg
ICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAgICAgICBzaXplb2YgKG9sZF9z
dGF0ZSkpOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHN0YXRlID0gb2xkX2NzdGF0ZTsKICAgIH0K
CiAgcmV0dXJuIHJlc3VsdDsKfQoKaW5saW5lIGludApBQ0VfVGhyZWFkOjplbmFibGVjYW5jZWwg
KHN0cnVjdCBjYW5jZWxfc3RhdGUgKm9sZF9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgZmxhZykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IGludCBvbGRfY3N0YXRlID0gMDsKICBpbnQgb2xkX2N0eXBlID0gMDsKICBpbnQgcmVzdWx0OwoK
ICByZXN1bHQgPSBBQ0VfT1M6OnRocl9zZXRjYW5jZWxzdGF0ZSAoUFRIUkVBRF9DQU5DRUxfRU5B
QkxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2NzdGF0ZSk7
CiAgaWYgKHJlc3VsdCAhPSAwKQogICAgcmV0dXJuIHJlc3VsdDsKCiAgcmVzdWx0ID0gQUNFX09T
Ojp0aHJfc2V0Y2FuY2VsdHlwZSAoZmxhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmb2xkX2N0eXBlKTsKICBpZiAocmVzdWx0ICE9IDApCiAgICByZXR1cm4gcmVzdWx0
OwoKICBpZiAob2xkX3N0YXRlICE9IDApCiAgICB7CiAgICAgIG9sZF9zdGF0ZS0+Y2FuY2Vsc3Rh
dGUgPSBvbGRfY3N0YXRlOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHR5cGUgPSBvbGRfY3R5cGU7
CiAgICB9CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OnNldGNhbmNlbHN0
YXRlIChzdHJ1Y3QgY2FuY2VsX3N0YXRlICZuZXdfc3RhdGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgY2FuY2VsX3N0YXRlICpvbGRfc3RhdGUpCnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGludCBvbGRfY3N0YXRlID0gMDsKICBpbnQg
b2xkX2N0eXBlID0gMDsKCiAgaWYgKG5ld19zdGF0ZS5jYW5jZWxzdGF0ZSAhPSAwCiAgICAgICYm
IEFDRV9PUzo6dGhyX3NldGNhbmNlbHN0YXRlIChuZXdfc3RhdGUuY2FuY2Vsc3RhdGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkX2NzdGF0ZSkgIT0gMCkKICAgIHJl
dHVybiAtMTsKCiAgaWYgKG5ld19zdGF0ZS5jYW5jZWx0eXBlICE9IDAKICAgICAgJiYgQUNFX09T
Ojp0aHJfc2V0Y2FuY2VsdHlwZSAobmV3X3N0YXRlLmNhbmNlbHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZvbGRfY3R5cGUpICE9IDApCiAgICB7CiAgICAgIGludCBv
X2NzdGF0ZTsKCiAgICAgIEFDRV9PUzo6dGhyX3NldGNhbmNlbHN0YXRlIChvbGRfY3N0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9fY3N0YXRlKTsKICAgICAgcmV0dXJu
IC0xOwogICAgfQoKICBpZiAob2xkX3N0YXRlICE9IDApCiAgICB7CiAgICAgIG9sZF9zdGF0ZS0+
Y2FuY2Vsc3RhdGUgPSBvbGRfY3N0YXRlOwogICAgICBvbGRfc3RhdGUtPmNhbmNlbHR5cGUgPSBv
bGRfY3R5cGU7CiAgICB9CgogIHJldHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9UaHJlYWQ6OmNh
bmNlbCAoQUNFX3RocmVhZF90IHRfaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgcmV0dXJuIEFDRV9PUzo6dGhyX2NhbmNlbCAodF9pZCk7Cn0KCmlubGluZSB2b2lk
CkFDRV9UaHJlYWQ6OnRlc3RjYW5jZWwgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgogIEFDRV9PUzo6dGhyX3Rlc3RjYW5jZWwgKCk7Cn0KCmlubGluZSB2
b2lkCkFDRV9UaHJlYWQ6OnNlbGYgKEFDRV9odGhyZWFkX3QgJnRfaWQpCnsKCiAgQUNFX09TOjp0
aHJfc2VsZiAodF9pZCk7Cn0KCmlubGluZSBpbnQKQUNFX1RocmVhZDo6Z2V0cHJpbyAoQUNFX2h0
aHJlYWRfdCB0X2lkLCBpbnQgJnByaW8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6dGhyX2dldHByaW8gKHRfaWQsIHByaW8pOwp9Cgppbmxp
bmUgaW50CkFDRV9UaHJlYWQ6OnNldHByaW8gKEFDRV9odGhyZWFkX3QgdF9pZCwgaW50IHByaW8p
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6
dGhyX3NldHByaW8gKHRfaWQsIHByaW8pOwp9CiMgMjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhyZWFkLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI0MCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RocmVhZC5oIiAyCiMgNSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaSIgMgoK
dGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgaW50CkFDRV9HdWFyZDxBQ0VfTE9DSz46
OmFjcXVpcmUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+bG9ja18tPmFj
cXVpcmUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfR3Vh
cmQ8QUNFX0xPQ0s+Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPm93bmVyXyA9
IHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+
IGlubGluZSBpbnQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6cmVsZWFzZSAodm9pZCkKewogIGlmICh0
aGlzLT5vd25lcl8gIT0gLTEpCiAgICB7CiAgICAgIHRoaXMtPm93bmVyXyA9IC0xOwogICAgICBy
ZXR1cm4gdGhpcy0+bG9ja18tPnJlbGVhc2UgKCk7CiAgICB9CiAgZWxzZQogICAgcmV0dXJuIDA7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lCkFDRV9HdWFyZDxBQ0VfTE9DSz46
OkFDRV9HdWFyZCAoQUNFX0xPQ0sgJmwpCiAgOiBsb2NrXyAoJmwpLAogICAgb3duZXJfICgwKQp7
CiAgdGhpcy0+YWNxdWlyZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUK
QUNFX0d1YXJkPEFDRV9MT0NLPjo6QUNFX0d1YXJkIChBQ0VfTE9DSyAmbCwgaW50IGJsb2NrKQog
IDogbG9ja18gKCZsKSwKICAgIG93bmVyXyAoMCkKewogIGlmIChibG9jaykKICAgIHRoaXMtPmFj
cXVpcmUgKCk7CiAgZWxzZQogICAgdGhpcy0+dHJ5YWNxdWlyZSAoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0d1YXJkPEFDRV9MT0NLPjo6QUNFX0d1YXJkIChBQ0Vf
TE9DSyAmbCwgaW50IGJsb2NrLCBpbnQgYmVjb21lX293bmVyKQogIDogbG9ja18gKCZsKSwKICAg
IG93bmVyXyAoYmVjb21lX293bmVyID09IDAgPyAtMSA6IDApCnsKICBkbyB7IH0gd2hpbGUgKCZi
bG9jayA9PSAwKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0d1
YXJkPEFDRV9MT0NLPjo6fkFDRV9HdWFyZCAodm9pZCkKewogIHRoaXMtPnJlbGVhc2UgKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfR3VhcmQ8QUNFX0xPQ0s+
Ojpsb2NrZWQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+b3duZXJfICE9IC0xOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6
cmVtb3ZlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT5yZW1vdmUgKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIHZvaWQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6ZGlz
b3duICh2b2lkKQp7CiAgdGhpcy0+b3duZXJfID0gLTE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0Vf
TE9DSz4gaW5saW5lCkFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz46OkFDRV9Xcml0ZV9HdWFyZCAo
QUNFX0xPQ0sgJm0pCiAgOiBBQ0VfR3VhcmQ8QUNFX0xPQ0s+ICgmbSkKewogIHRoaXMtPmFjcXVp
cmVfd3JpdGUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0Vf
V3JpdGVfR3VhcmQ8QUNFX0xPQ0s+OjphY3F1aXJlX3dyaXRlICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPm93bmVyXyA9IHRoaXMtPmxvY2tfLT5hY3F1aXJlX3dyaXRlICgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1dyaXRlX0d1YXJkPEFDRV9MT0NLPjo6YWNx
dWlyZSAodm9pZCkKewogIHJldHVybiB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+YWNxdWly
ZV93cml0ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgaW50CkFDRV9X
cml0ZV9HdWFyZDxBQ0VfTE9DSz46OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4g
dGhpcy0+b3duZXJfID0gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfd3JpdGUgKCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIGludApBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+
Ojp0cnlhY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPm93bmVyXyA9IHRoaXMtPmxvY2tf
LT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGlu
ZQpBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+OjpBQ0VfV3JpdGVfR3VhcmQgKEFDRV9MT0NLICZt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibG9jaykK
ICA6IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKCZtKQp7CiAgaWYgKGJsb2NrKQogICAgdGhpcy0+YWNx
dWlyZV93cml0ZSAoKTsKICBlbHNlCiAgICB0aGlzLT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xP
Q0s+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+
bG9ja18tPmFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxp
bmUgaW50CkFDRV9SZWFkX0d1YXJkPEFDRV9MT0NLPjo6YWNxdWlyZSAodm9pZCkKewogIHJldHVy
biB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+YWNxdWlyZV9yZWFkICgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSBpbnQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+Ojp0
cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+b3duZXJfID0gdGhpcy0+bG9j
a18tPnRyeWFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbmxp
bmUgaW50CkFDRV9SZWFkX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNxdWlyZSAodm9pZCkKewogIHJl
dHVybiB0aGlzLT5vd25lcl8gPSB0aGlzLT5sb2NrXy0+dHJ5YWNxdWlyZV9yZWFkICgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGlubGluZQpBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz46
OkFDRV9SZWFkX0d1YXJkIChBQ0VfTE9DSyAmbSkKICA6IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKCZt
KQp7CiAgdGhpcy0+YWNxdWlyZV9yZWFkICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+
IGlubGluZQpBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz46OkFDRV9SZWFkX0d1YXJkIChBQ0VfTE9D
SyAmbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2Nr
KQogIDogQUNFX0d1YXJkPEFDRV9MT0NLPiAoJm0pCnsKICBpZiAoYmxvY2spCiAgICB0aGlzLT5h
Y3F1aXJlX3JlYWQgKCk7CiAgZWxzZQogICAgdGhpcy0+dHJ5YWNxdWlyZV9yZWFkICgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUKQUNFX0xvY2tfQWRh
cHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpBQ0VfTG9ja19BZGFwdGVyIChBQ0VfTE9DS0lO
R19NRUNIQU5JU00gJmxvY2spCiAgOiBsb2NrXyAoJmxvY2spLAogICAgZGVsZXRlX2xvY2tfICgw
KQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZQpBQ0Vf
TG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46On5BQ0VfTG9ja19BZGFwdGVyICh2
b2lkKQp7CiAgaWYgKHRoaXMtPmRlbGV0ZV9sb2NrXykKICAgIGRlbGV0ZSB0aGlzLT5sb2NrXzsK
fQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNF
X0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpyZW1vdmUgKHZvaWQpCnsKICBy
ZXR1cm4gdGhpcy0+bG9ja18tPnJlbW92ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9D
S0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19N
RUNIQU5JU00+OjphY3F1aXJlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT5hY3F1aXJl
ICgpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBp
bnQKQUNFX0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlICh2
b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlICgpOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX0xvY2tfQWRhcHRl
cjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjpyZWxlYXNlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt
PmxvY2tfLT5yZWxlYXNlICgpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01F
Q0hBTklTTT4gaW5saW5lIGludApBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklT
TT46OmFjcXVpcmVfcmVhZCAodm9pZCkKewogIHJldHVybiB0aGlzLT5sb2NrXy0+YWNxdWlyZV9y
ZWFkICgpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5s
aW5lIGludApBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OmFjcXVpcmVf
d3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18tPmFjcXVpcmVfd3JpdGUgKCk7Cn0K
CgoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNF
X0xvY2tfQWRhcHRlcjxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlX3JlYWQgKHZv
aWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfcmVhZCAoKTsKfQoKCgoKdGVt
cGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5saW5lIGludApBQ0VfTG9ja19B
ZGFwdGVyPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OnRyeWFjcXVpcmVfd3JpdGUgKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+bG9ja18tPnRyeWFjcXVpcmVfd3JpdGUgKCk7Cn0KCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9Mb2NrX0FkYXB0
ZXI8QUNFX0xPQ0tJTkdfTUVDSEFOSVNNPjo6dHJ5YWNxdWlyZV93cml0ZV91cGdyYWRlICh2b2lk
KQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLT50cnlhY3F1aXJlX3dyaXRlX3VwZ3JhZGUgKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZQpBQ0VfUmV2ZXJz
ZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OkFDRV9SZXZlcnNlX0xvY2sgKEFDRV9MT0NL
SU5HX01FQ0hBTklTTSAmbG9jaykKICA6IGxvY2tfIChsb2NrKQp7Cn0KCgp0ZW1wbGF0ZSA8Y2xh
c3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9SZXZlcnNlX0xvY2s8QUNF
X0xPQ0tJTkdfTUVDSEFOSVNNPjo6cmVtb3ZlICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tf
LnJlbW92ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlu
bGluZSBpbnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjphY3F1aXJl
ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPmxvY2tfLnJlbGVhc2UgKCk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPiBpbmxpbmUgaW50CkFDRV9SZXZlcnNlX0xvY2s8
QUNFX0xPQ0tJTkdfTUVDSEFOSVNNPjo6dHJ5YWNxdWlyZSAodm9pZCkKewogIHJldHVybiB0aGlz
LT5sb2NrXy50cnlhY3F1aXJlICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01F
Q0hBTklTTT4gaW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklT
TT46OnJlbGVhc2UgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18uYWNxdWlyZSAoKTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBpbnQKQUNFX1Jl
dmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+bG9ja18uYWNxdWlyZV9yZWFkICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IEFDRV9MT0NLSU5HX01FQ0hBTklTTT4gaW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9M
T0NLSU5HX01FQ0hBTklTTT46OmFjcXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
bG9ja18uYWNxdWlyZV93cml0ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19N
RUNIQU5JU00+IGlubGluZSBpbnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5J
U00+Ojp0cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNx
dWlyZV9yZWFkICgpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLSU5HX01FQ0hBTklTTT4g
aW5saW5lIGludApBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklTTT46OnRyeWFj
cXVpcmVfd3JpdGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNxdWlyZV93cml0
ZSAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DS0lOR19NRUNIQU5JU00+IGlubGluZSBp
bnQKQUNFX1JldmVyc2VfTG9jazxBQ0VfTE9DS0lOR19NRUNIQU5JU00+Ojp0cnlhY3F1aXJlX3dy
aXRlX3VwZ3JhZGUgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bG9ja18udHJ5YWNxdWlyZV93cml0
ZV91cGdyYWRlICgpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIE1VVEVYPiBpbmxpbmUgaW50CkFDRV9D
b25kaXRpb248TVVURVg+OjpyZW1vdmUgKHZvaWQpCnsKIyAzNDIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmkiCiAgaW50IHJlc3VsdCA9IDA7
CiMgMzcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3lu
Y2hfVC5pIgogICAgd2hpbGUgKChyZXN1bHQgPSBBQ0VfT1M6OmNvbmRfZGVzdHJveSAoJnRoaXMt
PmNvbmRfKSkgPT0gLTEKICAgICAgICAgICAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDE2
KQogICAgICB7CiAgICAgICAgQUNFX09TOjpjb25kX2Jyb2FkY2FzdCAoJnRoaXMtPmNvbmRfKTsK
ICAgICAgICBBQ0VfT1M6OnRocl95aWVsZCAoKTsKICAgICAgfQoKICByZXR1cm4gcmVzdWx0Owp9
Cgp0ZW1wbGF0ZTxjbGFzcyBNVVRFWD4gaW5saW5lIE1VVEVYICYKQUNFX0NvbmRpdGlvbjxNVVRF
WD46Om11dGV4ICh2b2lkKQp7CgogIHJldHVybiB0aGlzLT5tdXRleF87Cn0KCnRlbXBsYXRlIDxj
bGFzcyBNVVRFWD4gaW5saW5lIGludApBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6c2lnbmFsICh2b2lk
KQp7CgoKCgoKICByZXR1cm4gQUNFX09TOjpjb25kX3NpZ25hbCAoJnRoaXMtPmNvbmRfKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIE1VVEVYPiBpbmxpbmUgaW50CkFDRV9Db25kaXRpb248TVVURVg+Ojpi
cm9hZGNhc3QgKHZvaWQpCnsKCgoKCgogIHJldHVybiBBQ0VfT1M6OmNvbmRfYnJvYWRjYXN0ICgm
dGhpcy0+Y29uZF8pOwp9CiMgOTYzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvQXRvbWljX09wLmkiIDEKCgoKdGVtcGxhdGUgPGNsYXNzIEFD
RV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBU
WVBFPjo6b3BlcmF0b3IrKyAodm9pZCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21v
biAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlz
LT52YWx1ZV87OwogIHJldHVybiArK3RoaXMtPnZhbHVlXzsKfQoKdGVtcGxhdGUgPGNsYXNzIEFD
RV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBU
WVBFPjo6b3BlcmF0b3IrPSAoY29uc3QgVFlQRSAmaSkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NL
ID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl
dHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8gKz0gaTsKfQoKdGVtcGxh
dGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09w
PEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3ItLSAodm9pZCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9M
T0NLID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDAp
IHJldHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiAtLXRoaXMtPnZhbHVlXzsKfQoKdGVtcGxh
dGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09w
PEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3ItPSAoY29uc3QgVFlQRSAmaSkKewoKICBBQ0VfR3Vh
cmQ8IEFDRV9MT0NLID4gYWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2Vk
ICgpID09IDApIHJldHVybiB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8gLT0g
aTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUKQUNFX0F0
b21pY19PcDxBQ0VfTE9DSywgVFlQRT46OkFDRV9BdG9taWNfT3AgKGNvbnN0IEFDRV9BdG9taWNf
T3A8QUNFX0xPQ0ssIFRZUEU+ICZyaHMpCnsKCiAgKnRoaXMgPSByaHM7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIFRZUEUKQUNFX0F0b21pY19PcDxBQ0Vf
TE9DSywgVFlQRT46Om9wZXJhdG9yKysgKGludCkKewoKICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4g
YWNlX21vbiAodGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVy
biB0aGlzLT52YWx1ZV87OwogIHJldHVybiB0aGlzLT52YWx1ZV8rKzsKfQoKdGVtcGxhdGUgPGNs
YXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgVFlQRQpBQ0VfQXRvbWljX09wPEFDRV9M
T0NLLCBUWVBFPjo6b3BlcmF0b3ItLSAoaW50KQp7CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBh
Y2VfbW9uICh0aGlzLT5tdXRleF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu
IHRoaXMtPnZhbHVlXzs7CiAgcmV0dXJuIHRoaXMtPnZhbHVlXy0tOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSBpbnQKQUNFX0F0b21pY19PcDxBQ0VfTE9D
SywgVFlQRT46Om9wZXJhdG9yPT0gKGNvbnN0IFRZUEUgJmkpIGNvbnN0CnsKCiAgQUNFX0d1YXJk
PCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0aGlzLT5tdXRleF8pOyBpZiAoYWNl
X21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIC0xOzsKICByZXR1cm4gdGhpcy0+dmFsdWVfID09
IGk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIGludApB
Q0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6b3BlcmF0b3IhPSAoY29uc3QgVFlQRSAmaSkg
Y29uc3QKewoKICByZXR1cm4gISgqdGhpcyA9PSBpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M
T0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+
OjpvcGVyYXRvcj49IChjb25zdCBUWVBFICZpKSBjb25zdAp7CgogIEFDRV9HdWFyZDwgQUNFX0xP
Q0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9j
a2VkICgpID09IDApIHJldHVybiAtMTs7CiAgcmV0dXJuIHRoaXMtPnZhbHVlXyA+PSBpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSBpbnQKQUNFX0F0b21p
Y19PcDxBQ0VfTE9DSywgVFlQRT46Om9wZXJhdG9yPiAoY29uc3QgVFlQRSAmcmhzKSBjb25zdAp7
CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bXV0
ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CiAgcmV0dXJuIHRo
aXMtPnZhbHVlXyA+IHJoczsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBF
PiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+OjpvcGVyYXRvcjw9IChj
b25zdCBUWVBFICZyaHMpIGNvbnN0CnsKCiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24g
KChBQ0VfTE9DSyAmKSB0aGlzLT5tdXRleF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkg
cmV0dXJuIC0xOzsKICByZXR1cm4gdGhpcy0+dmFsdWVfIDw9IHJoczsKfQoKdGVtcGxhdGUgPGNs
YXNzIEFDRV9MT0NLLCBjbGFzcyBUWVBFPiBpbmxpbmUgaW50CkFDRV9BdG9taWNfT3A8QUNFX0xP
Q0ssIFRZUEU+OjpvcGVyYXRvcjwgKGNvbnN0IFRZUEUgJnJocykgY29uc3QKewoKICBBQ0VfR3Vh
cmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKEFDRV9MT0NLICYpIHRoaXMtPm11dGV4Xyk7IGlmIChh
Y2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwogIHJldHVybiB0aGlzLT52YWx1ZV8g
PCByaHM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5saW5lIHZv
aWQKQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT46Om9wZXJhdG9yPSAoY29uc3QgQUNFX0F0
b21pY19PcDxBQ0VfTE9DSywgVFlQRT4gJnJocykKewoKICBpZiAoJnJocyA9PSB0aGlzKQogICAg
cmV0dXJuOwogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRleF8pOyBp
ZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuOzsKCgoKICB0aGlzLT52YWx1ZV8gPSBy
aHMudmFsdWUgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xhc3MgVFlQRT4gaW5s
aW5lIFRZUEUKQUNFX0F0b21pY19PcDxBQ0VfTE9DSywgVFlQRT46OnZhbHVlICh2b2lkKSBjb25z
dAp7CgogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+
bXV0ZXhfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlzLT52YWx1ZV87
OwogIHJldHVybiB0aGlzLT52YWx1ZV87Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSywgY2xh
c3MgVFlQRT4gaW5saW5lIFRZUEUgJgpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6dmFs
dWVfaSAodm9pZCkKewoKCgoKICByZXR1cm4gdGhpcy0+dmFsdWVfOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+IGlubGluZSB2b2lkCkFDRV9BdG9taWNfT3A8QUNFX0xP
Q0ssIFRZUEU+OjpvcGVyYXRvcj0gKGNvbnN0IFRZUEUgJmkpCnsKCiAgQUNFX0d1YXJkPCBBQ0Vf
TE9DSyA+IGFjZV9tb24gKHRoaXMtPm11dGV4Xyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAw
KSByZXR1cm47OwogIHRoaXMtPnZhbHVlXyA9IGk7Cn0KIyA5NjYgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiIDIKCgoKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiAxCgoK
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVGhy
ZWFkLmgiIDEKIyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU3luY2hfVC5jcHAiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmgiIDEKIyAxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiAyCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMQojIDE0ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiIDIK
CmlubGluZSBjb25zdCBjaGFyKiBnZXRfcmNzaWRfYWNlX1N5bmNoX1QgKGNvbnN0IGNoYXIqKSB7
IHJldHVybiAiU3luY2hfVC5jcHAsdiA0LjUyIDIwMDEvMDMvMDQgMDA6NTU6MzIgYnJ1bnNjaCBF
eHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX1N5bmNoX1QgPSBnZXRfcmNzaWRf
YWNlX1N5bmNoX1QgKCByY3NpZF9hY2VfU3luY2hfVCApIDsKIyAyOSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIgp0ZW1wbGF0ZSA8Y2xh
c3MgQUNFX0xPQ0tJTkdfTUVDSEFOSVNNPgpBQ0VfTG9ja19BZGFwdGVyPEFDRV9MT0NLSU5HX01F
Q0hBTklTTT46OkFDRV9Mb2NrX0FkYXB0ZXIgKHZvaWQpCiAgOiBsb2NrXyAoMCksCiAgICBkZWxl
dGVfbG9ja18gKDEpCnsKICBkbyB7IHRyeSB7IHRoaXMtPmxvY2tfID0gbmV3IEFDRV9MT0NLSU5H
X01FQ0hBTklTTTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNF
X0xPQ0tJTkdfTUVDSEFOSVNNPgpBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9MT0NLSU5HX01FQ0hBTklT
TT46On5BQ0VfUmV2ZXJzZV9Mb2NrICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9D
SywgY2xhc3MgVFlQRT4gQUNFX0xPQ0sgJgpBQ0VfQXRvbWljX09wPEFDRV9MT0NLLCBUWVBFPjo6
bXV0ZXggKHZvaWQpCnsKCiAgcmV0dXJuIHRoaXMtPm11dGV4XzsKfQoKdGVtcGxhdGUgPGNsYXNz
IEFDRV9MT0NLLCBjbGFzcyBUWVBFPiB2b2lkCkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ssIFRZUEU+
OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCA1NSwgMCwgX19hY2VfZXJyb3IpOyBh
Y2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGls
ZSAoMCk7CiAgdGhpcy0+bXV0ZXhfLmR1bXAgKCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBB
Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6
aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNTcsIDAsIF9fYWNlX2Vy
cm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CkFDRV9BdG9taWNfT3A8QUNFX0xP
Q0ssIFRZUEU+OjpBQ0VfQXRvbWljX09wICh2b2lkKQogIDogdmFsdWVfICgwKQp7Cgp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIFRZUEU+CkFDRV9BdG9taWNfT3A8QUNFX0xPQ0ss
IFRZUEU+OjpBQ0VfQXRvbWljX09wIChjb25zdCBUWVBFICZjKQogIDogdmFsdWVfIChjKQp7Cgp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX0d1YXJkPEFDRV9MT0NLPjo6
ZHVtcCAodm9pZCkgY29uc3QKewoKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxh
c3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2Ug
KCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgODIsIDAsIF9fYWNlX2Vycm9yKTsgYWNl
X19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUg
KDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf
TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRp
dGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9TeW5jaF9ULmNwcCIsIDgzLCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJV
RywgIm11dGV4XyA9ICV4XG4iLCB0aGlzLT5sb2NrXyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs
IDg0LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIm93bmVyXyA9ICVk
XG4iLCB0aGlzLT5vd25lcl8pOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9
IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn
OjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCA4NSwgMCwgX19hY2Vf
ZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsgfSB3aGlsZSAoMCk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiB2b2lkCkFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9D
Sz46OmR1bXAgKHZvaWQpIGNvbnN0CnsKCiAgQUNFX0d1YXJkPEFDRV9MT0NLPjo6ZHVtcCAoKTsK
fQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1JlYWRfR3VhcmQ8QUNFX0xP
Q0s+OjpkdW1wICh2b2lkKSBjb25zdAp7CgogIEFDRV9HdWFyZDxBQ0VfTE9DSz46OmR1bXAgKCk7
Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IHZvaWQKQUNFX0NvbmRpdGlvbjxNVVRFWD46
OmR1bXAgKHZvaWQpIGNvbnN0CnsKCgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps
YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl
ICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDExNSwgMCwgX19hY2VfZXJyb3IpOyBh
Y2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGls
ZSAoMCk7CgoKCgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp
OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t
PmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDEyMCwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAo
TE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFD
RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp
bnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCAxMjEsIDAsIF9fYWNlX2Vy
cm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+CkFDRV9UaHJlYWRfQ29uZGl0aW9uPE1VVEVYPjo6QUNFX1Ro
cmVhZF9Db25kaXRpb24gKE1VVEVYICZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVENIQVIgKm5hbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKICA6IEFDRV9D
b25kaXRpb248TVVURVg+IChtLCBQVEhSRUFEX1BST0NFU1NfUFJJVkFURSwgbmFtZSwgYXJnKQp7
Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IHZvaWQKQUNFX1RocmVhZF9Db25kaXRpb248TVVU
RVg+OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6ZHVtcCAo
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPgpBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6QUNFX0Nv
bmRpdGlvbiAoTVVURVggJm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9U
Q0hBUiAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFy
ZykKICA6CgoKCgogICAgbXV0ZXhfIChtKQp7CiMgMjExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgaWYgKEFDRV9PUzo6Y29uZF9p
bml0ICgmdGhpcy0+Y29uZF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAoc2hvcnQpIHR5cGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
YXJnKSAhPSAwKQogICAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3Ig
KCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9f
Xy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgMjE1LCAtMSwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxv
ZyAoTE1fRVJST1IsICIlcFxuIiwgIkFDRV9Db25kaXRpb246OkFDRV9Db25kaXRpb24iKTsgfSB3
aGlsZSAoMCk7CgoKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPgpBQ0VfQ29uZGl0aW9uPE1VVEVY
Pjo6fkFDRV9Db25kaXRpb24gKHZvaWQpCnsKCgogIGlmICh0aGlzLT5yZW1vdmUgKCkgPT0gLTEp
CiAgICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xv
Z19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRp
b25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
U3luY2hfVC5jcHAiLCAyMjYsIC0xLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJP
UiwgIiVwXG4iLCAiQUNFX0NvbmRpdGlvbjo6fkFDRV9Db25kaXRpb24iKTsgfSB3aGlsZSAoMCk7
CgoKfQoKdGVtcGxhdGUgPGNsYXNzIE1VVEVYPiBpbnQKQUNFX0NvbmRpdGlvbjxNVVRFWD46Ondh
aXQgKHZvaWQpCnsKCgoKCgoKICByZXR1cm4gQUNFX09TOjpjb25kX3dhaXQgKCZ0aGlzLT5jb25k
XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aGlzLT5tdXRleF8ubG9ja18pOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgTVVURVg+IGludApBQ0VfQ29uZGl0aW9uPE1VVEVYPjo6d2FpdCAoTVVU
RVggJm11dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RpbWVfVmFs
dWUgKmFic3RpbWUpCnsKCiAgaWYgKGFic3RpbWUgPT0gMCkKICAgIHJldHVybiB0aGlzLT53YWl0
ICgpOwogIGVsc2UKICAgIHsKCgoKCgoKICAgICAgcmV0dXJuIEFDRV9PUzo6Y29uZF90aW1lZHdh
aXQgKCZ0aGlzLT5jb25kXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZt
dXRleC5sb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBQ0VfVGlt
ZV9WYWx1ZSAqKSBhYnN0aW1lKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBNVVRFWD4g
aW50CkFDRV9Db25kaXRpb248TVVURVg+Ojp3YWl0IChjb25zdCBBQ0VfVGltZV9WYWx1ZSAqYWJz
dGltZSkKewoKICByZXR1cm4gdGhpcy0+d2FpdCAodGhpcy0+bXV0ZXhfLCBhYnN0aW1lKTsKfQoK
CgoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CkFDRV9UU1M8VFlQRT46On5BQ0VfVFNTICh2b2lkKQp7
CgoKCiAgQUNFX09TOjp0aHJfa2V5X2RldGFjaCAodGhpcyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
WVBFPiBUWVBFICoKQUNFX1RTUzxUWVBFPjo6b3BlcmF0b3ItPiAoKSBjb25zdAp7CiAgcmV0dXJu
IHRoaXMtPnRzX2dldCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+CkFDRV9UU1M8VFlQRT46
Om9wZXJhdG9yIFRZUEUgKih2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnRzX2dldCAoKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+OjptYWtlX1RTU19U
WVBFICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIG5ldyBUWVBFOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VFlQRT4gdm9pZApBQ0VfVFNTPFRZUEU+OjpkdW1wICh2b2lkKSBjb25zdAp7CgoKICBkbyB7IGlu
dCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9f
XyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAi
LCAzMTEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4o
JVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIHRoaXMtPmtleWxvY2tfLmR1bXAgKCk7
CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2df
TXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9u
YWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5
bmNoX1QuY3BwIiwgMzEzLCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywg
ImtleV8gPSAlZFxuIiwgdGhpcy0+a2V5Xyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNl
X2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNF
X0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDMxNCwg
MCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbm9uY2VfID0gJWQiLCB0
aGlzLT5vbmNlXyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09T
OjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3Rh
bmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIsIDMxNSwgMCwgX19hY2VfZXJyb3Ip
OyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBf
X2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9
IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiLCAz
MTYsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0g
d2hpbGUgKDApOwoKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVFlQRT4gdm9pZApBQ0VfVFNTPFRZ
UEU+OjpjbGVhbnVwICh2b2lkICpwdHIpCnsKCiAgZGVsZXRlIChUWVBFICopIHB0cjsKfQoKdGVt
cGxhdGUgPGNsYXNzIFRZUEU+IGludApBQ0VfVFNTPFRZUEU+Ojp0c19pbml0ICh2b2lkKSBjb25z
dAp7CgogIEFDRV9HdWFyZDwgQUNFX1RocmVhZF9NdXRleCA+IGFjZV9tb24gKChBQ0VfVGhyZWFk
X011dGV4ICYpIHRoaXMtPmtleWxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl
dHVybiAwOzsKCgoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKICAgIHsKICAgICAgaWYgKEFDRV9U
aHJlYWQ6OmtleWNyZWF0ZSAoY29uc3RfY2FzdDxBQ0VfdGhyZWFkX2tleV90ICo+ICgmdGhpcy0+
a2V5XyksCgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZBQ0VfVFNTPFRZUEU+
OjpjbGVhbnVwLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhp
cykgIT0gMCkKICAgICAgICByZXR1cm4gLTE7CiAgICAgIGVsc2UKICAgICAgICB7CgoKICAgICAg
ICAgICogY29uc3RfY2FzdDxpbnQqPiAoJnRoaXMtPm9uY2VfKSA9IDE7CiAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICB9CiAgICB9CgogIHJldHVybiAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZ
UEU+CkFDRV9UU1M8VFlQRT46OkFDRV9UU1MgKFRZUEUgKnRzX29iaikKICA6IG9uY2VfICgwKSwK
ICAgIGtleV8gKEFDRV9PUzo6TlVMTF9rZXkpCnsKCgoKCgoKICBpZiAodHNfb2JqICE9IDApCiAg
ICB7CiAgICAgIGlmICh0aGlzLT50c19pbml0ICgpID09IC0xKQogICAgICAgIHsKCiAgICAgICAg
ICBBQ0VfRXJybm9fR3VhcmQgZXJyb3IgKCgqX19lcnJub19sb2NhdGlvbiAoKSkpOwoKCgoKCgoK
ICAgICAgICAgIEFDRV9PUzo6ZnByaW50ZiAoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAiQUNFX1RocmVhZDo6a2V5Y3JlYXRlKCkgZmFpbGVkISIpOwoKICAgICAgICAgIHJldHVy
bjsKICAgICAgICB9CiMgNDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvU3luY2hfVC5jcHAiCiAgICAgIGlmIChBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAo
dGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSB0
c19vYmopICE9IDApCiAgICAgICAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3Rf
ZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7
IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNDEyLCAtMSwgX19hY2VfZXJyb3IpOyBhY2Vf
X18tPmxvZyAoTE1fRVJST1IsICIlcFxuIiwgIkFDRV9UaHJlYWQ6OnNldHNwZWNpZmljKCkgZmFp
bGVkISIpOyB9IHdoaWxlICgwKTsKCgoKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEU+IFRZ
UEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19nZXQgKHZvaWQpIGNvbnN0CnsKICBpZiAodGhpcy0+b25j
ZV8gPT0gMCkKCiAgICB0aGlzLT50c19pbml0ICgpOwoKICBUWVBFICp0c19vYmogPSAwOwojIDQ0
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1Qu
Y3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9PSAtMSkKICAgIHJldHVy
biAwOwoKCiAgaWYgKHRzX29iaiA9PSAwKQoKICAgIHsKCgoKICAgICAgdHNfb2JqID0gdGhpcy0+
bWFrZV9UU1NfVFlQRSAoKTsKCiAgICAgIGlmICh0c19vYmogPT0gMCkKICAgICAgICByZXR1cm4g
MDsKIyA0NzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T
eW5jaF9ULmNwcCIKICAgICAgaWYgKEFDRV9UaHJlYWQ6OnNldHNwZWNpZmljICh0aGlzLT5rZXlf
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIHRzX29iaikgIT0g
MCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdHNfb2JqOwogICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgfQoKICAgIH0KCgoKCgogIHJldHVybiB0c19vYmo7Cgp9CgoKCgoKdGVtcGxhdGUg
PGNsYXNzIFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19vYmplY3QgKHZvaWQpIGNvbnN0
CnsKCiAgQUNFX0d1YXJkPCBBQ0VfVGhyZWFkX011dGV4ID4gYWNlX21vbiAoKEFDRV9UaHJlYWRf
TXV0ZXggJikgdGhpcy0+a2V5bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0
dXJuIDA7OwoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKICAgIHJldHVybiAwOwoKICBUWVBFICp0
c19vYmogPSAwOwojIDUxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1N5bmNoX1QuY3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+
a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9
PSAtMSkKICAgIHJldHVybiAwOwoKCiAgcmV0dXJuIHRzX29iajsKfQoKdGVtcGxhdGUgPGNsYXNz
IFRZUEU+IFRZUEUgKgpBQ0VfVFNTPFRZUEU+Ojp0c19vYmplY3QgKFRZUEUgKm5ld190c19vYmop
CnsKCgoKICBpZiAodGhpcy0+b25jZV8gPT0gMCkKCiAgICB0aGlzLT50c19pbml0ICgpOwoKCiAg
QUNFX0d1YXJkPCBBQ0VfVGhyZWFkX011dGV4ID4gYWNlX21vbiAodGhpcy0+a2V5bG9ja18pOyBp
ZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICBUWVBFICp0c19vYmogPSAw
OwojIDU2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5
bmNoX1QuY3BwIgogIGlmIChBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoqKSAmdHNfb2JqKSA9PSAtMSkKICAg
IHJldHVybiAwOwogIGlmIChBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIG5ld190c19vYmopID09IC0xKQog
ICAgcmV0dXJuIHRzX29iajsKCgogIHJldHVybiB0c19vYmo7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz
IEFDRV9MT0NLPiB2b2lkCkFDRV9UU1NfR3VhcmQ8QUNFX0xPQ0s+OjpkdW1wICh2b2lkKSBjb25z
dAp7CgoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNF
X0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25k
aXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU3luY2hfVC5jcHAiLCA1ODQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RF
QlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs
IDU4NSwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJrZXlfID0gJWQi
LCB0aGlzLT5rZXlfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf
T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z
dGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuY3BwIiwgNTg2LCAwLCBfX2FjZV9lcnJv
cik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIlxuIik7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaF9ULmNwcCIs
IDU4NywgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsg
fSB3aGlsZSAoMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gdm9pZApBQ0VfVFNTX0d1
YXJkPEFDRV9MT0NLPjo6aW5pdF9rZXkgKHZvaWQpCnsKCgogIHRoaXMtPmtleV8gPSBBQ0VfT1M6
Ok5VTExfa2V5OwogIEFDRV9UaHJlYWQ6OmtleWNyZWF0ZSAoJnRoaXMtPmtleV8sCgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmNsZWFudXAsCgog
ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgdGhpcyk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBBQ0VfTE9DSz4KQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OkFDRV9UU1NfR3VhcmQgKHZvaWQp
CnsKCiAgdGhpcy0+aW5pdF9rZXkgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50
CkFDRV9UU1NfR3VhcmQ8QUNFX0xPQ0s+OjpyZWxlYXNlICh2b2lkKQp7CgoKICBBQ0VfR3VhcmQ8
QUNFX0xPQ0s+ICpndWFyZCA9IDA7CgoKCgoKCgogIEFDRV9UaHJlYWQ6OmdldHNwZWNpZmljICh0
aGlzLT5rZXlfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmd1YXJkKTsK
CgogIHJldHVybiBndWFyZC0+cmVsZWFzZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NL
PiBpbnQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OnJlbW92ZSAodm9pZCkKewoKCiAgQUNFX0d1
YXJkPEFDRV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoKICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZp
YyAodGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZndWFy
ZCk7CgoKICByZXR1cm4gZ3VhcmQtPnJlbW92ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M
T0NLPgpBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPjo6fkFDRV9UU1NfR3VhcmQgKHZvaWQpCnsKCgog
IEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1RocmVhZDo6Z2V0
c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICoq
KSAmZ3VhcmQpOwoKCgogIEFDRV9UaHJlYWQ6OnNldHNwZWNpZmljICh0aGlzLT5rZXlfLCAwKTsK
ICBBQ0VfVGhyZWFkOjprZXlmcmVlICh0aGlzLT5rZXlfKTsKCiAgZGVsZXRlIGd1YXJkOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmNs
ZWFudXAgKHZvaWQgKnB0cikKewoKCgogIGRlbGV0ZSAoQUNFX0d1YXJkPEFDRV9MT0NLPiAqKSBw
dHI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46
OkFDRV9UU1NfR3VhcmQgKEFDRV9MT0NLICZsb2NrLCBpbnQgYmxvY2spCnsKCgogIHRoaXMtPmlu
aXRfa2V5ICgpOwogIEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkOwogIGRvIHsgdHJ5IHsgZ3Vh
cmQgPSBuZXcgQUNFX0d1YXJkPEFDRV9MT0NLPiAobG9jaywgYmxvY2spOyB9IGNhdGNoIChzdGQ6
OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdo
aWxlICgwKTsKIyA3MDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TeW5jaF9ULmNwcCIKICBBQ0VfVGhyZWFkOjpzZXRzcGVjaWZpYyAodGhpcy0+a2V5XywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgZ3VhcmQpOwoKfQoKdGVtcGxhdGUg
PGNsYXNzIEFDRV9MT0NLPiBpbnQKQUNFX1RTU19HdWFyZDxBQ0VfTE9DSz46OmFjcXVpcmUgKHZv
aWQpCnsKCgogIEFDRV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1Ro
cmVhZDo6Z2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2b2lkICoqKSAmZ3VhcmQpOwoKCiAgcmV0dXJuIGd1YXJkLT5hY3F1aXJlICgpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNx
dWlyZSAodm9pZCkKewoKCiAgQUNFX0d1YXJkPEFDRV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoK
ICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhpcy0+a2V5XywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHZvaWQgKiopICZndWFyZCk7CgoKICByZXR1cm4gZ3VhcmQtPnRyeWFjcXVpcmUg
KCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KQUNFX1RTU19Xcml0ZV9HdWFyZDxBQ0Vf
TE9DSz46OkFDRV9UU1NfV3JpdGVfR3VhcmQgKEFDRV9MT0NLICZsb2NrLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJsb2NrKQp7CgoKICB0
aGlzLT5pbml0X2tleSAoKTsKICBBQ0VfR3VhcmQ8QUNFX0xPQ0s+ICpndWFyZDsKICBkbyB7IHRy
eSB7IGd1YXJkID0gbmV3IEFDRV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz4gKGxvY2ssIGJsb2NrKTsg
fSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy
ZXR1cm47IH0gfSB3aGlsZSAoMCk7CiMgNzY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgQUNFX1RocmVhZDo6c2V0c3BlY2lmaWMg
KHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopIGd1YXJkKTsK
Cn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfV3JpdGVfR3VhcmQ8QUNF
X0xPQ0s+OjphY3F1aXJlICh2b2lkKQp7CgoKICBBQ0VfV3JpdGVfR3VhcmQ8QUNFX0xPQ0s+ICpn
dWFyZCA9IDA7CgoKCgoKCgogIEFDRV9UaHJlYWQ6OmdldHNwZWNpZmljICh0aGlzLT5rZXlfLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKikgJmd1YXJkKTsKCgogIHJldHVybiBn
dWFyZC0+YWNxdWlyZV93cml0ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiBpbnQK
QUNFX1RTU19Xcml0ZV9HdWFyZDxBQ0VfTE9DSz46OnRyeWFjcXVpcmUgKHZvaWQpCnsKCgogIEFD
RV9Xcml0ZV9HdWFyZDxBQ0VfTE9DSz4gKmd1YXJkID0gMDsKCgoKCgoKCiAgQUNFX1RocmVhZDo6
Z2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk
ICoqKSAmZ3VhcmQpOwoKCiAgcmV0dXJuIGd1YXJkLT50cnlhY3F1aXJlX3dyaXRlICgpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1dyaXRlX0d1YXJkPEFDRV9MT0NL
Pjo6YWNxdWlyZV93cml0ZSAodm9pZCkKewoKCiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUgKCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfV3JpdGVfR3VhcmQ8QUNFX0xP
Q0s+Ojp0cnlhY3F1aXJlX3dyaXRlICh2b2lkKQp7CgoKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWly
ZSAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9MT0NLPiB2b2lkCkFDRV9UU1NfV3JpdGVfR3Vh
cmQ8QUNFX0xPQ0s+OjpkdW1wICh2b2lkKSBjb25zdAp7CgogIEFDRV9UU1NfR3VhcmQ8QUNFX0xP
Q0s+OjpkdW1wICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+CkFDRV9UU1NfUmVhZF9H
dWFyZDxBQ0VfTE9DSz46OkFDRV9UU1NfUmVhZF9HdWFyZCAoQUNFX0xPQ0sgJmxvY2ssIGludCBi
bG9jaykKewoKCiAgdGhpcy0+aW5pdF9rZXkgKCk7CiAgQUNFX0d1YXJkPEFDRV9MT0NLPiAqZ3Vh
cmQ7CiAgZG8geyB0cnkgeyBndWFyZCA9IG5ldyBBQ0VfUmVhZF9HdWFyZDxBQ0VfTE9DSz4gKGxv
Y2ssIGJsb2NrKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiMgODU1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5jcHAiCiAgQUNFX1RocmVhZDo6
c2V0c3BlY2lmaWMgKHRoaXMtPmtleV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk
ICopIGd1YXJkKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4gaW50CkFDRV9UU1NfUmVh
ZF9HdWFyZDxBQ0VfTE9DSz46OmFjcXVpcmUgKHZvaWQpCnsKCgogIEFDRV9SZWFkX0d1YXJkPEFD
RV9MT0NLPiAqZ3VhcmQgPSAwOwoKCgoKCgoKICBBQ0VfVGhyZWFkOjpnZXRzcGVjaWZpYyAodGhp
cy0+a2V5XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiopICZndWFyZCk7CgoK
ICByZXR1cm4gZ3VhcmQtPmFjcXVpcmVfcmVhZCAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIEFDRV9M
T0NLPiBpbnQKQUNFX1RTU19SZWFkX0d1YXJkPEFDRV9MT0NLPjo6dHJ5YWNxdWlyZSAodm9pZCkK
ewoKCiAgQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+ICpndWFyZCA9IDA7CgoKCgoKCgogIEFDRV9U
aHJlYWQ6OmdldHNwZWNpZmljICh0aGlzLT5rZXlfLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCAqKikgJmd1YXJkKTsKCgogIHJldHVybiBndWFyZC0+dHJ5YWNxdWlyZV9yZWFkICgp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1JlYWRfR3VhcmQ8QUNF
X0xPQ0s+OjphY3F1aXJlX3JlYWQgKHZvaWQpCnsKCgogIHJldHVybiB0aGlzLT5hY3F1aXJlICgp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IGludApBQ0VfVFNTX1JlYWRfR3VhcmQ8QUNF
X0xPQ0s+Ojp0cnlhY3F1aXJlX3JlYWQgKHZvaWQpCnsKCgogIHJldHVybiB0aGlzLT50cnlhY3F1
aXJlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQUNFX0xPQ0s+IHZvaWQKQUNFX1RTU19SZWFkX0d1
YXJkPEFDRV9MT0NLPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKICBBQ0VfVFNTX0d1YXJkPEFDRV9M
T0NLPjo6ZHVtcCAoKTsKfQojIDk3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMgojIDk5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgOTk3ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2hfVC5oIiAyCiMgMTU1NiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDIKCnRl
bXBsYXRlIDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0d1YXJkOwoKdGVtcGxhdGU8PgojIDE1
NzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5o
IgpjbGFzcyBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+CnsKcHVibGljOgoKICBBQ0VfR3VhcmQg
KEFDRV9OdWxsX011dGV4ICYpIHt9CiAgQUNFX0d1YXJkIChBQ0VfTnVsbF9NdXRleCAmLCBpbnQp
IHt9CgoKCgogIGludCBhY3F1aXJlICh2b2lkKSB7IHJldHVybiAwOyB9CiAgaW50IHRyeWFjcXVp
cmUgKHZvaWQpIHsgcmV0dXJuIDA7IH0KICBpbnQgcmVsZWFzZSAodm9pZCkgeyByZXR1cm4gMDsg
fQogIGludCBsb2NrZWQgKHZvaWQpIHsgcmV0dXJuIDE7IH0KICBpbnQgcmVtb3ZlICh2b2lkKSB7
IHJldHVybiAwOyB9CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdCB7fQoKcHJpdmF0ZToKCiAgdm9p
ZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9HdWFyZDxBQ0VfTnVsbF9NdXRleD4gJik7CiAgQUNFX0d1
YXJkIChjb25zdCBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+ICYpOwp9OwoKdGVtcGxhdGUgPGNs
YXNzIEFDRV9MT0NLPgpjbGFzcyBBQ0VfV3JpdGVfR3VhcmQ7Cgp0ZW1wbGF0ZTw+CgoKCgpjbGFz
cyBBQ0VfV3JpdGVfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IDogcHVibGljIEFDRV9HdWFyZDxBQ0Vf
TnVsbF9NdXRleD4KewpwdWJsaWM6CiAgQUNFX1dyaXRlX0d1YXJkIChBQ0VfTnVsbF9NdXRleCAm
bSkKICAgIDogQUNFX0d1YXJkPEFDRV9OdWxsX011dGV4PiAobSkge30KICBBQ0VfV3JpdGVfR3Vh
cmQgKEFDRV9OdWxsX011dGV4ICZtLCBpbnQgYmxvY2tlZCkKICAgIDogQUNFX0d1YXJkPEFDRV9O
dWxsX011dGV4PiAobSwgYmxvY2tlZCkge30KCiAgaW50IGFjcXVpcmVfd3JpdGUgKHZvaWQpIHsg
cmV0dXJuIDA7IH0KICBpbnQgYWNxdWlyZSAodm9pZCkgeyByZXR1cm4gMDsgfQogIGludCB0cnlh
Y3F1aXJlX3dyaXRlICh2b2lkKSB7IHJldHVybiAwOyB9CiAgaW50IHRyeWFjcXVpcmUgKHZvaWQp
IHsgcmV0dXJuIDA7IH0KICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0IHt9Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9SZWFkX0d1YXJkOwoKdGVtcGxhdGU8PgoKCgoKY2xh
c3MgQUNFX1JlYWRfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IDogcHVibGljIEFDRV9HdWFyZDxBQ0Vf
TnVsbF9NdXRleD4KewpwdWJsaWM6CiAgQUNFX1JlYWRfR3VhcmQgKEFDRV9OdWxsX011dGV4ICZt
KQogICAgOiBBQ0VfR3VhcmQ8QUNFX051bGxfTXV0ZXg+IChtKSB7fQogIEFDRV9SZWFkX0d1YXJk
IChBQ0VfTnVsbF9NdXRleCAmbSwgaW50IGJsb2NrZWQpCiAgICA6IEFDRV9HdWFyZDxBQ0VfTnVs
bF9NdXRleD4gKG0sIGJsb2NrZWQpIHt9CgogIGludCBhY3F1aXJlX3dyaXRlICh2b2lkKSB7IHJl
dHVybiAwOyB9CiAgaW50IGFjcXVpcmUgKHZvaWQpIHsgcmV0dXJuIDA7IH0KICBpbnQgdHJ5YWNx
dWlyZV93cml0ZSAodm9pZCkgeyByZXR1cm4gMDsgfQogIGludCB0cnlhY3F1aXJlICh2b2lkKSB7
IHJldHVybiAwOyB9CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdCB7fQp9OwojIDE2NDcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TeW5jaC5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx
NjQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU3luY2gu
aCIgMgojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
TWFsbG9jX1QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9NYWxsb2MuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQWxsb2NhdG9yLmgiIDEKIyAxNSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3Iu
aCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJl
LmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L01hbGxvY19BbGxvY2F0b3IuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3IuaCIgMgoKCgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNlLmgi
IDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01h
bGxvY19CYXNlLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PUy5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIiAyCiMgMzMgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIgpjbGFz
cyBBQ0VfQWxsb2NhdG9yCnsKcHVibGljOgoKCgogIHN0YXRpYyBBQ0VfQWxsb2NhdG9yICppbnN0
YW5jZSAodm9pZCk7CgoKCiAgc3RhdGljIEFDRV9BbGxvY2F0b3IgKmluc3RhbmNlIChBQ0VfQWxs
b2NhdG9yICopOwoKCiAgc3RhdGljIHZvaWQgY2xvc2Vfc2luZ2xldG9uICh2b2lkKTsKCgogIEFD
RV9BbGxvY2F0b3IgKHZvaWQpOwoKCiAgdmlydHVhbCB+QUNFX0FsbG9jYXRvciAodm9pZCk7CgoK
ICB2aXJ0dWFsIHZvaWQgKm1hbGxvYyAoc2l6ZV90IG5ieXRlcykgPSAwOwoKCiAgdmlydHVhbCB2
b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpID0g
MDsKCgoKICB2aXJ0dWFsIHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciBpbml0aWFsX3ZhbHVlID0gJ1wwJykgPSAwOwoKCiAgdmlydHVhbCB2b2lkIGZyZWUgKHZvaWQg
KnB0cikgPSAwOwoKCiAgdmlydHVhbCBpbnQgcmVtb3ZlICh2b2lkKSA9IDA7CiMgODMgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfQmFzZS5oIgog
IHZpcnR1YWwgaW50IGJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKnBvaW50ZXIsIGludCBk
dXBsaWNhdGVzID0gMCkgPSAwOwojIDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIKICB2aXJ0dWFsIGludCB0cnliaW5kIChjb25z
dCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcikgPSAwOwoKCgogIHZpcnR1YWwgaW50IGZpbmQg
KGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKSA9IDA7CgoKICB2aXJ0dWFsIGludCBm
aW5kIChjb25zdCBjaGFyICpuYW1lKSA9IDA7CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25z
dCBjaGFyICpuYW1lKSA9IDA7CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpu
YW1lLCB2b2lkIComcG9pbnRlcikgPSAwOwojIDEyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNlLmgiCiAgdmlydHVhbCBpbnQgc3luYyAo
c3NpemVfdCBsZW4gPSAtMSwgaW50IGZsYWdzID0gNCkgPSAwOwoKCgogIHZpcnR1YWwgaW50IHN5
bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFncyA9IDQpID0gMDsKCgoKCgoKICB2
aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgy
KSkgPSAwOwoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4s
IGludCBwcm90ID0gKDB4MXwweDIpKSA9IDA7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2
b2lkKSBjb25zdCA9IDA7CnByaXZhdGU6CgoKCgogIHN0YXRpYyBBQ0VfQWxsb2NhdG9yICphbGxv
Y2F0b3JfOwoKCiAgc3RhdGljIGludCBkZWxldGVfYWxsb2NhdG9yXzsKfTsKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE1NiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19CYXNl
LmgiIDIKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L01hbGxvY19BbGxvY2F0b3IuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0b3IuaCIgMgojIDcyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRv
ci5oIgpjbGFzcyBBQ0VfTmV3X0FsbG9jYXRvciA6IHB1YmxpYyBBQ0VfQWxsb2NhdG9yCnsKcHVi
bGljOgoKICB2aXJ0dWFsIHZvaWQgKm1hbGxvYyAoc2l6ZV90IG5ieXRlcyk7CiAgdmlydHVhbCB2
b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwog
IHZpcnR1YWwgdm9pZCAqY2FsbG9jIChzaXplX3Qgbl9lbGVtLCBzaXplX3QgZWxlbV9zaXplLCBj
aGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKICB2aXJ0dWFsIHZvaWQgZnJlZSAodm9pZCAqcHRy
KTsKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAodm9pZCk7CiAgdmlydHVhbCBpbnQgYmluZCAoY29u
c3QgY2hhciAqbmFtZSwgdm9pZCAqcG9pbnRlciwgaW50IGR1cGxpY2F0ZXMgPSAwKTsKICB2aXJ0
dWFsIGludCB0cnliaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcik7CiAgdmly
dHVhbCBpbnQgZmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqJnBvaW50ZXIpOwogIHZpcnR1
YWwgaW50IGZpbmQgKGNvbnN0IGNoYXIgKm5hbWUpOwogIHZpcnR1YWwgaW50IHVuYmluZCAoY29u
c3QgY2hhciAqbmFtZSk7CiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpuYW1lLCB2
b2lkIComcG9pbnRlcik7CiAgdmlydHVhbCBpbnQgc3luYyAoc3NpemVfdCBsZW4gPSAtMSwgaW50
IGZsYWdzID0gNCk7CiAgdmlydHVhbCBpbnQgc3luYyAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwg
aW50IGZsYWdzID0gNCk7CiAgdmlydHVhbCBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg
aW50IHByb3QgPSAoMHgxfDB4MikpOwogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFkZHIs
IHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIHZvaWQgZHVt
cCAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgoKCn07CiMgMTE4ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRvci5oIgpjbGFzcyBBQ0Vf
U3RhdGljX0FsbG9jYXRvcl9CYXNlIDogcHVibGljIEFDRV9BbGxvY2F0b3IKewpwdWJsaWM6CiAg
QUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZSAoY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSk7CiAg
dmlydHVhbCB2b2lkICptYWxsb2MgKHNpemVfdCBuYnl0ZXMpOwogIHZpcnR1YWwgdm9pZCAqY2Fs
bG9jIChzaXplX3QgbmJ5dGVzLCBjaGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKICB2aXJ0dWFs
IHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwgc2l6ZV90IGVsZW1fc2l6ZSwgY2hhciBpbml0
aWFsX3ZhbHVlID0gJ1wwJyk7CiAgdmlydHVhbCB2b2lkIGZyZWUgKHZvaWQgKnB0cik7CiAgdmly
dHVhbCBpbnQgcmVtb3ZlICh2b2lkKTsKICB2aXJ0dWFsIGludCBiaW5kIChjb25zdCBjaGFyICpu
YW1lLCB2b2lkICpwb2ludGVyLCBpbnQgZHVwbGljYXRlcyA9IDApOwogIHZpcnR1YWwgaW50IHRy
eWJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKTsKICB2aXJ0dWFsIGludCBm
aW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRlcik7CiAgdmlydHVhbCBpbnQgZmlu
ZCAoY29uc3QgY2hhciAqbmFtZSk7CiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpu
YW1lKTsKICB2aXJ0dWFsIGludCB1bmJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2lu
dGVyKTsKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxhZ3MgPSA0
KTsKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3Mg
PSA0KTsKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgcHJvdCA9
ICgweDF8MHgyKSk7CiAgdmlydHVhbCBpbnQgcHJvdGVjdCAodm9pZCAqYWRkciwgc2l6ZV90IGxl
biwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBj
b25zdDsKCnByb3RlY3RlZDoKCiAgQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZSAodm9pZCk7CgoK
ICBjaGFyICpidWZmZXJfOwoKCiAgc2l6ZV90IHNpemVfOwoKCiAgc2l6ZV90IG9mZnNldF87Cn07
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs
bG9jX0FsbG9jYXRvci5pIiAxCgoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0FsbG9jYXRvcjo6bWFs
bG9jIChzaXplX3QgbmJ5dGVzKQp7CiAgY2hhciAqcHRyID0gMDsKCiAgaWYgKG5ieXRlcyA+IDAp
CiAgICBkbyB7IHRyeSB7IHB0ciA9IG5ldyBjaGFyW25ieXRlc107IH0gY2F0Y2ggKHN0ZDo6YmFk
X2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGls
ZSAoMCk7CiAgcmV0dXJuICh2b2lkICopIHB0cjsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0Fs
bG9jYXRvcjo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICBjaGFyICpwdHIgPSAwOwoKICBkbyB7IHRyeSB7IHB0
ciA9IG5ldyBjaGFyW25ieXRlc107IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJu
b19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7CgogIEFDRV9PUzo6
bWVtc2V0IChwdHIsIGluaXRpYWxfdmFsdWUsIG5ieXRlcyk7CiAgcmV0dXJuICh2b2lkICopIHB0
cjsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfTmV3X0FsbG9jYXRvcjo6Y2FsbG9jIChzaXplX3Qgbl9l
bGVtLCBzaXplX3QgZWxlbV9zaXplLCBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICByZXR1cm4gQUNF
X05ld19BbGxvY2F0b3I6OmNhbGxvYyAobl9lbGVtICogZWxlbV9zaXplLCBpbml0aWFsX3ZhbHVl
KTsKfQoKaW5saW5lIHZvaWQKQUNFX05ld19BbGxvY2F0b3I6OmZyZWUgKHZvaWQgKnB0cikKewog
IGRlbGV0ZSBbXSAoY2hhciAqKSBwdHI7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6
OnJlbW92ZSAodm9pZCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0
dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3X0FsbG9jYXRvcjo6Ymlu
ZCAoY29uc3QgY2hhciAqLCB2b2lkICosIGludCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3
X0FsbG9jYXRvcjo6dHJ5YmluZCAoY29uc3QgY2hhciAqLCB2b2lkIComKQp7CiAgZG8geyAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwp9Cgppbmxp
bmUgaW50CkFDRV9OZXdfQWxsb2NhdG9yOjpmaW5kIChjb25zdCBjaGFyICosIHZvaWQgKiYpCnsK
ICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAo
MCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6OmZpbmQgKGNvbnN0IGNoYXIgKikK
ewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxl
ICgwKTsKfQoKaW5saW5lIGludApBQ0VfTmV3X0FsbG9jYXRvcjo6dW5iaW5kIChjb25zdCBjaGFy
ICopCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAtMTsgfSB3
aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6OnVuYmluZCAoY29uc3Qg
Y2hhciAqLCB2b2lkIComKQp7CiAgZG8geyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gOTUgOyBy
ZXR1cm4gLTE7IH0gd2hpbGUgKDApOwp9CgppbmxpbmUgaW50CkFDRV9OZXdfQWxsb2NhdG9yOjpz
eW5jIChzc2l6ZV90LCBpbnQpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7
IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19BbGxvY2F0b3I6
OnN5bmMgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAo
KSkgPSA5NSA7IHJldHVybiAtMTsgfSB3aGlsZSAoMCk7Cn0KCmlubGluZSBpbnQKQUNFX05ld19B
bGxvY2F0b3I6OnByb3RlY3QgKHNzaXplX3QsIGludCkKewogIGRvIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQoKaW5saW5lIGludApBQ0Vf
TmV3X0FsbG9jYXRvcjo6cHJvdGVjdCAodm9pZCAqLCBzaXplX3QsIGludCkKewogIGRvIHsgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IDk1IDsgcmV0dXJuIC0xOyB9IHdoaWxlICgwKTsKfQojIDEx
MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19B
bGxvY2F0b3IuaSIKaW5saW5lIHZvaWQKQUNFX05ld19BbGxvY2F0b3I6OmR1bXAgKHZvaWQpIGNv
bnN0CnsKfQoKaW5saW5lIHZvaWQgKgpBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjptYWxsb2Mg
KHNpemVfdCBuYnl0ZXMpCnsKICBpZiAodGhpcy0+b2Zmc2V0XyArIG5ieXRlcyA+IHRoaXMtPnNp
emVfKQogICAgewogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7CiAgICAgIHJldHVy
biAwOwogICAgfQogIGVsc2UKICAgIHsKCgogICAgICBjaGFyICpwdHIgPSAmdGhpcy0+YnVmZmVy
X1t0aGlzLT5vZmZzZXRfXTsKICAgICAgdGhpcy0+b2Zmc2V0XyArPSBuYnl0ZXM7CiAgICAgIHJl
dHVybiAodm9pZCAqKSBwdHI7CiAgICB9Cn0KCmlubGluZSB2b2lkICoKQUNFX1N0YXRpY19BbGxv
Y2F0b3JfQmFzZTo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSkKewogIHZvaWQgKnB0ciA9IHRoaXMtPm1h
bGxvYyAobmJ5dGVzKTsKCiAgQUNFX09TOjptZW1zZXQgKHB0ciwgaW5pdGlhbF92YWx1ZSwgbmJ5
dGVzKTsKICByZXR1cm4gKHZvaWQgKikgcHRyOwp9CgppbmxpbmUgdm9pZCAqCkFDRV9TdGF0aWNf
QWxsb2NhdG9yX0Jhc2U6OmNhbGxvYyAoc2l6ZV90IG5fZWxlbSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSkKewogIHJldHVybiB0aGlzLT5jYWxsb2Mg
KG5fZWxlbSAqIGVsZW1fc2l6ZSwgaW5pdGlhbF92YWx1ZSk7Cn0KCmlubGluZSB2b2lkCkFDRV9T
dGF0aWNfQWxsb2NhdG9yX0Jhc2U6OmZyZWUgKHZvaWQgKnB0cikKewoKICBkbyB7IH0gd2hpbGUg
KCZwdHIgPT0gMCk7CiAgZG8geyBpZighKHB0ciA+PSB0aGlzLT5idWZmZXJfICYmIHB0ciA8IHRo
aXMtPmJ1ZmZlcl8gKyB0aGlzLT5zaXplXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps
YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl
ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9NYWxsb2NfQWxsb2NhdG9yLmkiLCAxNTYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f
LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj
ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg
JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgInB0ciA+PSB0aGlzLT5idWZmZXJf
ICYmIHB0ciA8IHRoaXMtPmJ1ZmZlcl8gKyB0aGlzLT5zaXplXyIsIC0xKTsgfSB9IHdoaWxlICgw
KTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpyZW1vdmUgKHZvaWQp
CnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZTo6
YmluZCAoY29uc3QgY2hhciAqLCB2b2lkICosIGludCkKewogIHJldHVybiAtMTsKfQoKaW5saW5l
IGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjp0cnliaW5kIChjb25zdCBjaGFyICosIHZv
aWQgKiYpCnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3Jf
QmFzZTo6ZmluZCAoY29uc3QgY2hhciAqLCB2b2lkIComKQp7CiAgcmV0dXJuIC0xOwp9Cgppbmxp
bmUgaW50CkFDRV9TdGF0aWNfQWxsb2NhdG9yX0Jhc2U6OmZpbmQgKGNvbnN0IGNoYXIgKikKewog
IHJldHVybiAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjp1bmJp
bmQgKGNvbnN0IGNoYXIgKikKewogIHJldHVybiAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGlj
X0FsbG9jYXRvcl9CYXNlOjp1bmJpbmQgKGNvbnN0IGNoYXIgKiwgdm9pZCAqJikKewogIHJldHVy
biAtMTsKfQoKaW5saW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpzeW5jIChzc2l6
ZV90LCBpbnQpCnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0
b3JfQmFzZTo6c3luYyAodm9pZCAqLCBzaXplX3QsIGludCkKewogIHJldHVybiAtMTsKfQoKaW5s
aW5lIGludApBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlOjpwcm90ZWN0IChzc2l6ZV90LCBpbnQp
CnsKICByZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX1N0YXRpY19BbGxvY2F0b3JfQmFzZTo6
cHJvdGVjdCAodm9pZCAqLCBzaXplX3QsIGludCkKewogIHJldHVybiAtMTsKfQojIDIzMiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19BbGxvY2F0
b3IuaSIKaW5saW5lCkFDRV9TdGF0aWNfQWxsb2NhdG9yX0Jhc2U6OkFDRV9TdGF0aWNfQWxsb2Nh
dG9yX0Jhc2UgKGNoYXIgKmJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpCiAgOiBidWZmZXJfIChidWZmZXIpLAog
ICAgc2l6ZV8gKHNpemUpLAogICAgb2Zmc2V0XyAoMCkKewp9CiMgMTU4ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0FsbG9jYXRvci5oIiAyCgoK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o
IiAxCiMgMTYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
TWFsbG9jX0FsbG9jYXRvci5oIiAyCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5oIiAxCiMgMTUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaCIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5o
IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
Uy5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9GcmVlX0xpc3QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL1N5bmNoX1QuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmgiIDIKIyAzMiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlzdC5oIgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KY2xhc3MgQUNFX0ZyZWVfTGlzdAp7CnB1YmxpYzoKCiAgdmlydHVhbCB+QUNFX0Zy
ZWVfTGlzdCAodm9pZCk7CgoKCiAgdmlydHVhbCB2b2lkIGFkZCAoVCAqZWxlbWVudCkgPSAwOwoK
CgogIHZpcnR1YWwgVCAqcmVtb3ZlICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIHNpemVfdCBzaXpl
ICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIHZvaWQgcmVzaXplIChzaXplX3QgbmV3c2l6ZSkgPSAw
Owp9OwojIDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
RnJlZV9MaXN0LmgiCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNF
X0xvY2tlZF9GcmVlX0xpc3QgOiBwdWJsaWMgQUNFX0ZyZWVfTGlzdDxUPgp7CnB1YmxpYzoKIyA3
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0ZyZWVfTGlz
dC5oIgogIEFDRV9Mb2NrZWRfRnJlZV9MaXN0IChpbnQgbW9kZSA9IDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBwcmVhbGxvYyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBsd20gPSAwLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaHdtID0gMjUwMDAs
CiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbmMgPSAxMDApOwoKCiAgdmlydHVhbCB+
QUNFX0xvY2tlZF9GcmVlX0xpc3QgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCBhZGQgKFQgKmVs
ZW1lbnQpOwoKCgogIHZpcnR1YWwgVCAqcmVtb3ZlICh2b2lkKTsKCgogIHZpcnR1YWwgc2l6ZV90
IHNpemUgKHZvaWQpOwoKCiAgdmlydHVhbCB2b2lkIHJlc2l6ZSAoc2l6ZV90IG5ld3NpemUpOwoK
cHJvdGVjdGVkOgoKICB2aXJ0dWFsIHZvaWQgYWxsb2MgKHNpemVfdCBuKTsKCgogIHZpcnR1YWwg
dm9pZCBkZWFsbG9jIChzaXplX3Qgbik7CgoKCiAgaW50IG1vZGVfOwoKCiAgVCAqZnJlZV9saXN0
XzsKCgogIHNpemVfdCBsd21fOwoKCiAgc2l6ZV90IGh3bV87CgoKICBzaXplX3QgaW5jXzsKCgog
IHNpemVfdCBzaXplXzsKCgogIEFDRV9MT0NLIG11dGV4XzsKCnByaXZhdGU6CgogIEFDRV9Mb2Nr
ZWRfRnJlZV9MaXN0IChjb25zdCBBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz4gJik7
CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFDRV9Mb2NrZWRfRnJlZV9MaXN0PFQsIEFDRV9MT0NL
PiAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9GcmVlX0xpc3QuaSIgMQojIDkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaSIKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9M
T0NLPiBpbmxpbmUgdm9pZApBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmFkZCAo
VCAqZWxlbWVudCkKewogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRl
eF8pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuOzsKCgogIGlmICh0aGlzLT5t
b2RlXyA9PSAyCiAgICAgIHx8IHRoaXMtPnNpemVfIDwgdGhpcy0+aHdtXykKICAgIHsKICAgICAg
ZWxlbWVudC0+c2V0X25leHQgKHRoaXMtPmZyZWVfbGlzdF8pOwogICAgICB0aGlzLT5mcmVlX2xp
c3RfID0gZWxlbWVudDsKICAgICAgdGhpcy0+c2l6ZV8rKzsKICAgIH0KICBlbHNlCiAgICBkZWxl
dGUgZWxlbWVudDsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gaW5s
aW5lIFQgKgpBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OnJlbW92ZSAodm9pZCkK
ewogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5tdXRleF8pOyBpZiAoYWNl
X21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKCiAgaWYgKHRoaXMtPm1vZGVfICE9IDIg
JiYgdGhpcy0+c2l6ZV8gPD0gdGhpcy0+bHdtXykKICAgIHRoaXMtPmFsbG9jICh0aGlzLT5pbmNf
KTsKCgogIFQgKnRlbXAgPSB0aGlzLT5mcmVlX2xpc3RfOwoKICBpZiAodGVtcCAhPSAwKQogICAg
ewogICAgICB0aGlzLT5mcmVlX2xpc3RfID0gdGhpcy0+ZnJlZV9saXN0Xy0+Z2V0X25leHQgKCk7
CiAgICAgIHRoaXMtPnNpemVfLS07CiAgICB9CgogIHJldHVybiB0ZW1wOwp9CgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZSBzaXplX3QKQUNFX0xvY2tlZF9GcmVl
X0xpc3Q8VCwgQUNFX0xPQ0s+OjpzaXplICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnNpemVfOwp9
CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gaW5saW5lIHZvaWQKQUNFX0xv
Y2tlZF9GcmVlX0xpc3Q8VCwgQUNFX0xPQ0s+OjpyZXNpemUgKHNpemVfdCBuZXdzaXplKQp7CiAg
QUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPm11dGV4Xyk7IGlmIChhY2VfbW9u
LmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwoKCiAgaWYgKHRoaXMtPm1vZGVfICE9IDIpCgogICAg
aWYgKG5ld3NpemUgPCB0aGlzLT5zaXplXykKICAgICAgdGhpcy0+ZGVhbGxvYyAodGhpcy0+c2l6
ZV8gLSBuZXdzaXplKTsKICAgIGVsc2UKICAgICAgdGhpcy0+YWxsb2MgKG5ld3NpemUgLSB0aGlz
LT5zaXplXyk7Cn0KIyAxMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9GcmVlX0xpc3QuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuY3BwIiAxCgoKCgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmgiIDEKIyA3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRnJlZV9MaXN0LmNw
cCIgMgojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
RnJlZV9MaXN0LmNwcCIKaW5saW5lIGNvbnN0IGNoYXIqIGdldF9yY3NpZF9hY2VfRnJlZV9MaXN0
IChjb25zdCBjaGFyKikgeyByZXR1cm4gIkZyZWVfTGlzdC5jcHAsdiAxLjE4IDE5OTkvMDcvMDIg
MTg6NDg6MTUgaXJmYW4gRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lkX2FjZV9GcmVl
X0xpc3QgPSBnZXRfcmNzaWRfYWNlX0ZyZWVfTGlzdCAoIHJjc2lkX2FjZV9GcmVlX0xpc3QgKSA7
CgoKCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfRnJlZV9MaXN0PFQ+Ojp+QUNFX0ZyZWVfTGlzdCAo
dm9pZCkKewoKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4KQUNFX0xv
Y2tlZF9GcmVlX0xpc3Q8VCwgQUNFX0xPQ0s+OjpBQ0VfTG9ja2VkX0ZyZWVfTGlzdCAoaW50IG1v
ZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IHByZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBsd20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGh3bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5jKQogIDogbW9kZV8gKG1vZGUp
LAogICAgZnJlZV9saXN0XyAoMCksCiAgICBsd21fIChsd20pLAogICAgaHdtXyAoaHdtKSwKICAg
IGluY18gKGluYyksCiAgICBzaXplXyAoMCkKewogIHRoaXMtPmFsbG9jIChwcmVhbGxvYyk7Cn0K
CgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9MT0NLPgpBQ0VfTG9ja2VkX0ZyZWVfTGlz
dDxULCBBQ0VfTE9DSz46On5BQ0VfTG9ja2VkX0ZyZWVfTGlzdCAodm9pZCkKewogIGlmICh0aGlz
LT5tb2RlXyAhPSAyKQogICAgd2hpbGUgKHRoaXMtPmZyZWVfbGlzdF8gIT0gMCkKICAgICAgewog
ICAgICAgIFQgKnRlbXAgPSB0aGlzLT5mcmVlX2xpc3RfOwogICAgICAgIHRoaXMtPmZyZWVfbGlz
dF8gPSB0aGlzLT5mcmVlX2xpc3RfLT5nZXRfbmV4dCAoKTsKICAgICAgICBkZWxldGUgdGVtcDsK
ICAgICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9DSz4gdm9pZApBQ0Vf
TG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmFsbG9jIChzaXplX3QgbikKewogIGZvciAo
OyBuID4gMDsgbi0tKQogICAgewogICAgICBUICp0ZW1wID0gMDsKICAgICAgZG8geyB0cnkgeyB0
ZW1wID0gbmV3IFQ7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv
biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogICAgICB0ZW1wLT5zZXRfbmV4dCAo
dGhpcy0+ZnJlZV9saXN0Xyk7CiAgICAgIHRoaXMtPmZyZWVfbGlzdF8gPSB0ZW1wOwogICAgICB0
aGlzLT5zaXplXysrOwogICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBBQ0VfTE9D
Sz4gdm9pZApBQ0VfTG9ja2VkX0ZyZWVfTGlzdDxULCBBQ0VfTE9DSz46OmRlYWxsb2MgKHNpemVf
dCBuKQp7CiAgZm9yICg7IHRoaXMtPmZyZWVfbGlzdF8gIT0gMCAmJiBuID4gMDsKICAgICAgIG4t
LSkKICAgIHsKICAgICAgVCAqdGVtcCA9IHRoaXMtPmZyZWVfbGlzdF87CiAgICAgIHRoaXMtPmZy
ZWVfbGlzdF8gPSB0aGlzLT5mcmVlX2xpc3RfLT5nZXRfbmV4dCAoKTsKICAgICAgZGVsZXRlIHRl
bXA7CiAgICAgIHRoaXMtPnNpemVfLS07CiAgICB9Cn0KIyAxNDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xpc3QuaCIgMgoKCgoKCgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAx
NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9GcmVlX0xp
c3QuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvTWFsbG9jX1QuaCIgMgojIDQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9DYWNo
ZWRfTWVtX1Bvb2xfTm9kZQp7CnB1YmxpYzoKCiAgVCAqYWRkciAodm9pZCk7CgoKICBBQ0VfQ2Fj
aGVkX01lbV9Qb29sX05vZGU8VD4gKmdldF9uZXh0ICh2b2lkKTsKCgogIHZvaWQgc2V0X25leHQg
KEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqcHRyKTsKCnByaXZhdGU6CgoKCgoKCgogIEFD
RV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqbmV4dF87Cn07CiMgNzggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9DYWNoZWRfQWxsb2NhdG9yIDogcHVibGlj
IEFDRV9OZXdfQWxsb2NhdG9yCnsKcHVibGljOgoKCiAgQUNFX0NhY2hlZF9BbGxvY2F0b3IgKHNp
emVfdCBuX2NodW5rcyk7CgoKICB+QUNFX0NhY2hlZF9BbGxvY2F0b3IgKHZvaWQpOwoKCgoKCgoK
ICB2b2lkICptYWxsb2MgKHNpemVfdCBuYnl0ZXMgPSBzaXplb2YgKFQpKTsKCgoKCgoKCiAgdmly
dHVhbCB2b2lkICpjYWxsb2MgKHNpemVfdCBuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwoKCgogIHZpcnR1YWwgdm9pZCAqY2FsbG9jIChz
aXplX3Qgbl9lbGVtLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFsdWUgPSAnXDAnKTsKCgogIHZv
aWQgZnJlZSAodm9pZCAqKTsKCnByaXZhdGU6CgoKICBjaGFyICpwb29sXzsKCgogIEFDRV9Mb2Nr
ZWRfRnJlZV9MaXN0PEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiwgQUNFX0xPQ0s+IGZyZWVf
bGlzdF87Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPgpjbGFzcyBBQ0VfQWxsb2Nh
dG9yX0FkYXB0ZXIgOiBwdWJsaWMgQUNFX0FsbG9jYXRvcgp7CnB1YmxpYzoKCiAgdHlwZWRlZiBN
QUxMT0MgQUxMT0NBVE9SOwoKCgoKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIE1BTExPQzo6TUVN
T1JZX1BPT0xfT1BUSU9OUyAqTUVNT1JZX1BPT0xfT1BUSU9OUzsKCgoKCgogIEFDRV9BbGxvY2F0
b3JfQWRhcHRlciAoY29uc3QgY2hhciAqcG9vbF9uYW1lID0gMCk7CgogIEFDRV9BbGxvY2F0b3Jf
QWRhcHRlciAoY29uc3QgY2hhciAqcG9vbF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbG9ja19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVNT1JZX1BP
T0xfT1BUSU9OUyBvcHRpb25zID0gMCkKICAgICAgOiBhbGxvY2F0b3JfIChwb29sX25hbWUsCiAg
ICAgICAgICAgICAgICAgICAgbG9ja19uYW1lLAogICAgICAgICAgICAgICAgICAgIG9wdGlvbnMp
CiAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgIH0KIyAxNzUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIgogIHZpcnR1YWwgfkFDRV9BbGxv
Y2F0b3JfQWRhcHRlciAodm9pZCk7CgoKCgogIHZpcnR1YWwgdm9pZCAqbWFsbG9jIChzaXplX3Qg
bmJ5dGVzKTsKCgogIHZpcnR1YWwgdm9pZCAqY2FsbG9jIChzaXplX3QgbmJ5dGVzLCBjaGFyIGlu
aXRpYWxfdmFsdWUgPSAnXDAnKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmNhbGxvYyAoc2l6ZV90IG5f
ZWxlbSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciBpbml0aWFsX3ZhbHVlID0gJ1wwJyk7CgoKICB2aXJ0dWFsIHZv
aWQgZnJlZSAodm9pZCAqcHRyKTsKCgogIHZpcnR1YWwgaW50IHJlbW92ZSAodm9pZCk7CiMgMjA4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1Qu
aCIKICB2aXJ0dWFsIGludCBiaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwb2ludGVyLCBp
bnQgZHVwbGljYXRlcyA9IDApOwojIDIyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgdmlydHVhbCBpbnQgdHJ5YmluZCAoY29uc3Qg
Y2hhciAqbmFtZSwgdm9pZCAqJnBvaW50ZXIpOwoKCgogIHZpcnR1YWwgaW50IGZpbmQgKGNvbnN0
IGNoYXIgKm5hbWUsIHZvaWQgKiZwb2ludGVyKTsKCgogIHZpcnR1YWwgaW50IGZpbmQgKGNvbnN0
IGNoYXIgKm5hbWUpOwoKCgogIHZpcnR1YWwgaW50IHVuYmluZCAoY29uc3QgY2hhciAqbmFtZSk7
CgoKCiAgdmlydHVhbCBpbnQgdW5iaW5kIChjb25zdCBjaGFyICpuYW1lLCB2b2lkIComcG9pbnRl
cik7CiMgMjQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
TWFsbG9jX1QuaCIKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxh
Z3MgPSA0KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBp
bnQgZmxhZ3MgPSA0KTsKCgoKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90IGxlbiA9
IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgdmlydHVhbCBpbnQgcHJvdGVjdCAodm9p
ZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCiAgQUxMT0NBVE9S
ICZhbGxvYyAodm9pZCk7CgoKCgoKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK
CnByaXZhdGU6CgogIEFMTE9DQVRPUiBhbGxvY2F0b3JfOwp9OwojIDI4OCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCnRlbXBsYXRlIDxz
aXplX3QgUE9PTF9TSVpFPgpjbGFzcyBBQ0VfU3RhdGljX0FsbG9jYXRvciA6IHB1YmxpYyBBQ0Vf
U3RhdGljX0FsbG9jYXRvcl9CYXNlCnsKcHVibGljOgogIEFDRV9TdGF0aWNfQWxsb2NhdG9yICh2
b2lkKQogICAgOiBBQ0VfU3RhdGljX0FsbG9jYXRvcl9CYXNlIChwb29sXywgUE9PTF9TSVpFKQog
IHsKCiAgfQoKcHJpdmF0ZToKCiAgY2hhciBwb29sX1tQT09MX1NJWkVdOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPgpjbGFz
cyBBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9N
RU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4KY2xhc3MgQUNFX01hbGxvY19G
SUZPX0l0ZXJhdG9yX1Q7CiMgMzI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNs
YXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CmNsYXNzIEFDRV9NYWxsb2NfVAp7CnB1YmxpYzoK
ICBmcmllbmQgY2xhc3MgQUNFX01hbGxvY19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwg
QUNFX0xPQ0ssIEFDRV9DQj47CiAgZnJpZW5kIGNsYXNzIEFDRV9NYWxsb2NfRklGT19JdGVyYXRv
cl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OwogIHR5cGVkZWYgX0FDRV9NRU1f
UE9PTCBNRU1PUllfUE9PTDsKICB0eXBlZGVmIHR5cGVuYW1lIF9BQ0VfTUVNX1BPT0w6Ok9QVElP
TlMgTUVNT1JZX1BPT0xfT1BUSU9OUzsKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9DQjo6QUNFX05h
bWVfTm9kZSBOQU1FX05PREU7CiAgdHlwZWRlZiB0eXBlbmFtZSBBQ0VfQ0I6OkFDRV9NYWxsb2Nf
SGVhZGVyIE1BTExPQ19IRUFERVI7CiMgMzQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBBQ0VfTWFsbG9jX1QgKGNvbnN0IEFDRV9U
Q0hBUiAqcG9vbF9uYW1lID0gMCk7CiMgMzUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBBQ0VfTWFsbG9jX1QgKGNvbnN0IEFDRV9U
Q0hBUiAqcG9vbF9uYW1lLAogICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25h
bWUsCiAgICAgICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfQUNFX01FTV9QT09MOjpPUFRJT05T
ICpvcHRpb25zID0gMCk7CiMgMzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICB+QUNFX01hbGxvY19UICh2b2lkKTsKCgogIGludCBy
ZWZfY291bnRlciAodm9pZCk7CgoKICBpbnQgcmVsZWFzZSAodm9pZCk7CgoKICBpbnQgcmVtb3Zl
ICh2b2lkKTsKCgoKCiAgdm9pZCAqbWFsbG9jIChzaXplX3QgbmJ5dGVzKTsKCgogIHZvaWQgKmNh
bGxvYyAoc2l6ZV90IG5ieXRlcywgY2hhciBpbml0aWFsX3ZhbHVlID0gJ1wwJyk7CgoKCiAgdm9p
ZCAqY2FsbG9jIChzaXplX3Qgbl9lbGVtLAogICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6
ZSwKICAgICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1ZSA9ICdcMCcpOwoKCgogIHZvaWQg
ZnJlZSAodm9pZCAqcHRyKTsKCgogIE1FTU9SWV9QT09MICZtZW1vcnlfcG9vbCAodm9pZCk7CiMg
NDA4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9j
X1QuaCIKICBpbnQgYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcG9pbnRlciwgaW50IGR1
cGxpY2F0ZXMgPSAwKTsKIyA0MjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9NYWxsb2NfVC5oIgogIGludCB0cnliaW5kIChjb25zdCBjaGFyICpuYW1lLCB2
b2lkIComcG9pbnRlcik7CgoKCiAgaW50IGZpbmQgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKiZw
b2ludGVyKTsKCgogIGludCBmaW5kIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoKICBpbnQgdW5i
aW5kIChjb25zdCBjaGFyICpuYW1lKTsKCgoKCgoKCiAgaW50IHVuYmluZCAoY29uc3QgY2hhciAq
bmFtZSwgdm9pZCAqJnBvaW50ZXIpOwojIDQ1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgaW50IHN5bmMgKHNzaXplX3QgbGVuID0g
LTEsIGludCBmbGFncyA9IDQpOwoKCgogIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVu
LCBpbnQgZmxhZ3MgPSA0KTsKCgoKCgoKICBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg
aW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIGludCBwcm90ZWN0ICh2b2lkICphZGRyLCBzaXpl
X3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CiMgNDc4ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKICBzc2l6ZV90IGF2YWlsX2No
dW5rcyAoc2l6ZV90IHNpemUpIGNvbnN0OwojIDQ4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgQUNFX0xPQ0sgJm11dGV4ICh2b2lk
KTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307CgoKICB2
b2lkICpiYXNlX2FkZHIgKHZvaWQpOwoKcHJpdmF0ZToKCiAgaW50IG9wZW4gKHZvaWQpOwoKCgog
IGludCBzaGFyZWRfYmluZCAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHZv
aWQgKnBvaW50ZXIpOwoKCgoKCgoKICB2b2lkICpzaGFyZWRfZmluZCAoY29uc3QgY2hhciAqbmFt
ZSk7CgoKICB2b2lkICpzaGFyZWRfbWFsbG9jIChzaXplX3QgbmJ5dGVzKTsKCgogIHZvaWQgc2hh
cmVkX2ZyZWUgKHZvaWQgKnB0cik7CgoKCiAgQUNFX0NCICpjYl9wdHJfOwoKCiAgTUVNT1JZX1BP
T0wgbWVtb3J5X3Bvb2xfOwoKCiAgQUNFX0xPQ0sgbG9ja187Cn07CiMgNTM5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIKdGVtcGxhdGUg
PGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CmNsYXNz
IEFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UCnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
QUNFX0NCOjpBQ0VfTmFtZV9Ob2RlIE5BTUVfTk9ERTsKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9D
Qjo6QUNFX01hbGxvY19IZWFkZXIgTUFMTE9DX0hFQURFUjsKCgoKCiAgQUNFX01hbGxvY19MSUZP
X0l0ZXJhdG9yX1QgKEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NC
PiAmbWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1l
ID0gMCk7CgogIH5BQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVCAodm9pZCk7CgoKCgogIGludCBk
b25lICh2b2lkKSBjb25zdDsKCgoKICBpbnQgbmV4dCAodm9pZCAqJm5leHRfZW50cnkpOwoKCgoK
CgogIGludCBuZXh0ICh2b2lkICombmV4dF9lbnRyeSwKICAgICAgICAgICAgY29uc3QgY2hhciAq
Jm5hbWUpOwoKCgogIGludCBhZHZhbmNlICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u
c3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKICBBQ0VfTWFsbG9jX1Q8X0FDRV9N
RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvY187CgoKICBOQU1FX05PREUgKmN1cnJf
OwoKCiAgQUNFX1JlYWRfR3VhcmQ8QUNFX0xPQ0s+IGd1YXJkXzsKCgogIGNvbnN0IGNoYXIgKm5h
bWVfOwp9OwojIDYwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL01hbGxvY19ULmgiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0Vf
TE9DSywgY2xhc3MgQUNFX0NCPgpjbGFzcyBBQ0VfTWFsbG9jX0ZJRk9fSXRlcmF0b3JfVAp7CnB1
YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIEFDRV9DQjo6QUNFX05hbWVfTm9kZSBOQU1FX05PREU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBBQ0VfQ0I6OkFDRV9NYWxsb2NfSGVhZGVyIE1BTExPQ19IRUFE
RVI7CgoKCgogIEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UIChBQ0VfTWFsbG9jX1Q8X0FDRV9N
RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDApOwoKICB+QUNFX01hbGxvY19GSUZPX0l0ZXJh
dG9yX1QgKHZvaWQpOwoKCgoKICBpbnQgZG9uZSAodm9pZCkgY29uc3Q7CgoKCiAgaW50IG5leHQg
KHZvaWQgKiZuZXh0X2VudHJ5KTsKCgoKCgoKICBpbnQgbmV4dCAodm9pZCAqJm5leHRfZW50cnks
CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKiZuYW1lKTsKCgoKICBpbnQgYWR2YW5jZSAodm9pZCk7
CgoKCiAgaW50IHN0YXJ0ICh2b2lkKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBz
dHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKICBBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwg
QUNFX0xPQ0ssIEFDRV9DQj4gJm1hbGxvY187CgoKICBOQU1FX05PREUgKmN1cnJfOwoKCiAgQUNF
X1JlYWRfR3VhcmQ8QUNFX0xPQ0s+IGd1YXJkXzsKCgogIGNvbnN0IGNoYXIgKm5hbWVfOwp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPgpjbGFzcyBBQ0Vf
TWFsbG9jIDogcHVibGljIEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNF
X0NvbnRyb2xfQmxvY2s+CnsKcHVibGljOgoKCgoKCgoKICBBQ0VfTWFsbG9jIChjb25zdCBBQ0Vf
VENIQVIgKnBvb2xfbmFtZSA9IDApOwojIDY4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmgiCiAgQUNFX01hbGxvYyAoY29uc3QgQUNFX1RD
SEFSICpwb29sX25hbWUsCiAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25hbWUs
CiAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAqb3B0
aW9ucyA9IDApOwojIDY5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL01hbGxvY19ULmgiCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xh
c3MgQUNFX0xPQ0s+CmNsYXNzIEFDRV9NYWxsb2NfTElGT19JdGVyYXRvciA6IHB1YmxpYyBBQ0Vf
TWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NvbnRy
b2xfQmxvY2s+CnsKcHVibGljOgoKCgogIEFDRV9NYWxsb2NfTElGT19JdGVyYXRvciAoQUNFX01h
bGxvYzxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSz4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQUNF
X01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX01hbGxvY19GSUZPX0l0ZXJhdG9y
IDogcHVibGljIEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M
T0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4KewpwdWJsaWM6CgoKCiAgQUNFX01hbGxvY19GSUZPX0l0
ZXJhdG9yIChBQ0VfTWFsbG9jPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPiAmbWFsbG9jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDApOwp9OwoKCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmki
IDEKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgKgpBQ0VfQ2FjaGVkX01lbV9Qb29s
X05vZGU8VD46OmFkZHIgKHZvaWQpCnsKCgoKICByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoc3Rh
dGljX2Nhc3Q8dm9pZCAqPiAodGhpcykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIEFD
RV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPiAqCkFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxUPjo6
Z2V0X25leHQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+bmV4dF87Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgdm9pZApBQ0VfQ2FjaGVkX01lbV9Qb29sX05vZGU8VD46OnNldF9uZXh0IChB
Q0VfQ2FjaGVkX01lbV9Qb29sX05vZGU8VD4gKnB0cikKewogIHRoaXMtPm5leHRfID0gcHRyOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZSB2b2lkICoKQUNFX0Nh
Y2hlZF9BbGxvY2F0b3I8VCwgQUNFX0xPQ0s+OjptYWxsb2MgKHNpemVfdCBuYnl0ZXMpCnsKCiAg
aWYgKG5ieXRlcyA+IHNpemVvZiAoVCkpCiAgICByZXR1cm4gX19udWxsOwoKCgogIHJldHVybiB0
aGlzLT5mcmVlX2xpc3RfLnJlbW92ZSAoKS0+YWRkciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQs
IGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUgdm9pZCAqCkFDRV9DYWNoZWRfQWxsb2NhdG9yPFQsIEFD
RV9MT0NLPjo6Y2FsbG9jIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciBpbml0aWFsX3ZhbHVlKQp7CgogIGlmIChuYnl0ZXMgPiBz
aXplb2YgKFQpKQogICAgcmV0dXJuIF9fbnVsbDsKCgoKICB2b2lkICpwdHIgPSB0aGlzLT5mcmVl
X2xpc3RfLnJlbW92ZSAoKS0+YWRkciAoKTsKICBBQ0VfT1M6Om1lbXNldCAocHRyLCBpbml0aWFs
X3ZhbHVlLCBzaXplb2YgKFQpKTsKICByZXR1cm4gcHRyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgQUNFX0xPQ0s+IGlubGluZSB2b2lkICoKQUNFX0NhY2hlZF9BbGxvY2F0b3I8VCwgQUNF
X0xPQ0s+OjpjYWxsb2MgKHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIpCnsKICBkbyB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSA5NSA7IHJldHVybiAw
OyB9IHdoaWxlICgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIEFDRV9MT0NLPiBpbmxp
bmUgdm9pZApBQ0VfQ2FjaGVkX0FsbG9jYXRvcjxULCBBQ0VfTE9DSz46OmZyZWUgKHZvaWQgKiBw
dHIpCnsKICB0aGlzLT5mcmVlX2xpc3RfLmFkZCAoKEFDRV9DYWNoZWRfTWVtX1Bvb2xfTm9kZTxU
PiAqKSBwdHIpIDsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIHZvaWQgKgpBQ0Vf
QWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6bWFsbG9jIChzaXplX3QgbmJ5dGVzKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy
biB0aGlzLT5hbGxvY2F0b3JfLm1hbGxvYyAobmJ5dGVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1B
TExPQz4gaW5saW5lIHZvaWQgKgpBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6Y2FsbG9j
IChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyIGluaXRpYWxfdmFsdWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8uY2FsbG9jIChuYnl0
ZXMsIGluaXRpYWxfdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgdm9p
ZCAqCkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpjYWxsb2MgKHNpemVfdCBuX2VsZW0s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgaW5pdGlhbF92YWx1
ZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5jYWxsb2MgKG5fZWxlbSwgZWxlbV9zaXplLCBp
bml0aWFsX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIE1BTExPQyAm
CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjphbGxvYyAodm9pZCkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g
dGhpcy0+YWxsb2NhdG9yXzsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIHZvaWQK
QUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OmZyZWUgKHZvaWQgKnB0cikKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+YWxs
b2NhdG9yXy5mcmVlIChwdHIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50
CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpyZW1vdmUgKHZvaWQpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo
aXMtPmFsbG9jYXRvcl8ucmVtb3ZlICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxp
bmUgaW50CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxMT0M+Ojp0cnliaW5kIChjb25zdCBjaGFy
ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqJnBv
aW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHJldHVybiB0aGlzLT5hbGxvY2F0b3JfLnRyeWJpbmQgKG5hbWUsIHBvaW50ZXIp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50CkFDRV9BbGxvY2F0b3JfQWRh
cHRlcjxNQUxMT0M+OjpiaW5kIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqcG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBkdXBsaWNhdGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5iaW5k
IChuYW1lLCBwb2ludGVyLCBkdXBsaWNhdGVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4g
aW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6ZmluZCAoY29uc3QgY2hh
ciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiZwb2lu
dGVyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+YWxsb2NhdG9yXy5maW5kIChuYW1lLCBwb2ludGVyKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFM
TE9DPjo6ZmluZCAoY29uc3QgY2hhciAqbmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8uZmlu
ZCAobmFtZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGlubGluZSBpbnQKQUNFX0FsbG9j
YXRvcl9BZGFwdGVyPE1BTExPQz46OnVuYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqJnBv
aW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8udW5iaW5kIChuYW1lLCBwb2ludGVyKTsK
fQoKdGVtcGxhdGUgPGNsYXNzIE1BTExPQz4gaW5saW5lIGludApBQ0VfQWxsb2NhdG9yX0FkYXB0
ZXI8TUFMTE9DPjo6dW5iaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5hbGxv
Y2F0b3JfLnVuYmluZCAobmFtZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGlubGluZSBp
bnQKQUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OnN5bmMgKHNzaXplX3QgbGVuLCBpbnQg
ZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIHJldHVybiB0aGlzLT5hbGxvY2F0b3JfLnN5bmMgKGxlbiwgZmxhZ3MpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgTUFMTE9DPiBpbmxpbmUgaW50CkFDRV9BbGxvY2F0b3JfQWRhcHRlcjxNQUxM
T0M+OjpzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlz
LT5hbGxvY2F0b3JfLnN5bmMgKGFkZHIsIGxlbiwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIGludApB
Q0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnJlZl9jb3VudGVy
ICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0
aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwogIGlm
ICh0aGlzLT5jYl9wdHJfICE9IDApCiAgICByZXR1cm4gdGhpcy0+Y2JfcHRyXy0+cmVmX2NvdW50
ZXJfOwoKICByZXR1cm4gLTE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFz
cyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbmxpbmUgaW50CkFDRV9NYWxsb2NfVDxfQUNFX01F
TV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6cmVsZWFzZSAodm9pZCkKewogIEFDRV9HdWFyZDwg
QUNFX0xPQ0sgPiBhY2VfbW9uICgoQUNFX0xPQ0sgJikgdGhpcy0+bG9ja18pOyBpZiAoYWNlX21v
bi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIC0xOzsKICBpZiAodGhpcy0+Y2JfcHRyXyAhPSAwKQog
ICAgcmV0dXJuIC0tdGhpcy0+Y2JfcHRyXy0+cmVmX2NvdW50ZXJfOwogIGVsc2UKICAgIHJldHVy
biAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBj
bGFzcyBBQ0VfQ0I+IGlubGluZSBfQUNFX01FTV9QT09MICYKQUNFX01hbGxvY19UPF9BQ0VfTUVN
X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjptZW1vcnlfcG9vbCAodm9pZCkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIHRoaXMtPm1lbW9yeV9wb29sXzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
Q0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGlubGluZSBpbnQKQUNF
X01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpzeW5jIChzc2l6ZV90
IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBmbGFncykKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bWVtb3J5X3Bvb2xfLnN5bmMg
KGxlbiwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNF
X0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9P
TCwgQUNFX0xPQ0ssIEFDRV9DQj46OnN5bmMgKHZvaWQgKmFkZHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHJldHVybiB0aGlzLT5tZW1vcnlfcG9vbF8uc3luYyAoYWRkciwgbGVuLCBmbGFn
cyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xh
c3MgQUNFX0NCPiBpbmxpbmUgaW50CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9D
SywgQUNFX0NCPjo6cHJvdGVjdCAoc3NpemVfdCBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgcmV0dXJuIHRoaXMtPm1lbW9yeV9wb29sXy5wcm90ZWN0IChsZW4sIGZsYWdzKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+
IGlubGluZSBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+
Ojpwcm90ZWN0ICh2b2lkICphZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bWVtb3J5X3Bvb2xfLnByb3RlY3QgKGFkZHIsIGxl
biwgZmxhZ3MpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xP
Q0ssIGNsYXNzIEFDRV9DQj4gaW5saW5lIEFDRV9MT0NLICYKQUNFX01hbGxvY19UPF9BQ0VfTUVN
X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjptdXRleCAodm9pZCkKewogIHJldHVybiB0aGlzLT5s
b2NrXzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBj
bGFzcyBBQ0VfQ0I+IGlubGluZSB2b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFD
RV9MT0NLLCBBQ0VfQ0I+OjpiYXNlX2FkZHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+Y2JfcHRy
XzsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPiBpbmxp
bmUKQUNFX01hbGxvYzxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSz46OkFDRV9NYWxsb2MgKGNvbnN0
IEFDRV9UQ0hBUiAqcG9vbF9uYW1lKQogIDogQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFD
RV9MT0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4gKHBvb2xfbmFtZSkKewp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0s+IGlubGluZQpBQ0VfTWFsbG9jPF9BQ0Vf
TUVNX1BPT0wsIEFDRV9MT0NLPjo6QUNFX01hbGxvYyAoY29uc3QgQUNFX1RDSEFSICpwb29sX25h
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQUNFX1RDSEFSICpsb2NrX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAq
b3B0aW9ucykKICA6IEFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0Nv
bnRyb2xfQmxvY2s+IChwb29sX25hbWUsIGxvY2tfbmFtZSwgb3B0aW9ucykKewp9CiMgMjcwICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaSIK
dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNF
X01hbGxvY19MSUZPX0l0ZXJhdG9yPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPjo6QUNFX01hbGxv
Y19MSUZPX0l0ZXJhdG9yIChBQ0VfTWFsbG9jPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLPiAmbWFs
bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQogIDogQUNFX01hbGxv
Y19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9Db250cm9sX0Js
b2NrPiAobWFsbG9jLCBuYW1lKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBj
bGFzcyBBQ0VfTE9DSz4gaW5saW5lCkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcjxfQUNFX01FTV9Q
T09MLCBBQ0VfTE9DSz46OkFDRV9NYWxsb2NfRklGT19JdGVyYXRvciAoQUNFX01hbGxvYzxfQUNF
X01FTV9QT09MLCBBQ0VfTE9DSz4gJm1hbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbmFtZSkKICA6IEFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0ws
IEFDRV9MT0NLLCBBQ0VfQ29udHJvbF9CbG9jaz4gKG1hbGxvYywgbmFtZSkKewp9CiMgNzE5ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIg
MgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N
YWxsb2NfVC5jcHAiIDEKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvTWFsbG9jX1QuaCIgMQojIDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiIDIKIyAxNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIKaW5saW5lIGNv
bnN0IGNoYXIqIGdldF9yY3NpZF9hY2VfTWFsbG9jX1QgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAi
TWFsbG9jX1QuY3BwLHYgNC44MiAyMDAxLzA2LzI1IDE1OjIwOjA0IG5hbmJvciBFeHAiIDsgfSBz
dGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX01hbGxvY19UID0gZ2V0X3Jjc2lkX2FjZV9NYWxs
b2NfVCAoIHJjc2lkX2FjZV9NYWxsb2NfVCApIDsKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBB
Q0VfTE9DSz4KQUNFX0NhY2hlZF9BbGxvY2F0b3I8VCwgQUNFX0xPQ0s+OjpBQ0VfQ2FjaGVkX0Fs
bG9jYXRvciAoc2l6ZV90IG5fY2h1bmtzKQogIDogcG9vbF8gKDApLAogICAgZnJlZV9saXN0XyAo
MikKewogIGRvIHsgdHJ5IHsgdGhpcy0+cG9vbF8gPSBuZXcgY2hhcltuX2NodW5rcyAqIHNpemVv
ZiAoVCldOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKCgogIGZvciAoc2l6ZV90IGMgPSAwOwogICAg
ICAgYyA8IG5fY2h1bmtzOwogICAgICAgYysrKQogICAgewogICAgICB2b2lkKiBwbGFjZW1lbnQg
PSB0aGlzLT5wb29sXyArIGMgKiBzaXplb2YoVCk7CiAgICAgIHRoaXMtPmZyZWVfbGlzdF8uYWRk
IChuZXcgKHBsYWNlbWVudCkgQUNFX0NhY2hlZF9NZW1fUG9vbF9Ob2RlPFQ+KTsKICAgIH0KCgp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgQUNFX0xPQ0s+CkFDRV9DYWNoZWRfQWxsb2NhdG9y
PFQsIEFDRV9MT0NLPjo6fkFDRV9DYWNoZWRfQWxsb2NhdG9yICh2b2lkKQp7CiAgZGVsZXRlIFtd
IHRoaXMtPnBvb2xfOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+IGludApBQ0VfQWxsb2Nh
dG9yX0FkYXB0ZXI8TUFMTE9DPjo6cHJvdGVjdCAoc3NpemVfdCBsZW4sIGludCBmbGFncykKewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
cmV0dXJuIHRoaXMtPmFsbG9jYXRvcl8ucHJvdGVjdCAobGVuLCBmbGFncyk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBNQUxMT0M+IGludApBQ0VfQWxsb2NhdG9yX0FkYXB0ZXI8TUFMTE9DPjo6cHJvdGVj
dCAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZsYWdzKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWxs
b2NhdG9yXy5wcm90ZWN0IChhZGRyLCBsZW4sIGZsYWdzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIE1B
TExPQz4KQUNFX0FsbG9jYXRvcl9BZGFwdGVyPE1BTExPQz46OkFDRV9BbGxvY2F0b3JfQWRhcHRl
ciAoY29uc3QgY2hhciAqcG9vbF9uYW1lKQogIDogYWxsb2NhdG9yXyAocG9vbF9uYW1lKQp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwp9CiMgNzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBsYXRlIDxjbGFzcyBNQUxMT0M+CkFDRV9BbGxvY2F0
b3JfQWRhcHRlcjxNQUxMT0M+Ojp+QUNFX0FsbG9jYXRvcl9BZGFwdGVyICh2b2lkKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKfQojIDkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvTWFsbG9jX1QuY3BwIgp0ZW1wbGF0ZSA8Y2xhc3MgTUFMTE9DPiB2b2lkCkFDRV9BbGxv
Y2F0b3JfQWRhcHRlcjxNQUxMT0M+OjpkdW1wICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5hbGxvY2F0b3Jf
LmR1bXAgKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9D
SywgY2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9D
SywgQUNFX0NCPjo6ZHVtcCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZG8geyBpbnQg
X19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18g
PSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIs
IDEwMywgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbigl
UHwldHwleCkiLCB0aGlzKTsgfSB3aGlsZSAoMCk7CiAgdGhpcy0+bWVtb3J5X3Bvb2xfLmR1bXAg
KCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9M
b2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0
aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L01hbGxvY19ULmNwcCIsIDEwNSwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVC
VUcsICJjYl9wdHJfID0gJXgiLCB0aGlzLT5jYl9wdHJfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBp
bnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2Vf
X18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNw
cCIsIDEwNiwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9
IHdoaWxlICgwKTsKICB0aGlzLT5jYl9wdHJfLT5kdW1wICgpOwoKCgoKICBkbyB7IGludCBfX2Fj
ZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFD
RV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwgMTEy
LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1cbiIpOyB9IHdo
aWxlICgwKTsKfQojIDE0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL01hbGxvY19ULmNwcCIKdGVtcGxhdGU8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3Mg
QUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwg
QUNFX0xPQ0ssIEFDRV9DQj46OmZyZWUgKHZvaWQgKnB0cikKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0Vf
R3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAodGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2Nr
ZWQgKCkgPT0gMCkgcmV0dXJuOzsKCiAgdGhpcy0+c2hhcmVkX2ZyZWUgKHB0cik7Cn0KIyAxNjIg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5j
cHAiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3Mg
QUNFX0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+
OjpvcGVuICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFDRV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2Vf
bW9uICh0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7
OwoKICBzaXplX3Qgcm91bmRlZF9ieXRlcyA9IDA7CiAgaW50IGZpcnN0X3RpbWUgPSAwOwoKICB0
aGlzLT5jYl9wdHJfID0gKEFDRV9DQiAqKQogICAgdGhpcy0+bWVtb3J5X3Bvb2xfLmluaXRfYWNx
dWlyZSAoc2l6ZW9mICp0aGlzLT5jYl9wdHJfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm91bmRlZF9ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpcnN0X3RpbWUpOwogIGlmICh0aGlzLT5jYl9wdHJfID09IDApCiAgICBkbyB7IGludCBf
X2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9
IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwg
MTc2LCAtMSwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICIoJVB8JXQpICVw
XG4iLCAiaW5pdF9hY3F1aXJlIGZhaWxlZCIpOyByZXR1cm4gLTE7IH0gd2hpbGUgKDApOwoKCgog
IGVsc2UgaWYgKGZpcnN0X3RpbWUpCiAgICB7CgoKICAgICAgTUFMTE9DX0hFQURFUjo6aW5pdF9w
dHIgKCZ0aGlzLT5jYl9wdHJfLT5mcmVlcF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmdGhpcy0+Y2JfcHRyXy0+YmFzZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLT5jYl9wdHJfKTsKCiAgICAgIE1BTExPQ19IRUFERVI6OmluaXRfcHRyICgmdGhpcy0+Y2Jf
cHRyXy0+ZnJlZXBfLT5uZXh0X2Jsb2NrXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPmNiX3B0cl8tPmZyZWVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMtPmNiX3B0cl8pOwoKICAgICAgTkFNRV9OT0RFOjppbml0X3B0ciAoJnRoaXMtPmNiX3B0cl8t
Pm5hbWVfaGVhZF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXMtPmNiX3B0cl8pOwoKICAgICAgdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf
LT5zaXplXyA9IDA7CiAgICAgIHRoaXMtPmNiX3B0cl8tPnJlZl9jb3VudGVyXyA9IDE7CgogICAg
ICBpZiAocm91bmRlZF9ieXRlcyA+IChzaXplb2YgKnRoaXMtPmNiX3B0cl8gKyBzaXplb2YgKE1B
TExPQ19IRUFERVIpKSkKICAgICAgICB7CgoKCiAgICAgICAgICBNQUxMT0NfSEVBREVSICpwID0g
KChNQUxMT0NfSEVBREVSICopICh0aGlzLT5jYl9wdHJfLT5mcmVlcF8pKSArIDE7CgogICAgICAg
ICAgTUFMTE9DX0hFQURFUjo6aW5pdF9wdHIgKCZwLT5uZXh0X2Jsb2NrXywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmNiX3B0cl8pOwojIDIxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIKICAgICAgICAgIHAtPnNpemVfID0gKHJvdW5k
ZWRfYnl0ZXMgLSBzaXplb2YgKnRoaXMtPmNiX3B0cl8pCiAgICAgICAgICAgIC8gc2l6ZW9mIChN
QUxMT0NfSEVBREVSKTsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
CgogICAgICAgICAgdGhpcy0+c2hhcmVkX2ZyZWUgKHAgKyAxKTsKICAgICAgICB9CiAgICB9CiAg
ZWxzZQogICAgKyt0aGlzLT5jYl9wdHJfLT5yZWZfY291bnRlcl87CiAgcmV0dXJuIDA7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NC
PgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OkFDRV9NYWxs
b2NfVCAoY29uc3QgQUNFX1RDSEFSICpwb29sX25hbWUpCiAgOiBtZW1vcnlfcG9vbF8gKHBvb2xf
bmFtZSksCiAgICBsb2NrXyAocG9vbF9uYW1lID09IDAgPyAwIDogQUNFOjpiYXNlbmFtZSAocG9v
bF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcv
JykpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAodGhpcy0+b3BlbiAoKSA9PSAtMSkKICAg
IGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01z
ZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFs
X3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxs
b2NfVC5jcHAiLCAyNDUsIC0xLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwg
IiVwXG4iLCAiQUNFX01hbGxvY19UPEFDRV9NRU1fUE9PTF8yLCBBQ0VfTE9DSywgQUNFX0NCPjo6
QUNFX01hbGxvY19UIik7IH0gd2hpbGUgKDApOwoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01F
TV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPgpBQ0VfTWFsbG9jX1Q8X0FDRV9N
RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OkFDRV9NYWxsb2NfVCAoY29uc3QgQUNFX1RDSEFS
ICpwb29sX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1RDSEFSICpsb2NrX25hbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dHlwZW5hbWUgX0FDRV9NRU1fUE9PTDo6T1BUSU9OUyAqb3B0aW9ucykKICA6IG1lbW9yeV9wb29s
XyAocG9vbF9uYW1lLCBvcHRpb25zKSwKICAgIGxvY2tfIChsb2NrX25hbWUgIT0gMCA/IGxvY2tf
bmFtZSA6IEFDRTo6YmFzZW5hbWUgKHBvb2xfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvJykpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICBpZiAodGhpcy0+b3BlbiAoKSA9PSAtMSkKICAgIGRvIHsgaW50IF9fYWNlX2Vycm9yID0g
QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6
Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCAyNjAsIC0xLCBfX2Fj
ZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIiVwXG4iLCAiQUNFX01hbGxvY19UPEFD
RV9NRU1fUE9PTF8yLCBBQ0VfTE9DSywgQUNFX0NCPjo6QUNFX01hbGxvY19UIik7IH0gd2hpbGUg
KDApOwoKCn0KIyAyODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBB
Q0VfTE9DSywgY2xhc3MgQUNFX0NCPgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xP
Q0ssIEFDRV9DQj46On5BQ0VfTWFsbG9jX1QgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQK
QUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpyZW1vdmUgKHZv
aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgaW50IHJlc3VsdCA9IDA7CgoKCgoKCiAgdGhpcy0+bG9j
a18ucmVtb3ZlICgpOwoKCiAgcmVzdWx0ID0gdGhpcy0+bWVtb3J5X3Bvb2xfLnJlbGVhc2UgKCk7
CgoKCgoKCgogIHRoaXMtPmNiX3B0cl8gPSAwOwoKICByZXR1cm4gcmVzdWx0Owp9CgoKCnRlbXBs
YXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2
b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpzaGFy
ZWRfbWFsbG9jIChzaXplX3QgbmJ5dGVzKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlm
ICh0aGlzLT5jYl9wdHJfID09IDApCiAgICByZXR1cm4gMDsKCgogIHNpemVfdCBudW5pdHMgPQog
ICAgKG5ieXRlcyArIHNpemVvZiAoTUFMTE9DX0hFQURFUikgLSAxKSAvIHNpemVvZiAoTUFMTE9D
X0hFQURFUikKICAgICsgMTsKCiAgTUFMTE9DX0hFQURFUiAqcHJldnAgPSAwOwogIE1BTExPQ19I
RUFERVIgKmN1cnJwID0gMDsKCiAgaWYgKDEpCiAgICB7CgoKICAgICAgcHJldnAgPSB0aGlzLT5j
Yl9wdHJfLT5mcmVlcF87CiAgICAgIGN1cnJwID0gcHJldnAtPm5leHRfYmxvY2tfOwogICAgfQoj
IDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxv
Y19ULmNwcCIKICB3aGlsZSAoMSkKCgoKICAgIHsKICAgICAgaWYgKDEpCiAgICAgICAgewogICAg
ICAgICAgaWYgKGN1cnJwLT5zaXplXyA+PSBudW5pdHMpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgaWYgKGN1cnJwLT5zaXplXyA9PSBudW5pdHMpCgogICAgICAg
ICAgICAgICAgcHJldnAtPm5leHRfYmxvY2tfID0gY3VycnAtPm5leHRfYmxvY2tfOwogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICBjdXJycC0+c2l6ZV8gLT0gbnVuaXRzOwogICAgICAgICAgICAgICAgICBj
dXJycCArPSBjdXJycC0+c2l6ZV87CiAgICAgICAgICAgICAgICAgIE1BTExPQ19IRUFERVI6Omlu
aXRfcHRyICgmY3VycnAtPm5leHRfYmxvY2tfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmNiX3B0cl8pOwogICAgICAgICAgICAgICAgICBjdXJycC0+c2l6ZV8gPSBudW5p
dHM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf
ID0gcHJldnA7CgoKICAgICAgICAgICAgICByZXR1cm4gY3VycnAgKyAxOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlIGlmIChjdXJycCA9PSB0aGlzLT5jYl9wdHJfLT5mcmVlcF8pCiAgICAg
ICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgc2l6ZV90IGNodW5rX2J5dGVzID0gMDsKCiAgICAg
ICAgICAgICAgY3VycnAgPSAoTUFMTE9DX0hFQURFUiAqKQogICAgICAgICAgICAgICAgdGhpcy0+
bWVtb3J5X3Bvb2xfLmFjcXVpcmUgKG51bml0cyAqIHNpemVvZiAoTUFMTE9DX0hFQURFUiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtfYnl0ZXMpOwog
ICAgICAgICAgICAgIGlmIChjdXJycCAhPSAwKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICBNQUxMT0NfSEVBREVSOjppbml0X3B0ciAoJmN1cnJwLT5uZXh0X2Jsb2Nr
XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5jYl9wdHJfKTsKCiAgICAg
ICAgICAgICAgICAgIGN1cnJwLT5zaXplXyA9IGNodW5rX2J5dGVzIC8gc2l6ZW9mIChNQUxMT0Nf
SEVBREVSKTsKCgoKCgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2hhcmVkX2ZyZWUgKGN1cnJw
ICsgMSk7CiAgICAgICAgICAgICAgICAgIGN1cnJwID0gdGhpcy0+Y2JfcHRyXy0+ZnJlZXBfOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVy
biAwOwojIDQyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L01hbGxvY19ULmNwcCIKICAgICAgICAgICAgfQogICAgICAgICAgcHJldnAgPSBjdXJycDsKICAg
ICAgICAgIGN1cnJwID0gY3VycnAtPm5leHRfYmxvY2tfOwogICAgICAgIH0KICAgICAgd2hpbGUg
KDApCiAgICAgICAgewogICAgICAgIH0KICAgIH0KICByZXR1cm4gMDsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZCAq
CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6bWFsbG9jIChz
aXplX3QgbmJ5dGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX0d1YXJkPCBBQ0VfTE9DSyA+IGFj
ZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiAw
OzsKCiAgcmV0dXJuIHRoaXMtPnNoYXJlZF9tYWxsb2MgKG5ieXRlcyk7Cn0KCgoKdGVtcGxhdGUg
PGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IHZvaWQg
KgpBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OmNhbGxvYyAo
c2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFsdWUpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB2b2lk
ICpwdHIgPSB0aGlzLT5tYWxsb2MgKG5ieXRlcyk7CgogIGlmIChwdHIgIT0gMCkKICAgIEFDRV9P
Uzo6bWVtc2V0IChwdHIsIGluaXRpYWxfdmFsdWUsIG5ieXRlcyk7CgogIHJldHVybiBwdHI7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNF
X0NCPiB2b2lkICoKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+
OjpjYWxsb2MgKHNpemVfdCBuX2VsZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVsZW1fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGluaXRpYWxfdmFs
dWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmNhbGxvYyAobl9lbGVtICogZWxl
bV9zaXplLCBpbml0aWFsX3ZhbHVlKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9P
TCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gdm9pZApBQ0VfTWFsbG9jX1Q8X0FDRV9N
RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnNoYXJlZF9mcmVlICh2b2lkICphcCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgaWYgKGFwID09IDAgfHwgdGhpcy0+Y2JfcHRyXyA9PSAwKQog
ICAgcmV0dXJuOwoKCgogIE1BTExPQ19IRUFERVIgKmJsb2NrcCA9ICgoTUFMTE9DX0hFQURFUiAq
KSBhcCkgLSAxOwogIE1BTExPQ19IRUFERVIgKmN1cnJwID0gdGhpcy0+Y2JfcHRyXy0+ZnJlZXBf
OwoKCgoKICBpZiAoMSkKICAgIHsKICAgICAgZm9yICg7CiAgICAgICAgICAgYmxvY2twIDw9IGN1
cnJwCiAgICAgICAgICAgICB8fCBibG9ja3AgPj0gKE1BTExPQ19IRUFERVIgKikgY3VycnAtPm5l
eHRfYmxvY2tfOwogICAgICAgICAgIGN1cnJwID0gY3VycnAtPm5leHRfYmxvY2tfKQogICAgICAg
IHsKICAgICAgICAgIGlmIChjdXJycCA+PSAoTUFMTE9DX0hFQURFUiAqKSBjdXJycC0+bmV4dF9i
bG9ja18KICAgICAgICAgICAgICAmJiAoYmxvY2twID4gY3VycnAKICAgICAgICAgICAgICAgICAg
fHwgYmxvY2twIDwgKE1BTExPQ19IRUFERVIgKikgY3VycnAtPm5leHRfYmxvY2tfKSkKCiAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgIH0KCgogICAgICBpZiAoKGJsb2NrcCArIGJsb2NrcC0+c2l6
ZV8pID09IGN1cnJwLT5uZXh0X2Jsb2NrXykKICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgYmxvY2twLT5zaXplXyArPSBjdXJycC0+bmV4dF9ibG9ja18tPnNpemVfOwogICAgICAgICAg
YmxvY2twLT5uZXh0X2Jsb2NrXyA9IGN1cnJwLT5uZXh0X2Jsb2NrXy0+bmV4dF9ibG9ja187CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgYmxvY2twLT5uZXh0X2Jsb2NrXyA9IGN1cnJwLT5u
ZXh0X2Jsb2NrXzsKCgogICAgICBpZiAoKGN1cnJwICsgY3VycnAtPnNpemVfKSA9PSBibG9ja3Ap
CiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgIGN1cnJwLT5zaXplXyArPSBibG9ja3At
PnNpemVfOwogICAgICAgICAgY3VycnAtPm5leHRfYmxvY2tfID0gYmxvY2twLT5uZXh0X2Jsb2Nr
XzsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBjdXJycC0+bmV4dF9ibG9ja18gPSBibG9j
a3A7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgIHRoaXMtPmNiX3B0cl8tPmZyZWVwXyA9IGN1cnJwOwogICAgfQog
IHdoaWxlICgwKQogICAgewogICAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09M
LCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2b2lkKgpBQ0VfTWFsbG9jX1Q8X0FDRV9N
RU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnNoYXJlZF9maW5kIChjb25zdCBjaGFyICpuYW1l
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAodGhpcy0+Y2JfcHRyXyA9PSAwKQogICAg
cmV0dXJuIDA7CgogIGlmICgxKQogICAgewogICAgICBmb3IgKE5BTUVfTk9ERSAqbm9kZSA9IHRo
aXMtPmNiX3B0cl8tPm5hbWVfaGVhZF87CiAgICAgICAgICAgbm9kZSAhPSAwOwogICAgICAgICAg
IG5vZGUgPSBub2RlLT5uZXh0XykKICAgICAgICBpZiAoQUNFX09TOjpzdHJjbXAgKG5vZGUtPm5h
bWUgKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKSA9PSAwKQogICAgICAgICAg
cmV0dXJuIG5vZGU7CiAgICB9CiAgd2hpbGUgKDApCiAgICB7CiAgICB9CiAgcmV0dXJuIDA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNF
X0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+Ojpz
aGFyZWRfYmluZCAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBvaW50ZXIpCnsKICBpZiAo
dGhpcy0+Y2JfcHRyXyA9PSAwKQogICAgcmV0dXJuIC0xOwoKCiAgTkFNRV9OT0RFICpuZXdfbm9k
ZSA9IDA7CgogIGRvIHsgbmV3X25vZGUgPSAoTkFNRV9OT0RFICopIHRoaXMtPnNoYXJlZF9tYWxs
b2MgKHNpemVvZiAoTkFNRV9OT0RFKSArIEFDRV9PUzo6c3RybGVuIChuYW1lKSArIDEpOyBpZiAo
bmV3X25vZGUgPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAtMTsg
fSB9IHdoaWxlICgwKTsKCgoKCiAgY2hhciAqbmFtZV9wdHIgPSAoY2hhciAqKSAobmV3X25vZGUg
KyAxKTsKCgoKICBOQU1FX05PREUgKnJlc3VsdCA9CiAgICBuZXcgKG5ld19ub2RlKSBOQU1FX05P
REUgKG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIgKj4gKHBvaW50ZXIp
LAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Y2JfcHRyXy0+bmFtZV9oZWFk
Xyk7CiAgdGhpcy0+Y2JfcHRyXy0+bmFtZV9oZWFkXyA9IHJlc3VsdDsKICByZXR1cm4gMDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0Vf
Q0I+IGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnRy
eWJpbmQgKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiZwb2ludGVyKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogIEFDRV9Xcml0ZV9HdWFyZDwgQUNFX0xPQ0sgPiBhY2VfbW9uICh0aGlzLT5sb2NrXyk7IGlm
IChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwoKICBOQU1FX05PREUgKm5vZGUg
PSAoTkFNRV9OT0RFICopIHRoaXMtPnNoYXJlZF9maW5kIChuYW1lKTsKCiAgaWYgKG5vZGUgPT0g
MCkKCiAgICByZXR1cm4gdGhpcy0+c2hhcmVkX2JpbmQgKG5hbWUsIHBvaW50ZXIpOwoKCiAgcG9p
bnRlciA9IChjaGFyICopIG5vZGUtPnBvaW50ZXJfOwogIHJldHVybiAxOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFD
RV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YmluZCAoY29uc3Qg
Y2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdm9pZCAqcG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGR1cGxpY2F0ZXMpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNF
X1dyaXRlX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t
b24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CgogIGlmIChkdXBsaWNhdGVzID09IDAgJiYg
dGhpcy0+c2hhcmVkX2ZpbmQgKG5hbWUpICE9IDApCgoKICAgIHJldHVybiAxOwoKCgogIHJldHVy
biB0aGlzLT5zaGFyZWRfYmluZCAobmFtZSwgcG9pbnRlcik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQKQUNFX01hbGxv
Y19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpmaW5kIChjb25zdCBjaGFyICpu
YW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqJnBvaW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIEFDRV9SZWFkX0d1YXJkPCBBQ0VfTE9D
SyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJl
dHVybiAtMTs7CgogIE5BTUVfTk9ERSAqbm9kZSA9IChOQU1FX05PREUgKikgdGhpcy0+c2hhcmVk
X2ZpbmQgKG5hbWUpOwoKICBpZiAobm9kZSA9PSAwKQogICAgcmV0dXJuIC0xOwoKICBwb2ludGVy
ID0gKGNoYXIgKikgbm9kZS0+cG9pbnRlcl87CiAgcmV0dXJuIDA7Cn0KIyA2NTQgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiCnRlbXBs
YXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBz
c2l6ZV90CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YXZh
aWxfY2h1bmtzIChzaXplX3Qgc2l6ZSkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFD
RV9SZWFkX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKChBQ0VfTE9DSyAmKSB0aGlzLT5sb2Nr
Xyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gLTE7OwoKICBpZiAodGhpcy0+
Y2JfcHRyXyA9PSAwKQogICAgcmV0dXJuIC0xOwoKICBzaXplX3QgY291bnQgPSAwOwoKICBzaXpl
ID0gc2l6ZSA9PSAwID8gMSA6IHNpemU7CiAgTUFMTE9DX0hFQURFUiAqY3VycnAgPSB0aGlzLT5j
Yl9wdHJfLT5mcmVlcF87CgoKICBkbyB7CiAgICBzaXplX3QgYXZhaWxfc2l6ZSA9IGN1cnJwLT5z
aXplXyA9PSAwID8gMCA6IGN1cnJwLT5zaXplXyAtIDE7CiAgICBpZiAoYXZhaWxfc2l6ZSAqIHNp
emVvZiAoTUFMTE9DX0hFQURFUikgPj0gc2l6ZSkKICAgICAgY291bnQgKz0gYXZhaWxfc2l6ZSAq
IHNpemVvZiAoTUFMTE9DX0hFQURFUikgLyBzaXplOwogICAgY3VycnAgPSBjdXJycC0+bmV4dF9i
bG9ja187CiAgfQogIHdoaWxlIChjdXJycCAhPSB0aGlzLT5jYl9wdHJfLT5mcmVlcF8pOwoKICBy
ZXR1cm4gY291bnQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0Vf
TE9DSywgY2xhc3MgQUNFX0NCPiBpbnQKQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M
T0NLLCBBQ0VfQ0I+OjpmaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFD
RV9SZWFkX0d1YXJkPCBBQ0VfTE9DSyA+IGFjZV9tb24gKHRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t
b24ubG9ja2VkICgpID09IDApIHJldHVybiAtMTs7CgogIHJldHVybiB0aGlzLT5zaGFyZWRfZmlu
ZCAobmFtZSkgPT0gMCA/IC0xIDogMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0ws
IGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX1Q8X0FDRV9NRU1f
UE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46OnVuYmluZCAoY29uc3QgY2hhciAqbmFtZSwgdm9pZCAq
JnBvaW50ZXIpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfV3JpdGVfR3VhcmQ8IEFDRV9MT0NLID4g
YWNlX21vbiAodGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu
IC0xOzsKCiAgaWYgKHRoaXMtPmNiX3B0cl8gPT0gMCkKICAgIHJldHVybiAtMTsKCiAgTkFNRV9O
T0RFICpwcmV2ID0gMDsKCiAgZm9yIChOQU1FX05PREUgKmN1cnIgPSB0aGlzLT5jYl9wdHJfLT5u
YW1lX2hlYWRfOwogICAgICAgY3VyciAhPSAwOwogICAgICAgY3VyciA9IGN1cnItPm5leHRfKQog
ICAgewogICAgICBpZiAoQUNFX09TOjpzdHJjbXAgKGN1cnItPm5hbWUgKCksIG5hbWUpID09IDAp
CiAgICAgICAgewogICAgICAgICAgcG9pbnRlciA9IChjaGFyICopIGN1cnItPnBvaW50ZXJfOwoK
ICAgICAgICAgIGlmIChwcmV2ID09IDApCiAgICAgICAgICAgIHRoaXMtPmNiX3B0cl8tPm5hbWVf
aGVhZF8gPSBjdXJyLT5uZXh0XzsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJldi0+bmV4
dF8gPSBjdXJyLT5uZXh0XzsKCiAgICAgICAgICBpZiAoY3Vyci0+bmV4dF8pCiAgICAgICAgICAg
IGN1cnItPm5leHRfLT5wcmV2XyA9IHByZXY7CgoKCiAgICAgICAgICB0aGlzLT5zaGFyZWRfZnJl
ZSAoY3Vycik7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgIHByZXYgPSBjdXJy
OwogICAgfQoKCiAgcmV0dXJuIC0xOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwg
Y2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfVDxfQUNFX01FTV9Q
T09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6dW5iaW5kIChjb25zdCBjaGFyICpuYW1lKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgdm9pZCAqdGVtcCA9IDA7CiAgcmV0dXJuIHRoaXMtPnVuYmluZCAobmFtZSwg
dGVtcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywg
Y2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BP
T0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpkdW1wICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y
ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf
X18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA3NDEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5s
b2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwog
IHRoaXMtPmN1cnJfLT5kdW1wICgpOwogIHRoaXMtPmd1YXJkXy5kdW1wICgpOwogIGRvIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAi
LCA3NDQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAibmFtZV8gPSAl
cyIsIHRoaXMtPm5hbWVfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBB
Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6
aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbGxvY19ULmNwcCIsIDc0NSwgMCwgX19hY2Vf
ZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7
IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFj
ZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQg
KCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1Qu
Y3BwIiwgNzQ2LCAwLCBfX2FjZV9lcnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1c
biIpOyB9IHdoaWxlICgwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNz
IEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFDRV9NYWxsb2NfTElGT19JdGVyYXRvcl9UPF9BQ0Vf
TUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVCAo
QUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+ICZtYWxsb2MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKICA6IG1hbGxvY18g
KG1hbGxvYyksCiAgICBjdXJyXyAoMCksCiAgICBndWFyZF8gKG1hbGxvY18ubG9ja18pLAogICAg
bmFtZV8gKG5hbWUgIT0gMCA/IEFDRV9PUzo6c3RyZHVwIChuYW1lKSA6IDApCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBOQU1FX05PREUgdGVt
cDsKICB0aGlzLT5jdXJyXyA9ICZ0ZW1wOwogIHRoaXMtPmN1cnJfLT5uZXh0XyA9IG1hbGxvY18u
Y2JfcHRyXy0+bmFtZV9oZWFkXzsKCiAgdGhpcy0+YWR2YW5jZSAoKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFDRV9NYWxs
b2NfTElGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+Ojp+QUNF
X01hbGxvY19MSUZPX0l0ZXJhdG9yX1QgKHZvaWQpCnsKICBBQ0VfT1M6OmZyZWUgKCh2b2lkICop
IHRoaXMtPm5hbWVfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFD
RV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNF
X01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6bmV4dCAodm9pZCAqJm5leHRfZW50cnksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqJm5hbWUpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgaWYgKHRoaXMtPmN1cnJfICE9IDApCiAgICB7CiAgICAgIG5leHRfZW50cnkgPSAoY2hhciAq
KSB0aGlzLT5jdXJyXy0+cG9pbnRlcl87CiAgICAgIG5hbWUgPSB0aGlzLT5jdXJyXy0+bmFtZSAo
KTsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiBpbnQK
QUNFX01hbGxvY19MSUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9D
Qj46Om5leHQgKHZvaWQgKiZuZXh0X2VudHJ5KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGlmICh0aGlzLT5jdXJyXyAhPSAwKQogICAgewogICAgICBuZXh0X2VudHJ5ID0gdGhpcy0+
Y3Vycl8tPnBvaW50ZXJfOwogICAgICByZXR1cm4gMTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4g
MDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFz
cyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBB
Q0VfTE9DSywgQUNFX0NCPjo6ZG9uZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICByZXR1cm4gdGhpcy0+Y3Vycl8gPT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9B
Q0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9j
X0xJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6YWR2YW5j
ZSAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0aGlzLT5jdXJyXyA9
IHRoaXMtPmN1cnJfLT5uZXh0XzsKCiAgaWYgKHRoaXMtPm5hbWVfID09IDApCiAgICByZXR1cm4g
dGhpcy0+Y3Vycl8gIT0gMDsKCiAgd2hpbGUgKHRoaXMtPmN1cnJfICE9IDAKICAgICAgICAgJiYg
QUNFX09TOjpzdHJjbXAgKHRoaXMtPm5hbWVfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpcy0+Y3Vycl8tPm5hbWUgKCkpICE9IDApCiAgICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJf
LT5uZXh0XzsKCiAgcmV0dXJuIHRoaXMtPmN1cnJfICE9IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QUNFX01FTV9QT09MLCBjbGFzcyBBQ0VfTE9DSywgY2xhc3MgQUNFX0NCPiB2b2lkCkFDRV9NYWxs
b2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpkdW1w
ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGRvIHsgaW50IF9f
YWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0g
QUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA4
MzQsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG49PT09XG4oJVB8
JXR8JXgpIiwgdGhpcyk7IH0gd2hpbGUgKDApOwogIHRoaXMtPmN1cnJfLT5kdW1wICgpOwogIHRo
aXMtPmd1YXJkXy5kdW1wICgpOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0
X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgp
OyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5jcHAiLCA4MzcsIDAsIF9fYWNlX2Vycm9yKTsgYWNl
X19fLT5sb2cgKExNX0RFQlVHLCAibmFtZV8gPSAlcyIsIHRoaXMtPm5hbWVfKTsgfSB3aGlsZSAo
MCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9M
b2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0
aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L01hbGxvY19ULmNwcCIsIDgzOCwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVC
VUcsICJcbiIpOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX1QuY3BwIiwgODM5LCAwLCBfX2FjZV9lcnJvcik7
IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgIj09PT1cbiIpOyB9IHdoaWxlICgwKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+CkFD
RV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+
OjpBQ0VfTWFsbG9jX0ZJRk9fSXRlcmF0b3JfVCAoQUNFX01hbGxvY19UPF9BQ0VfTUVNX1BPT0ws
IEFDRV9MT0NLLCBBQ0VfQ0I+ICZtYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqbmFtZSkKICA6IG1hbGxvY18gKG1hbGxvYyksCiAgICBjdXJyXyAoMCksCiAg
ICBndWFyZF8gKG1hbGxvY18ubG9ja18pLAogICAgbmFtZV8gKG5hbWUgIT0gMCA/IEFDRV9PUzo6
c3RyZHVwIChuYW1lKSA6IDApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKCiAgTkFNRV9OT0RFIHRlbXA7CiAgdGhpcy0+Y3Vycl8gPSAmdGVtcDsKICB0
aGlzLT5jdXJyXy0+bmV4dF8gPSBtYWxsb2NfLmNiX3B0cl8tPm5hbWVfaGVhZF87CiAgdGhpcy0+
Y3Vycl8tPnByZXZfID0gMDsKCgogIHRoaXMtPnN0YXJ0ICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4KQUNFX01hbGxvY19G
SUZPX0l0ZXJhdG9yX1Q8X0FDRV9NRU1fUE9PTCwgQUNFX0xPQ0ssIEFDRV9DQj46On5BQ0VfTWFs
bG9jX0ZJRk9fSXRlcmF0b3JfVCAodm9pZCkKewogIEFDRV9PUzo6ZnJlZSAoKHZvaWQgKikgdGhp
cy0+bmFtZV8pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xP
Q0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVN
X1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjpuZXh0ICh2b2lkICombmV4dF9lbnRyeSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBjaGFyICombmFtZSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp
ZiAodGhpcy0+Y3Vycl8gIT0gMCkKICAgIHsKICAgICAgbmV4dF9lbnRyeSA9IChjaGFyICopIHRo
aXMtPmN1cnJfLT5wb2ludGVyXzsKICAgICAgbmFtZSA9IHRoaXMtPmN1cnJfLT5uYW1lICgpOwog
ICAgICByZXR1cm4gMTsKICAgIH0KICBlbHNlCiAgICByZXR1cm4gMDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9BQ0VfTUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0Vf
TWFsbG9jX0ZJRk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6
bmV4dCAodm9pZCAqJm5leHRfZW50cnkpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg
aWYgKHRoaXMtPmN1cnJfICE9IDApCiAgICB7CiAgICAgIG5leHRfZW50cnkgPSB0aGlzLT5jdXJy
Xy0+cG9pbnRlcl87CiAgICAgIHJldHVybiAxOwogICAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9NRU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFD
RV9DQj4gaW50CkFDRV9NYWxsb2NfRklGT19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9M
T0NLLCBBQ0VfQ0I+Ojpkb25lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIHJldHVybiB0aGlzLT5jdXJyXyA9PSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FDRV9N
RU1fUE9PTCwgY2xhc3MgQUNFX0xPQ0ssIGNsYXNzIEFDRV9DQj4gaW50CkFDRV9NYWxsb2NfRklG
T19JdGVyYXRvcl9UPF9BQ0VfTUVNX1BPT0wsIEFDRV9MT0NLLCBBQ0VfQ0I+OjphZHZhbmNlICh2
b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmN1cnJfID0gdGhp
cy0+Y3Vycl8tPnByZXZfOwoKICBpZiAodGhpcy0+bmFtZV8gPT0gMCkKICAgIHJldHVybiB0aGlz
LT5jdXJyXyAhPSAwOwoKICB3aGlsZSAodGhpcy0+Y3Vycl8gIT0gMAogICAgICAgICAmJiBBQ0Vf
T1M6OnN0cmNtcCAodGhpcy0+bmFtZV8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
LT5jdXJyXy0+bmFtZSAoKSkgIT0gMCkKICAgIHRoaXMtPmN1cnJfID0gdGhpcy0+Y3Vycl8tPnBy
ZXZfOwoKICByZXR1cm4gdGhpcy0+Y3Vycl8gIT0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BQ0Vf
TUVNX1BPT0wsIGNsYXNzIEFDRV9MT0NLLCBjbGFzcyBBQ0VfQ0I+IGludApBQ0VfTWFsbG9jX0ZJ
Rk9fSXRlcmF0b3JfVDxfQUNFX01FTV9QT09MLCBBQ0VfTE9DSywgQUNFX0NCPjo6c3RhcnQgKHZv
aWQpCnsKICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJfLT5uZXh0XzsKICBOQU1FX05PREUgKnBy
ZXYgPSAwOwoKCgoKICB3aGlsZSAodGhpcy0+Y3Vycl8gIT0gMCkKICAgIHsKICAgICAgcHJldiA9
IHRoaXMtPmN1cnJfOwogICAgICB0aGlzLT5jdXJyXyA9IHRoaXMtPmN1cnJfLT5uZXh0XzsKICAg
IH0KCiAgdGhpcy0+Y3Vycl8gPSBwcmV2OwogIHJldHVybiB0aGlzLT5jdXJyXyAhPSAwOwp9CiMg
NzIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9j
X1QuaCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wb3N0LmgiIDEKIyA3MzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NYWxsb2NfVC5oIiAyCiMgNDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMQojIDE1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgi
IDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01l
bW9yeV9Qb29sLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRfSGFuZGxlci5oIiAxCiMgMTYgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9FdmVudF9IYW5kbGVy
LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By
ZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9FdmVudF9IYW5kbGVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9FdmVudF9IYW5kbGVyLmgiIDIKCgoKCgoKY2xhc3MgQUNFX01l
c3NhZ2VfQmxvY2s7CmNsYXNzIEFDRV9SZWFjdG9yOwpjbGFzcyBBQ0VfVGhyZWFkX01hbmFnZXI7
CmNsYXNzIEFDRV9Qcm9jZXNzOwoKdHlwZWRlZiB1X2xvbmcgQUNFX1JlYWN0b3JfTWFzazsKIyA0
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hh
bmRsZXIuaCIKY2xhc3MgQUNFX0V2ZW50X0hhbmRsZXIKewpwdWJsaWM6CiAgZW51bQogIHsKICAg
IExPX1BSSU9SSVRZID0gMCwKICAgIEhJX1BSSU9SSVRZID0gMTAsCiAgICBOVUxMX01BU0sgPSAw
LAoKCgoKCiAgICBSRUFEX01BU0sgPSAoMSA8PCAwKSwKICAgIFdSSVRFX01BU0sgPSAoMSA8PCAx
KSwKICAgIEVYQ0VQVF9NQVNLID0gKDEgPDwgMiksCgogICAgQUNDRVBUX01BU0sgPSAoMSA8PCAz
KSwKICAgIENPTk5FQ1RfTUFTSyA9ICgxIDw8IDQpLAogICAgVElNRVJfTUFTSyA9ICgxIDw8IDUp
LAogICAgUU9TX01BU0sgPSAoMSA8PCA2KSwKICAgIEdST1VQX1FPU19NQVNLID0gKDEgPDwgNyks
CiAgICBTSUdOQUxfTUFTSyA9ICgxIDw8IDgpLAogICAgQUxMX0VWRU5UU19NQVNLID0gUkVBRF9N
QVNLIHwKICAgICAgICAgICAgICAgICAgICAgIFdSSVRFX01BU0sgfAogICAgICAgICAgICAgICAg
ICAgICAgRVhDRVBUX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgQUNDRVBUX01BU0sgfAog
ICAgICAgICAgICAgICAgICAgICAgQ09OTkVDVF9NQVNLIHwKICAgICAgICAgICAgICAgICAgICAg
IFRJTUVSX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgUU9TX01BU0sgfAogICAgICAgICAg
ICAgICAgICAgICAgR1JPVVBfUU9TX01BU0sgfAogICAgICAgICAgICAgICAgICAgICAgU0lHTkFM
X01BU0ssCiAgICBSV0VfTUFTSyA9IFJFQURfTUFTSyB8CiAgICAgICAgICAgICAgIFdSSVRFX01B
U0sgfAogICAgICAgICAgICAgICBFWENFUFRfTUFTSywKICAgIERPTlRfQ0FMTCA9ICgxIDw8IDkp
CiAgfTsKCgogIHZpcnR1YWwgfkFDRV9FdmVudF9IYW5kbGVyICh2b2lkKTsKCgoKICB2aXJ0dWFs
IEFDRV9IQU5ETEUgZ2V0X2hhbmRsZSAodm9pZCkgY29uc3Q7CiAgdmlydHVhbCB2b2lkIHNldF9o
YW5kbGUgKEFDRV9IQU5ETEUpOwoKCgoKCgoKICB2aXJ0dWFsIGludCBwcmlvcml0eSAodm9pZCkg
Y29uc3Q7CiAgdmlydHVhbCB2b2lkIHByaW9yaXR5IChpbnQgcHJpb3JpdHkpOwoKCiAgdmlydHVh
bCBpbnQgaGFuZGxlX2lucHV0IChBQ0VfSEFORExFIGZkID0gLTEpOwoKCgogIHZpcnR1YWwgaW50
IGhhbmRsZV9vdXRwdXQgKEFDRV9IQU5ETEUgZmQgPSAtMSk7CgoKICB2aXJ0dWFsIGludCBoYW5k
bGVfZXhjZXB0aW9uIChBQ0VfSEFORExFIGZkID0gLTEpOwoKCgoKCgoKICB2aXJ0dWFsIGludCBo
YW5kbGVfdGltZW91dCAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJmN1cnJlbnRfdGltZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqYWN0ID0gMCk7CgoKICB2aXJ0dWFs
IGludCBoYW5kbGVfZXhpdCAoQUNFX1Byb2Nlc3MgKik7CgoKCgoKICB2aXJ0dWFsIGludCBoYW5k
bGVfY2xvc2UgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX1JlYWN0b3JfTWFzayBjbG9zZV9tYXNrKTsKCgoKICB2aXJ0dWFsIGludCBoYW5kbGVfc2ln
bmFsIChpbnQgc2lnbnVtLCBzaWdpbmZvX3QgKiA9IDAsIHVjb250ZXh0X3QgKiA9IDApOwoKCgoK
CgoKICB2aXJ0dWFsIGludCByZXN1bWVfaGFuZGxlciAodm9pZCk7CgogIHZpcnR1YWwgaW50IGhh
bmRsZV9xb3MgKEFDRV9IQU5ETEUgPSAtMSk7CiAgdmlydHVhbCBpbnQgaGFuZGxlX2dyb3VwX3Fv
cyAoQUNFX0hBTkRMRSA9IC0xKTsKCgogIHZpcnR1YWwgdm9pZCByZWFjdG9yIChBQ0VfUmVhY3Rv
ciAqcmVhY3Rvcik7CiAgdmlydHVhbCBBQ0VfUmVhY3RvciAqcmVhY3RvciAodm9pZCkgY29uc3Q7
CiMgMTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZl
bnRfSGFuZGxlci5oIgogIHN0YXRpYyB2b2lkICpyZWFkX2FkYXB0ZXIgKHZvaWQgKmV2ZW50X2hh
bmRsZXIpOwoKCgoKCgogIHN0YXRpYyBpbnQgcmVnaXN0ZXJfc3RkaW5faGFuZGxlciAoQUNFX0V2
ZW50X0hhbmRsZXIgKmVoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF
X1JlYWN0b3IgKnJlYWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfVGhyZWFkX01hbmFnZXIgKnRocl9tZ3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgZmxhZ3MgPSAweDAwMDAwMDQwKTsKCgogIHN0YXRpYyBpbnQgcmVtb3ZlX3N0
ZGluX2hhbmRsZXIgKEFDRV9SZWFjdG9yICpyZWFjdG9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFDRV9UaHJlYWRfTWFuYWdlciAqdGhyX21ncik7CgoKcHJvdGVjdGVkOgoK
ICBBQ0VfRXZlbnRfSGFuZGxlciAoQUNFX1JlYWN0b3IgKiA9IDAsCiAgICAgICAgICAgICAgICAg
ICAgIGludCBwcmlvcml0eSA9IEFDRV9FdmVudF9IYW5kbGVyOjpMT19QUklPUklUWSk7Cgpwcml2
YXRlOgoKCiAgaW50IHByaW9yaXR5XzsKCgogIEFDRV9SZWFjdG9yICpyZWFjdG9yXzsKfTsKCgoK
CgoKCmNsYXNzIEFDRV9Ob3RpZmljYXRpb25fQnVmZmVyCnsKcHVibGljOgogIEFDRV9Ob3RpZmlj
YXRpb25fQnVmZmVyICh2b2lkKTsKCiAgQUNFX05vdGlmaWNhdGlvbl9CdWZmZXIgKEFDRV9FdmVu
dF9IYW5kbGVyICplaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1JlYWN0b3JfTWFz
ayBtYXNrKTsKCgogIH5BQ0VfTm90aWZpY2F0aW9uX0J1ZmZlciAodm9pZCk7CgoKCiAgQUNFX0V2
ZW50X0hhbmRsZXIgKmVoXzsKCgogIEFDRV9SZWFjdG9yX01hc2sgbWFza187Cn07CgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRfSGFuZGxl
ci5pIiAxCgoKCgoKaW5saW5lCkFDRV9Ob3RpZmljYXRpb25fQnVmZmVyOjp+QUNFX05vdGlmaWNh
dGlvbl9CdWZmZXIgKHZvaWQpCnsKfQojIDIxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hhbmRsZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIxNyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0V2ZW50X0hhbmRsZXIuaCIg
MgojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVt
b3J5X1Bvb2wuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9TaWduYWwuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaWduYWwuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAyMyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIiAyCgoKCgoK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvRXZlbnRf
SGFuZGxlci5oIiAxCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9TaWduYWwuaCIgMgoKCnR5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBBQ0VfU0lHQUNU
SU9OOwojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
U2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfU2V0CnsKcHVibGljOgoKCgogIEFDRV9TaWdfU2V0IChz
aWdzZXRfdCAqc2lnc2V0KTsKCgoKICBBQ0VfU2lnX1NldCAoQUNFX1NpZ19TZXQgKnNpZ3NldCk7
CgoKCiAgQUNFX1NpZ19TZXQgKGludCBmaWxsID0gMCk7CgogIH5BQ0VfU2lnX1NldCAodm9pZCk7
CgoKICBpbnQgZW1wdHlfc2V0ICh2b2lkKTsKCgogIGludCBmaWxsX3NldCAodm9pZCk7CgoKICBp
bnQgc2lnX2FkZCAoaW50IHNpZ25vKTsKCgogIGludCBzaWdfZGVsIChpbnQgc2lnbm8pOwoKCiAg
aW50IGlzX21lbWJlciAoaW50IHNpZ25vKSBjb25zdDsKCgogIG9wZXJhdG9yIHNpZ3NldF90ICoo
KTsKCgogIHNpZ3NldF90IHNpZ3NldCAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQp
IGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgc2lnc2V0X3Qgc2lnc2V0
XzsKfTsKCgoKCgoKY2xhc3MgQUNFX1NpZ19BY3Rpb24KewpwdWJsaWM6CgoKICBBQ0VfU2lnX0Fj
dGlvbiAodm9pZCk7CgoKCiAgQUNFX1NpZ19BY3Rpb24gKEFDRV9TaWduYWxIYW5kbGVyIGhhbmRs
ZXIsCiAgICAgICAgICAgICAgICAgIHNpZ3NldF90ICpzaWdtYXNrID0gMCwKICAgICAgICAgICAg
ICAgICAgaW50IGZsYWdzID0gMCk7CgoKCiAgQUNFX1NpZ19BY3Rpb24gKEFDRV9TaWduYWxIYW5k
bGVyIGhhbmRsZXIsCiAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9TaWdfU2V0ICZzaWdtYXNr
LAogICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlv
biAoQUNFX1NpZ25hbEhhbmRsZXIgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgaW50IHNpZ251
bSwKICAgICAgICAgICAgICAgICAgc2lnc2V0X3QgKnNpZ21hc2sgPSAwLAogICAgICAgICAgICAg
ICAgICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlvbiAoQUNFX1NpZ25hbEhh
bmRsZXIgaGFuZGxlciwKICAgICAgICAgICAgICAgICAgaW50IHNpZ251bSwKICAgICAgICAgICAg
ICAgICAgY29uc3QgQUNFX1NpZ19TZXQgJnNpZ21hc2ssCiAgICAgICAgICAgICAgICAgIGludCBm
bGFncyA9IDApOwojIDE1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1NpZ25hbC5oIgogIEFDRV9TaWdfQWN0aW9uIChjb25zdCBBQ0VfU2lnX1NldCAmc2ln
bmFsc3MsCiAgICAgICAgICAgICAgICAgIEFDRV9TaWduYWxIYW5kbGVyIGhhbmRsZXIsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9TaWdfU2V0ICZzaWdtYXNrLAogICAgICAgICAgICAgICAg
ICBpbnQgZmxhZ3MgPSAwKTsKCgoKCgoKICBBQ0VfU2lnX0FjdGlvbiAoY29uc3QgQUNFX1NpZ19T
ZXQgJnNpZ25hbHNzLAogICAgICAgICAgICAgICAgICBBQ0VfU2lnbmFsSGFuZGxlciBoYW5kbGVy
LAogICAgICAgICAgICAgICAgICBzaWdzZXRfdCAqc2lnbWFzayA9IDAsCiAgICAgICAgICAgICAg
ICAgIGludCBmbGFncyA9IDApOwoKCiAgQUNFX1NpZ19BY3Rpb24gKGNvbnN0IEFDRV9TaWdfQWN0
aW9uICZzKTsKCgogIH5BQ0VfU2lnX0FjdGlvbiAodm9pZCk7CgoKCgogIGludCByZWdpc3Rlcl9h
Y3Rpb24gKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24g
Km9hY3Rpb24gPSAwKTsKCgoKICBpbnQgcmVzdG9yZV9hY3Rpb24gKGludCBzaWdudW0sCiAgICAg
ICAgICAgICAgICAgICAgICBBQ0VfU2lnX0FjdGlvbiAmb2FjdGlvbik7CgoKICBpbnQgcmV0cmll
dmVfYWN0aW9uIChpbnQgc2lnbnVtKTsKCgogIHZvaWQgc2V0IChzdHJ1Y3Qgc2lnYWN0aW9uICop
OwogIHN0cnVjdCBzaWdhY3Rpb24gKmdldCAodm9pZCk7CiAgb3BlcmF0b3IgQUNFX1NJR0FDVElP
TiAqKCk7CgoKICB2b2lkIGZsYWdzIChpbnQpOwogIGludCBmbGFncyAodm9pZCk7CgoKICB2b2lk
IG1hc2sgKHNpZ3NldF90ICopOwogIHZvaWQgbWFzayAoQUNFX1NpZ19TZXQgJik7CiAgc2lnc2V0
X3QgKm1hc2sgKHZvaWQpOwoKCiAgdm9pZCBoYW5kbGVyIChBQ0VfU2lnbmFsSGFuZGxlcik7CiAg
QUNFX1NpZ25hbEhhbmRsZXIgaGFuZGxlciAodm9pZCk7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNv
bnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgc3RydWN0IHNpZ2FjdGlvbiBz
YV87Cn07CgoKCgoKCgpjbGFzcyBBQ0VfU2lnX0d1YXJkCnsKcHVibGljOgoKCiAgQUNFX1NpZ19H
dWFyZCAoQUNFX1NpZ19TZXQgKm1hc2sgPSAwKTsKCgogIH5BQ0VfU2lnX0d1YXJkICh2b2lkKTsK
CgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRl
OgoKICBBQ0VfU2lnX1NldCBvbWFza187Cn07CiMgMjU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfSGFuZGxlcgp7
CnB1YmxpYzoKIyAyNzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TaWduYWwuaCIKICB2aXJ0dWFsIGludCByZWdpc3Rlcl9oYW5kbGVyIChpbnQgc2lnbnVt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9FdmVudF9IYW5kbGVyICpuZXdf
c2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24gKm5ld19k
aXNwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZlbnRfSGFuZGxl
ciAqKm9sZF9zaCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19B
Y3Rpb24gKm9sZF9kaXNwID0gMCk7CiMgMjg5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiAgdmlydHVhbCBpbnQgcmVtb3ZlX2hhbmRsZXIg
KGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TaWdfQWN0aW9u
ICpuZXdfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9TaWdfQWN0
aW9uICpvbGRfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaWdr
ZXkgPSAtMSk7CgoKCiAgc3RhdGljIGludCBzaWdfcGVuZGluZyAodm9pZCk7CgoKICBzdGF0aWMg
dm9pZCBzaWdfcGVuZGluZyAoaW50KTsKCgoKCiAgdmlydHVhbCBBQ0VfRXZlbnRfSGFuZGxlciAq
aGFuZGxlciAoaW50IHNpZ251bSk7CgoKCiAgdmlydHVhbCBBQ0VfRXZlbnRfSGFuZGxlciAqaGFu
ZGxlciAoaW50IHNpZ251bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfRXZlbnRfSGFuZGxlciAqKTsKCgoKCgoKICBzdGF0aWMgdm9pZCBkaXNwYXRjaCAoaW50LCBz
aWdpbmZvX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgdWNvbnRleHRfdCAqKTsKCgogIHZv
aWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoK
CgoKCgogIHN0YXRpYyBBQ0VfRXZlbnRfSGFuZGxlciAqaGFuZGxlcl9pIChpbnQgc2lnbnVtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZlbnRfSGFuZGxlciAq
KTsKIyAzNDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9T
aWduYWwuaCIKICBzdGF0aWMgaW50IHJlZ2lzdGVyX2hhbmRsZXJfaSAoaW50IHNpZ251bSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0V2ZW50X0hhbmRsZXIgKm5ld19zaCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rpb24gKm5ld19kaXNw
ID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0V2ZW50X0hhbmRsZXIg
KipvbGRfc2ggPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfU2lnX0Fj
dGlvbiAqb2xkX2Rpc3AgPSAwKTsKCgogIHN0YXRpYyBpbnQgaW5fcmFuZ2UgKGludCBzaWdudW0p
OwoKCiAgc3RhdGljIHNpZ19hdG9taWNfdCBzaWdfcGVuZGluZ187Cgpwcml2YXRlOgoKCiAgc3Rh
dGljIEFDRV9FdmVudF9IYW5kbGVyICpzaWduYWxfaGFuZGxlcnNfWzY0XTsKfTsKCgoKCgoKCmNs
YXNzIEFDRV9TaWdfQWRhcHRlciA6IHB1YmxpYyBBQ0VfRXZlbnRfSGFuZGxlcgp7CnB1YmxpYzoK
ICBBQ0VfU2lnX0FkYXB0ZXIgKEFDRV9TaWdfQWN0aW9uICYsIGludCBzaWdrZXkpOwogIEFDRV9T
aWdfQWRhcHRlciAoQUNFX0V2ZW50X0hhbmRsZXIgKiwgaW50IHNpZ2tleSk7CiAgQUNFX1NpZ19B
ZGFwdGVyIChBQ0VfU2lnX0hhbmRsZXJfRXgsIGludCBzaWdrZXkgPSAwKTsKICB+QUNFX1NpZ19B
ZGFwdGVyICh2b2lkKTsKCgoKICBpbnQgc2lna2V5ICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IGhh
bmRsZV9zaWduYWwgKGludCwgc2lnaW5mb190ICosIHVjb250ZXh0X3QgKik7Cgpwcml2YXRlOgoK
ICBpbnQgc2lna2V5XzsKCgogIGVudW0KICB7CgogICAgQUNFX0hBTkRMRVIsCgogICAgU0lHX0FD
VElPTiwKCiAgICBDX0ZVTkNUSU9OCiAgfSB0eXBlXzsKCgoKCiAgQUNFX1NpZ19BY3Rpb24gc2Ff
OwoKCiAgQUNFX0V2ZW50X0hhbmRsZXIgKmVoXzsKCgogIEFDRV9TaWdfSGFuZGxlcl9FeCBzaWdf
ZnVuY187Cn07CiMgNDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvU2lnbmFsLmgiCmNsYXNzIEFDRV9TaWdfSGFuZGxlcnMgOiBwdWJsaWMgQUNFX1NpZ19I
YW5kbGVyCnsKcHVibGljOgoKCgoKCgoKICB2aXJ0dWFsIGludCByZWdpc3Rlcl9oYW5kbGVyIChp
bnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9FdmVudF9IYW5k
bGVyICpuZXdfc2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1NpZ19BY3Rp
b24gKm5ld19kaXNwID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfRXZl
bnRfSGFuZGxlciAqKm9sZF9zaCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX1NpZ19BY3Rpb24gKm9sZF9kaXNwID0gMCk7CiMgNDUxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiCiAgdmlydHVhbCBpbnQgcmVtb3Zl
X2hhbmRsZXIgKGludCBzaWdudW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9T
aWdfQWN0aW9uICpuZXdfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9TaWdfQWN0aW9uICpvbGRfZGlzcCA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBzaWdrZXkgPSAtMSk7CgoKCgoKICB2aXJ0dWFsIEFDRV9FdmVudF9IYW5kbGVyICpoYW5k
bGVyIChpbnQgc2lnbnVtKTsKCgoKCgoKICB2aXJ0dWFsIEFDRV9FdmVudF9IYW5kbGVyICpoYW5k
bGVyIChpbnQgc2lnbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9FdmVudF9IYW5kbGVyICopOwoKCgoKCgogIHN0YXRpYyB2b2lkIGRpc3BhdGNoIChpbnQgc2ln
bnVtLCBzaWdpbmZvX3QgKiwgdWNvbnRleHRfdCAqKTsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u
c3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRlOgoKCgoKCiAgc3RhdGljIGludCBzaWdr
ZXlfOwoKCgogIHN0YXRpYyBpbnQgdGhpcmRfcGFydHlfc2lnX2hhbmRsZXJfOwp9OwojIDUwOSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaWduYWwu
aSIgMQoKCgppbmxpbmUKQUNFX1NpZ19TZXQ6OkFDRV9TaWdfU2V0IChzaWdzZXRfdCAqc3MpCgp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChzcyA9PSAw
KQogICAgQUNFX09TOjpzaWdmaWxsc2V0ICgmdGhpcy0+c2lnc2V0Xyk7CiAgZWxzZQoKICAgIHRo
aXMtPnNpZ3NldF8gPSAqc3M7Cn0KCmlubGluZQpBQ0VfU2lnX1NldDo6QUNFX1NpZ19TZXQgKGlu
dCBmaWxsKQoKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBp
ZiAoZmlsbCkKICAgIEFDRV9PUzo6c2lnZmlsbHNldCAoJnRoaXMtPnNpZ3NldF8pOwogIGVsc2UK
ICAgIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZ0aGlzLT5zaWdzZXRfKTsKfQoKaW5saW5lCkFDRV9T
aWdfU2V0OjpBQ0VfU2lnX1NldCAoQUNFX1NpZ19TZXQgKnNzKQoKewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAoc3MgPT0gMCkKICAgIEFDRV9PUzo6c2ln
ZmlsbHNldCAoJnRoaXMtPnNpZ3NldF8pOwogIGVsc2UKICAgIHRoaXMtPnNpZ3NldF8gPSBzcy0+
c2lnc2V0XzsKfQoKaW5saW5lCkFDRV9TaWdfU2V0Ojp+QUNFX1NpZ19TZXQgKHZvaWQpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgQUNFX09TOjpzaWdlbXB0
eXNldCAoJnRoaXMtPnNpZ3NldF8pOwp9CgppbmxpbmUgaW50CkFDRV9TaWdfU2V0OjplbXB0eV9z
ZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0
dXJuIEFDRV9PUzo6c2lnZW1wdHlzZXQgKCZ0aGlzLT5zaWdzZXRfKTsKfQoKaW5saW5lIGludApB
Q0VfU2lnX1NldDo6ZmlsbF9zZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjpzaWdmaWxsc2V0ICgmdGhpcy0+c2lnc2V0Xyk7
Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19TZXQ6OnNpZ19hZGQgKGludCBzaWdubykKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c2lnYWRkc2V0
ICgmdGhpcy0+c2lnc2V0Xywgc2lnbm8pOwp9CgppbmxpbmUgaW50CkFDRV9TaWdfU2V0OjpzaWdf
ZGVsIChpbnQgc2lnbm8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiBBQ0VfT1M6OnNpZ2RlbHNldCAoJnRoaXMtPnNpZ3NldF8sIHNpZ25vKTsKfQoKaW5s
aW5lIGludApBQ0VfU2lnX1NldDo6aXNfbWVtYmVyIChpbnQgc2lnbm8pIGNvbnN0CnsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c2lnaXNt
ZW1iZXIgKGNvbnN0X2Nhc3Q8c2lnc2V0X3QgKj4gKCZ0aGlzLT5zaWdzZXRfKSwgc2lnbm8pOwp9
CgppbmxpbmUKQUNFX1NpZ19TZXQ6Om9wZXJhdG9yIHNpZ3NldF90ICoodm9pZCkKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuICZ0aGlz
LT5zaWdzZXRfOwp9CgppbmxpbmUgc2lnc2V0X3QKQUNFX1NpZ19TZXQ6OnNpZ3NldCAodm9pZCkg
Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhp
cy0+c2lnc2V0XzsKfQoKaW5saW5lCkFDRV9TaWdfQWN0aW9uOjp+QUNFX1NpZ19BY3Rpb24gKHZv
aWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0K
CmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OmZsYWdzICh2b2lkKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnNhXy5zYV9mbGFnczsKfQoK
aW5saW5lIHZvaWQKQUNFX1NpZ19BY3Rpb246OmZsYWdzIChpbnQgZmxhZ3MpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5zYV8uc2FfZmxhZ3MgPSBmbGFn
czsKfQoKaW5saW5lIHNpZ3NldF90ICoKQUNFX1NpZ19BY3Rpb246Om1hc2sgKHZvaWQpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAmdGhpcy0+c2FfLnNh
X21hc2s7Cn0KCmlubGluZSB2b2lkCkFDRV9TaWdfQWN0aW9uOjptYXNrIChzaWdzZXRfdCAqc3Mp
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChzcyAhPSAwKQog
ICAgdGhpcy0+c2FfLnNhX21hc2sgPSAqc3M7Cn0KCmlubGluZSB2b2lkCkFDRV9TaWdfQWN0aW9u
OjptYXNrIChBQ0VfU2lnX1NldCAmc3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIHRoaXMtPnNhXy5zYV9tYXNrID0gc3Muc2lnc2V0ICgpOwp9CgppbmxpbmUgQUNF
X1NpZ25hbEhhbmRsZXIKQUNFX1NpZ19BY3Rpb246OmhhbmRsZXIgKHZvaWQpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfU2lnbmFsSGFuZGxl
ciAodGhpcy0+c2FfLl9fc2lnYWN0aW9uX2hhbmRsZXIuc2FfaGFuZGxlcik7Cn0KCmlubGluZSB2
b2lkCkFDRV9TaWdfQWN0aW9uOjpoYW5kbGVyIChBQ0VfU2lnbmFsSGFuZGxlciBoYW5kbGVyKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgdGhpcy0+c2FfLl9f
c2lnYWN0aW9uX2hhbmRsZXIuc2FfaGFuZGxlciA9IEFDRV9TaWduYWxIYW5kbGVyViAoaGFuZGxl
cik7CgoKCn0KIyAxNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TaWduYWwuaSIKaW5saW5lIHZvaWQKQUNFX1NpZ19BY3Rpb246OnNldCAoc3RydWN0IHNp
Z2FjdGlvbiAqc2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhp
cy0+c2FfID0gKnNhOwp9CgppbmxpbmUgc3RydWN0IHNpZ2FjdGlvbiAqCkFDRV9TaWdfQWN0aW9u
OjpnZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0
dXJuICZ0aGlzLT5zYV87Cn0KCmlubGluZQpBQ0VfU2lnX0FjdGlvbjo6b3BlcmF0b3IgQUNFX1NJ
R0FDVElPTiAqICgpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgcmV0dXJuICZ0aGlzLT5zYV87Cn0KCmlubGluZQpBQ0VfU2lnX0Fj
dGlvbjo6QUNFX1NpZ19BY3Rpb24gKGNvbnN0IEFDRV9TaWdfQWN0aW9uICZzKQoKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICp0aGlzID0gczsKfQoK
aW5saW5lIGludApBQ0VfU2lnX0FjdGlvbjo6cmVnaXN0ZXJfYWN0aW9uIChpbnQgc2lnbnVtLCBB
Q0VfU2lnX0FjdGlvbiAqb2FjdGlvbikKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICBzdHJ1Y3Qgc2lnYWN0aW9uICpzYSA9IG9hY3Rpb24gPT0gMCA/
IDAgOiBvYWN0aW9uLT5nZXQgKCk7CgogIHJldHVybiBBQ0VfT1M6OnNpZ2FjdGlvbiAoc2lnbnVt
LCAmdGhpcy0+c2FfLCBzYSk7Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OnJldHJpZXZl
X2FjdGlvbiAoaW50IHNpZ251bSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX09TOjpzaWdhY3Rpb24gKHNpZ251bSwgMCwgJnRo
aXMtPnNhXyk7Cn0KCmlubGluZSBpbnQKQUNFX1NpZ19BY3Rpb246OnJlc3RvcmVfYWN0aW9uIChp
bnQgc2lnbnVtLCBBQ0VfU2lnX0FjdGlvbiAmb2FjdGlvbikKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHRoaXMtPnNhXyA9ICpvYWN0aW9uLmdldCAo
KTsKICByZXR1cm4gQUNFX09TOjpzaWdhY3Rpb24gKHNpZ251bSwgJnRoaXMtPnNhXywgMCk7Cn0K
CgoKaW5saW5lCkFDRV9TaWdfR3VhcmQ6OkFDRV9TaWdfR3VhcmQgKEFDRV9TaWdfU2V0ICptYXNr
KQogIDogb21hc2tfICgpCnsKCgoKCgoKICBpZiAobWFzayA9PSAwKQogICAgewoKCgoKCiAgICAg
IEFDRV9PUzo6dGhyX3NpZ3NldG1hc2sgKDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFDRV9PU19PYmplY3RfTWFuYWdlcjo6ZGVmYXVsdF9tYXNrICgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc2lnc2V0X3QgKikgdGhpcy0+b21hc2tfKTsKCiAgICB9CiAgZWxzZQoK
CgoKCgogICAgQUNFX09TOjp0aHJfc2lnc2V0bWFzayAoMCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzaWdzZXRfdCAqKSAqbWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
aWdzZXRfdCAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+b21hc2tfKTsKCgp9
CgoKCmlubGluZQpBQ0VfU2lnX0d1YXJkOjp+QUNFX1NpZ19HdWFyZCAodm9pZCkKewoKCgoKCgoK
ICBBQ0VfT1M6OnRocl9zaWdzZXRtYXNrICgyLAogICAgICAgICAgICAgICAgICAgICAgICAgIChz
aWdzZXRfdCAqKSB0aGlzLT5vbWFza18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CgoK
fQojIDI5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1Np
Z25hbC5pIgppbmxpbmUgaW50CkFDRV9TaWdfSGFuZGxlcjo6aW5fcmFuZ2UgKGludCBzaWdudW0p
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHNp
Z251bSA+IDAgJiYgc2lnbnVtIDwgNjQ7Cn0KCmlubGluZQpBQ0VfU2lnX0FkYXB0ZXI6On5BQ0Vf
U2lnX0FkYXB0ZXIgKHZvaWQpCnsKfQojIDUxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1NpZ25hbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNTEzICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2lnbmFsLmgiIDIKIyAyNSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiIDIK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01h
cC5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9NZW1fTWFwLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9NZW1fTWFwLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL0FDRS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1fTWFwLmgiIDIKIyAzMiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbV9NYXAuaCIKY2xhc3MgQUNFX01lbV9N
YXAKewpwdWJsaWM6CgoKCiAgQUNFX01lbV9NYXAgKHZvaWQpOwoKCgogIEFDRV9NZW1fTWFwIChB
Q0VfSEFORExFIGhhbmRsZSwKICAgICAgICAgICAgICAgaW50IGxlbmd0aCA9IC0xLAogICAgICAg
ICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAgICAgICAgICAgaW50IHNoYXJlID0g
MHgwMiwKICAgICAgICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgICAgIG9mZl90
IG9mZnNldCA9IDAsCiAgICAgICAgICAgICAgIGludCBzYSA9IDApOwoKCiAgQUNFX01lbV9NYXAg
KGNvbnN0IEFDRV9UQ0hBUiAqZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGludCBsZW4gPSAtMSwK
ICAgICAgICAgICAgICAgaW50IGZsYWdzID0gMDIgfCAwMTAwLAogICAgICAgICAgICAgICBpbnQg
bW9kZSA9IDA2NDQsCiAgICAgICAgICAgICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAg
ICAgICAgICBpbnQgc2hhcmUgPSAweDAyLAogICAgICAgICAgICAgICB2b2lkICphZGRyID0gMCwK
ICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0gMCwKICAgICAgICAgICAgICAgaW50IHNhID0g
MCk7CgoKCiAgaW50IG1hcCAoQUNFX0hBTkRMRSBoYW5kbGUsCiAgICAgICAgICAgaW50IGxlbmd0
aCA9IC0xLAogICAgICAgICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAgICAgIGludCBz
aGFyZSA9IDB4MDIsCiAgICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgb2ZmX3Qg
b2Zmc2V0ID0gMCwKICAgICAgICAgICBpbnQgc2EgPSAwKTsKCgogIGludCBtYXAgKGludCBsZW5n
dGggPSAtMSwKICAgICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAgICAgICBpbnQg
c2hhcmUgPSAweDAyLAogICAgICAgICAgIHZvaWQgKmFkZHIgPSAwLAogICAgICAgICAgIG9mZl90
IG9mZnNldCA9IDAsCiAgICAgICAgICAgaW50IHNhID0gMCk7CgoKICBpbnQgbWFwIChjb25zdCBB
Q0VfVENIQVIgKmZpbGVuYW1lLAogICAgICAgICAgIGludCBsZW4gPSAtMSwKICAgICAgICAgICBp
bnQgZmxhZ3MgPSAwMiB8IDAxMDAsCiAgICAgICAgICAgaW50IG1vZGUgPSAwNjQ0LAogICAgICAg
ICAgIGludCBwcm90ID0gKDB4MXwweDIpLAogICAgICAgICAgIGludCBzaGFyZSA9IDB4MDIsCiAg
ICAgICAgICAgdm9pZCAqYWRkciA9IDAsCiAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0ID0gMCwKICAg
ICAgICAgICBpbnQgc2EgPSAwKTsKCgogIH5BQ0VfTWVtX01hcCAodm9pZCk7CgoKICBpbnQgb3Bl
biAoY29uc3QgQUNFX1RDSEFSICpmaWxlbmFtZSwKICAgICAgICAgICAgaW50IGZsYWdzID0gMDIg
fCAwMTAwLAogICAgICAgICAgICBpbnQgbW9kZSA9IDA2NDQsCiAgICAgICAgICAgIGludCBzYSA9
IDApOwoKCiAgaW50IGNsb3NlICh2b2lkKTsKCgogIGludCBjbG9zZV9oYW5kbGUgKHZvaWQpOwoK
CgoKCgogIGludCBjbG9zZV9maWxlbWFwcGluZ19oYW5kbGUgKHZvaWQpOwoKCgogIGludCBvcGVy
YXRvciAoKSAodm9pZCAqJmFkZHIpOwoKCiAgdm9pZCAqYWRkciAodm9pZCkgY29uc3Q7CgoKCiAg
c2l6ZV90IHNpemUgKHZvaWQpIGNvbnN0OwoKCiAgaW50IHVubWFwIChpbnQgbGVuID0gLTEpOwoK
CiAgaW50IHVubWFwICh2b2lkICphZGRyLCBpbnQgbGVuKTsKCgoKCgoKICBpbnQgc3luYyAoc3Np
emVfdCBsZW4gPSAtMSwgaW50IGZsYWdzID0gNCk7CgoKCiAgaW50IHN5bmMgKHZvaWQgKmFkZHIs
IHNpemVfdCBsZW4sIGludCBmbGFncyA9IDQpOwoKCgoKCgogIGludCBwcm90ZWN0IChzc2l6ZV90
IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgaW50IHByb3RlY3QgKHZvaWQg
KmFkZHIsIHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKCgogIGludCByZW1vdmUg
KHZvaWQpOwoKCiAgaW50IGFkdmlzZSAoaW50IGJlaGF2aW9yLCBpbnQgbGVuID0gLTEpOwoKCiAg
QUNFX0hBTkRMRSBoYW5kbGUgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1RDSEFSICpmaWxl
bmFtZSAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0
IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgdm9pZCAqYmFzZV9hZGRyXzsKCgogIEFDRV9UQ0hBUiBm
aWxlbmFtZV9bNDA5NSArIDFdOwoKCiAgc2l6ZV90IGxlbmd0aF87CgoKICBBQ0VfSEFORExFIGhh
bmRsZV87CgoKICBBQ0VfSEFORExFIGZpbGVfbWFwcGluZ187CiMgMTkyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01hcC5oIgogIGludCBjbG9zZV9o
YW5kbGVfOwoKCgogIGludCBtYXBfaXQgKEFDRV9IQU5ETEUgaGFuZGxlLAogICAgICAgICAgICAg
IGludCBsZW4gPSAtMSwKICAgICAgICAgICAgICBpbnQgcHJvdCA9ICgweDF8MHgyKSwKICAgICAg
ICAgICAgICBpbnQgc2hhcmUgPSAweDAxLAogICAgICAgICAgICAgIHZvaWQgKmFkZHIgPSAwLAog
ICAgICAgICAgICAgIG9mZl90IG9mZnNldCA9IDAsCiAgICAgICAgICAgICAgaW50IHNhID0gMCk7
CgoKICBBQ0VfTWVtX01hcCAoY29uc3QgQUNFX01lbV9NYXAgJik7CiAgdm9pZCBvcGVyYXRvciA9
IChjb25zdCBBQ0VfTWVtX01hcCAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1fTWFwLmkiIDEKCgoKaW5saW5lIEFDRV9IQU5ETEUK
QUNFX01lbV9NYXA6OmhhbmRsZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGFuZGxlXzsKfQoKCgppbmxpbmUgY29uc3Qg
QUNFX1RDSEFSICoKQUNFX01lbV9NYXA6OmZpbGVuYW1lICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu
IHRoaXMtPmZpbGVuYW1lXzsKfQoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6bWFwIChBQ0VfSEFO
RExFIGhhbmRsZSwKICAgICAgICAgICAgICAgICAgaW50IGxlbiwKICAgICAgICAgICAgICAgICAg
aW50IHByb3QsCiAgICAgICAgICAgICAgICAgIGludCBzaGFyZSwKICAgICAgICAgICAgICAgICAg
dm9pZCAqYWRkciwKICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2Zmc2V0LAogICAgICAgICAgICAg
ICAgICBpbnQgc2EpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu
IHRoaXMtPm1hcF9pdCAoaGFuZGxlLCBsZW4sIHByb3QsIHNoYXJlLCBhZGRyLCBvZmZzZXQsIHNh
KTsKfQoKCgppbmxpbmUgaW50CkFDRV9NZW1fTWFwOjptYXAgKGludCBsZW4sCiAgICAgICAgICAg
ICAgICAgIGludCBwcm90LAogICAgICAgICAgICAgICAgICBpbnQgc2hhcmUsCiAgICAgICAgICAg
ICAgICAgIHZvaWQgKmFkZHIsCiAgICAgICAgICAgICAgICAgIG9mZl90IG9mZnNldCwKICAgICAg
ICAgICAgICAgICAgaW50IHNhKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgaWYgKGFkZHIgPT0gMCAmJiB0aGlzLT5iYXNlX2FkZHJfICE9IDAgJiYgdGhpcy0+YmFzZV9h
ZGRyXyAhPSAoKHZvaWQgKikgLTEpKQogICAgewogICAgICBzaGFyZSB8PSAweDEwOwogICAgICBh
ZGRyID0gdGhpcy0+YmFzZV9hZGRyXzsKICAgIH0KICByZXR1cm4gdGhpcy0+bWFwX2l0ICh0aGlz
LT5oYW5kbGUgKCksIGxlbiwgcHJvdCwKICAgICAgICAgICAgICAgICAgICAgICBzaGFyZSwgYWRk
ciwgb2Zmc2V0LCBzYSk7Cn0KCgoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6b3BlcmF0b3IgKCkg
KHZvaWQgKiZhZGRyKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IGlmICh0aGlzLT5iYXNlX2FkZHJfID09ICgodm9pZCAqKSAtMSkpCiAgICByZXR1cm4gLTE7CiAg
ZWxzZQogICAgewogICAgICBhZGRyID0gdGhpcy0+YmFzZV9hZGRyXzsKICAgICAgcmV0dXJuIDA7
CiAgICB9Cn0KCgoKaW5saW5lIHZvaWQgKgpBQ0VfTWVtX01hcDo6YWRkciAodm9pZCkgY29uc3QK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5iYXNl
X2FkZHJfOwp9CgoKCgppbmxpbmUgc2l6ZV90CkFDRV9NZW1fTWFwOjpzaXplICh2b2lkKSBjb25z
dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVu
Z3RoXzsKfQoKaW5saW5lIGludApBQ0VfTWVtX01hcDo6Y2xvc2VfZmlsZW1hcHBpbmdfaGFuZGxl
ICh2b2lkKQp7CiAgaW50IHJlc3VsdCA9IDA7CgogIGlmICh0aGlzLT5maWxlX21hcHBpbmdfICE9
IHRoaXMtPmhhbmRsZV8KICAgICAgJiYgdGhpcy0+ZmlsZV9tYXBwaW5nXyAhPSAtMSkKICAgIHsK
CgogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNsb3NlICh0aGlzLT5maWxlX21hcHBpbmdfKTsKICAg
ICAgdGhpcy0+ZmlsZV9tYXBwaW5nXyA9IC0xOwogICAgfQoKICByZXR1cm4gcmVzdWx0Owp9CgoK
CmlubGluZSBpbnQKQUNFX01lbV9NYXA6OnVubWFwIChpbnQgbGVuKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmNsb3NlX2ZpbGVtYXBwaW5nX2hhbmRsZSAo
KTsKIyAxMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N
ZW1fTWFwLmkiCiAgaWYgKHRoaXMtPmJhc2VfYWRkcl8gIT0gKCh2b2lkICopIC0xKSkKICAgIHsK
ICAgICAgaW50IHJlc3VsdCA9IEFDRV9PUzo6bXVubWFwICh0aGlzLT5iYXNlX2FkZHJfLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA8IDAgPyB0aGlzLT5sZW5ndGhfIDog
bGVuKTsKICAgICAgdGhpcy0+YmFzZV9hZGRyXyA9ICgodm9pZCAqKSAtMSk7CiAgICAgIHJldHVy
biByZXN1bHQ7CiAgICB9CiAgZWxzZQoKCgogICAgcmV0dXJuIDA7Cgp9CgoKCmlubGluZSBpbnQK
QUNFX01lbV9NYXA6OnVubWFwICh2b2lkICphZGRyLCBpbnQgbGVuKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmNsb3NlX2ZpbGVtYXBwaW5nX2hhbmRsZSAo
KTsKIyAxNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N
ZW1fTWFwLmkiCiAgcmV0dXJuIEFDRV9PUzo6bXVubWFwIChhZGRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgbGVuIDwgMCA/IHRoaXMtPmxlbmd0aF8gOiBsZW4pOwoKfQoKCgoKCmlubGluZSBp
bnQKQUNFX01lbV9NYXA6OnN5bmMgKHNzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6Om1zeW5jICh0aGlzLT5i
YXNlX2FkZHJfLAogICAgICAgICAgICAgICAgICAgICAgICBsZW4gPCAwID8gdGhpcy0+bGVuZ3Ro
XyA6IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpOwp9CgoKCgppbmxpbmUgaW50
CkFDRV9NZW1fTWFwOjpzeW5jICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpCnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfT1M6Om1zeW5j
IChhZGRyLCBsZW4sIGZsYWdzKTsKfQoKCgoKCmlubGluZSBpbnQKQUNFX01lbV9NYXA6OnByb3Rl
Y3QgKHNzaXplX3QgbGVuLCBpbnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgaWYgKGxlbiA8IDApCiAgICBsZW4gPSB0aGlzLT5sZW5ndGhfOwogIHJldHVy
biBBQ0VfT1M6Om1wcm90ZWN0ICh0aGlzLT5iYXNlX2FkZHJfLCBsZW4sIHByb3QpOwp9CgoKCgpp
bmxpbmUgaW50CkFDRV9NZW1fTWFwOjpwcm90ZWN0ICh2b2lkICphZGRyLCBzaXplX3QgbGVuLCBp
bnQgcHJvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu
IEFDRV9PUzo6bXByb3RlY3QgKGFkZHIsIGxlbiwgcHJvdCk7Cn0KCgoKaW5saW5lIGludApBQ0Vf
TWVtX01hcDo6YWR2aXNlIChpbnQgYmVoYXZpb3IsIGludCBsZW4pCnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKGxlbiA8IDApCiAgICBsZW4gPSB0aGlzLT5sZW5n
dGhfOwoKICByZXR1cm4gQUNFX09TOjptYWR2aXNlICgoY2FkZHJfdCkgdGhpcy0+YmFzZV9hZGRy
XywKICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmVoYXZpb3IpOwp9CgppbmxpbmUgaW50CkFDRV9NZW1fTWFwOjpjbG9zZV9oYW5kbGUgKHZv
aWQpCnsKICBpbnQgcmVzdWx0ID0gMDsKCiAgaWYgKHRoaXMtPmNsb3NlX2hhbmRsZV8pCiAgICB7
CiAgICAgIHRoaXMtPmNsb3NlX2hhbmRsZV8gPSAwOwogICAgICByZXN1bHQgPSBBQ0VfT1M6OmNs
b3NlICh0aGlzLT5oYW5kbGVfKTsKICAgICAgdGhpcy0+aGFuZGxlXyA9IC0xOwogICAgfQoKICBy
ZXR1cm4gcmVzdWx0Owp9CiMgMjExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWVtX01hcC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjE0ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtX01hcC5oIiAyCiMgMjYgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIiAyCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhv
cmVfQ29tcGxleC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaCIg
MgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1Zf
U2VtYXBob3JlX1NpbXBsZS5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxl
LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L0FDRS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9TaW1wbGUuaCIKY2xhc3MgQUNF
X1NWX1NlbWFwaG9yZV9TaW1wbGUKewpwdWJsaWM6CiAgZW51bQogIHsKICAgIEFDRV9DUkVBVEUg
PSAwMTAwMCwKICAgIEFDRV9FWENMID0gMDIwMDAsCiAgICBBQ0VfT1BFTiA9IDAKICB9OwoKCiAg
QUNFX1NWX1NlbWFwaG9yZV9TaW1wbGUgKHZvaWQpOwogIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxl
IChrZXlfdCBrZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyA9IEFDRV9T
Vl9TZW1hcGhvcmVfU2ltcGxlOjpBQ0VfQ1JFQVRFLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgaW5pdGlhbF92YWx1ZSA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfc2hv
cnQgbnNlbXMgPSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVybXMgPSAwNjQ0
KTsKICBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZSAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGZsYWdzID0gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OkFD
RV9DUkVBVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0g
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBuc2VtcyA9IDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBwZXJtcyA9IDA2NDQpOwogIH5BQ0VfU1ZfU2VtYXBob3Jl
X1NpbXBsZSAodm9pZCk7CgogIGludCBvcGVuIChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAg
ICBpbnQgZmxhZ3MgPSBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6QUNFX0NSRUFURSwKICAgICAg
ICAgICAgaW50IGluaXRpYWxfdmFsdWUgPSAxLAogICAgICAgICAgICB1X3Nob3J0IG5zZW1zID0g
MSwKICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CgoKCiAgaW50IG9wZW4gKGtleV90IGtl
eSwKICAgICAgICAgICAgaW50IGZsYWdzID0gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OkFDRV9D
UkVBVEUsCiAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0gMSwKICAgICAgICAgICAgdV9z
aG9ydCBuc2VtcyA9IDEsCiAgICAgICAgICAgIGludCBwZXJtcyA9IDA2NDQpOwoKCgogIGludCBj
bG9zZSAodm9pZCk7CiMgNzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiCiAgaW50IHJlbW92ZSAodm9pZCkgY29uc3Q7
CgoKCgoKCgogIGludCBhY3F1aXJlICh1X3Nob3J0IG4gPSAwLCBpbnQgZmxhZ3MgPSAwKSBjb25z
dDsKCgogIGludCBhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDApIGNv
bnN0OwoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDAp
IGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmUgKHVfc2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDAp
IGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodV9zaG9ydCBuID0gMCwgaW50IGZsYWdz
ID0gMCkgY29uc3Q7CgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAodV9zaG9ydCBuID0gMCwgaW50
IGZsYWdzID0gMCkgY29uc3Q7CgoKCiAgaW50IHJlbGVhc2UgKHVfc2hvcnQgbiA9IDAsIGludCBm
bGFncyA9IDApIGNvbnN0OwoKCgoKICBpbnQgb3AgKGludCB2YWwsIHVfc2hvcnQgc2VtbnVtID0g
MCwgaW50IGZsYWdzID0gMHgxMDAwKSBjb25zdDsKCgogIGludCBvcCAoc2VtYnVmIG9wX3ZlY1td
LCB1X3Nob3J0IG5zZW1zKSBjb25zdDsKCgogIGludCBjb250cm9sIChpbnQgY21kLCBzZW11biBh
cmcsIHVfc2hvcnQgbiA9IDApIGNvbnN0OwogIGludCBjb250cm9sIChpbnQgY21kLCBpbnQgdmFs
dWUgPSAwLCB1X3Nob3J0IG4gPSAwKSBjb25zdDsKCgogIGludCBnZXRfaWQgKHZvaWQpIGNvbnN0
OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3Rl
Y3RlZDoKCiAga2V5X3Qga2V5XzsKCgogIGludCBpbnRlcm5hbF9pZF87CgoKICBpbnQgc2VtX251
bWJlcl87CiMgMTQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU1ZfU2VtYXBob3JlX1NpbXBsZS5oIgogIGludCBpbml0IChrZXlfdCBrID0gc3RhdGljX2Nh
c3Q8a2V5X3Q+ICgtMSksCiAgICAgICAgICAgIGludCBpID0gLTEpOwogIGtleV90IG5hbWVfMl9r
ZXkgKGNvbnN0IGNoYXIgKm5hbWUpOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9TaW1wbGUuaSIgMQoKCgoKCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDEK
IyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2Vt
YXBob3JlX1NpbXBsZS5pIiAyCgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpj
b250cm9sIChpbnQgY21kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VtdW4g
YXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBuKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1
cm4gdGhpcy0+aW50ZXJuYWxfaWRfID09IC0xID8KICAgIC0xIDogQUNFX09TOjpzZW1jdGwgKHRo
aXMtPmludGVybmFsX2lkXywgbiwgY21kLCBhcmcpOwp9CgoKCgppbmxpbmUgaW50CkFDRV9TVl9T
ZW1hcGhvcmVfU2ltcGxlOjpjbG9zZSAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5pbml0ICgpOwp9CgoKCmlubGlu
ZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6Om9wIChzZW1idWYgb3BfdmVjW10sIHVfc2hv
cnQgbikgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogIHJldHVybiB0aGlzLT5pbnRlcm5hbF9pZF8gPT0gLTEKICAgID8gLTEgOiBBQ0VfT1M6OnNl
bW9wICh0aGlzLT5pbnRlcm5hbF9pZF8sIG9wX3ZlYywgbik7Cn0KCgoKCgppbmxpbmUgaW50CkFD
RV9TVl9TZW1hcGhvcmVfU2ltcGxlOjphY3F1aXJlICh1X3Nob3J0IG4sIGludCBmbGFncykgY29u
c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
cmV0dXJuIHRoaXMtPm9wICgtMSwgbiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1h
cGhvcmVfU2ltcGxlOjphY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNFX1NWX1Nl
bWFwaG9yZV9TaW1wbGU6OmFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25z
dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+YWNxdWlyZSAobiwgZmxhZ3MpOwp9CgoKCmlubGluZSBpbnQKQUNF
X1NWX1NlbWFwaG9yZV9TaW1wbGU6OnRyeWFjcXVpcmUgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBj
b25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+b3AgKC0xLCBuLCBmbGFncyB8IDA0MDAwKTsKfQoKCgppbmxpbmUg
aW50CkFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjp0cnlhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwg
aW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT50cnlhY3F1aXJlIChuLCBmbGFncyk7
Cn0KCgoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6dHJ5YWNxdWlyZV93cml0
ZSAodV9zaG9ydCBuLCBpbnQgZmxhZ3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT50cnlhY3F1
aXJlIChuLCBmbGFncyk7Cn0KCgoKCmlubGluZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6
OnJlbGVhc2UgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+b3AgKDEsIG4s
IGZsYWdzKTsKfQoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6Z2V0X2lkICh2
b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIHJldHVybiB0aGlzLT5pbnRlcm5hbF9pZF87Cn0KIyAxNTUgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0
LmgiIDEKIyAxNTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9TVl9TZW1hcGhvcmVfU2ltcGxlLmgiIDIKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9Db21wbGV4LmgiIDIKIyA1MiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NWX1NlbWFwaG9yZV9D
b21wbGV4LmgiCmNsYXNzIEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCA6IHByaXZhdGUgQUNFX1NW
X1NlbWFwaG9yZV9TaW1wbGUKewpwdWJsaWM6CiAgZW51bQogIHsKICAgIEFDRV9DUkVBVEUgPSAw
MTAwMCwKICAgIEFDRV9PUEVOID0gMAogIH07CgoKICBBQ0VfU1ZfU2VtYXBob3JlX0NvbXBsZXgg
KHZvaWQpOwogIEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCAoa2V5X3Qga2V5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGNyZWF0ZSA9IEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6
QUNFX0NSRUFURSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVl
ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiAgQUNFX1NWX1NlbWFw
aG9yZV9Db21wbGV4IChjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGNyZWF0ZSA9IEFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6QUNFX0NSRUFURSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbml0aWFsX3ZhbHVlID0gMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiAgfkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleCAo
dm9pZCk7CgoKCiAgaW50IG9wZW4gKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgIGludCBm
bGFncyA9IEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpBQ0VfQ1JFQVRFLAogICAgICAgICAgICBp
bnQgaW5pdGlhbF92YWx1ZSA9IDEsCiAgICAgICAgICAgIHVfc2hvcnQgbnNlbXMgPSAxLAogICAg
ICAgICAgICBpbnQgcGVybXMgPSAwNjQ0KTsKCgoKICBpbnQgb3BlbiAoa2V5X3Qga2V5LAogICAg
ICAgICAgICBpbnQgZmxhZ3MgPSBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6QUNFX0NSRUFURSwK
ICAgICAgICAgICAgaW50IGluaXRpYWxfdmFsdWUgPSAxLAogICAgICAgICAgICB1X3Nob3J0IG5z
ZW1zID0gMSwKICAgICAgICAgICAgaW50IHBlcm1zID0gMDY0NCk7CiMgOTggIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5o
IgogIGludCBjbG9zZSAodm9pZCk7CgoKCgogIGludCBhY3F1aXJlICh1X3Nob3J0IG4gPSAwLCBp
bnQgZmxhZ3MgPSAwKSBjb25zdDsKCgogIGludCBhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiA9IDAs
IGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IGFjcXVpcmVfd3JpdGUgKHVfc2hvcnQgbiA9
IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmUgKHVfc2hvcnQgbiA9
IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwoKCiAgaW50IHRyeWFjcXVpcmVfcmVhZCAodV9zaG9y
dCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgdHJ5YWNxdWlyZV93cml0ZSAo
dV9zaG9ydCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgcmVsZWFzZSAodV9z
aG9ydCBuID0gMCwgaW50IGZsYWdzID0gMCkgY29uc3Q7CgoKICBpbnQgb3AgKGludCB2YWwsIHVf
c2hvcnQgbiA9IDAsIGludCBmbGFncyA9IDApIGNvbnN0OwogIGludCBvcCAoc2VtYnVmIG9wX3Zl
Y1tdLCB1X3Nob3J0IG4pIGNvbnN0OwoKCiAgaW50IGNvbnRyb2wgKGludCBjbWQsIHNlbXVuIGFy
ZywgdV9zaG9ydCBuID0gMCkgY29uc3Q7CiAgaW50IGNvbnRyb2wgKGludCBjbWQsIGludCB2YWx1
ZSA9IDAsIHVfc2hvcnQgbiA9IDApIGNvbnN0OwoKCiAgdXNpbmcgQUNFX1NWX1NlbWFwaG9yZV9T
aW1wbGU6OmdldF9pZDsKICB1c2luZyBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6cmVtb3ZlOwoK
CiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6
CiAgc3RhdGljIGNvbnN0IGludCBCSUdDT1VOVF87CiAgc3RhdGljIHNlbWJ1ZiBvcF9sb2NrX1sy
XTsKICBzdGF0aWMgc2VtYnVmIG9wX2VuZGNyZWF0ZV9bMl07CiAgc3RhdGljIHNlbWJ1ZiBvcF9v
cGVuX1sxXTsKICBzdGF0aWMgc2VtYnVmIG9wX2Nsb3NlX1szXTsKICBzdGF0aWMgc2VtYnVmIG9w
X3VubG9ja19bMV07Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaSIgMQoKCgoKCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1RyYWNlLmgiIDEKIyA3ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1ZfU2VtYXBob3JlX0Nv
bXBsZXguaSIgMgoKaW5saW5lIGludApBQ0VfU1ZfU2VtYXBob3JlX0NvbXBsZXg6OmFjcXVpcmUg
KHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxl
OjphY3F1aXJlICgodV9zaG9ydCkgbiArIDIsIGZsYWdzKTsKfQoKaW5saW5lIGludApBQ0VfU1Zf
U2VtYXBob3JlX0NvbXBsZXg6OmFjcXVpcmVfcmVhZCAodV9zaG9ydCBuLCBpbnQgZmxhZ3MpIGNv
bnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNF
X1NWX1NlbWFwaG9yZV9Db21wbGV4OjphY3F1aXJlX3dyaXRlICh1X3Nob3J0IG4sIGludCBmbGFn
cykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIHJldHVybiB0aGlzLT5hY3F1aXJlIChuLCBmbGFncyk7Cn0KCmlubGluZSBp
bnQKQUNFX1NWX1NlbWFwaG9yZV9Db21wbGV4Ojp0cnlhY3F1aXJlICh1X3Nob3J0IG4sIGludCBm
bGFncykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIHJldHVybiBBQ0VfU1ZfU2VtYXBob3JlX1NpbXBsZTo6dHJ5YWNxdWlyZSAo
KHVfc2hvcnQpIG4gKyAyLCBmbGFncyk7Cn0KCmlubGluZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9D
b21wbGV4Ojp0cnlhY3F1aXJlX3JlYWQgKHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICByZXR1cm4gdGhpcy0+dHJ5YWNxdWlyZSAobiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9T
Vl9TZW1hcGhvcmVfQ29tcGxleDo6dHJ5YWNxdWlyZV93cml0ZSAodV9zaG9ydCBuLCBpbnQgZmxh
Z3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+dHJ5YWNxdWlyZSAobiwgZmxhZ3MpOwp9Cgpp
bmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6cmVsZWFzZSAodV9zaG9ydCBuLCBp
bnQgZmxhZ3MpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OnJlbGVhc2UgKCh1
X3Nob3J0KSBuICsgMiwgZmxhZ3MpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29t
cGxleDo6b3AgKGludCB2YWwsIHVfc2hvcnQgbiwgaW50IGZsYWdzKSBjb25zdAp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0VfU1ZfU2Vt
YXBob3JlX1NpbXBsZTo6b3AgKHZhbCwgKHVfc2hvcnQpIG4gKyAyLCBmbGFncyk7Cn0KCmlubGlu
ZSBpbnQKQUNFX1NWX1NlbWFwaG9yZV9Db21wbGV4OjpvcCAoc2VtYnVmIG9wX3ZlY1tdLCB1X3No
b3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgcmV0dXJuIEFDRV9TVl9TZW1hcGhvcmVfU2ltcGxlOjpvcCAob3BfdmVjLCAodV9zaG9y
dCkgbiArIDIpOwp9CgppbmxpbmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6Y29udHJv
bCAoaW50IGNtZCwgc2VtdW4gYXJnLCB1X3Nob3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFw
aG9yZV9TaW1wbGU6OmNvbnRyb2wgKGNtZCwgYXJnLCAodV9zaG9ydCkgbiArIDIpOwp9Cgppbmxp
bmUgaW50CkFDRV9TVl9TZW1hcGhvcmVfQ29tcGxleDo6Y29udHJvbCAoaW50IGNtZCwgaW50IHZh
bHVlLCB1X3Nob3J0IG4pIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gQUNFX1NWX1NlbWFwaG9yZV9TaW1wbGU6OmNvbnRy
b2wgKGNtZCwgdmFsdWUsICh1X3Nob3J0KSBuICsgMik7Cn0KIyAxNTIgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TVl9TZW1hcGhvcmVfQ29tcGxleC5oIiAy
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9z
dC5oIiAxCiMgMTU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU1ZfU2VtYXBob3JlX0NvbXBsZXguaCIgMgojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMgoKCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuaCIgMQoj
IDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3Vu
ZGVkX1NldC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIgMgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvY29uZmlnLWFsbC5oIiAxCiMg
MTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmgi
IDIKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0Owp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gY2xhc3MgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I7CnRlbXBsYXRl
IDxjbGFzcyBUPiBjbGFzcyBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjsKdGVtcGxh
dGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9VbmJvdW5kZWRfUXVldWU7CnRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
Y2xhc3MgQUNFX1VuYm91bmRlZF9TdGFjazsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9V
bmJvdW5kZWRfU3RhY2tfSXRlcmF0b3I7CgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIEFD
RV9Ob2RlCnsKcHVibGljOgogIGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Owog
IGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yPFQ+OwogIGZyaWVuZCBj
bGFzcyBBQ0VfVW5ib3VuZGVkX1NldDxUPjsKICBmcmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9T
ZXRfSXRlcmF0b3I8VD47CiAgZnJpZW5kIGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0
ZXJhdG9yPFQ+OwogIGZyaWVuZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1N0YWNrPFQ+OwogIGZyaWVu
ZCBjbGFzcyBBQ0VfVW5ib3VuZGVkX1N0YWNrX0l0ZXJhdG9yPFQ+OwoKCgogIH5BQ0VfTm9kZSAo
dm9pZCk7CgoKcHJpdmF0ZToKCiAgQUNFX05vZGUgKGNvbnN0IFQgJmksIEFDRV9Ob2RlPFQ+ICpu
KTsKICBBQ0VfTm9kZSAoQUNFX05vZGU8VD4gKm4gPSAwLCBpbnQgPSAwKTsKICBBQ0VfTm9kZSAo
Y29uc3QgQUNFX05vZGU8VD4gJm4pOwoKCiAgQUNFX05vZGU8VD4gKm5leHRfOwoKCiAgVCBpdGVt
XzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9Ob2RlLmNwcCIgMQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL05vZGUuaCIgMQojIDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9Ob2RlLmNwcCIgMgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBnZXRf
cmNzaWRfYWNlX05vZGUgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAiTm9kZS5jcHAsdiA0LjEgMjAw
MS8wMy8yNiAyMToxODo1MCBjb3J5YW4gRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lk
X2FjZV9Ob2RlID0gZ2V0X3Jjc2lkX2FjZV9Ob2RlICggcmNzaWRfYWNlX05vZGUgKSA7CgoKCgog
IHRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfTm9kZTxUPjo6fkFDRV9Ob2RlICh2b2lkKQp7Cn0KCgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX05vZGU8VD46OkFDRV9Ob2RlIChjb25zdCBUICZpLCBBQ0Vf
Tm9kZTxUPiAqbikKICA6IG5leHRfIChuKSwKICAgIGl0ZW1fIChpKQp7Cgp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4KQUNFX05vZGU8VD46OkFDRV9Ob2RlIChBQ0VfTm9kZTxUPiAqbiwgaW50KQogIDog
bmV4dF8gKG4pCnsKCn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfTm9kZTxUPjo6QUNFX05vZGUg
KGNvbnN0IEFDRV9Ob2RlPFQ+ICZzKQogIDogbmV4dF8gKHMubmV4dF8pLAogICAgaXRlbV8gKHMu
aXRlbV8pCnsKCn0KIyA3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL05vZGUuaCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL05vZGUuaCIgMgojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCgoKCgoKY2xhc3Mg
QUNFX0FsbG9jYXRvcjsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9VbmJvdW5k
ZWRfU2V0X0l0ZXJhdG9yCnsKcHVibGljOgoKICBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvciAo
QUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQgPSAwKTsKCgoKCgogIGludCBuZXh0IChU
ICombmV4dF9pdGVtKTsKCgoKICBpbnQgYWR2YW5jZSAodm9pZCk7CgoKCiAgaW50IGZpcnN0ICh2
b2lkKTsKCgogIGludCBkb25lICh2b2lkKSBjb25zdDsKCgogIHZvaWQgZHVtcCAodm9pZCkgY29u
c3Q7CgoKCgogIEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IG9wZXJhdG9yKysgKGludCk7
CgoKICBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiYgb3BlcmF0b3IrKyAodm9pZCk7CgoK
ICBUJiBvcGVyYXRvciogKHZvaWQpOwoKCiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9VbmJv
dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+ICYpIGNvbnN0OwogIGludCBvcGVyYXRvciE9IChjb25zdCBB
Q0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiAmKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7
fTsKCnByaXZhdGU6CgoKICBBQ0VfTm9kZTxUPiAqY3VycmVudF87CgoKICBBQ0VfVW5ib3VuZGVk
X1NldDxUPiAqc2V0XzsKfTsKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIEFDRV9VbmJv
dW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yCnsKcHVibGljOgoKICBBQ0VfVW5ib3VuZGVkX1NldF9D
b25zdF9JdGVyYXRvciAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQgPSAw
KTsKCgoKCgogIGludCBuZXh0IChUICombmV4dF9pdGVtKTsKCgoKICBpbnQgYWR2YW5jZSAodm9p
ZCk7CgoKCiAgaW50IGZpcnN0ICh2b2lkKTsKCgogIGludCBkb25lICh2b2lkKSBjb25zdDsKCgog
IHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKCgogIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0
ZXJhdG9yPFQ+IG9wZXJhdG9yKysgKGludCk7CgoKICBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9J
dGVyYXRvcjxUPiYgb3BlcmF0b3IrKyAodm9pZCk7CgoKICBUJiBvcGVyYXRvciogKHZvaWQpOwoK
CiAgaW50IG9wZXJhdG9yPT0gKGNvbnN0IEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9y
PFQ+ICYpIGNvbnN0OwogIGludCBvcGVyYXRvciE9IChjb25zdCBBQ0VfVW5ib3VuZGVkX1NldF9D
b25zdF9JdGVyYXRvcjxUPiAmKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6
CgoKICBBQ0VfTm9kZTxUPiAqY3VycmVudF87CgoKICBjb25zdCBBQ0VfVW5ib3VuZGVkX1NldDxU
PiAqc2V0XzsKfTsKIyAxNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBQ0VfVW5i
b3VuZGVkX1NldAp7CnB1YmxpYzoKICBmcmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9TZXRfSXRl
cmF0b3I8VD47CiAgZnJpZW5kIGNsYXNzIEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9y
PFQ+OwoKCiAgdHlwZWRlZiBBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiBJVEVSQVRPUjsK
ICB0eXBlZGVmIEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IGl0ZXJhdG9yOwogIHR5cGVk
ZWYgQUNFX1VuYm91bmRlZF9TZXRfQ29uc3RfSXRlcmF0b3I8VD4gQ09OU1RfSVRFUkFUT1I7CiAg
dHlwZWRlZiBBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPiBjb25zdF9pdGVyYXRv
cjsKCgoKCiAgQUNFX1VuYm91bmRlZF9TZXQgKEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoK
ICBBQ0VfVW5ib3VuZGVkX1NldCAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJik7CgoKICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJik7CgoKICB+QUNFX1Vu
Ym91bmRlZF9TZXQgKHZvaWQpOwoKCgoKICBpbnQgaXNfZW1wdHkgKHZvaWQpIGNvbnN0OwoKCiAg
aW50IGlzX2Z1bGwgKHZvaWQpIGNvbnN0OwojIDE5NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuaCIKICBpbnQgaW5zZXJ0IChjb25z
dCBUICZuZXdfaXRlbSk7CgoKCgoKCiAgaW50IHJlbW92ZSAoY29uc3QgVCAmaXRlbSk7CgoKCiAg
aW50IGZpbmQgKGNvbnN0IFQgJml0ZW0pIGNvbnN0OwoKCiAgc2l6ZV90IHNpemUgKHZvaWQpIGNv
bnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHZvaWQgcmVzZXQgKHZvaWQpOwoK
CiAgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gYmVnaW4gKHZvaWQpOwogIEFDRV9VbmJv
dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+IGVuZCAodm9pZCk7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpw
cml2YXRlOgoKCiAgaW50IGluc2VydF90YWlsIChjb25zdCBUICZpdGVtKTsKCgogIHZvaWQgZGVs
ZXRlX25vZGVzICh2b2lkKTsKCgogIHZvaWQgY29weV9ub2RlcyAoY29uc3QgQUNFX1VuYm91bmRl
ZF9TZXQ8VD4gJik7CgoKICBBQ0VfTm9kZTxUPiAqaGVhZF87CgoKICBzaXplX3QgY3VyX3NpemVf
OwoKCiAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yXzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmlubCIgMQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1NldDxUPjo6aXNfZW1w
dHkgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGVhZF8gPT0gdGhpcy0+aGVhZF8tPm5leHRfOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1NldDxUPjo6aXNfZnVs
bCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIDA7Cn0KIyAyNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiIDEKCgoK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJv
dW5kZWRfU2V0LmgiIDEKIyA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIgMQojIDggIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmNwcCIgMgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNn
LmgiIDEKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
VW5ib3VuZGVkX1NldC5jcHAiIDIKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIgppbmxpbmUgY29uc3QgY2hhciogZ2V0
X3Jjc2lkX2FjZV9VbmJvdW5kZWRfU2V0IChjb25zdCBjaGFyKikgeyByZXR1cm4gIlVuYm91bmRl
ZF9TZXQuY3BwLHYgNC4yIDIwMDEvMDMvMjcgMDc6NTA6MTAgZG9jY3ZzIEV4cCIgOyB9IHN0YXRp
YyBjb25zdCBjaGFyKiByY3NpZF9hY2VfVW5ib3VuZGVkX1NldCA9IGdldF9yY3NpZF9hY2VfVW5i
b3VuZGVkX1NldCAoIHJjc2lkX2FjZV9VbmJvdW5kZWRfU2V0ICkgOwoKCgogIHRlbXBsYXRlIDxj
bGFzcyBUPiBzaXplX3QKQUNFX1VuYm91bmRlZF9TZXQ8VD46OnNpemUgKHZvaWQpIGNvbnN0CnsK
CiAgcmV0dXJuIHRoaXMtPmN1cl9zaXplXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0Vf
VW5ib3VuZGVkX1NldDxUPjo6aW5zZXJ0X3RhaWwgKGNvbnN0IFQgJml0ZW0pCnsKCiAgQUNFX05v
ZGU8VD4gKnRlbXA7CgoKICB0aGlzLT5oZWFkXy0+aXRlbV8gPSBpdGVtOwoKCiAgZG8geyB0ZW1w
ID0gKEFDRV9Ob2RlPFQ+KikgdGhpcy0+YWxsb2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9O
b2RlPFQ+KSk7IGlmICh0ZW1wID09IDApIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy
ZXR1cm4gLTE7fSBlbHNlIHsgbmV3ICh0ZW1wKSBBQ0VfTm9kZTxUPiAodGhpcy0+aGVhZF8tPm5l
eHRfKTsgfSB9IHdoaWxlICgwKTsKCgoKCiAgdGhpcy0+aGVhZF8tPm5leHRfID0gdGVtcDsKCgog
IHRoaXMtPmhlYWRfID0gdGVtcDsKCiAgdGhpcy0+Y3VyX3NpemVfKys7CiAgcmV0dXJuIDA7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpyZXNldCAodm9p
ZCkKewogICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9TZXQ8VD46OmR1bXAgKHZvaWQp
IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBk
byB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cg
KmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9z
ZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3Vu
ZGVkX1NldC5jcHAiLCA2NiwgMCwgX19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcs
ICJcbj09PT1cbiglUHwldHwleCkiLCB0aGlzKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19h
Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB
Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3Bw
IiwgNjcsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5oZWFkXyA9
ICV1IiwgdGhpcy0+aGVhZF8pOyB9IHdoaWxlICgwKTsKICBkbyB7IGludCBfX2FjZV9lcnJvciA9
IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn
OjppbnN0YW5jZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiLCA2OCwgMCwg
X19hY2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbmhlYWRfLT5uZXh0XyA9ICV1
IiwgdGhpcy0+aGVhZF8tPm5leHRfKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJy
b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n
X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgNjks
IDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5jdXJfc2l6ZV8gPSAl
ZFxuIiwgdGhpcy0+Y3VyX3NpemVfKTsgfSB3aGlsZSAoMCk7CgogIFQgKml0ZW0gPSAwOwoKICBz
aXplX3QgY291bnQgPSAxOwoKCiAgZm9yIChBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPiBp
dGVyICgqKEFDRV9VbmJvdW5kZWRfU2V0PFQ+ICopIHRoaXMpOwogICAgICAgaXRlci5uZXh0IChp
dGVtKSAhPSAwOwogICAgICAgaXRlci5hZHZhbmNlICgpKQogICAgZG8geyBpbnQgX19hY2VfZXJy
b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n
X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgNzks
IDAsIF9fYWNlX2Vycm9yKTsgYWNlX19fLT5sb2cgKExNX0RFQlVHLCAiY291bnQgPSAlZFxuIiwg
Y291bnQrKyk7IH0gd2hpbGUgKDApOwoKICBkbyB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5jb25kaXRpb25hbF9zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5jcHAiLCA4MSwgMCwgX19hY2VfZXJy
b3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICI9PT09XG4iKTsgfSB3aGlsZSAoMCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+Ojpjb3B5X25vZGVzIChj
b25zdCBBQ0VfVW5ib3VuZGVkX1NldDxUPiAmdXMpCnsKICBmb3IgKEFDRV9Ob2RlPFQ+ICpjdXJy
ID0gdXMuaGVhZF8tPm5leHRfOwogICAgICAgY3VyciAhPSB1cy5oZWFkXzsKICAgICAgIGN1cnIg
PSBjdXJyLT5uZXh0XykKICAgIHRoaXMtPmluc2VydF90YWlsIChjdXJyLT5pdGVtXyk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpkZWxldGVfbm9kZXMg
KHZvaWQpCnsKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhlYWRfLT5uZXh0XzsKCgoKICB3
aGlsZSAoY3VyciAhPSB0aGlzLT5oZWFkXykKICAgIHsKICAgICAgQUNFX05vZGU8VD4gKnRlbXAg
PSBjdXJyOwogICAgICBjdXJyID0gY3Vyci0+bmV4dF87CiAgICAgIGRvIHsgaWYgKHRlbXApIHsg
KHRlbXApLT5+QUNFX05vZGUgKCk7IHRoaXMtPmFsbG9jYXRvcl8tPmZyZWUgKHRlbXApOyB9IH0g
d2hpbGUgKDApOwoKCgogICAgICB0aGlzLT5jdXJfc2l6ZV8tLTsKICAgIH0KCgogIHRoaXMtPmhl
YWRfLT5uZXh0XyA9IHRoaXMtPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX1VuYm91
bmRlZF9TZXQ8VD46On5BQ0VfVW5ib3VuZGVkX1NldCAodm9pZCkKewoKCiAgdGhpcy0+ZGVsZXRl
X25vZGVzICgpOwoKCiAgZG8geyBpZiAoaGVhZF8pIHsgKGhlYWRfKS0+fkFDRV9Ob2RlICgpOyB0
aGlzLT5hbGxvY2F0b3JfLT5mcmVlIChoZWFkXyk7IH0gfSB3aGlsZSAoMCk7CgoKCiAgdGhpcy0+
aGVhZF8gPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KQUNFX1VuYm91bmRlZF9TZXQ8VD46OkFD
RV9VbmJvdW5kZWRfU2V0IChBQ0VfQWxsb2NhdG9yICphbGxvYykKICA6IGhlYWRfICgwKSwKICAg
IGN1cl9zaXplXyAoMCksCiAgICBhbGxvY2F0b3JfIChhbGxvYykKewoKCiAgaWYgKHRoaXMtPmFs
bG9jYXRvcl8gPT0gMCkKICAgIHRoaXMtPmFsbG9jYXRvcl8gPSBBQ0VfQWxsb2NhdG9yOjppbnN0
YW5jZSAoKTsKCiAgZG8geyB0aGlzLT5oZWFkXyA9IChBQ0VfTm9kZTxUPiopIHRoaXMtPmFsbG9j
YXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9kZTxUPikpOyBpZiAodGhpcy0+aGVhZF8gPT0g
MCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjt9IGVsc2UgeyBuZXcgKHRo
aXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdoaWxlICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+
bmV4dF8gPSB0aGlzLT5oZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRf
U2V0PFQ+OjpBQ0VfVW5ib3VuZGVkX1NldCAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnVz
KQogIDogaGVhZF8gKDApLAogICAgY3VyX3NpemVfICgwKSwKICAgIGFsbG9jYXRvcl8gKHVzLmFs
bG9jYXRvcl8pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgaWYgKHRoaXMtPmFsbG9jYXRvcl8gPT0gMCkKICAgIHRoaXMtPmFsbG9j
YXRvcl8gPSBBQ0VfQWxsb2NhdG9yOjppbnN0YW5jZSAoKTsKCiAgZG8geyB0aGlzLT5oZWFkXyA9
IChBQ0VfTm9kZTxUPiopIHRoaXMtPmFsbG9jYXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9k
ZTxUPikpOyBpZiAodGhpcy0+aGVhZF8gPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g
MTI7IHJldHVybjt9IGVsc2UgeyBuZXcgKHRoaXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdo
aWxlICgwKTsKCgogIHRoaXMtPmhlYWRfLT5uZXh0XyA9IHRoaXMtPmhlYWRfOwogIHRoaXMtPmNv
cHlfbm9kZXMgKHVzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9T
ZXQ8VD46Om9wZXJhdG9yPSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnVzKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBpZiAodGhpcyAh
PSAmdXMpCiAgICB7CiAgICAgIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKICAgICAgdGhpcy0+Y29w
eV9ub2RlcyAodXMpOwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5k
ZWRfU2V0PFQ+OjpmaW5kIChjb25zdCBUICZpdGVtKSBjb25zdAp7CgoKICB0aGlzLT5oZWFkXy0+
aXRlbV8gPSBpdGVtOwoKICBBQ0VfTm9kZTxUPiAqdGVtcCA9IHRoaXMtPmhlYWRfLT5uZXh0XzsK
CgogIHdoaWxlICghKHRlbXAtPml0ZW1fID09IGl0ZW0pKQogICAgdGVtcCA9IHRlbXAtPm5leHRf
OwoKCgogIHJldHVybiB0ZW1wID09IHRoaXMtPmhlYWRfID8gLTEgOiAwOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjppbnNlcnQgKGNvbnN0IFQgJml0ZW0p
CnsKCiAgaWYgKHRoaXMtPmZpbmQgKGl0ZW0pID09IDApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg
ICByZXR1cm4gdGhpcy0+aW5zZXJ0X3RhaWwgKGl0ZW0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW50CkFDRV9VbmJvdW5kZWRfU2V0PFQ+OjpyZW1vdmUgKGNvbnN0IFQgJml0ZW0pCnsKCgoKICB0
aGlzLT5oZWFkXy0+aXRlbV8gPSBpdGVtOwoKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhl
YWRfOwoKICB3aGlsZSAoIShjdXJyLT5uZXh0Xy0+aXRlbV8gPT0gaXRlbSkpCiAgICBjdXJyID0g
Y3Vyci0+bmV4dF87CgogIGlmIChjdXJyLT5uZXh0XyA9PSB0aGlzLT5oZWFkXykKICAgIHJldHVy
biAtMTsKICBlbHNlCiAgICB7CiAgICAgIEFDRV9Ob2RlPFQ+ICp0ZW1wID0gY3Vyci0+bmV4dF87
CgogICAgICBjdXJyLT5uZXh0XyA9IHRlbXAtPm5leHRfOwogICAgICB0aGlzLT5jdXJfc2l6ZV8t
LTsKICAgICAgZG8geyBpZiAodGVtcCkgeyAodGVtcCktPn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxs
b2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3aGlsZSAoMCk7CgoKCiAgICAgIHJldHVybiAwOwog
ICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4K
QUNFX1VuYm91bmRlZF9TZXQ8VD46OmJlZ2luICh2b2lkKQp7CgogIHJldHVybiBBQ0VfVW5ib3Vu
ZGVkX1NldF9JdGVyYXRvcjxUPiAoKnRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1Vu
Ym91bmRlZF9TZXRfSXRlcmF0b3I8VD4KQUNFX1VuYm91bmRlZF9TZXQ8VD46OmVuZCAodm9pZCkK
ewoKICByZXR1cm4gQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gKCp0aGlzLCAxKTsKfQoK
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxU
Pjo6ZHVtcCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5k
ZWRfU2V0X0l0ZXJhdG9yPFQ+OjpBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvciAoQUNFX1VuYm91
bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQpCiAgOiBjdXJyZW50XyAoZW5kID09IDAgPyBzLmhlYWRf
LT5uZXh0XyA6IHMuaGVhZF8gKSwKICAgIHNldF8gKCZzKQp7Cgp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjphZHZhbmNlICh2b2lkKQp7Cgog
IHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8tPm5leHRfOwogIHJldHVybiB0aGlzLT5j
dXJyZW50XyAhPSB0aGlzLT5zZXRfLT5oZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApB
Q0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6Zmlyc3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3Vy
cmVudF8gPSB0aGlzLT5zZXRfLT5oZWFkXy0+bmV4dF87CiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRf
ICE9IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJv
dW5kZWRfU2V0X0l0ZXJhdG9yPFQ+Ojpkb25lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1
cnJlbnRfID09IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFD
RV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhp
cy0+Y3VycmVudF8gPT0gdGhpcy0+c2V0Xy0+aGVhZF8pCiAgICByZXR1cm4gMDsKICBlbHNlCiAg
ICB7CiAgICAgIGl0ZW0gPSAmdGhpcy0+Y3VycmVudF8tPml0ZW1fOwogICAgICByZXR1cm4gMTsK
ICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IEFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+
CkFDRV9VbmJvdW5kZWRfU2V0X0l0ZXJhdG9yPFQ+OjpvcGVyYXRvcisrIChpbnQpCnsKCiAgQUNF
X1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4gcmV0diAoKnRoaXMpOwoKCgogIHRoaXMtPmFkdmFu
Y2UgKCk7CiAgcmV0dXJuIHJldHY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBBQ0VfVW5ib3VuZGVk
X1NldF9JdGVyYXRvcjxUPiYKQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD46Om9wZXJhdG9y
KysgKHZvaWQpCnsKCgoKCiAgdGhpcy0+YWR2YW5jZSAoKTsKICByZXR1cm4gKnRoaXM7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPiBUJgpBQ0VfVW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6b3BlcmF0
b3IqICh2b2lkKQp7CgogIFQgKnJldHYgPSAwOwoKICBpbnQgcmVzdWx0ID0gdGhpcy0+bmV4dCAo
cmV0dik7CiAgZG8geyBpZighKHJlc3VsdCAhPSAwKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf
T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z
dGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL1VuYm91bmRlZF9TZXQuY3BwIiwgMzMzLCAtMSwgX19hY2VfZXJyb3IsIGFj
ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs
bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs
aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJyZXN1bHQgIT0gMCIsIC0x
KTsgfSB9IHdoaWxlICgwKTsKICBkbyB7IH0gd2hpbGUgKCZyZXN1bHQgPT0gMCk7CgogIHJldHVy
biAqcmV0djsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1NldF9JdGVy
YXRvcjxUPjo6b3BlcmF0b3I9PSAoY29uc3QgQUNFX1VuYm91bmRlZF9TZXRfSXRlcmF0b3I8VD4g
JnJocykgY29uc3QKewoKICByZXR1cm4gKHRoaXMtPnNldF8gPT0gcmhzLnNldF8gJiYgdGhpcy0+
Y3VycmVudF8gPT0gcmhzLmN1cnJlbnRfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0Vf
VW5ib3VuZGVkX1NldF9JdGVyYXRvcjxUPjo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1VuYm91bmRl
ZF9TZXRfSXRlcmF0b3I8VD4gJnJocykgY29uc3QKewoKICByZXR1cm4gKHRoaXMtPnNldF8gIT0g
cmhzLnNldF8gfHwgdGhpcy0+Y3VycmVudF8gIT0gcmhzLmN1cnJlbnRfKTsKfQoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPjo6ZHVt
cCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRfU2V0
X0NvbnN0X0l0ZXJhdG9yPFQ+OjpBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvciAoY29u
c3QgQUNFX1VuYm91bmRlZF9TZXQ8VD4gJnMsIGludCBlbmQpCiAgOiBjdXJyZW50XyAoZW5kID09
IDAgPyBzLmhlYWRfLT5uZXh0XyA6IHMuaGVhZF8gKSwKICAgIHNldF8gKCZzKQp7Cgp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+Ojph
ZHZhbmNlICh2b2lkKQp7CgogIHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8tPm5leHRf
OwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5zZXRfLT5oZWFkXzsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPjo6Zmly
c3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3VycmVudF8gPSB0aGlzLT5zZXRfLT5oZWFkXy0+bmV4dF87
CiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfICE9IHRoaXMtPnNldF8tPmhlYWRfOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+Ojpkb25l
ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfID09IHRoaXMtPnNldF8t
PmhlYWRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0
X0l0ZXJhdG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhpcy0+Y3VycmVudF8gPT0g
dGhpcy0+c2V0Xy0+aGVhZF8pCiAgICByZXR1cm4gMDsKICBlbHNlCiAgICB7CiAgICAgIGl0ZW0g
PSAmdGhpcy0+Y3VycmVudF8tPml0ZW1fOwogICAgICByZXR1cm4gMTsKICAgIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IEFDRV9VbmJvdW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+CkFDRV9VbmJv
dW5kZWRfU2V0X0NvbnN0X0l0ZXJhdG9yPFQ+OjpvcGVyYXRvcisrIChpbnQpCnsKCiAgQUNFX1Vu
Ym91bmRlZF9TZXRfQ29uc3RfSXRlcmF0b3I8VD4gcmV0diAoKnRoaXMpOwoKCgogIHRoaXMtPmFk
dmFuY2UgKCk7CiAgcmV0dXJuIHJldHY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBBQ0VfVW5ib3Vu
ZGVkX1NldF9Db25zdF9JdGVyYXRvcjxUPiYKQUNFX1VuYm91bmRlZF9TZXRfQ29uc3RfSXRlcmF0
b3I8VD46Om9wZXJhdG9yKysgKHZvaWQpCnsKCgoKCiAgdGhpcy0+YWR2YW5jZSAoKTsKICByZXR1
cm4gKnRoaXM7Cn0KIyAyNTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9VbmJvdW5kZWRfU2V0LmgiIDIKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjU3ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1NldC5oIiAyCiMgMzEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9v
bC5oIiAyCiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9NZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfU2Jya19NZW1vcnlfUG9vbF9PcHRpb25zCnsKfTsK
CgoKCgoKY2xhc3MgQUNFX1NicmtfTWVtb3J5X1Bvb2wKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0Vf
U2Jya19NZW1vcnlfUG9vbF9PcHRpb25zIE9QVElPTlM7CgoKICBBQ0VfU2Jya19NZW1vcnlfUG9v
bCAoY29uc3QgQUNFX1RDSEFSICpiYWNraW5nX3N0b3JlX25hbWUgPSAwLAogICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBPUFRJT05TICpvcHRpb25zID0gMCk7CgogIHZpcnR1YWwgfkFDRV9T
YnJrX01lbW9yeV9Qb29sICh2b2lkKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmluaXRfYWNxdWlyZSAo
c2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICZyb3Vu
ZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgJmZpcnN0X3RpbWUp
OwoKCgogIHZpcnR1YWwgdm9pZCAqYWNxdWlyZSAoc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcyk7CgoKICB2aXJ0dWFsIGludCByZWxl
YXNlICh2b2lkKTsKCgoKCgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBp
bnQgZmxhZ3MgPSA0KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jICh2b2lkICphZGRyLCBzaXplX3Qg
bGVuLCBpbnQgZmxhZ3MgPSA0KTsKCgoKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0IChzc2l6ZV90
IGxlbiA9IC0xLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKCiAgdmlydHVhbCBpbnQgcHJvdGVj
dCAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QgPSAoMHgxfDB4MikpOwoKCiAgdmly
dHVhbCB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3RydWN0IF9fQWNlIHt9OwoKcHJvdGVj
dGVkOgoKCiAgdmlydHVhbCBzaXplX3Qgcm91bmRfdXAgKHNpemVfdCBuYnl0ZXMpOwp9OwojIDEy
MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Q
b29sLmgiCmNsYXNzIEFDRV9TaGFyZWRfTWVtb3J5X1Bvb2xfT3B0aW9ucwp7CnB1YmxpYzoKCiAg
QUNFX1NoYXJlZF9NZW1vcnlfUG9vbF9PcHRpb25zIChjb25zdCBjaGFyICpiYXNlX2FkZHIgPSAo
KGNoYXIgKikgMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgbWF4X3NlZ21lbnRzID0gNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBmaWxlX3Blcm1zID0gMDY0NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9mZl90IG1pbmltdW1fYnl0ZXMgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IHNlZ21lbnRfc2l6ZSA9IDEwMjQgKiAxMjgpOwoKCiAgY29uc3QgY2hhciAq
YmFzZV9hZGRyXzsKCgogIHNpemVfdCBtYXhfc2VnbWVudHNfOwoKCiAgb2ZmX3QgbWluaW11bV9i
eXRlc187CgoKICBzaXplX3QgZmlsZV9wZXJtc187CgoKICBzaXplX3Qgc2VnbWVudF9zaXplXzsK
fTsKIyAxNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9N
ZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfU2hhcmVkX01lbW9yeV9Qb29sIDogcHVibGljIEFDRV9F
dmVudF9IYW5kbGVyCnsKcHVibGljOgogIHR5cGVkZWYgQUNFX1NoYXJlZF9NZW1vcnlfUG9vbF9P
cHRpb25zIE9QVElPTlM7CgoKICBBQ0VfU2hhcmVkX01lbW9yeV9Qb29sIChjb25zdCBBQ0VfVENI
QVIgKmJhY2tpbmdfc3RvcmVfbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgT1BUSU9OUyAqb3B0aW9ucyA9IDApOwoKICB2aXJ0dWFsIH5BQ0VfU2hhcmVkX01lbW9yeV9Q
b29sICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCAqaW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSk7CgoKCgoKCgogIHZp
cnR1YWwgdm9pZCAqYWNxdWlyZSAoc2l6ZV90IG5ieXRlcywKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcyk7CgoKICB2aXJ0dWFsIGludCByZWxlYXNlICh2b2lk
KTsKCgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0xLCBpbnQgZmxhZ3MgPSA0
KTsKCgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFn
cyA9IDQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHNzaXplX3QgbGVuID0gLTEsIGlu
dCBwcm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0ICh2b2lkICphZGRy
LCBzaXplX3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CgoKICB2aXJ0dWFsIHZvaWQgZHVt
cCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoKICB2aXJ0
dWFsIHNpemVfdCByb3VuZF91cCAoc2l6ZV90IG5ieXRlcyk7CgoKCgoKCiAgdmlydHVhbCBpbnQg
Y29tbWl0X2JhY2tpbmdfc3RvcmVfbmFtZSAoc2l6ZV90IHJvdW5kZWRfYnl0ZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZl90ICZvZmZzZXQpOwoKCiAgc3RydWN0IFNI
TV9UQUJMRQogIHsKICAgIGtleV90IGtleV87CgoKICAgIGludCBzaG1pZF87CgoKICAgIGludCB1
c2VkXzsKCiAgfTsKCgoKCgoKCiAgdm9pZCAqYmFzZV9hZGRyXzsKCgogIHNpemVfdCBmaWxlX3Bl
cm1zXzsKCgogIHNpemVfdCBtYXhfc2VnbWVudHNfOwoKCiAgb2ZmX3QgbWluaW11bV9ieXRlc187
CgoKICBzaXplX3Qgc2VnbWVudF9zaXplXzsKCgogIGtleV90IGJhc2Vfc2htX2tleV87CgoKICB2
aXJ0dWFsIGludCBmaW5kX3NlZyAoY29uc3Qgdm9pZCAqY29uc3Qgc2VhcmNoUHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICBvZmZfdCAmb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgJmNvdW50ZXIpOwoKCiAgdmlydHVhbCBpbnQgaW5fdXNlIChvZmZfdCAmb2Zmc2V0LAog
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICZjb3VudGVyKTsKCgogIEFDRV9TaWdfSGFuZGxl
ciBzaWduYWxfaGFuZGxlcl87CgoKCiAgdmlydHVhbCBpbnQgaGFuZGxlX3NpZ25hbCAoaW50IHNp
Z251bSwgc2lnaW5mb190ICosIHVjb250ZXh0X3QgKik7Cn07CiMgMjgwICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIKY2xhc3MgQUNF
X0xvY2FsX01lbW9yeV9Qb29sX09wdGlvbnMKewp9OwojIDI5MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCmNsYXNzIEFDRV9Mb2Nh
bF9NZW1vcnlfUG9vbAp7CnB1YmxpYzoKICB0eXBlZGVmIEFDRV9Mb2NhbF9NZW1vcnlfUG9vbF9P
cHRpb25zIE9QVElPTlM7CgoKICBBQ0VfTG9jYWxfTWVtb3J5X1Bvb2wgKGNvbnN0IEFDRV9UQ0hB
UiAqYmFja2luZ19zdG9yZV9uYW1lID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX0xvY2FsX01lbW9yeV9Qb29s
ICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCAqaW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSk7CgoKCiAgdmlydHVhbCB2
b2lkICphY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90ICZyb3VuZGVkX2J5dGVzKTsKCgogIHZpcnR1YWwgaW50IHJlbGVhc2UgKHZvaWQpOwoKCgoK
CgogIHZpcnR1YWwgaW50IHN5bmMgKHNzaXplX3QgbGVuID0gLTEsIGludCBmbGFncyA9IDQpOwoK
CgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVfdCBsZW4sIGludCBmbGFncyA9
IDQpOwoKCgoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHNzaXplX3QgbGVuID0gLTEsIGludCBw
cm90ID0gKDB4MXwweDIpKTsKCgoKICB2aXJ0dWFsIGludCBwcm90ZWN0ICh2b2lkICphZGRyLCBz
aXplX3QgbGVuLCBpbnQgcHJvdCA9ICgweDF8MHgyKSk7CiMgMzUxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIKICB2aXJ0dWFsIGlu
dCByZW1hcCAodm9pZCAqYWRkcik7CgoKICB2aXJ0dWFsIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7
CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgogIEFDRV9VbmJvdW5kZWRfU2V0PGNo
YXIgKj4gYWxsb2NhdGVkX2NodW5rc187CgogIHZpcnR1YWwgc2l6ZV90IHJvdW5kX3VwIChzaXpl
X3QgbmJ5dGVzKTsKCgoKfTsKIyAzNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIgpjbGFzcyBBQ0VfTU1BUF9NZW1vcnlfUG9vbF9P
cHRpb25zCnsKcHVibGljOgoKICBBQ0VfTU1BUF9NZW1vcnlfUG9vbF9PcHRpb25zIChjb25zdCB2
b2lkICpiYXNlX2FkZHIgPSAoKGNoYXIgKikgMHg4MDAwMDAwMCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHVzZV9maXhlZF9hZGRyID0gMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgd3JpdGVfZWFjaF9wYWdlID0gMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvZmZfdCBtaW5pbXVtX2J5dGVzID0gMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1X2ludCBmbGFncyA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGd1ZXNzX29uX2ZhdWx0ID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgc2EgPSAwKTsKCgogIGNvbnN0IHZvaWQgKmJhc2VfYWRkcl87CgoKICBpbnQgdXNl
X2ZpeGVkX2FkZHJfOwoKCgogIGludCB3cml0ZV9lYWNoX3BhZ2VfOwoKCiAgb2ZmX3QgbWluaW11
bV9ieXRlc187CgoKICB1X2ludCBmbGFnc187CgoKCgoKCiAgaW50IGd1ZXNzX29uX2ZhdWx0XzsK
CgogIGludCBzYV87Cgp9OwoKCgoKCgoKY2xhc3MgQUNFX01NQVBfTWVtb3J5X1Bvb2wgOiBwdWJs
aWMgQUNFX0V2ZW50X0hhbmRsZXIKewpwdWJsaWM6CiAgdHlwZWRlZiBBQ0VfTU1BUF9NZW1vcnlf
UG9vbF9PcHRpb25zIE9QVElPTlM7CgoKCgogIEFDRV9NTUFQX01lbW9yeV9Qb29sIChjb25zdCBB
Q0VfVENIQVIgKmJhY2tpbmdfc3RvcmVfbmFtZSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX01NQVBfTWVtb3J5
X1Bvb2wgKHZvaWQpOwoKCiAgdmlydHVhbCB2b2lkICppbml0X2FjcXVpcmUgKHNpemVfdCBuYnl0
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAmcm91bmRlZF9ieXRlcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICZmaXJzdF90aW1lKTsKCgoKCgoKCiAg
dmlydHVhbCB2b2lkICphY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICZyb3VuZGVkX2J5dGVzKTsKCgogIHZpcnR1YWwgaW50IHJlbGVhc2UgKHZv
aWQpOwoKCgogIHZpcnR1YWwgaW50IHN5bmMgKHNzaXplX3QgbGVuID0gLTEsIGludCBmbGFncyA9
IDQpOwoKCiAgdmlydHVhbCBpbnQgc3luYyAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IGZs
YWdzID0gNCk7CgoKCgoKCiAgdmlydHVhbCBpbnQgcHJvdGVjdCAoc3NpemVfdCBsZW4gPSAtMSwg
aW50IHByb3QgPSAoMHgxfDB4MikpOwoKCgogIHZpcnR1YWwgaW50IHByb3RlY3QgKHZvaWQgKmFk
ZHIsIHNpemVfdCBsZW4sIGludCBwcm90ID0gKDB4MXwweDIpKTsKIyA0OTAgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZW1vcnlfUG9vbC5oIgogIHZpcnR1
YWwgaW50IHJlbWFwICh2b2lkICphZGRyKTsKCgoKICB2aXJ0dWFsIHZvaWQgKmJhc2VfYWRkciAo
dm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFsIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1
Y3QgX19BY2Uge307Cgpwcm90ZWN0ZWQ6CgoKCiAgdmlydHVhbCBzaXplX3Qgcm91bmRfdXAgKHNp
emVfdCBuYnl0ZXMpOwoKCgogIHZpcnR1YWwgaW50IGNvbW1pdF9iYWNraW5nX3N0b3JlX25hbWUg
KHNpemVfdCByb3VuZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9mZl90ICZtYXBfc2l6ZSk7CgoKICB2aXJ0dWFsIGludCBtYXBfZmlsZSAob2ZmX3Qg
bWFwX3NpemUpOwoKCgogIHZpcnR1YWwgaW50IGhhbmRsZV9zaWduYWwgKGludCBzaWdudW0sIHNp
Z2luZm9fdCAqLCB1Y29udGV4dF90ICopOwoKCiAgQUNFX1NpZ19IYW5kbGVyIHNpZ25hbF9oYW5k
bGVyXzsKCgogIEFDRV9NZW1fTWFwIG1tYXBfOwoKCgoKCgogIHZvaWQgKmJhc2VfYWRkcl87CgoK
ICBpbnQgZmxhZ3NfOwoKCgogIGludCB3cml0ZV9lYWNoX3BhZ2VfOwoKCiAgb2ZmX3QgbWluaW11
bV9ieXRlc187CgoKICBBQ0VfVENIQVIgYmFja2luZ19zdG9yZV9uYW1lX1s0MDk1ICsgMV07CgoK
CgoKCiAgaW50IGd1ZXNzX29uX2ZhdWx0XzsKCgogIGludCBzYV87Cgp9OwojIDU3MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCmNs
YXNzIEFDRV9MaXRlX01NQVBfTWVtb3J5X1Bvb2wgOiBwdWJsaWMgQUNFX01NQVBfTWVtb3J5X1Bv
b2wKewpwdWJsaWM6CgoKCiAgQUNFX0xpdGVfTU1BUF9NZW1vcnlfUG9vbCAoY29uc3QgQUNFX1RD
SEFSICpiYWNraW5nX3N0b3JlX25hbWUgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE9QVElPTlMgKm9wdGlvbnMgPSAwKTsKCiAgdmlydHVhbCB+QUNFX0xpdGVfTU1BUF9N
ZW1vcnlfUG9vbCAodm9pZCk7CgoKICB2aXJ0dWFsIGludCBzeW5jIChzc2l6ZV90IGxlbiA9IC0x
LCBpbnQgZmxhZ3MgPSA0KTsKCgogIHZpcnR1YWwgaW50IHN5bmMgKHZvaWQgKmFkZHIsIHNpemVf
dCBsZW4sIGludCBmbGFncyA9IDQpOwp9OwojIDc0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmkiIDEKCgoKaW5saW5l
CkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6fkFDRV9Mb2NhbF9NZW1vcnlfUG9vbCAodm9pZCkKewp9
CgppbmxpbmUgaW50CkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7
Cn0KCmlubGluZSBpbnQKQUNFX0xvY2FsX01lbW9yeV9Qb29sOjpzeW5jICh2b2lkICosIHNpemVf
dCwgaW50KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
cmV0dXJuIDA7Cn0KCmlubGluZSBpbnQKQUNFX0xvY2FsX01lbW9yeV9Qb29sOjpwcm90ZWN0IChz
c2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApBQ0VfTG9jYWxfTWVtb3J5X1Bvb2w6OnBy
b3RlY3QgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lCkFDRV9NTUFQX01lbW9y
eV9Qb29sOjp+QUNFX01NQVBfTWVtb3J5X1Bvb2wgKHZvaWQpCnsKfQoKaW5saW5lCkFDRV9MaXRl
X01NQVBfTWVtb3J5X1Bvb2w6On5BQ0VfTGl0ZV9NTUFQX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0K
CmlubGluZSBzaXplX3QKQUNFX01NQVBfTWVtb3J5X1Bvb2w6OnJvdW5kX3VwIChzaXplX3QgbmJ5
dGVzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
cmV0dXJuIEFDRTo6cm91bmRfdG9fcGFnZXNpemUgKG5ieXRlcyk7Cn0KCmlubGluZSB2b2lkICoK
QUNFX01NQVBfTWVtb3J5X1Bvb2w6OmJhc2VfYWRkciAodm9pZCkgY29uc3QKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFz
ZV9hZGRyXzsKfQoKCgppbmxpbmUgdm9pZCAqCkFDRV9Mb2NhbF9NZW1vcnlfUG9vbDo6aW5pdF9h
Y3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90ICZyb3VuZGVkX2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICZmaXJzdF90aW1lKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZmlyc3RfdGltZSA9IDE7CiAgcmV0dXJuIHRoaXMt
PmFjcXVpcmUgKG5ieXRlcywgcm91bmRlZF9ieXRlcyk7Cn0KCgoKaW5saW5lIHNpemVfdApBQ0Vf
TG9jYWxfTWVtb3J5X1Bvb2w6OnJvdW5kX3VwIChzaXplX3QgbmJ5dGVzKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiBBQ0U6OnJvdW5k
X3RvX3BhZ2VzaXplIChuYnl0ZXMpOwp9CgoKCgoKaW5saW5lCkFDRV9TaGFyZWRfTWVtb3J5X1Bv
b2w6On5BQ0VfU2hhcmVkX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0KCmlubGluZSBzaXplX3QKQUNF
X1NoYXJlZF9NZW1vcnlfUG9vbDo6cm91bmRfdXAgKHNpemVfdCBuYnl0ZXMpCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChuYnl0ZXMgPCB0
aGlzLT5zZWdtZW50X3NpemVfKQogICAgbmJ5dGVzID0gdGhpcy0+c2VnbWVudF9zaXplXzsKCiAg
cmV0dXJuIEFDRTo6cm91bmRfdG9fcGFnZXNpemUgKG5ieXRlcyk7Cn0KCmlubGluZSBpbnQKQUNF
X1NoYXJlZF9NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiAwOwp9CgppbmxpbmUgaW50
CkFDRV9TaGFyZWRfTWVtb3J5X1Bvb2w6OnN5bmMgKHZvaWQgKiwgc2l6ZV90LCBpbnQpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0K
CmlubGluZSBpbnQKQUNFX1NoYXJlZF9NZW1vcnlfUG9vbDo6cHJvdGVjdCAoc3NpemVfdCwgaW50
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl
dHVybiAwOwp9CgppbmxpbmUgaW50CkFDRV9TaGFyZWRfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHZv
aWQgKiwgc2l6ZV90LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0KCgoKCmlubGluZQpBQ0VfU2Jya19NZW1vcnlfUG9v
bDo6fkFDRV9TYnJrX01lbW9yeV9Qb29sICh2b2lkKQp7Cn0KCgoKaW5saW5lIHZvaWQgKgpBQ0Vf
U2Jya19NZW1vcnlfUG9vbDo6aW5pdF9hY3F1aXJlIChzaXplX3QgbmJ5dGVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgJnJvdW5kZWRfYnl0ZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmZmlyc3RfdGltZSkKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCiAgZmlyc3RfdGlt
ZSA9IDE7CiAgcmV0dXJuIHRoaXMtPmFjcXVpcmUgKG5ieXRlcywgcm91bmRlZF9ieXRlcyk7Cn0K
CgoKaW5saW5lIHNpemVfdApBQ0VfU2Jya19NZW1vcnlfUG9vbDo6cm91bmRfdXAgKHNpemVfdCBu
Ynl0ZXMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICByZXR1cm4gQUNFOjpyb3VuZF90b19wYWdlc2l6ZSAobmJ5dGVzKTsKfQoKCgppbmxpbmUgaW50
CkFDRV9TYnJrX01lbW9yeV9Qb29sOjpyZWxlYXNlICh2b2lkKQp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB
Q0VfU2Jya19NZW1vcnlfUG9vbDo6c3luYyAoc3NpemVfdCwgaW50KQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gMDsKfQoKaW5saW5lIGludApB
Q0VfU2Jya19NZW1vcnlfUG9vbDo6c3luYyAodm9pZCAqLCBzaXplX3QsIGludCkKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0KCmlubGlu
ZSBpbnQKQUNFX1NicmtfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHNzaXplX3QsIGludCkKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIDA7Cn0K
CmlubGluZSBpbnQKQUNFX1NicmtfTWVtb3J5X1Bvb2w6OnByb3RlY3QgKHZvaWQgKiwgc2l6ZV90
LCBpbnQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiAwOwp9CiMgNzQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvTWVtb3J5X1Bvb2wuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDc1MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lbW9yeV9Qb29sLmgiIDIKIyA0MTIgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYWxsb2MuaCIgMgoKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAx
CiMgNDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs
bG9jLmgiIDIKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL01lc3NhZ2VfQmxvY2suaCIgMgoKCmNsYXNzIEFDRV9EYXRhX0Jsb2NrOwpjbGFzcyBBQ0Vf
TG9jazsKY2xhc3MgQUNFX1RpbWVfVmFsdWU7CiMgNTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCmNsYXNzIEFDRV9NZXNzYWdl
X0Jsb2NrCnsKcHVibGljOgogIGZyaWVuZCBjbGFzcyBBQ0VfRGF0YV9CbG9jazsKCiAgZW51bQog
IHsKCgogICAgTUJfREFUQSA9IDB4MDEsCgogICAgTUJfUFJPVE8gPSAweDAyLAoKCgogICAgTUJf
QlJFQUsgPSAweDAzLAoKICAgIE1CX1BBU1NGUCA9IDB4MDQsCgogICAgTUJfRVZFTlQgPSAweDA1
LAoKICAgIE1CX1NJRyA9IDB4MDYsCgogICAgTUJfSU9DVEwgPSAweDA3LAoKICAgIE1CX1NFVE9Q
VFMgPSAweDA4LAoKCgogICAgTUJfSU9DQUNLID0gMHg4MSwKCiAgICBNQl9JT0NOQUsgPSAweDgy
LAoKICAgIE1CX1BDUFJPVE8gPSAweDgzLAoKICAgIE1CX1BDU0lHID0gMHg4NCwKCiAgICBNQl9S
RUFEID0gMHg4NSwKCiAgICBNQl9GTFVTSCA9IDB4ODYsCgogICAgTUJfU1RPUCA9IDB4ODcsCgog
ICAgTUJfU1RBUlQgPSAweDg4LAoKICAgIE1CX0hBTkdVUCA9IDB4ODksCgogICAgTUJfRVJST1Ig
PSAweDhhLAoKICAgIE1CX1BDRVZFTlQgPSAweDhiLAoKCgogICAgTUJfTk9STUFMID0gMHgwMCwK
CiAgICBNQl9QUklPUklUWSA9IDB4ODAsCgogICAgTUJfVVNFUiA9IDB4MjAwCiAgfTsKCiAgdHlw
ZWRlZiBpbnQgQUNFX01lc3NhZ2VfVHlwZTsKICB0eXBlZGVmIHVfbG9uZyBNZXNzYWdlX0ZsYWdz
OwoKICBlbnVtCiAgewoKICAgIERPTlRfREVMRVRFID0gMDEsCgogICAgVVNFUl9GTEFHUyA9IDB4
MTAwMAogIH07CgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKEFDRV9BbGxvY2F0b3IgKm1lc3NhZ2Vf
YmxvY2tfYWxsb2NhdG9yID0gMCk7CgoKCgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKEFDRV9EYXRh
X0Jsb2NrICosCiAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MgPSAwLAog
ICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdlX2Jsb2NrX2FsbG9jYXRv
ciA9IDApOwoKCgoKCgoKICBBQ0VfTWVzc2FnZV9CbG9jayAoY29uc3QgY2hhciAqZGF0YSwKICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSAwLAogICAgICAgICAgICAgICAgICAgICB1
X2xvbmcgcHJpb3JpdHkgPSAwKTsKIyAxNjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgQUNFX01lc3NhZ2VfQmxvY2sgKHNp
emVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9UeXBlIHR5cGUgPSBN
Ql9EQVRBLAogICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCA9IDAs
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEgPSAwLAogICAgICAgICAgICAg
ICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgPSAwLAogICAgICAgICAg
ICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSA9IDAsCiAgICAgICAgICAgICAg
ICAgICAgIHVfbG9uZyBwcmlvcml0eSA9IDAsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD
RV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGltZSA9IEFDRV9UaW1lX1ZhbHVlOjp6ZXJvLAogICAg
ICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSA9IEFD
RV9UaW1lX1ZhbHVlOjptYXhfdGltZSwKICAgICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv
ciAqZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQWxs
b2NhdG9yICptZXNzYWdlX2Jsb2NrX2FsbG9jYXRvciA9IDApOwoKCgoKCgoKICBpbnQgaW5pdCAo
Y29uc3QgY2hhciAqZGF0YSwKICAgICAgICAgICAgc2l6ZV90IHNpemUgPSAwKTsKIyAyMDMgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2Nr
LmgiCiAgaW50IGluaXQgKHNpemVfdCBzaXplLAogICAgICAgICAgICBBQ0VfTWVzc2FnZV9UeXBl
IHR5cGUgPSBNQl9EQVRBLAogICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCA9IDAs
CiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGEgPSAwLAogICAgICAgICAgICBBQ0VfQWxsb2Nh
dG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgPSAwLAogICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2lu
Z19zdHJhdGVneSA9IDAsCiAgICAgICAgICAgIHVfbG9uZyBwcmlvcml0eSA9IDAsCiAgICAgICAg
ICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGltZSA9IEFDRV9UaW1lX1ZhbHVl
Ojp6ZXJvLAogICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSA9
IEFDRV9UaW1lX1ZhbHVlOjptYXhfdGltZSwKICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqZGF0
YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdl
X2Jsb2NrX2FsbG9jYXRvciA9IDApOwoKCgoKCgoKICB2aXJ0dWFsIH5BQ0VfTWVzc2FnZV9CbG9j
ayAodm9pZCk7CgoKCgogIEFDRV9NZXNzYWdlX1R5cGUgbXNnX3R5cGUgKHZvaWQpIGNvbnN0OwoK
CiAgdm9pZCBtc2dfdHlwZSAoQUNFX01lc3NhZ2VfVHlwZSB0eXBlKTsKCgogIGludCBpc19kYXRh
X21zZyAodm9pZCkgY29uc3Q7CgoKCiAgQUNFX01lc3NhZ2VfVHlwZSBtc2dfY2xhc3MgKHZvaWQp
IGNvbnN0OwoKCgoKICBNZXNzYWdlX0ZsYWdzIHNldF9mbGFncyAoTWVzc2FnZV9GbGFncyBtb3Jl
X2ZsYWdzKTsKCgoKICBNZXNzYWdlX0ZsYWdzIGNscl9mbGFncyAoTWVzc2FnZV9GbGFncyBsZXNz
X2ZsYWdzKTsKCgogIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MgKHZvaWQpIGNvbnN0OwojIDI1OCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2su
aCIKICBNZXNzYWdlX0ZsYWdzIHNldF9zZWxmX2ZsYWdzIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVz
c2FnZV9GbGFncyBtb3JlX2ZsYWdzKTsKCgoKICBNZXNzYWdlX0ZsYWdzIGNscl9zZWxmX2ZsYWdz
IChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBsZXNzX2ZsYWdzKTsKCgogIE1lc3Nh
Z2VfRmxhZ3Mgc2VsZl9mbGFncyAodm9pZCkgY29uc3Q7CgoKICB1X2xvbmcgbXNnX3ByaW9yaXR5
ICh2b2lkKSBjb25zdDsKCgogIHZvaWQgbXNnX3ByaW9yaXR5ICh1X2xvbmcgcHJpb3JpdHkpOwoK
CiAgY29uc3QgQUNFX1RpbWVfVmFsdWUgJm1zZ19leGVjdXRpb25fdGltZSAodm9pZCkgY29uc3Q7
CgoKICB2b2lkIG1zZ19leGVjdXRpb25fdGltZSAoY29uc3QgQUNFX1RpbWVfVmFsdWUgJmV0KTsK
CgogIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZtc2dfZGVhZGxpbmVfdGltZSAodm9pZCkgY29uc3Q7
CgoKICB2b2lkIG1zZ19kZWFkbGluZV90aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZHQpOwoK
CgoKCiAgdmlydHVhbCBBQ0VfTWVzc2FnZV9CbG9jayAqY2xvbmUgKE1lc3NhZ2VfRmxhZ3MgbWFz
ayA9IDApIGNvbnN0OwoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgKmR1cGxpY2F0ZSAodm9pZCkgY29u
c3Q7CgoKCgoKCgogIHN0YXRpYyBBQ0VfTWVzc2FnZV9CbG9jayAqZHVwbGljYXRlIChjb25zdCBB
Q0VfTWVzc2FnZV9CbG9jayAqbWIpOwojIDMyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKICBBQ0VfTWVzc2FnZV9CbG9jayAq
cmVsZWFzZSAodm9pZCk7CgoKCgoKCgogIHN0YXRpYyBBQ0VfTWVzc2FnZV9CbG9jayAqcmVsZWFz
ZSAoQUNFX01lc3NhZ2VfQmxvY2sgKm1iKTsKIyAzNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgaW50IGNvcHkgKGNvbnN0
IGNoYXIgKmJ1Ziwgc2l6ZV90IG4pOwojIDM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKICBpbnQgY29weSAoY29uc3QgY2hh
ciAqYnVmKTsKCgoKCgogIHZvaWQgY3J1bmNoICh2b2lkKTsKCgoKICB2b2lkIHJlc2V0ICh2b2lk
KTsKCgogIGNoYXIgKmJhc2UgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBiYXNlIChjaGFyICpkYXRh
LAogICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICBNZXNzYWdlX0ZsYWdzID0g
RE9OVF9ERUxFVEUpOwoKCiAgY2hhciAqZW5kICh2b2lkKSBjb25zdDsKCgoKCgoKICBjaGFyICpt
YXJrICh2b2lkKSBjb25zdDsKCgoKCgoKICBjaGFyICpyZF9wdHIgKHZvaWQpIGNvbnN0OwogIHZv
aWQgcmRfcHRyIChjaGFyICpwdHIpOwogIHZvaWQgcmRfcHRyIChzaXplX3Qgbik7CgoKCgoKCgog
IGNoYXIgKndyX3B0ciAodm9pZCkgY29uc3Q7CiAgdm9pZCB3cl9wdHIgKGNoYXIgKnB0cik7CiAg
dm9pZCB3cl9wdHIgKHNpemVfdCBuKTsKIyA0MTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgc2l6ZV90IGxlbmd0aCAodm9p
ZCkgY29uc3Q7CgoKICB2b2lkIGxlbmd0aCAoc2l6ZV90IG4pOwoKCgogIHNpemVfdCB0b3RhbF9s
ZW5ndGggKHZvaWQpIGNvbnN0OwoKCgogIHNpemVfdCB0b3RhbF9zaXplICh2b2lkKSBjb25zdDsK
CgoKICBzaXplX3Qgc2l6ZSAodm9pZCkgY29uc3Q7CgoKCgoKCgogIGludCBzaXplIChzaXplX3Qg
bGVuZ3RoKTsKCgoKICBzaXplX3QgdG90YWxfY2FwYWNpdHkgKHZvaWQpIGNvbnN0OwoKCiAgc2l6
ZV90IGNhcGFjaXR5ICh2b2lkKSBjb25zdDsKCgoKICBzaXplX3Qgc3BhY2UgKHZvaWQpIGNvbnN0
OwojIDQ1NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01l
c3NhZ2VfQmxvY2suaCIKICBBQ0VfRGF0YV9CbG9jayAqZGF0YV9ibG9jayAodm9pZCkgY29uc3Q7
CiMgNDY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVz
c2FnZV9CbG9jay5oIgogIHZvaWQgZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sgKik7CgoKCiAg
QUNFX0RhdGFfQmxvY2sgKnJlcGxhY2VfZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sqKTsKCgoK
CiAgQUNFX01lc3NhZ2VfQmxvY2sgKmNvbnQgKHZvaWQpIGNvbnN0OwogIHZvaWQgY29udCAoQUNF
X01lc3NhZ2VfQmxvY2sgKik7CgoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpuZXh0ICh2b2lkKSBj
b25zdDsKICB2b2lkIG5leHQgKEFDRV9NZXNzYWdlX0Jsb2NrICopOwoKCgoKICBBQ0VfTWVzc2Fn
ZV9CbG9jayAqcHJldiAodm9pZCkgY29uc3Q7CiAgdm9pZCBwcmV2IChBQ0VfTWVzc2FnZV9CbG9j
ayAqKTsKCgoKCiAgQUNFX0xvY2sgKmxvY2tpbmdfc3RyYXRlZ3kgKHZvaWQpOwogIEFDRV9Mb2Nr
ICpsb2NraW5nX3N0cmF0ZWd5IChBQ0VfTG9jayAqKTsKCgogIGludCByZWZlcmVuY2VfY291bnQg
KHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0Fj
ZSB7fTsKCnByb3RlY3RlZDoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrIChzaXplX3Qgc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfVHlwZSB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICBBQ0VfTWVzc2FnZV9CbG9jayAqY29udCwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9y
X3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVn
eSwKICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZV9GbGFncyBmbGFncywKICAgICAgICAgICAg
ICAgICAgICAgdV9sb25nIHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf
VGltZV9WYWx1ZSAmZXhlY3V0aW9uX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFD
RV9UaW1lX1ZhbHVlICZkZWFkbGluZV90aW1lLAogICAgICAgICAgICAgICAgICAgICBBQ0VfRGF0
YV9CbG9jayAqZGIsCiAgICAgICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxv
Y2tfYWxsb2NhdG9yLAogICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICptZXNzYWdl
X2Jsb2NrX2FsbG9jYXRvcik7CgoKCiAgaW50IHJlbGVhc2VfaSAoQUNFX0xvY2sgKmxvY2spOwoK
CiAgaW50IGluaXRfaSAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfVHlw
ZSB0eXBlLAogICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrICpjb250LAogICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKmRhdGEsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2Nh
dG9yX3N0cmF0ZWd5LAogICAgICAgICAgICAgIEFDRV9Mb2NrICpsb2NraW5nX3N0cmF0ZWd5LAog
ICAgICAgICAgICAgIE1lc3NhZ2VfRmxhZ3MgZmxhZ3MsCiAgICAgICAgICAgICAgdV9sb25nIHBy
aW9yaXR5LAogICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICZleGVjdXRpb25fdGlt
ZSwKICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZGVhZGxpbmVfdGltZSwKICAg
ICAgICAgICAgICBBQ0VfRGF0YV9CbG9jayAqZGIsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv
ciAqZGF0YV9ibG9ja19hbGxvY2F0b3IsCiAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqbWVz
c2FnZV9ibG9ja19hbGxvY2F0b3IpOwoKCiAgc2l6ZV90IHJkX3B0cl87CgoKICBzaXplX3Qgd3Jf
cHRyXzsKCgogIHVfbG9uZyBwcmlvcml0eV87CiMgNTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgogIEFDRV9NZXNzYWdlX0Js
b2NrICpjb250XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpuZXh0XzsKCgogIEFDRV9NZXNzYWdl
X0Jsb2NrICpwcmV2XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdz
XzsKCgoKICBBQ0VfRGF0YV9CbG9jayAqZGF0YV9ibG9ja187CgoKCiAgQUNFX0FsbG9jYXRvciAq
bWVzc2FnZV9ibG9ja19hbGxvY2F0b3JfOwoKcHJpdmF0ZToKCiAgQUNFX01lc3NhZ2VfQmxvY2sg
Jm9wZXJhdG9yPSAoY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgJik7CiAgQUNFX01lc3NhZ2VfQmxv
Y2sgKGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICYpOwp9OwojIDU5NyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKY2xhc3MgQUNF
X0RhdGFfQmxvY2sKewpwdWJsaWM6CgoKICBBQ0VfRGF0YV9CbG9jayAodm9pZCk7CgoKICBBQ0Vf
RGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Js
b2NrOjpBQ0VfTWVzc2FnZV9UeXBlIG1zZ190eXBlLAogICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyICptc2dfZGF0YSwKICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9y
X3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICBBQ0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSwK
ICAgICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZ3Ms
CiAgICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxvY2tfYWxsb2NhdG9yKTsK
CgogIHZpcnR1YWwgfkFDRV9EYXRhX0Jsb2NrICh2b2lkKTsKCgogIEFDRV9NZXNzYWdlX0Jsb2Nr
OjpBQ0VfTWVzc2FnZV9UeXBlIG1zZ190eXBlICh2b2lkKSBjb25zdDsKCgogIHZvaWQgbXNnX3R5
cGUgKEFDRV9NZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlIHR5cGUpOwoKCiAgY2hhciAq
YmFzZSAodm9pZCkgY29uc3Q7CgoKICB2b2lkIGJhc2UgKGNoYXIgKmRhdGEsCiAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs
YWdzIG1mbGFncyA9IEFDRV9NZXNzYWdlX0Jsb2NrOjpET05UX0RFTEVURSk7CgoKICBjaGFyICpl
bmQgKHZvaWQpIGNvbnN0OwoKCgoKCgogIGNoYXIgKm1hcmsgKHZvaWQpIGNvbnN0OwoKCgoKCiAg
c2l6ZV90IHNpemUgKHZvaWQpIGNvbnN0OwoKCgogIGludCBzaXplIChzaXplX3QgbGVuZ3RoKTsK
CgogIHNpemVfdCBjYXBhY2l0eSAodm9pZCkgY29uc3Q7CiMgNjYwICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgogIHZpcnR1YWwg
QUNFX0RhdGFfQmxvY2sgKmNsb25lIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBt
YXNrID0gMCkgY29uc3Q7CgoKCgoKCgogIHZpcnR1YWwgQUNFX0RhdGFfQmxvY2sgKmNsb25lX25v
Y29weSAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbWFzayA9IDApIGNvbnN0OwoK
CiAgQUNFX0RhdGFfQmxvY2sgKmR1cGxpY2F0ZSAodm9pZCk7CgoKCgoKCgogIEFDRV9EYXRhX0Js
b2NrICpyZWxlYXNlIChBQ0VfTG9jayAqbG9jayA9IDApOwoKCgoKICBBQ0VfTWVzc2FnZV9CbG9j
azo6TWVzc2FnZV9GbGFncyBzZXRfZmxhZ3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs
YWdzIG1vcmVfZmxhZ3MpOwoKCgogIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGNs
cl9mbGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbGVzc19mbGFncyk7CgoK
ICBBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBmbGFncyAodm9pZCkgY29uc3Q7CgoK
ICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3kgKHZvaWQpIGNvbnN0OwoKCgoKICBB
Q0VfTG9jayAqbG9ja2luZ19zdHJhdGVneSAodm9pZCk7CiAgQUNFX0xvY2sgKmxvY2tpbmdfc3Ry
YXRlZ3kgKEFDRV9Mb2NrICopOwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIGludCBy
ZWZlcmVuY2VfY291bnQgKHZvaWQpIGNvbnN0OwoKCiAgQUNFX0FsbG9jYXRvciAqZGF0YV9ibG9j
a19hbGxvY2F0b3IgKHZvaWQpIGNvbnN0OwoKcHJvdGVjdGVkOgoKICBBQ0VfRGF0YV9CbG9jayAq
cmVsZWFzZV9pICh2b2lkKTsKIyA3MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiCiAgZnJpZW5kIGNsYXNzIEFDRV9NZXNzYWdl
X0Jsb2NrOwogIEFDRV9EYXRhX0Jsb2NrICpyZWxlYXNlX25vX2RlbGV0ZSAoQUNFX0xvY2sgKmxv
Y2spOwoKCiAgQUNFX01lc3NhZ2VfQmxvY2s6OkFDRV9NZXNzYWdlX1R5cGUgdHlwZV87CgoKICBz
aXplX3QgY3VyX3NpemVfOwoKCiAgc2l6ZV90IG1heF9zaXplXzsKCgogIEFDRV9NZXNzYWdlX0Js
b2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdzXzsKCgogIGNoYXIgKmJhc2VfOwoKCgoKCgoKICBBQ0Vf
QWxsb2NhdG9yICphbGxvY2F0b3Jfc3RyYXRlZ3lfOwoKCgoKCgoKICBBQ0VfTG9jayAqbG9ja2lu
Z19zdHJhdGVneV87CgoKCgoKCgogIGludCByZWZlcmVuY2VfY291bnRfOwoKCiAgQUNFX0FsbG9j
YXRvciAqZGF0YV9ibG9ja19hbGxvY2F0b3JfOwoKcHJpdmF0ZToKCiAgQUNFX0RhdGFfQmxvY2sg
Jm9wZXJhdG9yPSAoY29uc3QgQUNFX0RhdGFfQmxvY2sgJik7CiAgQUNFX0RhdGFfQmxvY2sgKGNv
bnN0IEFDRV9EYXRhX0Jsb2NrICYpOwp9OwojIDc5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKY2xhc3MgQUNFX0R5bmFtaWNf
TWVzc2FnZV9TdHJhdGVneQp7CnB1YmxpYzoKCgoKCgoKICBlbnVtIFByaW9yaXR5X1N0YXR1cwog
IHsKCiAgICBQRU5ESU5HID0gMHgwMSwKCiAgICBMQVRFID0gMHgwMiwKCiAgICBCRVlPTkRfTEFU
RSA9IDB4MDQsCgogICAgQU5ZX1NUQVRVUyA9IDB4MDcKICB9OwoKCiAgQUNFX0R5bmFtaWNfTWVz
c2FnZV9TdHJhdGVneSAodV9sb25nIHN0YXRpY19iaXRfZmllbGRfbWFzaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9tYXgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zm
c2V0KTsKCgogIHZpcnR1YWwgfkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3kgKHZvaWQpOwoK
CiAgUHJpb3JpdHlfU3RhdHVzIHByaW9yaXR5X3N0YXR1cyAoQUNFX01lc3NhZ2VfQmxvY2sgJm1i
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9UaW1lX1ZhbHVl
ICZ0dik7CgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9tYXNrICh2b2lkKSBjb25zdDsKCgog
IHZvaWQgc3RhdGljX2JpdF9maWVsZF9tYXNrICh1X2xvbmcpOwoKCiAgdV9sb25nIHN0YXRpY19i
aXRfZmllbGRfc2hpZnQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBzdGF0aWNfYml0X2ZpZWxkX3No
aWZ0ICh1X2xvbmcpOwoKCiAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfbWF4ICh2b2lkKSBjb25z
dDsKCgogIHZvaWQgZHluYW1pY19wcmlvcml0eV9tYXggKHVfbG9uZyk7CgoKICB1X2xvbmcgZHlu
YW1pY19wcmlvcml0eV9vZmZzZXQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkeW5hbWljX3ByaW9y
aXR5X29mZnNldCAodV9sb25nKTsKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsK
CnByb3RlY3RlZDoKCiAgdmlydHVhbCB2b2lkIGNvbnZlcnRfcHJpb3JpdHkgKEFDRV9UaW1lX1Zh
bHVlICZwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X01lc3NhZ2VfQmxvY2sgJm1iKSA9IDA7CgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9tYXNr
XzsKCgoKCgoKICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdF87CgoKICB1X2xvbmcgZHlu
YW1pY19wcmlvcml0eV9tYXhfOwoKCiAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zmc2V0XzsK
CgogIEFDRV9UaW1lX1ZhbHVlIG1heF9sYXRlXzsKCgogIEFDRV9UaW1lX1ZhbHVlIG1pbl9wZW5k
aW5nXzsKCgogIEFDRV9UaW1lX1ZhbHVlIHBlbmRpbmdfc2hpZnRfOwp9OwojIDg5OSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIK
Y2xhc3MgQUNFX0RlYWRsaW5lX01lc3NhZ2VfU3RyYXRlZ3kgOiBwdWJsaWMgQUNFX0R5bmFtaWNf
TWVzc2FnZV9TdHJhdGVneQp7CnB1YmxpYzoKCiAgQUNFX0RlYWRsaW5lX01lc3NhZ2VfU3RyYXRl
Z3kgKHVfbG9uZyBzdGF0aWNfYml0X2ZpZWxkX21hc2sgPSAweDNGRlVMLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1X2xvbmcgc3RhdGljX2JpdF9maWVsZF9zaGlmdCA9IDEwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9t
YXggPSAweDNGRkZGRlVMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcg
ZHluYW1pY19wcmlvcml0eV9vZmZzZXQgPSAweDIwMDAwMFVMKTsKCgogIHZpcnR1YWwgfkFDRV9E
ZWFkbGluZV9NZXNzYWdlX1N0cmF0ZWd5ICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBjb252ZXJ0
X3ByaW9yaXR5IChBQ0VfVGltZV9WYWx1ZSAmcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICZtYik7CgoKICB2aXJ0dWFsIHZv
aWQgZHVtcCAodm9pZCkgY29uc3Q7Cn07CiMgOTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIgpjbGFzcyBBQ0VfTGF4aXR5X01l
c3NhZ2VfU3RyYXRlZ3kgOiBwdWJsaWMgQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneQp7CnB1
YmxpYzoKCiAgQUNFX0xheGl0eV9NZXNzYWdlX1N0cmF0ZWd5ICh1X2xvbmcgc3RhdGljX2JpdF9m
aWVsZF9tYXNrID0gMHgzRkZVTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9u
ZyBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0ID0gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1X2xvbmcgZHluYW1pY19wcmlvcml0eV9tYXggPSAweDNGRkZGRlVMLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGR5bmFtaWNfcHJpb3JpdHlfb2Zmc2V0ID0gMHgy
MDAwMDBVTCk7CgoKICB2aXJ0dWFsIH5BQ0VfTGF4aXR5X01lc3NhZ2VfU3RyYXRlZ3kgKHZvaWQp
OwoKCiAgdmlydHVhbCB2b2lkIGNvbnZlcnRfcHJpb3JpdHkgKEFDRV9UaW1lX1ZhbHVlICZwcmlv
cml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2Vf
QmxvY2sgJm1iKTsKCgogIHZpcnR1YWwgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKfTsKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Js
b2NrLmkiIDEKCgoKCgppbmxpbmUgQUNFX0RhdGFfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6
ZGF0YV9ibG9jayAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2tfOwp9CgppbmxpbmUgQUNF
X01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6OnNldF9zZWxm
X2ZsYWdzIChBQ0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBtb3JlX2ZsYWdzKQp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1
cm4gKHRoaXMtPmZsYWdzXyB8PSAobW9yZV9mbGFncykpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2Vf
QmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6OmNscl9zZWxmX2ZsYWdzIChB
Q0VfTWVzc2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBsZXNzX2ZsYWdzKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gKHRoaXMt
PmZsYWdzXyAmPSB+KGxlc3NfZmxhZ3MpKTsKfQoKaW5saW5lIEFDRV9NZXNzYWdlX0Jsb2NrOjpN
ZXNzYWdlX0ZsYWdzCkFDRV9NZXNzYWdlX0Jsb2NrOjpzZWxmX2ZsYWdzICh2b2lkKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g
dGhpcy0+ZmxhZ3NfOwp9CgoKCgppbmxpbmUgaW50CkFDRV9EYXRhX0Jsb2NrOjpyZWZlcmVuY2Vf
Y291bnQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVmZXJlbmNlX2NvdW50XzsKfQoKaW5saW5l
IGludApBQ0VfTWVzc2FnZV9CbG9jazo6cmVmZXJlbmNlX2NvdW50ICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuIGRhdGFfYmxvY2sgKCkgPyBkYXRhX2Jsb2NrICgpLT5yZWZlcmVuY2VfY291bnQgKCkg
OiAwOwp9CgppbmxpbmUgY2hhciAqCkFDRV9EYXRhX0Jsb2NrOjpiYXNlICh2b2lkKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFz
ZV87Cn0KCmlubGluZSBzaXplX3QKQUNFX0RhdGFfQmxvY2s6OnNpemUgKHZvaWQpIGNvbnN0CnsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5jdXJf
c2l6ZV87Cn0KCmlubGluZSBzaXplX3QKQUNFX0RhdGFfQmxvY2s6OmNhcGFjaXR5ICh2b2lkKSBj
b25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJu
IHRoaXMtPm1heF9zaXplXzsKfQoKaW5saW5lIEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0Zs
YWdzCkFDRV9EYXRhX0Jsb2NrOjpzZXRfZmxhZ3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdl
X0ZsYWdzIG1vcmVfZmxhZ3MpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKICByZXR1cm4gKHRoaXMtPmZsYWdzXyB8PSAobW9yZV9mbGFncykpOwp9Cgppbmxp
bmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX0RhdGFfQmxvY2s6OmNscl9m
bGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbGVzc19mbGFncykKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiAodGhpcy0+
ZmxhZ3NfICY9IH4obGVzc19mbGFncykpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1l
c3NhZ2VfRmxhZ3MKQUNFX0RhdGFfQmxvY2s6OmZsYWdzICh2b2lkKSBjb25zdAp7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgIHJldHVybiB0aGlzLT5mbGFnc187Cn0K
CmlubGluZSBBQ0VfQWxsb2NhdG9yKgpBQ0VfRGF0YV9CbG9jazo6ZGF0YV9ibG9ja19hbGxvY2F0
b3IgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9ja19hbGxvY2F0b3JfOwp9Cgpp
bmxpbmUgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MKQUNFX01lc3NhZ2VfQmxvY2s6
OnNldF9mbGFncyAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgbW9yZV9mbGFncykK
ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g
dGhpcy0+ZGF0YV9ibG9jayAoKS0+c2V0X2ZsYWdzIChtb3JlX2ZsYWdzKTsKfQoKaW5saW5lIEFD
RV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzCkFDRV9NZXNzYWdlX0Jsb2NrOjpjbHJfZmxh
Z3MgKEFDRV9NZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGxlc3NfZmxhZ3MpCnsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRh
dGFfYmxvY2sgKCktPmNscl9mbGFncyAobGVzc19mbGFncyk7Cn0KCmlubGluZSBBQ0VfTWVzc2Fn
ZV9CbG9jazo6TWVzc2FnZV9GbGFncwpBQ0VfTWVzc2FnZV9CbG9jazo6ZmxhZ3MgKHZvaWQpIGNv
bnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgcmV0dXJu
IHRoaXMtPmRhdGFfYmxvY2sgKCktPmZsYWdzICgpOwp9CgoKCmlubGluZSBzaXplX3QKQUNFX01l
c3NhZ2VfQmxvY2s6Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+d3JfcHRyXyAtIHRoaXMtPnJkX3B0
cl87Cn0KCgoKCmlubGluZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjpsZW5ndGggKHNpemVfdCBs
ZW4pCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+
d3JfcHRyXyA9IHRoaXMtPnJkX3B0cl8gKyBsZW47Cn0KCgoKaW5saW5lIHNpemVfdApBQ0VfTWVz
c2FnZV9CbG9jazo6c2l6ZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2sgKCktPnNpemUgKCk7Cn0K
CmlubGluZSBzaXplX3QKQUNFX01lc3NhZ2VfQmxvY2s6OmNhcGFjaXR5ICh2b2lkKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo
aXMtPmRhdGFfYmxvY2sgKCktPmNhcGFjaXR5ICgpOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxv
Y2s6OkFDRV9NZXNzYWdlX1R5cGUKQUNFX0RhdGFfQmxvY2s6Om1zZ190eXBlICh2b2lkKSBjb25z
dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo
aXMtPnR5cGVfOwp9CgppbmxpbmUgdm9pZApBQ0VfRGF0YV9CbG9jazo6bXNnX3R5cGUgKEFDRV9N
ZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlIHQpCnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT50eXBlXyA9IHQ7Cn0KCmlubGluZSBBQ0VfTWVz
c2FnZV9CbG9jazo6QUNFX01lc3NhZ2VfVHlwZQpBQ0VfTWVzc2FnZV9CbG9jazo6bXNnX3R5cGUg
KHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+bXNnX3R5cGUgKCk7Cn0KCmlubGluZSB2
b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfdHlwZSAoQUNFX01lc3NhZ2VfQmxvY2s6OkFDRV9N
ZXNzYWdlX1R5cGUgdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogIHRoaXMtPmRhdGFfYmxvY2sgKCktPm1zZ190eXBlICh0KTsKfQoKaW5saW5lIEFDRV9N
ZXNzYWdlX0Jsb2NrOjpBQ0VfTWVzc2FnZV9UeXBlCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfY2xh
c3MgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIGlmICh0aGlzLT5tc2dfdHlwZSAoKSA8IEFDRV9NZXNzYWdlX0Jsb2NrOjpNQl9Q
UklPUklUWSkKICAgIHJldHVybiBBQ0VfTWVzc2FnZV9CbG9jazo6TUJfTk9STUFMOwogIGVsc2Ug
aWYgKHRoaXMtPm1zZ190eXBlICgpIDwgQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1VTRVIpCiAgICBy
ZXR1cm4gQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1BSSU9SSVRZOwogIGVsc2UKICAgIHJldHVybiBB
Q0VfTWVzc2FnZV9CbG9jazo6TUJfVVNFUjsKfQoKaW5saW5lIGludApBQ0VfTWVzc2FnZV9CbG9j
azo6aXNfZGF0YV9tc2cgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfTWVzc2FnZV9UeXBlIG10ID0gdGhpcy0+bXNnX3R5
cGUgKCk7CiAgcmV0dXJuCiAgICBtdCA9PSBBQ0VfTWVzc2FnZV9CbG9jazo6TUJfREFUQQogICAg
fHwgbXQgPT0gQUNFX01lc3NhZ2VfQmxvY2s6Ok1CX1BST1RPCiAgICB8fCBtdCA9PSBBQ0VfTWVz
c2FnZV9CbG9jazo6TUJfUENQUk9UTzsKfQoKaW5saW5lIHVfbG9uZwpBQ0VfTWVzc2FnZV9CbG9j
azo6bXNnX3ByaW9yaXR5ICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5wcmlvcml0eV87Cn0KCmlubGlu
ZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjptc2dfcHJpb3JpdHkgKHVfbG9uZyBwcmkpCnsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cHJp
b3JpdHlfID0gcHJpOwp9CgppbmxpbmUgY29uc3QgQUNFX1RpbWVfVmFsdWUgJgpBQ0VfTWVzc2Fn
ZV9CbG9jazo6bXNnX2V4ZWN1dGlvbl90aW1lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1
cm4gQUNFX1RpbWVfVmFsdWU6Onplcm87Cgp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2FnZV9CbG9j
azo6bXNnX2V4ZWN1dGlvbl90aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZXQpCnsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGRvIHsgfSB3aGlsZSAoJmV0ID09IDApOwoKfQoKaW5s
aW5lIGNvbnN0IEFDRV9UaW1lX1ZhbHVlICYKQUNFX01lc3NhZ2VfQmxvY2s6Om1zZ19kZWFkbGlu
ZV90aW1lICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICByZXR1cm4gQUNFX1RpbWVfVmFsdWU6Om1h
eF90aW1lOwoKfQoKaW5saW5lIHZvaWQKQUNFX01lc3NhZ2VfQmxvY2s6Om1zZ19kZWFkbGluZV90
aW1lIChjb25zdCBBQ0VfVGltZV9WYWx1ZSAmZHQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKCiAgZG8geyB9IHdoaWxlICgmZHQgPT0gMCk7Cgp9CgppbmxpbmUgY2hhciAqCkFDRV9NZXNz
YWdlX0Jsb2NrOjpiYXNlICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+YmFzZSAoKTsKfQoK
aW5saW5lIHZvaWQKQUNFX01lc3NhZ2VfQmxvY2s6OmJhc2UgKGNoYXIgKm1zZ19kYXRhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1zZ19sZW5ndGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBNZXNzYWdlX0ZsYWdzIG1zZ19mbGFncykKewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+cmRfcHRyXyA9IDA7CiAgdGhpcy0+d3JfcHRyXyA9
IDA7CiAgdGhpcy0+ZGF0YV9ibG9jayAoKS0+YmFzZSAobXNnX2RhdGEsIG1zZ19sZW5ndGgsIG1z
Z19mbGFncyk7Cn0KCmlubGluZSBjaGFyICoKQUNFX01lc3NhZ2VfQmxvY2s6OnJkX3B0ciAodm9p
ZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBy
ZXR1cm4gdGhpcy0+YmFzZSAoKSArIHRoaXMtPnJkX3B0cl87Cn0KCmlubGluZSB2b2lkCkFDRV9N
ZXNzYWdlX0Jsb2NrOjp3cl9wdHIgKGNoYXIgKm5ld19wdHIpCnsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+d3JfcHRyXyA9IG5ld19wdHIgLSB0aGlz
LT5iYXNlICgpOwp9CgoKCmlubGluZSBjaGFyICoKQUNFX0RhdGFfQmxvY2s6Om1hcmsgKHZvaWQp
IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0
aGlzLT5iYXNlXyArIHRoaXMtPmN1cl9zaXplXzsKfQoKaW5saW5lIGNoYXIgKgpBQ0VfTWVzc2Fn
ZV9CbG9jazo6bWFyayAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmRhdGFfYmxvY2sgKCktPm1hcmsgKCk7Cn0KCmlu
bGluZSBjaGFyICoKQUNFX0RhdGFfQmxvY2s6OmVuZCAodm9pZCkgY29uc3QKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YmFzZV8gKyB0aGlzLT5t
YXhfc2l6ZV87Cn0KCmlubGluZSBjaGFyICoKQUNFX01lc3NhZ2VfQmxvY2s6OmVuZCAodm9pZCkg
Y29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4g
dGhpcy0+ZGF0YV9ibG9jayAoKS0+ZW5kICgpOwp9CgoKaW5saW5lIHZvaWQKQUNFX01lc3NhZ2Vf
QmxvY2s6OnJkX3B0ciAoY2hhciAqbmV3X3B0cikKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5yZF9wdHJfID0gbmV3X3B0ciAtIHRoaXMtPmJhc2Ug
KCk7Cn0KCmlubGluZSB2b2lkCkFDRV9NZXNzYWdlX0Jsb2NrOjpyZF9wdHIgKHNpemVfdCBuKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHRoaXMtPnJkX3B0
cl8gKz0gbjsKfQoKaW5saW5lIGNoYXIgKgpBQ0VfTWVzc2FnZV9CbG9jazo6d3JfcHRyICh2b2lk
KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJl
dHVybiB0aGlzLT5iYXNlICgpICsgdGhpcy0+d3JfcHRyXzsKfQoKaW5saW5lIHZvaWQKQUNFX01l
c3NhZ2VfQmxvY2s6OndyX3B0ciAoc2l6ZV90IG4pCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CiAgdGhpcy0+d3JfcHRyXyArPSBuOwp9CgppbmxpbmUgdm9pZApB
Q0VfTWVzc2FnZV9CbG9jazo6cmVzZXQgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5yZF9wdHJfID0gMDsKICB0aGlzLT53cl9wdHJfID0g
MDsKfQoKaW5saW5lIHNpemVfdApBQ0VfTWVzc2FnZV9CbG9jazo6c3BhY2UgKHZvaWQpIGNvbnN0
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhp
cy0+bWFyayAoKSAtIHRoaXMtPndyX3B0ciAoKTsKfQoKaW5saW5lIEFDRV9EYXRhX0Jsb2NrICoK
QUNFX01lc3NhZ2VfQmxvY2s6OnJlcGxhY2VfZGF0YV9ibG9jayAoQUNFX0RhdGFfQmxvY2sgKmRi
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogIEFDRV9EYXRhX0Jsb2NrICpvbGQgPSB0aGlzLT5kYXRhX2Jsb2NrXzsKICB0aGlzLT5kYXRh
X2Jsb2NrXyA9IGRiOwoKICBpZiAoZGIgIT0gMCkKICAgIHsKCgogICAgICB0aGlzLT5yZF9wdHIg
KHRoaXMtPmRhdGFfYmxvY2sgKCktPmJhc2UgKCkpOwogICAgICB0aGlzLT53cl9wdHIgKHRoaXMt
PmRhdGFfYmxvY2sgKCktPmJhc2UgKCkpOwogICAgfQoKICByZXR1cm4gb2xkOwp9CgppbmxpbmUg
dm9pZApBQ0VfTWVzc2FnZV9CbG9jazo6Y29udCAoQUNFX01lc3NhZ2VfQmxvY2sgKmNvbnRfbXNn
KQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5jb250
XyA9IGNvbnRfbXNnOwp9CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9C
bG9jazo6Y29udCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmNvbnRfOwp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2Fn
ZV9CbG9jazo6bmV4dCAoQUNFX01lc3NhZ2VfQmxvY2sgKm5leHRfbXNnKQp7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5uZXh0XyA9IG5leHRfbXNnOwp9
CgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6bmV4dCAodm9p
ZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0
dXJuIHRoaXMtPm5leHRfOwp9CgppbmxpbmUgdm9pZApBQ0VfTWVzc2FnZV9CbG9jazo6cHJldiAo
QUNFX01lc3NhZ2VfQmxvY2sgKm5leHRfbXNnKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICB0aGlzLT5wcmV2XyA9IG5leHRfbXNnOwp9CgppbmxpbmUgQUNFX01l
c3NhZ2VfQmxvY2sgKgpBQ0VfTWVzc2FnZV9CbG9jazo6cHJldiAodm9pZCkgY29uc3QKewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnByZXZf
Owp9CgppbmxpbmUgQUNFX0FsbG9jYXRvciAqCkFDRV9EYXRhX0Jsb2NrOjphbGxvY2F0b3Jfc3Ry
YXRlZ3kgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmFsbG9jYXRvcl9zdHJhdGVneV87Cn0KCmlu
bGluZSBBQ0VfTG9jayAqCkFDRV9EYXRhX0Jsb2NrOjpsb2NraW5nX3N0cmF0ZWd5ICh2b2lkKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1
cm4gdGhpcy0+bG9ja2luZ19zdHJhdGVneV87Cn0KCmlubGluZSBBQ0VfTG9jayAqCkFDRV9EYXRh
X0Jsb2NrOjpsb2NraW5nX3N0cmF0ZWd5IChBQ0VfTG9jayAqbmxzKQp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBBQ0VfTG9jayAqb2xzID0gdGhp
cy0+bG9ja2luZ19zdHJhdGVneV87CgogIHRoaXMtPmxvY2tpbmdfc3RyYXRlZ3lfID0gbmxzOwog
IHJldHVybiBvbHM7Cn0KCmlubGluZSBBQ0VfTG9jayAqCkFDRV9NZXNzYWdlX0Jsb2NrOjpsb2Nr
aW5nX3N0cmF0ZWd5ICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+ZGF0YV9ibG9jayAoKS0+bG9ja2luZ19z
dHJhdGVneSAoKTsKfQoKaW5saW5lIEFDRV9Mb2NrICoKQUNFX01lc3NhZ2VfQmxvY2s6OmxvY2tp
bmdfc3RyYXRlZ3kgKEFDRV9Mb2NrICpubHMpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIEFDRV9Mb2NrICpvbHMgPSB0aGlzLT5kYXRhX2Js
b2NrICgpLT5sb2NraW5nX3N0cmF0ZWd5ICgpOwogIHRoaXMtPmRhdGFfYmxvY2sgKCktPmxvY2tp
bmdfc3RyYXRlZ3kgKG5scyk7CiAgcmV0dXJuIG9sczsKfQoKCgoKCgppbmxpbmUgdV9sb25nCkFD
RV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnN0YXRpY19iaXRfZmllbGRfbWFzayAodm9pZCkg
Y29uc3QKewogIHJldHVybiBzdGF0aWNfYml0X2ZpZWxkX21hc2tfOwp9CgoKaW5saW5lIHZvaWQK
QUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6c3RhdGljX2JpdF9maWVsZF9tYXNrICh1X2xv
bmcgdWwpCnsKICBzdGF0aWNfYml0X2ZpZWxkX21hc2tfID0gdWw7Cn0KCgppbmxpbmUgdV9sb25n
CkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnN0YXRpY19iaXRfZmllbGRfc2hpZnQgKHZv
aWQpIGNvbnN0CnsKICByZXR1cm4gc3RhdGljX2JpdF9maWVsZF9zaGlmdF87Cn0KCgppbmxpbmUg
dm9pZApBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0
ICh1X2xvbmcgdWwpCnsKICBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0XyA9IHVsOwp9CgoKaW5saW5l
IHVfbG9uZwpBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpkeW5hbWljX3ByaW9yaXR5X21h
eCAodm9pZCkgY29uc3QKewogIHJldHVybiBkeW5hbWljX3ByaW9yaXR5X21heF87Cn0KCgppbmxp
bmUgdm9pZApBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpkeW5hbWljX3ByaW9yaXR5X21h
eCAodV9sb25nIHVsKQp7CgoKCgogIGR5bmFtaWNfcHJpb3JpdHlfbWF4XyA9IHVsOwogIHBlbmRp
bmdfc2hpZnRfID0gQUNFX1RpbWVfVmFsdWUgKDAsIHVsKTsKfQoKCmlubGluZSB1X2xvbmcKQUNF
X0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6ZHluYW1pY19wcmlvcml0eV9vZmZzZXQgKHZvaWQp
IGNvbnN0CnsKICByZXR1cm4gZHluYW1pY19wcmlvcml0eV9vZmZzZXRfOwp9CgoKaW5saW5lIHZv
aWQKQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJhdGVneTo6ZHluYW1pY19wcmlvcml0eV9vZmZzZXQg
KHVfbG9uZyB1bCkKewoKCgoKCiAgZHluYW1pY19wcmlvcml0eV9vZmZzZXRfID0gdWw7CiAgbWF4
X2xhdGVfID0gQUNFX1RpbWVfVmFsdWUgKDAsIHVsIC0gMSk7CiAgbWluX3BlbmRpbmdfID0gQUNF
X1RpbWVfVmFsdWUgKDAsIHVsKTsKfQoKCgppbmxpbmUgQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJh
dGVneTo6UHJpb3JpdHlfU3RhdHVzCkFDRV9EeW5hbWljX01lc3NhZ2VfU3RyYXRlZ3k6OnByaW9y
aXR5X3N0YXR1cyAoQUNFX01lc3NhZ2VfQmxvY2sgJiBtYiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfVGltZV9WYWx1ZSAmIHR2KQp7Cgog
IFByaW9yaXR5X1N0YXR1cyBzdGF0dXMgPSBBQ0VfRHluYW1pY19NZXNzYWdlX1N0cmF0ZWd5OjpQ
RU5ESU5HOwoKCgoKICBBQ0VfVGltZV9WYWx1ZSBwcmlvcml0eSAodHYpOwogIGNvbnZlcnRfcHJp
b3JpdHkgKHByaW9yaXR5LCBtYik7CgoKICBpZiAocHJpb3JpdHkgPCBBQ0VfVGltZV9WYWx1ZTo6
emVybykKICAgIHsKCgogICAgICBwcmlvcml0eSArPSBwZW5kaW5nX3NoaWZ0XzsKICAgICAgaWYg
KHByaW9yaXR5IDwgbWluX3BlbmRpbmdfKQogICAgICAgIHByaW9yaXR5ID0gbWluX3BlbmRpbmdf
OwogICAgfQoKCiAgZWxzZSBpZiAocHJpb3JpdHkgPiBtYXhfbGF0ZV8pCiAgICB7CgogICAgICBt
Yi5tc2dfcHJpb3JpdHkgKDApOwogICAgICByZXR1cm4gQUNFX0R5bmFtaWNfTWVzc2FnZV9TdHJh
dGVneTo6QkVZT05EX0xBVEU7CiAgICB9CgogIGVsc2UKICAgIHN0YXR1cyA9IEFDRV9EeW5hbWlj
X01lc3NhZ2VfU3RyYXRlZ3k6OkxBVEU7CgoKCiAgbWIubXNnX3ByaW9yaXR5KChtYi5tc2dfcHJp
b3JpdHkoKSAmIHN0YXRpY19iaXRfZmllbGRfbWFza18pIHwKICAgICAgICAgICAgICAgICAgKChw
cmlvcml0eS51c2VjICgpICsgMTAwMDAwMEwgKiBwcmlvcml0eS5zZWMgKCkpIDw8CiAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfYml0X2ZpZWxkX3NoaWZ0XykpOwoKICByZXR1cm4gc3RhdHVzOwp9
CiMgNjAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVz
c2FnZV9CbG9jay5pIgppbmxpbmUgdm9pZApBQ0VfRGVhZGxpbmVfTWVzc2FnZV9TdHJhdGVneTo6
Y29udmVydF9wcmlvcml0eSAoQUNFX1RpbWVfVmFsdWUgJiBwcmlvcml0eSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Js
b2NrICYgbWIpCnsKCgogIHByaW9yaXR5IC09IG1iLm1zZ19kZWFkbGluZV90aW1lICgpOwp9CgoK
CgoKCgppbmxpbmUgdm9pZApBQ0VfTGF4aXR5X01lc3NhZ2VfU3RyYXRlZ3k6OmNvbnZlcnRfcHJp
b3JpdHkgKEFDRV9UaW1lX1ZhbHVlICYgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgJiBtYikKewoK
CiAgcHJpb3JpdHkgKz0gbWIubXNnX2V4ZWN1dGlvbl90aW1lICgpOwogIHByaW9yaXR5IC09IG1i
Lm1zZ19kZWFkbGluZV90aW1lICgpOwp9CiMgOTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5oIiAyCgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDEK
IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3Nh
Z2VfQmxvY2tfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIgMQojIDEzICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9jay5o
IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0Uu
aCIgMQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
TWVzc2FnZV9CbG9jay5oIiAyCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgojIDM1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiCnRlbXBsYXRl
IDxjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgQUNFX0xvY2tlZF9EYXRhX0Jsb2NrIDogcHVibGljIEFD
RV9EYXRhX0Jsb2NrCnsKcHVibGljOgoKCiAgQUNFX0xvY2tlZF9EYXRhX0Jsb2NrICh2b2lkKTsK
CgogIEFDRV9Mb2NrZWRfRGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jazo6QUNFX01lc3NhZ2VfVHlwZSBtc2dfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1zZ19kYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICpkYXRhX2Jsb2NrX2FsbG9jYXRv
cik7CgoKICB2aXJ0dWFsIH5BQ0VfTG9ja2VkX0RhdGFfQmxvY2sgKHZvaWQpOwoKCgoKCgogIHZp
cnR1YWwgQUNFX0RhdGFfQmxvY2sgKmNsb25lX25vY29weSAoQUNFX01lc3NhZ2VfQmxvY2s6Ok1l
c3NhZ2VfRmxhZ3MgbWFzayA9IDApIGNvbnN0OwoKcHJpdmF0ZToKCiAgQUNFX0xPQ0sgbG9ja187
CgoKICBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICZvcGVyYXRvcj0gKGNvbnN0IEFD
RV9Mb2NrZWRfRGF0YV9CbG9jazxBQ0VfTE9DSz4gJik7CiAgQUNFX0xvY2tlZF9EYXRhX0Jsb2Nr
IChjb25zdCBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICYpOwp9OwoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2tf
VC5pIiAxCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKQUNFX0xvY2tlZF9E
YXRhX0Jsb2NrPEFDRV9MT0NLPjo6QUNFX0xvY2tlZF9EYXRhX0Jsb2NrICh2b2lkKQp7CiAgdGhp
cy0+bG9ja2luZ19zdHJhdGVneV8gPSAmdGhpcy0+bG9ja187Cn0KCnRlbXBsYXRlPGNsYXNzIEFD
RV9MT0NLPiBpbmxpbmUKQUNFX0xvY2tlZF9EYXRhX0Jsb2NrPEFDRV9MT0NLPjo6CkFDRV9Mb2Nr
ZWRfRGF0YV9CbG9jayAoc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX01l
c3NhZ2VfQmxvY2s6OkFDRV9NZXNzYWdlX1R5cGUgbXNnX3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbXNnX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgQUNFX0Fs
bG9jYXRvciAqYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAgICAgICAgICAgICAgICAgIEFDRV9N
ZXNzYWdlX0Jsb2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICAg
IEFDRV9BbGxvY2F0b3IgKmRhdGFfYmxvY2tfYWxsb2NhdG9yKQogIDogQUNFX0RhdGFfQmxvY2sg
KHNpemUsCiAgICAgICAgICAgICAgICAgICAgbXNnX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
bXNnX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yX3N0cmF0ZWd5LAogICAgICAg
ICAgICAgICAgICAgICZsb2NrXywKICAgICAgICAgICAgICAgICAgICBmbGFncywKICAgICAgICAg
ICAgICAgICAgICBkYXRhX2Jsb2NrX2FsbG9jYXRvcikKewp9CiMgNzIgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgoKCgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdl
X0Jsb2NrX1QuY3BwIiAxCgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBnZXRfcmNzaWRfYWNlX01l
c3NhZ2VfQmxvY2tfVCAoY29uc3QgY2hhciopIHsgcmV0dXJuICJNZXNzYWdlX0Jsb2NrX1QuY3Bw
LHYgNC42IDIwMDEvMDMvMDQgMDA6NTU6MjggYnJ1bnNjaCBFeHAiIDsgfSBzdGF0aWMgY29uc3Qg
Y2hhciogcmNzaWRfYWNlX01lc3NhZ2VfQmxvY2tfVCA9IGdldF9yY3NpZF9hY2VfTWVzc2FnZV9C
bG9ja19UICggcmNzaWRfYWNlX01lc3NhZ2VfQmxvY2tfVCApIDsKCgoKCgp0ZW1wbGF0ZTxjbGFz
cyBMPgpBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8TD46On5BQ0VfTG9ja2VkX0RhdGFfQmxvY2sgKHZv
aWQpCnsKfQoKdGVtcGxhdGU8Y2xhc3MgQUNFX0xPQ0s+IEFDRV9EYXRhX0Jsb2NrICoKQUNFX0xv
Y2tlZF9EYXRhX0Jsb2NrPEFDRV9MT0NLPjo6Y2xvbmVfbm9jb3B5IChBQ0VfTWVzc2FnZV9CbG9j
azo6TWVzc2FnZV9GbGFncyBtYXNrKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jazo6
TWVzc2FnZV9GbGFncyBhbHdheXNfY2xlYXIgPQogICAgQUNFX01lc3NhZ2VfQmxvY2s6OkRPTlRf
REVMRVRFOwoKICBBQ0VfTG9ja2VkX0RhdGFfQmxvY2s8QUNFX0xPQ0s+ICpuYjsKCiAgZG8geyBu
YiA9IHN0YXRpY19jYXN0PEFDRV9Mb2NrZWRfRGF0YV9CbG9jazxBQ0VfTE9DSz4qPiAodGhpcy0+
ZGF0YV9ibG9ja19hbGxvY2F0b3IgKCktPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTG9ja2VkX0RhdGFf
QmxvY2s8QUNFX0xPQ0s+KSkpOyBpZiAobmIgPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMTI7IHJldHVybiAwO30gZWxzZSB7IG5ldyAobmIpIEFDRV9Mb2NrZWRfRGF0YV9CbG9jazxB
Q0VfTE9DSz4gKHRoaXMtPnNpemUgKCksIHRoaXMtPm1zZ190eXBlICgpLCAwLCB0aGlzLT5hbGxv
Y2F0b3Jfc3RyYXRlZ3kgKCksIHRoaXMtPmZsYWdzICgpLCB0aGlzLT5kYXRhX2Jsb2NrX2FsbG9j
YXRvciAoKSk7IH0gfSB3aGlsZSAoMCk7CiMgNDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrX1QuY3BwIgogIG5iLT5jbHJfZmxhZ3Mg
KG1hc2sgfCBhbHdheXNfY2xlYXIpOwogIHJldHVybiBuYjsKfQojIDc2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWVzc2FnZV9CbG9ja19ULmgiIDIKCgoK
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9z
dC5oIiAxCiMgODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9NZXNzYWdlX0Jsb2NrX1QuaCIgMgojIDk1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIgMgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA5NjAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiIDIK
IyA0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9C
YXNlLmgiIDIKCgoKCgoKCmNsYXNzIEFDRV9DRFIKewpwdWJsaWM6CgoKCgoKICBlbnVtCiAgewoK
CgoKICAgIE9DVEVUX1NJWkUgPSAxLAogICAgU0hPUlRfU0laRSA9IDIsCiAgICBMT05HX1NJWkUg
PSA0LAogICAgTE9OR0xPTkdfU0laRSA9IDgsCiAgICBMT05HRE9VQkxFX1NJWkUgPSAxNiwKCiAg
ICBPQ1RFVF9BTElHTiA9IDEsCiAgICBTSE9SVF9BTElHTiA9IDIsCiAgICBMT05HX0FMSUdOID0g
NCwKICAgIExPTkdMT05HX0FMSUdOID0gOCwKCgogICAgTE9OR0RPVUJMRV9BTElHTiA9IDgsCgoK
CiAgICBNQVhfQUxJR05NRU5UID0gOCwKCgoKCgoKCiAgICBERUZBVUxUX0JVRlNJWkUgPSA1MTIs
CgoKCiAgICBFWFBfR1JPV1RIX01BWCA9IDY1NTM2LAoKCgoKICAgIExJTkVBUl9HUk9XVEhfQ0hV
TksgPSA2NTUzNgogIH07CgoKCgoKCgogIHN0YXRpYyB2b2lkIHN3YXBfMiAoY29uc3QgY2hhciAq
b3JpZywgY2hhciAqdGFyZ2V0KTsKICBzdGF0aWMgdm9pZCBzd2FwXzQgKGNvbnN0IGNoYXIgKm9y
aWcsIGNoYXIgKnRhcmdldCk7CiAgc3RhdGljIHZvaWQgc3dhcF84IChjb25zdCBjaGFyICpvcmln
LCBjaGFyICp0YXJnZXQpOwogIHN0YXRpYyB2b2lkIHN3YXBfMTYgKGNvbnN0IGNoYXIgKm9yaWcs
IGNoYXIgKnRhcmdldCk7CiAgc3RhdGljIHZvaWQgc3dhcF8yX2FycmF5IChjb25zdCBjaGFyICpv
cmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdGFyZ2V0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CiAgc3RhdGljIHZvaWQgc3dhcF80X2Fy
cmF5IChjb25zdCBjaGFyICpvcmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
dGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CiAgc3Rh
dGljIHZvaWQgc3dhcF84X2FycmF5IChjb25zdCBjaGFyICpvcmlnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGxlbmd0aCk7CiAgc3RhdGljIHZvaWQgc3dhcF8xNl9hcnJheSAoY29uc3QgY2hhciAqb3Jp
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp0YXJnZXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCk7CgoKCiAgc3RhdGljIHZvaWQgbWJfYWxp
Z24gKEFDRV9NZXNzYWdlX0Jsb2NrICptYik7CiMgMTM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaCIKICBzdGF0aWMgc2l6ZV90IGZpcnN0
X3NpemUgKHNpemVfdCBtaW5zaXplKTsKCgoKICBzdGF0aWMgc2l6ZV90IG5leHRfc2l6ZSAoc2l6
ZV90IG1pbnNpemUpOwoKCgoKCgoKICBzdGF0aWMgaW50IGdyb3cgKEFDRV9NZXNzYWdlX0Jsb2Nr
ICptYiwgc2l6ZV90IG1pbnNpemUpOwoKCgogIHN0YXRpYyB2b2lkIGNvbnNvbGlkYXRlIChBQ0Vf
TWVzc2FnZV9CbG9jayAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9N
ZXNzYWdlX0Jsb2NrICpzcmMpOwoKICBzdGF0aWMgc2l6ZV90IHRvdGFsX2xlbmd0aCAoY29uc3Qg
QUNFX01lc3NhZ2VfQmxvY2sgKmJlZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZW5kKTsKIyAxNjUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5oIgogICAgdHlwZWRlZiB1X2NoYXIg
Qm9vbGVhbjsKCgogIHR5cGVkZWYgdV9jaGFyIE9jdGV0OwogIHR5cGVkZWYgY2hhciBDaGFyOwog
IHR5cGVkZWYgQUNFX09TOjpXQ2hhciBXQ2hhcjsKICB0eXBlZGVmIEFDRV9JTlQxNiBTaG9ydDsK
ICB0eXBlZGVmIEFDRV9VSU5UMTYgVVNob3J0OwogIHR5cGVkZWYgQUNFX0lOVDMyIExvbmc7CiAg
dHlwZWRlZiBBQ0VfVUlOVDMyIFVMb25nOwogIHR5cGVkZWYgQUNFX1VJTlQ2NCBVTG9uZ0xvbmc7
CiMgMTkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RS
X0Jhc2UuaCIKICAgICAgICAgICAgICB0eXBlZGVmIGxvbmcgbG9uZyBMb25nTG9uZzsKIyAyMjAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5o
IgogICAgICB0eXBlZGVmIGZsb2F0IEZsb2F0OwojIDI0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiCiAgICAgIHR5cGVkZWYgZG91Ymxl
IERvdWJsZTsKIyAyNjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9DRFJfQmFzZS5oIgogICAgICAgc3RydWN0IExvbmdEb3VibGUKICAgICAgIHsKICAgICAg
ICAgY2hhciBsZFsxNl07CiAgICAgICAgIGludCBvcGVyYXRvcj09IChjb25zdCBMb25nRG91Ymxl
ICZyaHMpIGNvbnN0OwogICAgICAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgTG9uZ0RvdWJsZSAm
cmhzKSBjb25zdDsKCiAgICAgICB9OwojIDI4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNlLmgiCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIiAxCiMgNDcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DRFJfQmFzZS5pbmwiCmlu
bGluZSB2b2lkCkFDRV9DRFI6OnN3YXBfMiAoY29uc3QgY2hhciAqb3JpZywgY2hhciogdGFyZ2V0
KQp7CgoKICB1bnNpZ25lZCBzaG9ydCBhID0KICAgICpyZWludGVycHJldF9jYXN0PGNvbnN0IHVu
c2lnbmVkIHNob3J0Kj4gKG9yaWcpOwogIGFzbSggInJvbHcgJDgsICUwIiA6ICI9ciIgKGEpIDog
IjAiIChhKSApOwogICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4gKHRhcmdldCkg
PSBhOwojIDczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
Q0RSX0Jhc2UuaW5sIgp9CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpzd2FwXzQgKGNvbnN0IGNoYXIq
IG9yaWcsIGNoYXIqIHRhcmdldCkKewoKCiAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGogPQogICAg
KnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgaW50Kj4gKG9yaWcpOwogIGFzbSAoImJz
d2FwICUxIiA6ICI9ciIgKGopIDogIjAiIChqKSk7CiAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgaW50Kj4gKHRhcmdldCkgPSBqOwojIDk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIgp9CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpz
d2FwXzggKGNvbnN0IGNoYXIqIG9yaWcsIGNoYXIqIHRhcmdldCkKewoKICByZWdpc3RlciB1bnNp
Z25lZCBpbnQgaSA9CiAgICAqcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBpbnQqPiAo
b3JpZyk7CiAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGogPQogICAgKnJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgaW50Kj4gKG9yaWcgKyA0KTsKICBhc20gKCJic3dhcCAlMSIgOiAiPXIi
IChpKSA6ICIwIiAoaSkpOwogIGFzbSAoImJzd2FwICUxIiA6ICI9ciIgKGopIDogIjAiIChqKSk7
CiAgKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgaW50Kj4gKHRhcmdldCArIDQpID0gaTsKICAq
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQqPiAodGFyZ2V0KSA9IGo7CiMgMTQzICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX0Jhc2UuaW5sIgp9
CgppbmxpbmUgdm9pZApBQ0VfQ0RSOjpzd2FwXzE2IChjb25zdCBjaGFyKiBvcmlnLCBjaGFyKiB0
YXJnZXQpCnsKICBzd2FwXzggKG9yaWcgKyA4LCB0YXJnZXQpOwogIHN3YXBfOCAob3JpZywgdGFy
Z2V0ICsgOCk7Cn0KCmlubGluZSB2b2lkCkFDRV9DRFI6Om1iX2FsaWduIChBQ0VfTWVzc2FnZV9C
bG9jayAqbWIpCnsKICBjaGFyICpzdGFydCA9ICgoY2hhciAqKSAoKCgocHRyX2FyaXRoX3QpICht
Yi0+YmFzZSAoKSkpICsgKChwdHJfYXJpdGhfdCkoKChBQ0VfQ0RSOjpNQVhfQUxJR05NRU5UKSkt
MSkpKSAmICh+KChwdHJfYXJpdGhfdCkoKChBQ0VfQ0RSOjpNQVhfQUxJR05NRU5UKSktMSkpKSkp
OwoKICBtYi0+cmRfcHRyIChzdGFydCk7CiAgbWItPndyX3B0ciAoc3RhcnQpOwp9CgppbmxpbmUg
c2l6ZV90CkFDRV9DRFI6OmZpcnN0X3NpemUgKHNpemVfdCBtaW5zaXplKQp7CiAgaWYgKG1pbnNp
emUgPT0gMCkKICAgIHJldHVybiBBQ0VfQ0RSOjpERUZBVUxUX0JVRlNJWkU7CgogIHNpemVfdCBu
ZXdzaXplID0gQUNFX0NEUjo6REVGQVVMVF9CVUZTSVpFOwogIHdoaWxlIChuZXdzaXplIDwgbWlu
c2l6ZSkKICAgIHsKICAgICAgaWYgKG5ld3NpemUgPCBBQ0VfQ0RSOjpFWFBfR1JPV1RIX01BWCkK
ICAgICAgICB7CgoKICAgICAgICAgIG5ld3NpemUgKj0gMjsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CgoKCiAgICAgICAgICBuZXdzaXplICs9IEFDRV9DRFI6OkxJTkVBUl9HUk9XVEhf
Q0hVTks7CiAgICAgICAgfQogICAgfQogIHJldHVybiBuZXdzaXplOwp9CgppbmxpbmUgc2l6ZV90
CkFDRV9DRFI6Om5leHRfc2l6ZSAoc2l6ZV90IG1pbnNpemUpCnsKICBzaXplX3QgbmV3c2l6ZSA9
CiAgICBBQ0VfQ0RSOjpmaXJzdF9zaXplIChtaW5zaXplKTsKCiAgaWYgKG5ld3NpemUgPT0gbWlu
c2l6ZSkKICAgIHsKCiAgICAgIGlmIChuZXdzaXplIDwgQUNFX0NEUjo6RVhQX0dST1dUSF9NQVgp
CiAgICAgICAgbmV3c2l6ZSAqPSAyOwogICAgICBlbHNlCiAgICAgICAgbmV3c2l6ZSArPSBBQ0Vf
Q0RSOjpMSU5FQVJfR1JPV1RIX0NIVU5LOwogICAgfQoKICByZXR1cm4gbmV3c2l6ZTsKfQojIDI4
NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9CYXNl
LmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcG9zdC5oIiAxCiMgMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvQ0RSX0Jhc2UuaCIgMgojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIiAxCiMg
NDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5
X21hY3Jvcy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wcmUuaCIgMQojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL3RyeV9tYWNyb3MuaCIgMgojIDUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL3RyeV9tYWNyb3MuaCIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNvbmYuaCIgMQojIDIx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNv
bmYuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cHJlLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9vcmJjb25mLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDIKIyA0MDggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIgplbnVtIE1DQVNU
X1NFUlZJQ0VJRAp7CiAgTkFNRVNFUlZJQ0UsCiAgVFJBRElOR1NFUlZJQ0UsCiAgSU1QTFJFUE9T
RVJWSUNFLAogIElOVEVSRkFDRVJFUE9TRVJWSUNFCn07CiMgODY1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL29yYmNvbmYuaCIKZW51bSBUQU9fQ2Fj
aGVkX1BvbGljeV9UeXBlCnsKICBUQU9fQ0FDSEVEX1BPTElDWV9VTkNBQ0hFRCA9IC0xLAogIFRB
T19DQUNIRURfUE9MSUNZX1BSSU9SSVRZX01PREVMID0gMCwKICBUQU9fQ0FDSEVEX1BPTElDWV9U
SFJFQURQT09MLAogIFRBT19DQUNIRURfUE9MSUNZX1JUX1NFUlZFUl9QUk9UT0NPTCwKICBUQU9f
Q0FDSEVEX1BPTElDWV9SVF9DTElFTlRfUFJPVE9DT0wsCiAgVEFPX0NBQ0hFRF9QT0xJQ1lfUlRf
UFJJVkFURV9DT05ORUNUSU9OLAogIFRBT19DQUNIRURfUE9MSUNZX1JUX1BSSU9SSVRZX0JBTkRF
RF9DT05ORUNUSU9OLAoKICBUQU9fQ0FDSEVEX1BPTElDWV9MSUZFU1BBTiwKICBUQU9fQ0FDSEVE
X1BPTElDWV9JRF9VTklRVUVORVNTLAogIFRBT19DQUNIRURfUE9MSUNZX0lEX0FTU0lHTk1FTlQs
CgoKICBUQU9fQ0FDSEVEX1BPTElDWV9USFJFQUQsCiAgVEFPX0NBQ0hFRF9QT0xJQ1lfSU1QTElD
SVRfQUNUSVZBVElPTiwKICBUQU9fQ0FDSEVEX1BPTElDWV9TRVJWQU5UX1JFVEVOVElPTiwKICBU
QU9fQ0FDSEVEX1BPTElDWV9SRVFVRVNUX1BST0NFU1NJTkcsCgoKCiAgVEFPX0NBQ0hFRF9QT0xJ
Q1lfU1lOQ19TQ09QRSwKCgoKICBUQU9fQ0FDSEVEX1BPTElDWV9SRUxBVElWRV9ST1VORFRSSVBf
VElNRU9VVCwKCgoKICBUQU9fQ0FDSEVEX1BPTElDWV9CVUZGRVJJTkdfQ09OU1RSQUlOVCwKCgog
IFRBT19DQUNIRURfUE9MSUNZX01BWF9DQUNIRUQKfTsKCgoKZW51bSBUQU9fUG9saWN5X1Njb3Bl
CnsKICBUQU9fUE9MSUNZX09CSkVDVF9TQ09QRSA9IDB4MDEsCiAgVEFPX1BPTElDWV9USFJFQURf
U0NPUEUgPSAweDAyLAogIFRBT19QT0xJQ1lfT1JCX1NDT1BFID0gMHgwNCwKICBUQU9fUE9MSUNZ
X1BPQV9TQ09QRSA9IDB4MDgsCiAgVEFPX1BPTElDWV9DTElFTlRfRVhQT1NFRCA9IDB4MTAKfTsK
IyA5NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
b3JiY29uZi5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wb3N0LmgiIDEKIyA5NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIiAyCiMgNTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NPUkJBX21hY3Jvcy5oIiAxCiMg
MjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DT1JCQV9t
YWNyb3MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcHJlLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL0NPUkJBX21hY3Jvcy5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ09SQkFfbWFjcm9zLmgiIDIKIyA0MjcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9DT1JCQV9tYWNyb3MuaCIK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o
IiAxCiMgNDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
Q09SQkFfbWFjcm9zLmgiIDIKIyA1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby90cnlfbWFjcm9zLmgiIDIKIyAzNTMgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21hY3Jvcy5oIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAzNTQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdHJ5X21h
Y3Jvcy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vY29yYmFmd2QuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vdmFyYmFzZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vdmFyYmFzZS5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL3ZhcmJhc2UuaCIg
MgojIDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L3ZhcmJhc2UuaCIKY2xhc3MgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIFRBT19CYXNlX3ZhciAo
dm9pZCkge30KfTsKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3Bvc3QuaCIgMQojIDM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL3ZhcmJhc2UuaCIgMgojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19FeHBvcnQuaCIgMQoj
IDEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RB
T19FeHBvcnQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX0V4cG9ydC5oIiAyCiMgMzggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMgojIDYzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndk
LmgiCmNsYXNzIFRBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzCnsKcHVibGljOgogIGVudW0gewoK
ICAgIENTX1JFTU9URV9TVFJBVEVHWSwKCgogICAgQ1NfVEhSVV9QT0FfU1RSQVRFR1ksCgoKCiAg
ICBDU19ESVJFQ1RfU1RSQVRFR1ksCgoKCgogICAgQ1NfTEFTVAogIH07Cn07CgoKCmNsYXNzIENP
UkJBX0FueTsKY2xhc3MgQ09SQkFfQW55X3ZhcjsKY2xhc3MgQ09SQkFfQW55X291dDsKdHlwZWRl
ZiBjbGFzcyBDT1JCQV9BbnkgKkNPUkJBX0FueV9wdHI7CgpjbGFzcyBDT1JCQV9UeXBlQ29kZTsK
Y2xhc3MgQ09SQkFfVHlwZUNvZGVfdmFyOwpjbGFzcyBDT1JCQV9UeXBlQ29kZV9vdXQ7CnR5cGVk
ZWYgY2xhc3MgQ09SQkFfVHlwZUNvZGUgKkNPUkJBX1R5cGVDb2RlX3B0cjsKCmNsYXNzIENPUkJB
X0V4Y2VwdGlvbjsKY2xhc3MgQ09SQkFfVXNlckV4Y2VwdGlvbjsKY2xhc3MgQ09SQkFfU3lzdGVt
RXhjZXB0aW9uOwpjbGFzcyBDT1JCQV9Vbmtub3duVXNlckV4Y2VwdGlvbjsKY2xhc3MgQ09SQkFf
RXhjZXB0aW9uTGlzdDsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uTGlzdF92YXI7CnR5cGVkZWYgY2xh
c3MgQ09SQkFfRXhjZXB0aW9uICpDT1JCQV9FeGNlcHRpb25fcHRyOwojIDE0OCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIgpjbGFz
cyBDT1JCQV9VTktOT1dOOyBjbGFzcyBDT1JCQV9CQURfUEFSQU07IGNsYXNzIENPUkJBX05PX01F
TU9SWTsgY2xhc3MgQ09SQkFfSU1QX0xJTUlUOyBjbGFzcyBDT1JCQV9DT01NX0ZBSUxVUkU7IGNs
YXNzIENPUkJBX0lOVl9PQkpSRUY7IGNsYXNzIENPUkJBX09CSkVDVF9OT1RfRVhJU1Q7IGNsYXNz
IENPUkJBX05PX1BFUk1JU1NJT047IGNsYXNzIENPUkJBX0lOVEVSTkFMOyBjbGFzcyBDT1JCQV9N
QVJTSEFMOyBjbGFzcyBDT1JCQV9JTklUSUFMSVpFOyBjbGFzcyBDT1JCQV9OT19JTVBMRU1FTlQ7
IGNsYXNzIENPUkJBX0JBRF9UWVBFQ09ERTsgY2xhc3MgQ09SQkFfQkFEX09QRVJBVElPTjsgY2xh
c3MgQ09SQkFfTk9fUkVTT1VSQ0VTOyBjbGFzcyBDT1JCQV9OT19SRVNQT05TRTsgY2xhc3MgQ09S
QkFfUEVSU0lTVF9TVE9SRTsgY2xhc3MgQ09SQkFfQkFEX0lOVl9PUkRFUjsgY2xhc3MgQ09SQkFf
VFJBTlNJRU5UOyBjbGFzcyBDT1JCQV9GUkVFX01FTTsgY2xhc3MgQ09SQkFfSU5WX0lERU5UOyBj
bGFzcyBDT1JCQV9JTlZfRkxBRzsgY2xhc3MgQ09SQkFfSU5URl9SRVBPUzsgY2xhc3MgQ09SQkFf
QkFEX0NPTlRFWFQ7IGNsYXNzIENPUkJBX09CSl9BREFQVEVSOyBjbGFzcyBDT1JCQV9EQVRBX0NP
TlZFUlNJT047IGNsYXNzIENPUkJBX0lOVl9QT0xJQ1k7IGNsYXNzIENPUkJBX1JFQklORDsgY2xh
c3MgQ09SQkFfVElNRU9VVDsgY2xhc3MgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEU7IGNs
YXNzIENPUkJBX1RSQU5TQUNUSU9OX01PREU7IGNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJ
UkVEOyBjbGFzcyBDT1JCQV9UUkFOU0FDVElPTl9ST0xMRURCQUNLOyBjbGFzcyBDT1JCQV9JTlZB
TElEX1RSQU5TQUNUSU9OOyBjbGFzcyBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRTsgY2xhc3Mg
Q09SQkFfQkFEX1FPUzsKCgoKCmNsYXNzIENPUkJBX1dyb25nVHJhbnNhY3Rpb247CnR5cGVkZWYg
Q09SQkFfV3JvbmdUcmFuc2FjdGlvbiAqQ09SQkFfV3JvbmdUcmFuc2FjdGlvbl9wdHI7CgpjbGFz
cyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3k7CmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGlj
eV92YXI7CmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQ7CnR5cGVkZWYgY2xhc3Mg
Q09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICpDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyOwoK
CgpjbGFzcyBDT1JCQV9SZXF1ZXN0OwpjbGFzcyBDT1JCQV9SZXF1ZXN0X3ZhcjsKY2xhc3MgQ09S
QkFfUmVxdWVzdF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfUmVxdWVzdCAqQ09SQkFfUmVxdWVz
dF9wdHI7CgpjbGFzcyBDT1JCQV9PUkJfUmVxdWVzdFNlcTsKY2xhc3MgQ09SQkFfT1JCX1JlcXVl
c3RTZXFfdmFyOwpjbGFzcyBDT1JCQV9PUkJfUmVxdWVzdFNlcV9vdXQ7CgpjbGFzcyBDT1JCQV9O
YW1lZFZhbHVlOwpjbGFzcyBDT1JCQV9OYW1lZFZhbHVlX3ZhcjsKY2xhc3MgQ09SQkFfTmFtZWRW
YWx1ZV9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfTmFtZWRWYWx1ZSAqQ09SQkFfTmFtZWRWYWx1
ZV9wdHI7CgpjbGFzcyBDT1JCQV9OVkxpc3Q7CmNsYXNzIENPUkJBX05WTGlzdF92YXI7CmNsYXNz
IENPUkJBX05WTGlzdF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfTlZMaXN0ICpDT1JCQV9OVkxp
c3RfcHRyOwoKY2xhc3MgQ09SQkFfQ29udGV4dDsKY2xhc3MgQ09SQkFfQ29udGV4dF92YXI7CmNs
YXNzIENPUkJBX0NvbnRleHRfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJBX0NvbnRleHQgKkNPUkJB
X0NvbnRleHRfcHRyOwoKY2xhc3MgQ09SQkFfQ29udGV4dExpc3Q7CmNsYXNzIENPUkJBX0NvbnRl
eHRMaXN0X3ZhcjsKY2xhc3MgQ09SQkFfQ29udGV4dExpc3Rfb3V0Owp0eXBlZGVmIGNsYXNzIENP
UkJBX0NvbnRleHRMaXN0ICpDT1JCQV9Db250ZXh0TGlzdF9wdHI7CgpjbGFzcyBDT1JCQV9PUkI7
CmNsYXNzIENPUkJBX09SQl92YXI7CmNsYXNzIENPUkJBX09SQl9vdXQ7CnR5cGVkZWYgY2xhc3Mg
Q09SQkFfT1JCICpDT1JCQV9PUkJfcHRyOwoKY2xhc3MgQ09SQkFfT2JqZWN0OwpjbGFzcyBDT1JC
QV9PYmplY3RfdmFyOwpjbGFzcyBDT1JCQV9PYmplY3Rfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJB
X09iamVjdCAqQ09SQkFfT2JqZWN0X3B0cjsKCmNsYXNzIENPUkJBX0xvY2FsT2JqZWN0OwpjbGFz
cyBDT1JCQV9Mb2NhbE9iamVjdF92YXI7CmNsYXNzIENPUkJBX0xvY2FsT2JqZWN0X291dDsKdHlw
ZWRlZiBjbGFzcyBDT1JCQV9Mb2NhbE9iamVjdCAqQ09SQkFfTG9jYWxPYmplY3RfcHRyOwoKY2xh
c3MgQ09SQkFfQ3VycmVudDsKY2xhc3MgQ09SQkFfQ3VycmVudF92YXI7CmNsYXNzIENPUkJBX0N1
cnJlbnRfb3V0Owp0eXBlZGVmIGNsYXNzIENPUkJBX0N1cnJlbnQgKkNPUkJBX0N1cnJlbnRfcHRy
OwoKY2xhc3MgVEFPX1NlcnZlclJlcXVlc3Q7CmNsYXNzIENPUkJBX1NlcnZlclJlcXVlc3Q7CnR5
cGVkZWYgY2xhc3MgQ09SQkFfU2VydmVyUmVxdWVzdCAqQ09SQkFfU2VydmVyUmVxdWVzdF9wdHI7
CgpjbGFzcyBDT1JCQV9FbnZpcm9ubWVudDsKY2xhc3MgQ09SQkFfRW52aXJvbm1lbnRfdmFyOwpj
bGFzcyBDT1JCQV9FbnZpcm9ubWVudF9vdXQ7CnR5cGVkZWYgY2xhc3MgQ09SQkFfRW52aXJvbm1l
bnQgKkNPUkJBX0Vudmlyb25tZW50X3B0cjsKCgpzdHJ1Y3QgQ09SQkFfU2VydmljZURldGFpbDsK
Y2xhc3MgQ09SQkFfU2VydmljZURldGFpbF92YXI7CmNsYXNzIENPUkJBX1NlcnZpY2VEZXRhaWxf
b3V0Owp0eXBlZGVmIENPUkJBX1NlcnZpY2VEZXRhaWwgKiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3B0
cjsKCnN0cnVjdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb247CmNsYXNzIENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbl92YXI7CmNsYXNzIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ7CnR5cGVk
ZWYgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICogQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3B0
cjsKCmNsYXNzIENPUkJBX1ByaW5jaXBhbDsKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX3ZhcjsKY2xh
c3MgQ09SQkFfUHJpbmNpcGFsX291dDsKdHlwZWRlZiBjbGFzcyBDT1JCQV9QcmluY2lwYWwgKkNP
UkJBX1ByaW5jaXBhbF9wdHI7Cgp0eXBlZGVmIGNsYXNzIENPUkJBX0ltcGxlbWVudGF0aW9uRGVm
ICpDT1JCQV9JbXBsZW1lbnRhdGlvbkRlZl9wdHI7CgoKY2xhc3MgQ09SQkFfVmFsdWVCYXNlOwpj
bGFzcyBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlOwp0eXBlZGVmIENPUkJBX1ZhbHVlRmFjdG9yeUJh
c2UgKkNPUkJBX1ZhbHVlRmFjdG9yeV9wdHI7CmNsYXNzIENPUkJBX0RlZmF1bHRWYWx1ZVJlZkNv
dW50QmFzZTsKCgpjbGFzcyBDT1JCQV9TdHJpbmdfdmFyOwpjbGFzcyBDT1JCQV9TdHJpbmdfb3V0
OwpjbGFzcyBDT1JCQV9XU3RyaW5nX3ZhcjsKY2xhc3MgQ09SQkFfV1N0cmluZ19vdXQ7CgpjbGFz
cyBDT1JCQV9FeGNlcHRpb25MaXN0OwoKY2xhc3MgQ09SQkFfUG9saWN5RXJyb3I7CnR5cGVkZWYg
Q09SQkFfUG9saWN5RXJyb3IgKkNPUkJBX1BvbGljeUVycm9yX3B0cjsKCmNsYXNzIENPUkJBX0lu
dmFsaWRQb2xpY2llczsKdHlwZWRlZiBDT1JCQV9JbnZhbGlkUG9saWNpZXMqIENPUkJBX0ludmFs
aWRQb2xpY2llc19wdHI7CgpjbGFzcyBDT1JCQV9Qb2xpY3lUeXBlU2VxOwpjbGFzcyBDT1JCQV9Q
b2xpY3lUeXBlU2VxX3ZhcjsKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ7CgpjbGFzcyBD
T1JCQV9Qb2xpY3lNYW5hZ2VyOwpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3ZhcjsKY2xhc3Mg
Q09SQkFfUG9saWN5TWFuYWdlcl9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9saWN5TWFuYWdlciAqQ09S
QkFfUG9saWN5TWFuYWdlcl9wdHI7CgpjbGFzcyBDT1JCQV9Qb2xpY3lDdXJyZW50OwpjbGFzcyBD
T1JCQV9Qb2xpY3lDdXJyZW50X3ZhcjsKY2xhc3MgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQ7CnR5
cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudCAqQ09SQkFfUG9saWN5Q3VycmVudF9wdHI7CgpjbGFz
cyBDT1JCQV9Qb2xpY3k7CmNsYXNzIENPUkJBX1BvbGljeV92YXI7CmNsYXNzIENPUkJBX1BvbGlj
eV9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9saWN5ICpDT1JCQV9Qb2xpY3lfcHRyOwoKY2xhc3MgQ09S
QkFfUG9saWN5TGlzdDsKY2xhc3MgQ09SQkFfUG9saWN5TGlzdF92YXI7CmNsYXNzIENPUkJBX1Bv
bGljeUxpc3Rfb3V0OwoKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcjsKY2xhc3MgQ09SQkFfRG9t
YWluTWFuYWdlcl92YXI7CmNsYXNzIENPUkJBX0RvbWFpbk1hbmFnZXJfb3V0Owp0eXBlZGVmIENP
UkJBX0RvbWFpbk1hbmFnZXIgKkNPUkJBX0RvbWFpbk1hbmFnZXJfcHRyOwoKY2xhc3MgQ09SQkFf
RG9tYWluTWFuYWdlckxpc3Q7CmNsYXNzIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhcjsKY2xh
c3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0Owp0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFn
ZXJMaXN0ICpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9wdHI7CgpjbGFzcyBDT1JCQV9Qb2xsYWJs
ZVNldDsKY2xhc3MgQ09SQkFfUG9sbGFibGVTZXRfdmFyOwpjbGFzcyBDT1JCQV9Qb2xsYWJsZVNl
dF9vdXQ7CnR5cGVkZWYgQ09SQkFfUG9sbGFibGVTZXQgKkNPUkJBX1BvbGxhYmxlU2V0X3B0cjsK
CmNsYXNzIENPUkJBX1BvbGxhYmxlOwpjbGFzcyBDT1JCQV9Qb2xsYWJsZV92YXI7CmNsYXNzIENP
UkJBX1BvbGxhYmxlX291dDsKdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZSAqQ09SQkFfUG9sbGFibGVf
cHRyOwoKY2xhc3MgQ09SQkFfRElJUG9sbGFibGU7CmNsYXNzIENPUkJBX0RJSVBvbGxhYmxlX3Zh
cjsKY2xhc3MgQ09SQkFfRElJUG9sbGFibGVfb3V0Owp0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxl
ICpDT1JCQV9ESUlQb2xsYWJsZV9wdHI7CgoKCgoKY2xhc3MgVEFPX0lucHV0Q0RSOwpjbGFzcyBU
QU9fT3V0cHV0Q0RSOwpjbGFzcyBUQU9fU3R1YjsKCmNsYXNzIENPUkJBX09SQl9PYmplY3RJZExp
c3Q7CmNsYXNzIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOwpjbGFzcyBDT1JCQV9PUkJfT2Jq
ZWN0SWRMaXN0X291dDsKdHlwZWRlZiBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpDT1JCQV9PUkJf
T2JqZWN0SWRMaXN0X3B0cjsKCgpjbGFzcyBDT1JCQV9JUk9iamVjdDsKY2xhc3MgQ09SQkFfSVJP
YmplY3RfdmFyOwpjbGFzcyBDT1JCQV9JUk9iamVjdF9vdXQ7CnR5cGVkZWYgQ09SQkFfSVJPYmpl
Y3QgKkNPUkJBX0lST2JqZWN0X3B0cjsKCmNsYXNzIENPUkJBX0NvbnRhaW5lZDsKY2xhc3MgQ09S
QkFfQ29udGFpbmVkX3ZhcjsKY2xhc3MgQ09SQkFfQ29udGFpbmVkX291dDsKdHlwZWRlZiBDT1JC
QV9Db250YWluZWQgKkNPUkJBX0NvbnRhaW5lZF9wdHI7CgpjbGFzcyBDT1JCQV9Db250YWluZWRT
ZXE7CmNsYXNzIENPUkJBX0NvbnRhaW5lZFNlcV92YXI7CmNsYXNzIENPUkJBX0NvbnRhaW5lZFNl
cV9vdXQ7CgpjbGFzcyBDT1JCQV9SZXBvc2l0b3J5OwpjbGFzcyBDT1JCQV9SZXBvc2l0b3J5X3Zh
cjsKY2xhc3MgQ09SQkFfUmVwb3NpdG9yeV9vdXQ7CnR5cGVkZWYgQ09SQkFfUmVwb3NpdG9yeSAq
Q09SQkFfUmVwb3NpdG9yeV9wdHI7CgpjbGFzcyBDT1JCQV9Db250YWluZXI7CmNsYXNzIENPUkJB
X0NvbnRhaW5lcl92YXI7CmNsYXNzIENPUkJBX0NvbnRhaW5lcl9vdXQ7CnR5cGVkZWYgQ09SQkFf
Q29udGFpbmVyICpDT1JCQV9Db250YWluZXJfcHRyOwoKY2xhc3MgQ09SQkFfTW9kdWxlRGVmOwpj
bGFzcyBDT1JCQV9Nb2R1bGVEZWZfdmFyOwpjbGFzcyBDT1JCQV9Nb2R1bGVEZWZfb3V0Owp0eXBl
ZGVmIENPUkJBX01vZHVsZURlZiAqQ09SQkFfTW9kdWxlRGVmX3B0cjsKCmNsYXNzIENPUkJBX0Nv
bnN0YW50RGVmOwpjbGFzcyBDT1JCQV9Db25zdGFudERlZl92YXI7CmNsYXNzIENPUkJBX0NvbnN0
YW50RGVmX291dDsKdHlwZWRlZiBDT1JCQV9Db25zdGFudERlZiAqQ09SQkFfQ29uc3RhbnREZWZf
cHRyOwoKY2xhc3MgQ09SQkFfSURMVHlwZTsKY2xhc3MgQ09SQkFfSURMVHlwZV92YXI7CmNsYXNz
IENPUkJBX0lETFR5cGVfb3V0Owp0eXBlZGVmIENPUkJBX0lETFR5cGUgKkNPUkJBX0lETFR5cGVf
cHRyOwoKY2xhc3MgQ09SQkFfU3RydWN0RGVmOwpjbGFzcyBDT1JCQV9TdHJ1Y3REZWZfdmFyOwpj
bGFzcyBDT1JCQV9TdHJ1Y3REZWZfb3V0Owp0eXBlZGVmIENPUkJBX1N0cnVjdERlZiAqQ09SQkFf
U3RydWN0RGVmX3B0cjsKCmNsYXNzIENPUkJBX1VuaW9uRGVmOwpjbGFzcyBDT1JCQV9VbmlvbkRl
Zl92YXI7CmNsYXNzIENPUkJBX1VuaW9uRGVmX291dDsKdHlwZWRlZiBDT1JCQV9VbmlvbkRlZiAq
Q09SQkFfVW5pb25EZWZfcHRyOwoKY2xhc3MgQ09SQkFfRW51bURlZjsKY2xhc3MgQ09SQkFfRW51
bURlZl92YXI7CmNsYXNzIENPUkJBX0VudW1EZWZfb3V0Owp0eXBlZGVmIENPUkJBX0VudW1EZWYg
KkNPUkJBX0VudW1EZWZfcHRyOwoKY2xhc3MgQ09SQkFfQWxpYXNEZWY7CmNsYXNzIENPUkJBX0Fs
aWFzRGVmX3ZhcjsKY2xhc3MgQ09SQkFfQWxpYXNEZWZfb3V0Owp0eXBlZGVmIENPUkJBX0FsaWFz
RGVmICpDT1JCQV9BbGlhc0RlZl9wdHI7CgpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZWY7CmNsYXNz
IENPUkJBX0ludGVyZmFjZURlZl92YXI7CmNsYXNzIENPUkJBX0ludGVyZmFjZURlZl9vdXQ7CnR5
cGVkZWYgQ09SQkFfSW50ZXJmYWNlRGVmICpDT1JCQV9JbnRlcmZhY2VEZWZfcHRyOwoKY2xhc3Mg
Q09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWY7CmNsYXNzIENPUkJBX0Fic3RyYWN0SW50ZXJmYWNl
RGVmX3ZhcjsKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZfb3V0Owp0eXBlZGVmIENP
UkJBX0Fic3RyYWN0SW50ZXJmYWNlRGVmICpDT1JCQV9BYnN0cmFjdEludGVyZmFjZURlZl9wdHI7
CgpjbGFzcyBDT1JCQV9Mb2NhbEludGVyZmFjZURlZjsKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZh
Y2VEZWZfdmFyOwpjbGFzcyBDT1JCQV9Mb2NhbEludGVyZmFjZURlZl9vdXQ7CnR5cGVkZWYgQ09S
QkFfTG9jYWxJbnRlcmZhY2VEZWYgKkNPUkJBX0xvY2FsSW50ZXJmYWNlRGVmX3B0cjsKCmNsYXNz
IENPUkJBX0V4Y2VwdGlvbkRlZjsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uRGVmX3ZhcjsKY2xhc3Mg
Q09SQkFfRXhjZXB0aW9uRGVmX291dDsKdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWYgKkNPUkJB
X0V4Y2VwdGlvbkRlZl9wdHI7CgpjbGFzcyBDT1JCQV9OYXRpdmVEZWY7CmNsYXNzIENPUkJBX05h
dGl2ZURlZl92YXI7CmNsYXNzIENPUkJBX05hdGl2ZURlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfTmF0
aXZlRGVmICpDT1JCQV9OYXRpdmVEZWZfcHRyOwoKY2xhc3MgQ09SQkFfSW50ZXJmYWNlRGVmU2Vx
OwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZWZTZXFfdmFyOwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VE
ZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CmNsYXNzIENP
UkJBX0Fic3RyYWN0SW50ZXJmYWNlRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfQWJzdHJhY3RJbnRl
cmZhY2VEZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZhY2VEZWZTZXE7CmNsYXNz
IENPUkJBX0xvY2FsSW50ZXJmYWNlRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfTG9jYWxJbnRlcmZh
Y2VEZWZTZXFfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVEZWY7CmNsYXNzIENPUkJBX1ZhbHVlRGVm
X3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVEZWZfb3V0Owp0eXBlZGVmIENPUkJBX1ZhbHVlRGVmICpD
T1JCQV9WYWx1ZURlZl9wdHI7CgpjbGFzcyBDT1JCQV9WYWx1ZURlZlNlcTsKY2xhc3MgQ09SQkFf
VmFsdWVEZWZTZXFfdmFyOwpjbGFzcyBDT1JCQV9WYWx1ZURlZlNlcV9vdXQ7CgpjbGFzcyBDT1JC
QV9WYWx1ZUJveERlZjsKY2xhc3MgQ09SQkFfVmFsdWVCb3hEZWZfdmFyOwpjbGFzcyBDT1JCQV9W
YWx1ZUJveERlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfVmFsdWVCb3hEZWYgKkNPUkJBX1ZhbHVlQm94
RGVmX3B0cjsKCnN0cnVjdCBDT1JCQV9TdHJ1Y3RNZW1iZXI7CmNsYXNzIENPUkJBX1N0cnVjdE1l
bWJlcl92YXI7CmNsYXNzIENPUkJBX1N0cnVjdE1lbWJlcl9vdXQ7CgpjbGFzcyBDT1JCQV9TdHJ1
Y3RNZW1iZXJTZXE7CmNsYXNzIENPUkJBX1N0cnVjdE1lbWJlclNlcV92YXI7CmNsYXNzIENPUkJB
X1N0cnVjdE1lbWJlclNlcV9vdXQ7CgpzdHJ1Y3QgQ09SQkFfSW5pdGlhbGl6ZXI7CmNsYXNzIENP
UkJBX0luaXRpYWxpemVyX3ZhcjsKY2xhc3MgQ09SQkFfSW5pdGlhbGl6ZXJfb3V0OwoKY2xhc3Mg
Q09SQkFfSW5pdGlhbGl6ZXJTZXE7CmNsYXNzIENPUkJBX0luaXRpYWxpemVyU2VxX3ZhcjsKY2xh
c3MgQ09SQkFfSW5pdGlhbGl6ZXJTZXFfb3V0OwoKc3RydWN0IENPUkJBX1VuaW9uTWVtYmVyOwpj
bGFzcyBDT1JCQV9Vbmlvbk1lbWJlcl92YXI7CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyX291dDsK
CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyU2VxOwpjbGFzcyBDT1JCQV9Vbmlvbk1lbWJlclNlcV92
YXI7CmNsYXNzIENPUkJBX1VuaW9uTWVtYmVyU2VxX291dDsKCmNsYXNzIENPUkJBX0VudW1NZW1i
ZXJTZXE7CmNsYXNzIENPUkJBX0VudW1NZW1iZXJTZXFfdmFyOwpjbGFzcyBDT1JCQV9FbnVtTWVt
YmVyU2VxX291dDsKCnN0cnVjdCBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFf
TW9kdWxlRGVzY3JpcHRpb25fdmFyOwpjbGFzcyBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbl9vdXQ7
CgpzdHJ1Y3QgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfQ29uc3RhbnRE
ZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX0NvbnN0YW50RGVzY3JpcHRpb25fb3V0OwoKY2xh
c3MgQ09SQkFfVHlwZWRlZkRlZjsKY2xhc3MgQ09SQkFfVHlwZWRlZkRlZl92YXI7CmNsYXNzIENP
UkJBX1R5cGVkZWZEZWZfb3V0Owp0eXBlZGVmIENPUkJBX1R5cGVkZWZEZWYgKkNPUkJBX1R5cGVk
ZWZEZWZfcHRyOwoKc3RydWN0IENPUkJBX1R5cGVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfVHlw
ZURlc2NyaXB0aW9uX3ZhcjsKY2xhc3MgQ09SQkFfVHlwZURlc2NyaXB0aW9uX291dDsKCmNsYXNz
IENPUkJBX1ByaW1pdGl2ZURlZjsKY2xhc3MgQ09SQkFfUHJpbWl0aXZlRGVmX3ZhcjsKY2xhc3Mg
Q09SQkFfUHJpbWl0aXZlRGVmX291dDsKdHlwZWRlZiBDT1JCQV9QcmltaXRpdmVEZWYgKkNPUkJB
X1ByaW1pdGl2ZURlZl9wdHI7CgpjbGFzcyBDT1JCQV9TdHJpbmdEZWY7CmNsYXNzIENPUkJBX1N0
cmluZ0RlZl92YXI7CmNsYXNzIENPUkJBX1N0cmluZ0RlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfU3Ry
aW5nRGVmICpDT1JCQV9TdHJpbmdEZWZfcHRyOwoKY2xhc3MgQ09SQkFfV3N0cmluZ0RlZjsKY2xh
c3MgQ09SQkFfV3N0cmluZ0RlZl92YXI7CmNsYXNzIENPUkJBX1dzdHJpbmdEZWZfb3V0Owp0eXBl
ZGVmIENPUkJBX1dzdHJpbmdEZWYgKkNPUkJBX1dzdHJpbmdEZWZfcHRyOwoKY2xhc3MgQ09SQkFf
Rml4ZWREZWY7CmNsYXNzIENPUkJBX0ZpeGVkRGVmX3ZhcjsKY2xhc3MgQ09SQkFfRml4ZWREZWZf
b3V0Owp0eXBlZGVmIENPUkJBX0ZpeGVkRGVmICpDT1JCQV9GaXhlZERlZl9wdHI7CgpjbGFzcyBD
T1JCQV9TZXF1ZW5jZURlZjsKY2xhc3MgQ09SQkFfU2VxdWVuY2VEZWZfdmFyOwpjbGFzcyBDT1JC
QV9TZXF1ZW5jZURlZl9vdXQ7CnR5cGVkZWYgQ09SQkFfU2VxdWVuY2VEZWYgKkNPUkJBX1NlcXVl
bmNlRGVmX3B0cjsKCmNsYXNzIENPUkJBX0FycmF5RGVmOwpjbGFzcyBDT1JCQV9BcnJheURlZl92
YXI7CmNsYXNzIENPUkJBX0FycmF5RGVmX291dDsKdHlwZWRlZiBDT1JCQV9BcnJheURlZiAqQ09S
QkFfQXJyYXlEZWZfcHRyOwoKc3RydWN0IENPUkJBX0V4Y2VwdGlvbkRlc2NyaXB0aW9uOwpjbGFz
cyBDT1JCQV9FeGNlcHRpb25EZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX0V4Y2VwdGlvbkRl
c2NyaXB0aW9uX291dDsKCmNsYXNzIENPUkJBX0V4Y2VwdGlvbkRlZlNlcTsKY2xhc3MgQ09SQkFf
RXhjZXB0aW9uRGVmU2VxX3ZhcjsKY2xhc3MgQ09SQkFfRXhjZXB0aW9uRGVmU2VxX291dDsKCmNs
YXNzIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxOwpjbGFzcyBDT1JCQV9FeGNEZXNjcmlwdGlvblNl
cV92YXI7CmNsYXNzIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxX291dDsKCmNsYXNzIENPUkJBX0F0
dHJpYnV0ZURlZjsKY2xhc3MgQ09SQkFfQXR0cmlidXRlRGVmX3ZhcjsKY2xhc3MgQ09SQkFfQXR0
cmlidXRlRGVmX291dDsKdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZWYgKkNPUkJBX0F0dHJpYnV0
ZURlZl9wdHI7CgpzdHJ1Y3QgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRpb247CmNsYXNzIENPUkJB
X0F0dHJpYnV0ZURlc2NyaXB0aW9uX3ZhcjsKY2xhc3MgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRp
b25fb3V0OwoKc3RydWN0IENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uOwpjbGFzcyBDT1JCQV9Q
YXJhbWV0ZXJEZXNjcmlwdGlvbl92YXI7CmNsYXNzIENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9u
X291dDsKCmNsYXNzIENPUkJBX1BhckRlc2NyaXB0aW9uU2VxOwpjbGFzcyBDT1JCQV9QYXJEZXNj
cmlwdGlvblNlcV92YXI7CmNsYXNzIENPUkJBX1BhckRlc2NyaXB0aW9uU2VxX291dDsKCmNsYXNz
IENPUkJBX0NvbnRleHRJZFNlcTsKY2xhc3MgQ09SQkFfQ29udGV4dElkU2VxX3ZhcjsKY2xhc3Mg
Q09SQkFfQ29udGV4dElkU2VxX291dDsKCmNsYXNzIENPUkJBX09wZXJhdGlvbkRlZjsKY2xhc3Mg
Q09SQkFfT3BlcmF0aW9uRGVmX3ZhcjsKY2xhc3MgQ09SQkFfT3BlcmF0aW9uRGVmX291dDsKdHlw
ZWRlZiBDT1JCQV9PcGVyYXRpb25EZWYgKkNPUkJBX09wZXJhdGlvbkRlZl9wdHI7CgpzdHJ1Y3Qg
Q09SQkFfT3BlcmF0aW9uRGVzY3JpcHRpb247CmNsYXNzIENPUkJBX09wZXJhdGlvbkRlc2NyaXB0
aW9uX3ZhcjsKY2xhc3MgQ09SQkFfT3BlcmF0aW9uRGVzY3JpcHRpb25fb3V0OwoKc3RydWN0IENP
UkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uOwpjbGFzcyBDT1JCQV9QYXJhbWV0ZXJEZXNjcmlwdGlv
bl92YXI7CmNsYXNzIENPUkJBX1BhcmFtZXRlckRlc2NyaXB0aW9uX291dDsKCmNsYXNzIENPUkJB
X1JlcG9zaXRvcnlJZFNlcTsKY2xhc3MgQ09SQkFfUmVwb3NpdG9yeUlkU2VxX3ZhcjsKY2xhc3Mg
Q09SQkFfUmVwb3NpdG9yeUlkU2VxX291dDsKCmNsYXNzIENPUkJBX09wRGVzY3JpcHRpb25TZXE7
CmNsYXNzIENPUkJBX09wRGVzY3JpcHRpb25TZXFfdmFyOwpjbGFzcyBDT1JCQV9PcERlc2NyaXB0
aW9uU2VxX291dDsKCmNsYXNzIENPUkJBX0F0dHJEZXNjcmlwdGlvblNlcTsKY2xhc3MgQ09SQkFf
QXR0ckRlc2NyaXB0aW9uU2VxX3ZhcjsKY2xhc3MgQ09SQkFfQXR0ckRlc2NyaXB0aW9uU2VxX291
dDsKCnN0cnVjdCBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfSW50ZXJm
YWNlRGVzY3JpcHRpb25fdmFyOwpjbGFzcyBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbl9vdXQ7
CgpzdHJ1Y3QgQ09SQkFfVmFsdWVNZW1iZXI7CmNsYXNzIENPUkJBX1ZhbHVlTWVtYmVyX3ZhcjsK
Y2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJTZXE7
CmNsYXNzIENPUkJBX1ZhbHVlTWVtYmVyU2VxX3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJT
ZXFfb3V0OwoKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJEZWY7CmNsYXNzIENPUkJBX1ZhbHVlTWVt
YmVyRGVmX3ZhcjsKY2xhc3MgQ09SQkFfVmFsdWVNZW1iZXJEZWZfb3V0Owp0eXBlZGVmIENPUkJB
X1ZhbHVlTWVtYmVyRGVmICpDT1JCQV9WYWx1ZU1lbWJlckRlZl9wdHI7CgpzdHJ1Y3QgQ09SQkFf
VmFsdWVEZXNjcmlwdGlvbjsKY2xhc3MgQ09SQkFfVmFsdWVEZXNjcmlwdGlvbl92YXI7CmNsYXNz
IENPUkJBX1ZhbHVlRGVzY3JpcHRpb25fb3V0OwoKY2xhc3MgQ09SQkFfVHlwZUNvZGVGYWN0b3J5
OwpjbGFzcyBDT1JCQV9UeXBlQ29kZUZhY3RvcnlfdmFyOwpjbGFzcyBDT1JCQV9UeXBlQ29kZUZh
Y3Rvcnlfb3V0Owp0eXBlZGVmIENPUkJBX1R5cGVDb2RlRmFjdG9yeSAqQ09SQkFfVHlwZUNvZGVG
YWN0b3J5X3B0cjsKCgpjbGFzcyBDT1JCQV9TdHJpbmdTZXE7CmNsYXNzIENPUkJBX1N0cmluZ1Nl
cV92YXI7CmNsYXNzIENPUkJBX1N0cmluZ1NlcV9vdXQ7CmNsYXNzIENPUkJBX1dTdHJpbmdTZXE7
CmNsYXNzIENPUkJBX1dTdHJpbmdTZXFfdmFyOwpjbGFzcyBDT1JCQV9XU3RyaW5nU2VxX291dDsK
CmNsYXNzIENPUkJBX09jdGV0U2VxOwpjbGFzcyBDT1JCQV9PY3RldFNlcV92YXI7CmNsYXNzIENP
UkJBX09jdGV0U2VxX291dDsKCmNsYXNzIENPUkJBX0JvdW5kczsKdHlwZWRlZiBDT1JCQV9Cb3Vu
ZHMgKkNPUkJBX0JvdW5kc19wdHI7CgoKdHlwZWRlZiB1X2ludCBDT1JCQV9GbGFnczsKCnR5cGVk
ZWYgdm9pZCAoKlRBT19Ta2VsZXRvbikoCiAgICBUQU9fU2VydmVyUmVxdWVzdCAmLAogICAgdm9p
ZCAqLAogICAgdm9pZCAqLAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUKICApOwoKCmNsYXNzIFRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNl
OwpjbGFzcyBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U7CnRlbXBsYXRlIDxjbGFzcyBU
PiBjbGFzcyBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlOwp0ZW1wbGF0ZSA8Y2xhc3MgVCxjbGFzcyBU
X3Zhcj4gY2xhc3MgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U7CgoKCgogICAgICAgICAg
IENPUkJBX0Vudmlyb25tZW50JiBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAodm9pZCk7CgplbnVt
IFRBT19TRVJWQU5UX0xPQ0FUSU9OCnsKICBUQU9fU0VSVkFOVF9GT1VORCwKICBUQU9fREVGQVVM
VF9TRVJWQU5ULAogIFRBT19TRVJWQU5UX01BTkFHRVIsCiAgVEFPX1NFUlZBTlRfTk9UX0ZPVU5E
Cn07CgpuYW1lc3BhY2UgQ09SQkEKewoKCgoKCgoKICB0eXBlZGVmIEFDRV9DRFI6OkJvb2xlYW4g
Qm9vbGVhbjsKICB0eXBlZGVmIEJvb2xlYW4gJkJvb2xlYW5fb3V0OwoKCgoKCiAgdHlwZWRlZiBB
Q0VfQ0RSOjpPY3RldCBPY3RldDsKICB0eXBlZGVmIE9jdGV0ICZPY3RldF9vdXQ7CgogIHR5cGVk
ZWYgQUNFX0NEUjo6U2hvcnQgU2hvcnQ7CiAgdHlwZWRlZiBTaG9ydCAmU2hvcnRfb3V0OwoKICB0
eXBlZGVmIEFDRV9DRFI6OlVTaG9ydCBVU2hvcnQ7CiAgdHlwZWRlZiBVU2hvcnQgJlVTaG9ydF9v
dXQ7CgogIHR5cGVkZWYgQUNFX0NEUjo6TG9uZyBMb25nOwogIHR5cGVkZWYgTG9uZyAmTG9uZ19v
dXQ7CgogIHR5cGVkZWYgQUNFX0NEUjo6VUxvbmcgVUxvbmc7CiAgdHlwZWRlZiBVTG9uZyAmVUxv
bmdfb3V0OwoKICB0eXBlZGVmIEFDRV9DRFI6OkxvbmdMb25nIExvbmdMb25nOwogIHR5cGVkZWYg
TG9uZ0xvbmcgJkxvbmdMb25nX291dDsKCiAgdHlwZWRlZiBBQ0VfQ0RSOjpVTG9uZ0xvbmcgVUxv
bmdMb25nOwogIHR5cGVkZWYgVUxvbmdMb25nICZVTG9uZ0xvbmdfb3V0OwoKICB0eXBlZGVmIEFD
RV9DRFI6OkZsb2F0IEZsb2F0OwogIHR5cGVkZWYgRmxvYXQgJkZsb2F0X291dDsKCiAgdHlwZWRl
ZiBBQ0VfQ0RSOjpEb3VibGUgRG91YmxlOwogIHR5cGVkZWYgRG91YmxlICZEb3VibGVfb3V0OwoK
ICB0eXBlZGVmIEFDRV9DRFI6OkxvbmdEb3VibGUgTG9uZ0RvdWJsZTsKICB0eXBlZGVmIExvbmdE
b3VibGUgJkxvbmdEb3VibGVfb3V0OwoKICB0eXBlZGVmIEFDRV9DRFI6OkNoYXIgQ2hhcjsKICB0
eXBlZGVmIENoYXIgJkNoYXJfb3V0OwoKCiAgdHlwZWRlZiBDT1JCQV9UeXBlQ29kZSBUeXBlQ29k
ZTsKICB0eXBlZGVmIENPUkJBX1R5cGVDb2RlICpUeXBlQ29kZV9wdHI7CiAgdHlwZWRlZiBDT1JC
QV9UeXBlQ29kZV92YXIgVHlwZUNvZGVfdmFyOwogIHR5cGVkZWYgQ09SQkFfVHlwZUNvZGVfb3V0
IFR5cGVDb2RlX291dDsKCgogIGV4dGVybiBjaGFyICpzdHJpbmdfYWxsb2MgKFVMb25nIGxlbik7
CiAgZXh0ZXJuIGNoYXIgKnN0cmluZ19kdXAgKGNvbnN0IGNoYXIgKik7CiAgZXh0ZXJuIHZvaWQg
c3RyaW5nX2ZyZWUgKGNoYXIgKik7CgogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX3ZhciBTdHJpbmdf
dmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX291dCBTdHJpbmdfb3V0OwoKCgogIHR5cGVkZWYg
QUNFX0NEUjo6V0NoYXIgV0NoYXI7CiAgdHlwZWRlZiBXQ2hhciAmV0NoYXJfb3V0OwoKCiAgZXh0
ZXJuIFdDaGFyKiB3c3RyaW5nX2FsbG9jIChVTG9uZyBsZW4pOwogIGV4dGVybiBXQ2hhciogd3N0
cmluZ19kdXAgKGNvbnN0IFdDaGFyICpjb25zdCk7CiAgZXh0ZXJuIHZvaWQgd3N0cmluZ19mcmVl
IChXQ2hhciAqY29uc3QpOwoKICB0eXBlZGVmIENPUkJBX1dTdHJpbmdfdmFyIFdTdHJpbmdfdmFy
OwogIHR5cGVkZWYgQ09SQkFfV1N0cmluZ19vdXQgV1N0cmluZ19vdXQ7CgoKICB0eXBlZGVmIENP
UkJBX1N0cmluZ1NlcSBTdHJpbmdTZXE7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdTZXFfdmFyIFN0
cmluZ1NlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdTZXFfb3V0IFN0cmluZ1NlcV9vdXQ7
CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfU3RyaW5nU2VxOwoKICB0eXBlZGVmIENPUkJBX1dT
dHJpbmdTZXEgV1N0cmluZ1NlcTsKICB0eXBlZGVmIENPUkJBX1dTdHJpbmdTZXFfdmFyIFdTdHJp
bmdTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfV1N0cmluZ1NlcV9vdXQgV1N0cmluZ1NlcV9vdXQ7
CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfV1N0cmluZ1NlcTsKCgogIHR5cGVkZWYgQ09SQkFf
T2N0ZXRTZXEgT2N0ZXRTZXE7CiAgdHlwZWRlZiBDT1JCQV9PY3RldFNlcV92YXIgT2N0ZXRTZXFf
dmFyOwogIHR5cGVkZWYgQ09SQkFfT2N0ZXRTZXFfb3V0IE9jdGV0U2VxX291dDsKICBleHRlcm4g
VHlwZUNvZGVfcHRyIF90Y19PY3RldFNlcTsKCgoKCgoKICB0eXBlZGVmIENPUkJBX0FueSBBbnk7
CiAgdHlwZWRlZiBDT1JCQV9BbnlfdmFyIEFueV92YXI7CiAgdHlwZWRlZiBDT1JCQV9Bbnlfb3V0
IEFueV9vdXQ7CiAgdHlwZWRlZiBBbnkgKkFueV9wdHI7CgogIHR5cGVkZWYgQ09SQkFfRW52aXJv
bm1lbnQgRW52aXJvbm1lbnQ7CiAgdHlwZWRlZiBDT1JCQV9FbnZpcm9ubWVudF92YXIgRW52aXJv
bm1lbnRfdmFyOwogIHR5cGVkZWYgQ09SQkFfRW52aXJvbm1lbnRfb3V0IEVudmlyb25tZW50X291
dDsKICB0eXBlZGVmIEVudmlyb25tZW50ICpFbnZpcm9ubWVudF9wdHI7CgogIHR5cGVkZWYgQ09S
QkFfRXhjZXB0aW9uIEV4Y2VwdGlvbjsKICB0eXBlZGVmIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiBT
eXN0ZW1FeGNlcHRpb247CiAgdHlwZWRlZiBDT1JCQV9Vc2VyRXhjZXB0aW9uIFVzZXJFeGNlcHRp
b247CgogIHR5cGVkZWYgQ09SQkFfUmVxdWVzdCBSZXF1ZXN0OwogIHR5cGVkZWYgUmVxdWVzdCAq
UmVxdWVzdF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9SZXF1ZXN0X3ZhciBSZXF1ZXN0X3ZhcjsKICB0
eXBlZGVmIENPUkJBX1JlcXVlc3Rfb3V0IFJlcXVlc3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX05h
bWVkVmFsdWUgTmFtZWRWYWx1ZTsKICB0eXBlZGVmIE5hbWVkVmFsdWUgKk5hbWVkVmFsdWVfcHRy
OwogIHR5cGVkZWYgQ09SQkFfTmFtZWRWYWx1ZV92YXIgTmFtZWRWYWx1ZV92YXI7CiAgdHlwZWRl
ZiBDT1JCQV9OYW1lZFZhbHVlX291dCBOYW1lZFZhbHVlX291dDsKCiAgdHlwZWRlZiBDT1JCQV9O
Vkxpc3QgTlZMaXN0OwogIHR5cGVkZWYgTlZMaXN0ICpOVkxpc3RfcHRyOwogIHR5cGVkZWYgQ09S
QkFfTlZMaXN0X3ZhciBOVkxpc3RfdmFyOwogIHR5cGVkZWYgQ09SQkFfTlZMaXN0X291dCBOVkxp
c3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX0NvbnRleHQgQ29udGV4dDsKICB0eXBlZGVmIENPUkJB
X0NvbnRleHQgKkNvbnRleHRfcHRyOwogIHR5cGVkZWYgQ09SQkFfQ29udGV4dF92YXIgQ29udGV4
dF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Db250ZXh0X291dCBDb250ZXh0X291dDsKCiAgdHlwZWRl
ZiBDT1JCQV9Db250ZXh0TGlzdCBDb250ZXh0TGlzdDsKICB0eXBlZGVmIENPUkJBX0NvbnRleHRM
aXN0ICpDb250ZXh0TGlzdF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250ZXh0TGlzdF92YXIgQ29u
dGV4dExpc3RfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29udGV4dExpc3Rfb3V0IENvbnRleHRMaXN0
X291dDsKCiAgdHlwZWRlZiBDT1JCQV9PYmplY3QgT2JqZWN0OwogIHR5cGVkZWYgQ09SQkFfT2Jq
ZWN0ICpPYmplY3RfcHRyOwogIHR5cGVkZWYgQ09SQkFfT2JqZWN0X3ZhciBPYmplY3RfdmFyOwog
IHR5cGVkZWYgQ09SQkFfT2JqZWN0X291dCBPYmplY3Rfb3V0OwoKICB0eXBlZGVmIENPUkJBX0xv
Y2FsT2JqZWN0IExvY2FsT2JqZWN0OwogIHR5cGVkZWYgQ09SQkFfTG9jYWxPYmplY3QgKkxvY2Fs
T2JqZWN0X3B0cjsKICB0eXBlZGVmIENPUkJBX0xvY2FsT2JqZWN0X3ZhciBMb2NhbE9iamVjdF92
YXI7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbE9iamVjdF9vdXQgTG9jYWxPYmplY3Rfb3V0OwoKICB0
eXBlZGVmIENPUkJBX1ByaW5jaXBhbCBQcmluY2lwYWw7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lw
YWwgKlByaW5jaXBhbF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lwYWxfdmFyIFByaW5jaXBh
bF92YXI7CiAgdHlwZWRlZiBDT1JCQV9QcmluY2lwYWxfb3V0IFByaW5jaXBhbF9vdXQ7CgogIHR5
cGVkZWYgQ09SQkFfT1JCIE9SQjsKICB0eXBlZGVmIENPUkJBX09SQiAqT1JCX3B0cjsKICB0eXBl
ZGVmIENPUkJBX09SQl92YXIgT1JCX3ZhcjsKICB0eXBlZGVmIENPUkJBX09SQl9vdXQgT1JCX291
dDsKCiAgdHlwZWRlZiBDT1JCQV9TZXJ2ZXJSZXF1ZXN0IFNlcnZlclJlcXVlc3Q7CiAgdHlwZWRl
ZiBTZXJ2ZXJSZXF1ZXN0ICpTZXJ2ZXJSZXF1ZXN0X3B0cjsKCiAgdHlwZWRlZiBDT1JCQV9FeGNl
cHRpb25MaXN0IEV4Y2VwdGlvbkxpc3Q7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25MaXN0X3Zh
ciBFeGNlcHRpb25MaXN0X3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkxpc3QgKkV4Y2Vw
dGlvbkxpc3RfcHRyOwoKICB0eXBlZGVmIENPUkJBX0ltcGxlbWVudGF0aW9uRGVmICpJbXBsZW1l
bnRhdGlvbkRlZl9wdHI7CgogIHR5cGVkZWYgQ09SQkFfQ3VycmVudCBDdXJyZW50OwogIHR5cGVk
ZWYgQ09SQkFfQ3VycmVudCAqQ3VycmVudF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9DdXJyZW50X3Zh
ciBDdXJyZW50X3ZhcjsKICB0eXBlZGVmIENPUkJBX0N1cnJlbnRfb3V0IEN1cnJlbnRfb3V0OwoK
ICB0eXBlZGVmIENPUkJBX1R5cGVDb2RlRmFjdG9yeSBUeXBlQ29kZUZhY3Rvcnk7CiAgdHlwZWRl
ZiBDT1JCQV9UeXBlQ29kZUZhY3RvcnkgKlR5cGVDb2RlRmFjdG9yeV9wdHI7CiAgdHlwZWRlZiBD
T1JCQV9UeXBlQ29kZUZhY3Rvcnlfb3V0IFR5cGVDb2RlRmFjdG9yeV9vdXQ7CiAgdHlwZWRlZiBD
T1JCQV9UeXBlQ29kZUZhY3RvcnlfdmFyIFR5cGVDb2RlRmFjdG9yeV92YXI7CiAgZXh0ZXJuIENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1R5cGVDb2RlRmFjdG9yeTsKCiAgdHlwZWRlZiBDT1JCQV9C
b3VuZHMgQm91bmRzOwogIHR5cGVkZWYgQ09SQkFfQm91bmRzICpCb3VuZHNfcHRyOwoKICB0eXBl
ZGVmIENPUkJBX1ZhbHVlQmFzZSBWYWx1ZUJhc2U7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUJhc2Ug
KlZhbHVlQmFzZV9wdHI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlIFZhbHVlRmFj
dG9yeUJhc2U7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlICpWYWx1ZUZhY3Rvcnk7
CgogIHR5cGVkZWYgQ09SQkFfVmFsdWVGYWN0b3J5QmFzZSAqVmFsdWVGYWN0b3J5X3B0cjsKCiAg
dHlwZWRlZiBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgRGVmYXVsdFZhbHVlUmVmQ291
bnRCYXNlOwogIGV4dGVybiB2b2lkIGFkZF9yZWYgKFZhbHVlQmFzZSAqKTsKICBleHRlcm4gdm9p
ZCByZW1vdmVfcmVmIChWYWx1ZUJhc2UgKik7CgoKCiAgdHlwZWRlZiB1X2ludCBGbGFnczsKCiAg
ZW51bSBDb21wbGV0aW9uU3RhdHVzCiAgewoKCiAgICBDT01QTEVURURfWUVTLAogICAgQ09NUExF
VEVEX05PLAogICAgQ09NUExFVEVEX01BWUJFCiAgfTsKCiAgZW51bSBleGNlcHRpb25fdHlwZQog
IHsKCgogICAgTk9fRVhDRVBUSU9OLAogICAgVVNFUl9FWENFUFRJT04sCiAgICBTWVNURU1fRVhD
RVBUSU9OCiAgfTsKCiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfZXhjZXB0aW9uX3R5cGU7CgoK
CgogIHR5cGVkZWYgQ09SQkFfVU5LTk9XTiBVTktOT1dOOyB0eXBlZGVmIENPUkJBX0JBRF9QQVJB
TSBCQURfUEFSQU07IHR5cGVkZWYgQ09SQkFfTk9fTUVNT1JZIE5PX01FTU9SWTsgdHlwZWRlZiBD
T1JCQV9JTVBfTElNSVQgSU1QX0xJTUlUOyB0eXBlZGVmIENPUkJBX0NPTU1fRkFJTFVSRSBDT01N
X0ZBSUxVUkU7IHR5cGVkZWYgQ09SQkFfSU5WX09CSlJFRiBJTlZfT0JKUkVGOyB0eXBlZGVmIENP
UkJBX09CSkVDVF9OT1RfRVhJU1QgT0JKRUNUX05PVF9FWElTVDsgdHlwZWRlZiBDT1JCQV9OT19Q
RVJNSVNTSU9OIE5PX1BFUk1JU1NJT047IHR5cGVkZWYgQ09SQkFfSU5URVJOQUwgSU5URVJOQUw7
IHR5cGVkZWYgQ09SQkFfTUFSU0hBTCBNQVJTSEFMOyB0eXBlZGVmIENPUkJBX0lOSVRJQUxJWkUg
SU5JVElBTElaRTsgdHlwZWRlZiBDT1JCQV9OT19JTVBMRU1FTlQgTk9fSU1QTEVNRU5UOyB0eXBl
ZGVmIENPUkJBX0JBRF9UWVBFQ09ERSBCQURfVFlQRUNPREU7IHR5cGVkZWYgQ09SQkFfQkFEX09Q
RVJBVElPTiBCQURfT1BFUkFUSU9OOyB0eXBlZGVmIENPUkJBX05PX1JFU09VUkNFUyBOT19SRVNP
VVJDRVM7IHR5cGVkZWYgQ09SQkFfTk9fUkVTUE9OU0UgTk9fUkVTUE9OU0U7IHR5cGVkZWYgQ09S
QkFfUEVSU0lTVF9TVE9SRSBQRVJTSVNUX1NUT1JFOyB0eXBlZGVmIENPUkJBX0JBRF9JTlZfT1JE
RVIgQkFEX0lOVl9PUkRFUjsgdHlwZWRlZiBDT1JCQV9UUkFOU0lFTlQgVFJBTlNJRU5UOyB0eXBl
ZGVmIENPUkJBX0ZSRUVfTUVNIEZSRUVfTUVNOyB0eXBlZGVmIENPUkJBX0lOVl9JREVOVCBJTlZf
SURFTlQ7IHR5cGVkZWYgQ09SQkFfSU5WX0ZMQUcgSU5WX0ZMQUc7IHR5cGVkZWYgQ09SQkFfSU5U
Rl9SRVBPUyBJTlRGX1JFUE9TOyB0eXBlZGVmIENPUkJBX0JBRF9DT05URVhUIEJBRF9DT05URVhU
OyB0eXBlZGVmIENPUkJBX09CSl9BREFQVEVSIE9CSl9BREFQVEVSOyB0eXBlZGVmIENPUkJBX0RB
VEFfQ09OVkVSU0lPTiBEQVRBX0NPTlZFUlNJT047IHR5cGVkZWYgQ09SQkFfSU5WX1BPTElDWSBJ
TlZfUE9MSUNZOyB0eXBlZGVmIENPUkJBX1JFQklORCBSRUJJTkQ7IHR5cGVkZWYgQ09SQkFfVElN
RU9VVCBUSU1FT1VUOyB0eXBlZGVmIENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIFRSQU5T
QUNUSU9OX1VOQVZBSUxBQkxFOyB0eXBlZGVmIENPUkJBX1RSQU5TQUNUSU9OX01PREUgVFJBTlNB
Q1RJT05fTU9ERTsgdHlwZWRlZiBDT1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCBUUkFOU0FDVElP
Tl9SRVFVSVJFRDsgdHlwZWRlZiBDT1JCQV9UUkFOU0FDVElPTl9ST0xMRURCQUNLIFRSQU5TQUNU
SU9OX1JPTExFREJBQ0s7IHR5cGVkZWYgQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiBJTlZBTElE
X1RSQU5TQUNUSU9OOyB0eXBlZGVmIENPUkJBX0NPREVTRVRfSU5DT01QQVRJQkxFIENPREVTRVRf
SU5DT01QQVRJQkxFOyB0eXBlZGVmIENPUkJBX0JBRF9RT1MgQkFEX1FPUzsKCgogIHR5cGVkZWYg
Q09SQkFfVW5rbm93blVzZXJFeGNlcHRpb24gVW5rbm93blVzZXJFeGNlcHRpb247CgoKICBleHRl
cm4gQm9vbGVhbiBpc19uaWwgKE9iamVjdF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAo
RW52aXJvbm1lbnRfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19uaWwgKFR5cGVDb2RlX3B0cik7
CiAgZXh0ZXJuIEJvb2xlYW4gaXNfbmlsIChPUkJfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19u
aWwgKFByaW5jaXBhbF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoUmVxdWVzdF9wdHIp
OwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoU2VydmVyUmVxdWVzdF9wdHIgcmVxKTsKICBleHRl
cm4gQm9vbGVhbiBpc19uaWwgKE5hbWVkVmFsdWVfcHRyKTsKICBleHRlcm4gQm9vbGVhbiBpc19u
aWwgKE5WTGlzdF9wdHIpOwogIGV4dGVybiBCb29sZWFuIGlzX25pbCAoQ29udGV4dF9wdHIpOwoK
CiAgZXh0ZXJuIHZvaWQgcmVsZWFzZSAoT2JqZWN0X3B0cik7CiAgZXh0ZXJuIHZvaWQgcmVsZWFz
ZSAoRW52aXJvbm1lbnRfcHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChQcmluY2lwYWxfcHRy
KTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChUeXBlQ29kZV9wdHIpOwogIGV4dGVybiB2b2lkIHJl
bGVhc2UgKE9SQl9wdHIpOwogIGV4dGVybiB2b2lkIHJlbGVhc2UgKFJlcXVlc3RfcHRyKTsKICBl
eHRlcm4gdm9pZCByZWxlYXNlIChTZXJ2ZXJSZXF1ZXN0X3B0ciByZXEpOwogIGV4dGVybiB2b2lk
IHJlbGVhc2UgKE5hbWVkVmFsdWVfcHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChOVkxpc3Rf
cHRyKTsKICBleHRlcm4gdm9pZCByZWxlYXNlIChDb250ZXh0X3B0cik7CgogIGVudW0gVENLaW5k
CiAgewojIDg5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9jb3JiYWZ3ZC5oIgogICAgdGtfbnVsbCA9IDAsCiAgICB0a192b2lkID0gMSwKICAgIHRr
X3Nob3J0ID0gMiwKICAgIHRrX2xvbmcgPSAzLAogICAgdGtfdXNob3J0ID0gNCwKICAgIHRrX3Vs
b25nID0gNSwKICAgIHRrX2Zsb2F0ID0gNiwKICAgIHRrX2RvdWJsZSA9IDcsCiAgICB0a19ib29s
ZWFuID0gOCwKICAgIHRrX2NoYXIgPSA5LAogICAgdGtfb2N0ZXQgPSAxMCwKICAgIHRrX2FueSA9
IDExLAogICAgdGtfVHlwZUNvZGUgPSAxMiwKICAgIHRrX1ByaW5jaXBhbCA9IDEzLAogICAgdGtf
b2JqcmVmID0gMTQsCiAgICB0a19zdHJ1Y3QgPSAxNSwKICAgIHRrX3VuaW9uID0gMTYsCiAgICB0
a19lbnVtID0gMTcsCiAgICB0a19zdHJpbmcgPSAxOCwKICAgIHRrX3NlcXVlbmNlID0gMTksCiAg
ICB0a19hcnJheSA9IDIwLAogICAgdGtfYWxpYXMgPSAyMSwKICAgIHRrX2V4Y2VwdCA9IDIyLAoK
ICAgIHRrX2xvbmdsb25nID0gMjMsCiAgICB0a191bG9uZ2xvbmcgPSAyNCwKICAgIHRrX2xvbmdk
b3VibGUgPSAyNSwKICAgIHRrX3djaGFyID0gMjYsCiAgICB0a193c3RyaW5nID0gMjcsCiAgICB0
a19maXhlZCA9IDI4LAogICAgdGtfdmFsdWUgPSAyOSwKICAgIHRrX3ZhbHVlX2JveCA9IDMwLAog
ICAgdGtfbmF0aXZlID0gMzEsCiAgICB0a19hYnN0cmFjdF9pbnRlcmZhY2UgPSAzMiwKICAgIHRr
X2xvY2FsX2ludGVyZmFjZSA9IDMzLAogICAgdGtfY29tcG9uZW50ID0gMzQsCiAgICB0a19ob21l
ID0gMzUsCgoKCgoKICAgIFRDX0tJTkRfQ09VTlQKICB9OwogIHR5cGVkZWYgVENLaW5kICZUQ0tp
bmRfb3V0OwoKCiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfbnVsbDsKICBleHRlcm4gVHlwZUNv
ZGVfcHRyIF90Y192b2lkOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Nob3J0OwogIGV4dGVy
biBUeXBlQ29kZV9wdHIgX3RjX2xvbmc7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfdXNob3J0
OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Vsb25nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIg
X3RjX2Zsb2F0OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX2RvdWJsZTsKICBleHRlcm4gVHlw
ZUNvZGVfcHRyIF90Y19ib29sZWFuOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX2NoYXI7CiAg
ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfb2N0ZXQ7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNf
YW55OwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX1R5cGVDb2RlOwogIGV4dGVybiBUeXBlQ29k
ZV9wdHIgX3RjX1ByaW5jaXBhbDsKICBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19PYmplY3Q7CiAg
ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfc3RyaW5nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3Rj
X2xvbmdsb25nOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3Vsb25nbG9uZzsKICBleHRlcm4g
VHlwZUNvZGVfcHRyIF90Y19sb25nZG91YmxlOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3dj
aGFyOwogIGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX3dzdHJpbmc7CgoKCgogIGV4dGVybiBUeXBl
Q29kZV9wdHIgX3RjX1VOS05PV047IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0JBRF9QQVJBTTsg
ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTk9fTUVNT1JZOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90
Y19JTVBfTElNSVQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0NPTU1fRkFJTFVSRTsgZXh0ZXJu
IFR5cGVDb2RlX3B0ciBfdGNfSU5WX09CSlJFRjsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfT0JK
RUNUX05PVF9FWElTVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTk9fUEVSTUlTU0lPTjsgZXh0
ZXJuIFR5cGVDb2RlX3B0ciBfdGNfSU5URVJOQUw7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX01B
UlNIQUw7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lOSVRJQUxJWkU7IGV4dGVybiBUeXBlQ29k
ZV9wdHIgX3RjX05PX0lNUExFTUVOVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfQkFEX1RZUEVD
T0RFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURfT1BFUkFUSU9OOyBleHRlcm4gVHlwZUNv
ZGVfcHRyIF90Y19OT19SRVNPVVJDRVM7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX05PX1JFU1BP
TlNFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19QRVJTSVNUX1NUT1JFOyBleHRlcm4gVHlwZUNv
ZGVfcHRyIF90Y19CQURfSU5WX09SREVSOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19UUkFOU0lF
TlQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0ZSRUVfTUVNOyBleHRlcm4gVHlwZUNvZGVfcHRy
IF90Y19JTlZfSURFTlQ7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lOVl9GTEFHOyBleHRlcm4g
VHlwZUNvZGVfcHRyIF90Y19JTlRGX1JFUE9TOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURf
Q09OVEVYVDsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfT0JKX0FEQVBURVI7IGV4dGVybiBUeXBl
Q29kZV9wdHIgX3RjX0RBVEFfQ09OVkVSU0lPTjsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfSU5W
X1BPTElDWTsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfUkVCSU5EOyBleHRlcm4gVHlwZUNvZGVf
cHRyIF90Y19USU1FT1VUOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19UUkFOU0FDVElPTl9VTkFW
QUlMQUJMRTsgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfVFJBTlNBQ1RJT05fTU9ERTsgZXh0ZXJu
IFR5cGVDb2RlX3B0ciBfdGNfVFJBTlNBQ1RJT05fUkVRVUlSRUQ7IGV4dGVybiBUeXBlQ29kZV9w
dHIgX3RjX1RSQU5TQUNUSU9OX1JPTExFREJBQ0s7IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0lO
VkFMSURfVFJBTlNBQ1RJT047IGV4dGVybiBUeXBlQ29kZV9wdHIgX3RjX0NPREVTRVRfSU5DT01Q
QVRJQkxFOyBleHRlcm4gVHlwZUNvZGVfcHRyIF90Y19CQURfUU9TOwoKCiAgZXh0ZXJuIFR5cGVD
b2RlX3B0ciBfdGNfVW5rbm93blVzZXJFeGNlcHRpb247CgogIGV4dGVybiBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90Y19Cb3VuZHM7CiAgZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfQ3VycmVudDsKCiAg
ZXh0ZXJuIFR5cGVDb2RlX3B0ciBfdGNfTmFtZWRWYWx1ZTsKCiAgZW51bQogIHsKCiAgICBBUkdf
SU4gPSAweDAxLAogICAgQVJHX09VVCA9IDB4MDIsCiAgICBBUkdfSU5PVVQgPSAweDA0LAogICAg
SU5fQ09QWV9WQUxVRSA9IDB4MDgsCiAgICBPVVRfTElTVF9NRU1PUlkgPSAweDEwLAogICAgREVQ
RU5ERU5UX0xJU1QgPSAweDIwLAoKCiAgICBDVFhfUkVTVFJJQ1RfU0NPUEUgPSAweDQwLAogICAg
Q1RYX0RFTEVURV9ERVNDRU5ERU5UUyA9IDB4ODAsCgoKICAgIElOVl9OT19SRVNQT05TRSA9IDB4
MTAwLAogICAgSU5WX1RFUk1fT05fRVJSID0gMHgyMDAsCiAgICBSRVNQX05PX1dBSVQgPSAweDQw
MAogIH07CgogIHR5cGVkZWYgY2hhciAqT1JCaWQ7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3Zh
ciBPUkJpZF92YXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX291dCBPUkJpZF9vdXQ7CiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09SQmlkOwoKCgogIHR5cGVkZWYgQ09SQkE6OlNo
b3J0IFBvbGljeUVycm9yQ29kZTsKICB0eXBlZGVmIENPUkJBOjpTaG9ydF9vdXQgUG9saWN5RXJy
b3JDb2RlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5RXJyb3JD
b2RlOwoKICBleHRlcm4gY29uc3QgUG9saWN5RXJyb3JDb2RlIEJBRF9QT0xJQ1k7CiAgZXh0ZXJu
IGNvbnN0IFBvbGljeUVycm9yQ29kZSBVTlNVUFBPUlRFRF9QT0xJQ1k7CiAgZXh0ZXJuIGNvbnN0
IFBvbGljeUVycm9yQ29kZSBCQURfUE9MSUNZX1RZUEU7CiAgZXh0ZXJuIGNvbnN0IFBvbGljeUVy
cm9yQ29kZSBCQURfUE9MSUNZX1ZBTFVFOwogIGV4dGVybiBjb25zdCBQb2xpY3lFcnJvckNvZGUg
VU5TVVBQT1JURURfUE9MSUNZX1ZBTFVFOwoKICB0eXBlZGVmIENPUkJBX1BvbGljeUVycm9yIFBv
bGljeUVycm9yOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5RXJyb3IgKlBvbGljeUVycm9yX3B0cjsK
ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5RXJyb3I7CgogIHR5cGVkZWYg
Q09SQkFfSW52YWxpZFBvbGljaWVzIEludmFsaWRQb2xpY2llczsKICB0eXBlZGVmIENPUkJBX0lu
dmFsaWRQb2xpY2llcyogSW52YWxpZFBvbGljaWVzX3B0cjsKICBleHRlcm4gQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfSW52YWxpZFBvbGljaWVzOwoKICB0eXBlZGVmIENPUkJBOjpVTG9uZyBQb2xp
Y3lUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBQb2xpY3lUeXBlX291dDsKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5VHlwZTsKCiAgdHlwZWRlZiBDT1JCQV9Q
b2xpY3kgUG9saWN5OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5ICpQb2xpY3lfcHRyOwogIHR5cGVk
ZWYgQ09SQkFfUG9saWN5X3ZhciBQb2xpY3lfdmFyOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5X291
dCBQb2xpY3lfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Qb2xpY3k7Cgog
IHR5cGVkZWYgQ09SQkFfUG9saWN5TGlzdCBQb2xpY3lMaXN0OwogIHR5cGVkZWYgQ09SQkFfUG9s
aWN5TGlzdF92YXIgUG9saWN5TGlzdF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lMaXN0X291
dCBQb2xpY3lMaXN0X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5
TGlzdDsKCgogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydCBTZXJ2aWNlVHlwZTsKICB0eXBlZGVmIFNl
cnZpY2VUeXBlIENPUkJBX1NlcnZpY2VUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydF9vdXQg
U2VydmljZVR5cGVfb3V0OwogIHR5cGVkZWYgU2VydmljZVR5cGVfb3V0IENPUkJBX1NlcnZpY2VU
eXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZVR5cGU7CiAg
ZXh0ZXJuIGNvbnN0IFNlcnZpY2VUeXBlIFNlY3VyaXR5OwoKICB0eXBlZGVmIENPUkJBOjpVTG9u
ZyBTZXJ2aWNlT3B0aW9uOwogIHR5cGVkZWYgU2VydmljZU9wdGlvbiBDT1JCQV9TZXJ2aWNlT3B0
aW9uOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBTZXJ2aWNlT3B0aW9uX291dDsKICB0eXBl
ZGVmIFNlcnZpY2VPcHRpb25fb3V0IENPUkJBX1NlcnZpY2VPcHRpb25fb3V0OwogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNlT3B0aW9uOwoKICB0eXBlZGVmIENPUkJBOjpV
TG9uZyBTZXJ2aWNlRGV0YWlsVHlwZTsKICB0eXBlZGVmIFNlcnZpY2VEZXRhaWxUeXBlIENPUkJB
X1NlcnZpY2VEZXRhaWxUeXBlOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBTZXJ2aWNlRGV0
YWlsVHlwZV9vdXQ7CiAgdHlwZWRlZiBTZXJ2aWNlRGV0YWlsVHlwZV9vdXQgQ09SQkFfU2Vydmlj
ZURldGFpbFR5cGVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNl
RGV0YWlsVHlwZTsKCiAgdHlwZWRlZiBDT1JCQV9TZXJ2aWNlRGV0YWlsIFNlcnZpY2VEZXRhaWw7
CiAgdHlwZWRlZiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciBTZXJ2aWNlRGV0YWlsX3ZhcjsKICB0
eXBlZGVmIENPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IFNlcnZpY2VEZXRhaWxfb3V0OwogIHR5cGVk
ZWYgQ09SQkFfU2VydmljZURldGFpbCAqU2VydmljZURldGFpbF9wdHI7CiAgZXh0ZXJuIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX1NlcnZpY2VEZXRhaWw7CgogIHR5cGVkZWYgQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uIFNlcnZpY2VJbmZvcm1hdGlvbjsKICB0eXBlZGVmIENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbl92YXIgU2VydmljZUluZm9ybWF0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl9vdXQgU2VydmljZUluZm9ybWF0aW9uX291dDsKICB0eXBlZGVmIENP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqU2VydmljZUluZm9ybWF0aW9uX3B0cjsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZUluZm9ybWF0aW9uOwoKICB0eXBlZGVmIENP
UkJBX1BvbGljeVR5cGVTZXEgUG9saWN5VHlwZVNlcTsKICB0eXBlZGVmIENPUkJBX1BvbGljeVR5
cGVTZXFfdmFyIFBvbGljeVR5cGVTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfUG9saWN5VHlwZVNl
cV9vdXQgUG9saWN5VHlwZVNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj
X1BvbGljeVR5cGVTZXE7CgogIGVudW0gU2V0T3ZlcnJpZGVUeXBlCiAgewogICAgU0VUX09WRVJS
SURFLAogICAgQUREX09WRVJSSURFCiAgfTsKICB0eXBlZGVmIFNldE92ZXJyaWRlVHlwZSAmU2V0
T3ZlcnJpZGVUeXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2V0T3Zl
cnJpZGVUeXBlOwoKICB0eXBlZGVmIENPUkJBX1BvbGljeU1hbmFnZXIgUG9saWN5TWFuYWdlcjsK
ICB0eXBlZGVmIENPUkJBX1BvbGljeU1hbmFnZXJfdmFyIFBvbGljeU1hbmFnZXJfdmFyOwogIHR5
cGVkZWYgQ09SQkFfUG9saWN5TWFuYWdlcl9vdXQgUG9saWN5TWFuYWdlcl9vdXQ7CiAgdHlwZWRl
ZiBDT1JCQV9Qb2xpY3lNYW5hZ2VyICpQb2xpY3lNYW5hZ2VyX3B0cjsKICBleHRlcm4gQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfUG9saWN5TWFuYWdlcjsKCiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lD
dXJyZW50IFBvbGljeUN1cnJlbnQ7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciBQ
b2xpY3lDdXJyZW50X3ZhcjsKICB0eXBlZGVmIENPUkJBX1BvbGljeUN1cnJlbnRfb3V0IFBvbGlj
eUN1cnJlbnRfb3V0OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudCAqUG9saWN5Q3VycmVu
dF9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BvbGljeUN1cnJlbnQ7Cgog
IHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlciBEb21haW5NYW5hZ2VyOwogIHR5cGVkZWYgQ09S
QkFfRG9tYWluTWFuYWdlciAqRG9tYWluTWFuYWdlcl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Eb21h
aW5NYW5hZ2VyX3ZhciBEb21haW5NYW5hZ2VyX3ZhcjsKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1h
bmFnZXJfb3V0IERvbWFpbk1hbmFnZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRy
IF90Y19Eb21haW5NYW5hZ2VyOwoKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IERv
bWFpbk1hbmFnZXJMaXN0OwogIHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKkRvbWFp
bk1hbmFnZXJMaXN0X3B0cjsKICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciBE
b21haW5NYW5hZ2VyTGlzdF92YXI7CiAgdHlwZWRlZiBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9v
dXQgRG9tYWluTWFuYWdlckxpc3Rfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19Eb21haW5NYW5hZ2VyTGlzdDsKCiAgZXh0ZXJuIGNvbnN0IFBvbGljeVR5cGUgU2VjQ29uc3Ry
dWN0aW9uOwoKCiAgdHlwZWRlZiBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgQ29uc3RydWN0aW9u
UG9saWN5OwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICpDb25zdHJ1Y3Rpb25Q
b2xpY3lfcHRyOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3ZhciBDb25zdHJ1
Y3Rpb25Qb2xpY3lfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCBD
b25zdHJ1Y3Rpb25Qb2xpY3lfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19D
b25zdHJ1Y3Rpb25Qb2xpY3k7CgogIHR5cGVkZWYgQ09SQkFfV3JvbmdUcmFuc2FjdGlvbiBXcm9u
Z1RyYW5zYWN0aW9uOwogIHR5cGVkZWYgV3JvbmdUcmFuc2FjdGlvbiAqV3JvbmdUcmFuc2FjdGlv
bl9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1dyb25nVHJhbnNhY3Rpb247
CgoKCgoKICB0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0IFBvbGxhYmxlU2V0OwogIHR5cGVkZWYg
Q09SQkFfUG9sbGFibGVTZXRfdmFyIFBvbGxhYmxlU2V0X3ZhcjsKICB0eXBlZGVmIENPUkJBX1Bv
bGxhYmxlU2V0X291dCBQb2xsYWJsZVNldF9vdXQ7CiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZVNl
dF9wdHIgUG9sbGFibGVTZXRfcHRyOwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Q
b2xsYWJsZVNldDsKCiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZSBQb2xsYWJsZTsKICB0eXBlZGVm
IENPUkJBX1BvbGxhYmxlX3ZhciBQb2xsYWJsZV92YXI7CiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJs
ZV9vdXQgUG9sbGFibGVfb3V0OwogIHR5cGVkZWYgQ09SQkFfUG9sbGFibGVfcHRyIFBvbGxhYmxl
X3B0cjsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUG9sbGFibGU7CgogIHR5cGVk
ZWYgQ09SQkFfRElJUG9sbGFibGUgRElJUG9sbGFibGU7CiAgdHlwZWRlZiBDT1JCQV9ESUlQb2xs
YWJsZV92YXIgRElJUG9sbGFibGVfdmFyOwogIHR5cGVkZWYgQ09SQkFfRElJUG9sbGFibGVfb3V0
IERJSVBvbGxhYmxlX291dDsKICB0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxlX3B0ciBESUlQb2xs
YWJsZV9wdHI7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RJSVBvbGxhYmxlOwoK
CiAgdHlwZWRlZiBjaGFyICpSZXBvc2l0b3J5SWQ7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3Zh
ciBSZXBvc2l0b3J5SWRfdmFyOwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ19vdXQgUmVwb3NpdG9y
eUlkX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVwb3NpdG9yeUlkOwoK
ICB0eXBlZGVmIGNoYXIgKklkZW50aWZpZXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBJ
ZGVudGlmaWVyX3ZhcjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IElkZW50aWZpZXJfb3V0
OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JZGVudGlmaWVyOwoKICB0eXBlZGVm
IGNoYXIgKlNjb3BlZE5hbWU7CiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdfdmFyIFNjb3BlZE5hbWVf
dmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nX291dCBTY29wZWROYW1lX291dDsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2NvcGVkTmFtZTsKCiAgdHlwZWRlZiBjaGFyICpWZXJz
aW9uU3BlYzsKICB0eXBlZGVmIENPUkJBX1N0cmluZ192YXIgVmVyc2lvblNwZWNfdmFyOwogIHR5
cGVkZWYgQ09SQkFfU3RyaW5nX291dCBWZXJzaW9uU3BlY19vdXQ7CiAgZXh0ZXJuIENPUkJBOjpU
eXBlQ29kZV9wdHIgX3RjX1ZlcnNpb25TcGVjOwoKICB0eXBlZGVmIENPUkJBOjpTaG9ydCBWaXNp
YmlsaXR5OwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291dCBWaXNpYmlsaXR5X291dDsKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVmlzaWJpbGl0eTsKCiAgZXh0ZXJuIGNvbnN0IENP
UkJBOjpTaG9ydCBQUklWQVRFX01FTUJFUjsKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFBV
QkxJQ19NRU1CRVI7CgogIHR5cGVkZWYgQ09SQkE6OlNob3J0IFZhbHVlTW9kaWZpZXI7CiAgdHlw
ZWRlZiBDT1JCQTo6U2hvcnRfb3V0IFZhbHVlTW9kaWZpZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1vZGlmaWVyOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNo
b3J0IFZNX05PTkU7CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBWTV9DVVNUT007CiAgZXh0
ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBWTV9BQlNUUkFDVDsKICBleHRlcm4gY29uc3QgQ09SQkE6
OlNob3J0IFZNX1RSVU5DQVRBQkxFOwoKICB0eXBlZGVmIGNoYXIgKiBDb250ZXh0SWRlbnRpZmll
cjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfdmFyIENvbnRleHRJZGVudGlmaWVyX3ZhcjsKICB0
eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IENvbnRleHRJZGVudGlmaWVyX291dDsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29udGV4dElkZW50aWZpZXI7CgogIHR5cGVkZWYgQ09S
QkFfSVJPYmplY3QgSVJPYmplY3Q7CiAgdHlwZWRlZiBDT1JCQV9JUk9iamVjdCAqSVJPYmplY3Rf
cHRyOwogIHR5cGVkZWYgQ09SQkFfSVJPYmplY3RfdmFyIElST2JqZWN0X3ZhcjsKICB0eXBlZGVm
IENPUkJBX0lST2JqZWN0X291dCBJUk9iamVjdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3RjX0lST2JqZWN0OwoKICBlbnVtIERlZmluaXRpb25LaW5kCiAgICB7CiAgICAgICAg
ZGtfbm9uZSwKICAgICAgICBka19hbGwsCiAgICAgICAgZGtfQXR0cmlidXRlLAogICAgICAgIGRr
X0NvbnN0YW50LAogICAgICAgIGRrX0V4Y2VwdGlvbiwKICAgICAgICBka19JbnRlcmZhY2UsCiAg
ICAgICAgZGtfTW9kdWxlLAogICAgICAgIGRrX09wZXJhdGlvbiwKICAgICAgICBka19UeXBlZGVm
LAogICAgICAgIGRrX0FsaWFzLAogICAgICAgIGRrX1N0cnVjdCwKICAgICAgICBka19VbmlvbiwK
ICAgICAgICBka19FbnVtLAogICAgICAgIGRrX1ByaW1pdGl2ZSwKICAgICAgICBka19TdHJpbmcs
CiAgICAgICAgZGtfU2VxdWVuY2UsCiAgICAgICAgZGtfQXJyYXksCiAgICAgICAgZGtfUmVwb3Np
dG9yeSwKICAgICAgICBka19Xc3RyaW5nLAogICAgICAgIGRrX0ZpeGVkLAogICAgICAgIGRrX1Zh
bHVlLAogICAgICAgIGRrX1ZhbHVlQm94LAogICAgICAgIGRrX1ZhbHVlTWVtYmVyLAogICAgICAg
IGRrX05hdGl2ZSwKCgogICAgICAgIGRrX0Fic3RyYWN0SW50ZXJmYWNlLAogICAgICAgIGRrX0xv
Y2FsSW50ZXJmYWNlLAojIDEyMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIKICAgICAgICBka19Db21wb25lbnQsCiAgICAgICAg
ZGtfSG9tZSwKICAgICAgICBka19GYWN0b3J5LAogICAgICAgIGRrX0ZpbmRlciwKICAgICAgICBk
a19QcmltYXJ5S2V5LAogICAgICAgIGRrX0VtaXRzLAogICAgICAgIGRrX1B1Ymxpc2hlcywKICAg
ICAgICBka19Db25zdW1lcywKICAgICAgICBka19Qcm92aWRlcywKICAgICAgICBka19Vc2VzCiAg
ICB9OwoKICB0eXBlZGVmIERlZmluaXRpb25LaW5kICZEZWZpbml0aW9uS2luZF9vdXQ7CiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlZmluaXRpb25LaW5kOwoKICB0eXBlZGVmIENP
UkJBX0NvbnRhaW5lZCBDb250YWluZWQ7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWQgKkNvbnRh
aW5lZF9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWRfdmFyIENvbnRhaW5lZF92YXI7CiAg
dHlwZWRlZiBDT1JCQV9Db250YWluZWRfb3V0IENvbnRhaW5lZF9vdXQ7CiAgZXh0ZXJuIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX0NvbnRhaW5lZDsKCiAgdHlwZWRlZiBDT1JCQV9Db250YWluZWRT
ZXEgQ29udGFpbmVkU2VxOwogIHR5cGVkZWYgQ09SQkFfQ29udGFpbmVkU2VxX3ZhciBDb250YWlu
ZWRTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfQ29udGFpbmVkU2VxX291dCBDb250YWluZWRTZXFf
b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250YWluZWRTZXE7CgogIHR5
cGVkZWYgQ09SQkFfUmVwb3NpdG9yeSBSZXBvc2l0b3J5OwogIHR5cGVkZWYgQ09SQkFfUmVwb3Np
dG9yeSAqUmVwb3NpdG9yeV9wdHI7CiAgdHlwZWRlZiBDT1JCQV9SZXBvc2l0b3J5X3ZhciBSZXBv
c2l0b3J5X3ZhcjsKICB0eXBlZGVmIENPUkJBX1JlcG9zaXRvcnlfb3V0IFJlcG9zaXRvcnlfb3V0
OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SZXBvc2l0b3J5OwoKICB0eXBlZGVm
IENPUkJBX0NvbnRhaW5lciBDb250YWluZXI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXIgKkNv
bnRhaW5lcl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXJfdmFyIENvbnRhaW5lcl92YXI7
CiAgdHlwZWRlZiBDT1JCQV9Db250YWluZXJfb3V0IENvbnRhaW5lcl9vdXQ7CiAgZXh0ZXJuIENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnRhaW5lcjsKCiAgdHlwZWRlZiBDT1JCQV9Nb2R1bGVE
ZWYgTW9kdWxlRGVmOwogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVmICpNb2R1bGVEZWZfcHRyOwog
IHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVmX3ZhciBNb2R1bGVEZWZfdmFyOwogIHR5cGVkZWYgQ09S
QkFfTW9kdWxlRGVmX291dCBNb2R1bGVEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf
cHRyIF90Y19Nb2R1bGVEZWY7CgogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZWYgQ29uc3RhbnRE
ZWY7CiAgdHlwZWRlZiBDT1JCQV9Db25zdGFudERlZiAqQ29uc3RhbnREZWZfcHRyOwogIHR5cGVk
ZWYgQ09SQkFfQ29uc3RhbnREZWZfdmFyIENvbnN0YW50RGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB
X0NvbnN0YW50RGVmX291dCBDb25zdGFudERlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3RjX0NvbnN0YW50RGVmOwoKICB0eXBlZGVmIENPUkJBX0lETFR5cGUgSURMVHlwZTsK
ICB0eXBlZGVmIENPUkJBX0lETFR5cGUgKklETFR5cGVfcHRyOwogIHR5cGVkZWYgQ09SQkFfSURM
VHlwZV92YXIgSURMVHlwZV92YXI7CiAgdHlwZWRlZiBDT1JCQV9JRExUeXBlX291dCBJRExUeXBl
X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSURMVHlwZTsKCiAgdHlwZWRl
ZiBDT1JCQV9TdHJ1Y3REZWYgU3RydWN0RGVmOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmICpT
dHJ1Y3REZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmX3ZhciBTdHJ1Y3REZWZfdmFy
OwogIHR5cGVkZWYgQ09SQkFfU3RydWN0RGVmX291dCBTdHJ1Y3REZWZfb3V0OwogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJ1Y3REZWY7CgogIHR5cGVkZWYgQ09SQkFfVW5pb25E
ZWYgVW5pb25EZWY7CiAgdHlwZWRlZiBDT1JCQV9VbmlvbkRlZiAqVW5pb25EZWZfcHRyOwogIHR5
cGVkZWYgQ09SQkFfVW5pb25EZWZfdmFyIFVuaW9uRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX1Vu
aW9uRGVmX291dCBVbmlvbkRlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3Rj
X1VuaW9uRGVmOwoKICB0eXBlZGVmIENPUkJBX0VudW1EZWYgRW51bURlZjsKICB0eXBlZGVmIENP
UkJBX0VudW1EZWYgKkVudW1EZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfRW51bURlZl92YXIgRW51
bURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9FbnVtRGVmX291dCBFbnVtRGVmX291dDsKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRW51bURlZjsKCiAgdHlwZWRlZiBDT1JCQV9BbGlh
c0RlZiBBbGlhc0RlZjsKICB0eXBlZGVmIENPUkJBX0FsaWFzRGVmICpBbGlhc0RlZl9wdHI7CiAg
dHlwZWRlZiBDT1JCQV9BbGlhc0RlZl92YXIgQWxpYXNEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFf
QWxpYXNEZWZfb3V0IEFsaWFzRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfQWxpYXNEZWY7CgogIHR5cGVkZWYgQ09SQkFfSW50ZXJmYWNlRGVmIEludGVyZmFjZURlZjsK
ICB0eXBlZGVmIENPUkJBX0ludGVyZmFjZURlZiAqSW50ZXJmYWNlRGVmX3B0cjsKICB0eXBlZGVm
IENPUkJBX0ludGVyZmFjZURlZl92YXIgSW50ZXJmYWNlRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB
X0ludGVyZmFjZURlZl9vdXQgSW50ZXJmYWNlRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfSW50ZXJmYWNlRGVmOwoKICB0eXBlZGVmIENPUkJBX0Fic3RyYWN0SW50ZXJm
YWNlRGVmIEFic3RyYWN0SW50ZXJmYWNlRGVmOwogIHR5cGVkZWYgQ09SQkFfQWJzdHJhY3RJbnRl
cmZhY2VEZWYgKkFic3RyYWN0SW50ZXJmYWNlRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0Fic3Ry
YWN0SW50ZXJmYWNlRGVmX3ZhciBBYnN0cmFjdEludGVyZmFjZURlZl92YXI7CiAgdHlwZWRlZiBD
T1JCQV9BYnN0cmFjdEludGVyZmFjZURlZl9vdXQgQWJzdHJhY3RJbnRlcmZhY2VEZWZfb3V0Owog
IGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BYnN0cmFjdEludGVyZmFjZURlZjsKCiAg
dHlwZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFjZURlZiBMb2NhbEludGVyZmFjZURlZjsKICB0eXBl
ZGVmIENPUkJBX0xvY2FsSW50ZXJmYWNlRGVmICpMb2NhbEludGVyZmFjZURlZl9wdHI7CiAgdHlw
ZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFjZURlZl92YXIgTG9jYWxJbnRlcmZhY2VEZWZfdmFyOwog
IHR5cGVkZWYgQ09SQkFfTG9jYWxJbnRlcmZhY2VEZWZfb3V0IExvY2FsSW50ZXJmYWNlRGVmX291
dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTG9jYWxJbnRlcmZhY2VEZWY7Cgog
IHR5cGVkZWYgQ09SQkFfRXhjZXB0aW9uRGVmIEV4Y2VwdGlvbkRlZjsKICB0eXBlZGVmIENPUkJB
X0V4Y2VwdGlvbkRlZiAqRXhjZXB0aW9uRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlv
bkRlZl92YXIgRXhjZXB0aW9uRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlZl9v
dXQgRXhjZXB0aW9uRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXhj
ZXB0aW9uRGVmOwoKICB0eXBlZGVmIENPUkJBX05hdGl2ZURlZiBOYXRpdmVEZWY7CiAgdHlwZWRl
ZiBDT1JCQV9OYXRpdmVEZWYgKk5hdGl2ZURlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9OYXRpdmVE
ZWZfdmFyIE5hdGl2ZURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9OYXRpdmVEZWZfb3V0IE5hdGl2
ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX05hdGl2ZURlZjsKCiAg
dHlwZWRlZiBDT1JCQV9JbnRlcmZhY2VEZWZTZXEgSW50ZXJmYWNlRGVmU2VxOwogIHR5cGVkZWYg
Q09SQkFfSW50ZXJmYWNlRGVmU2VxX3ZhciBJbnRlcmZhY2VEZWZTZXFfdmFyOwogIHR5cGVkZWYg
Q09SQkFfSW50ZXJmYWNlRGVmU2VxX291dCBJbnRlcmZhY2VEZWZTZXFfb3V0OwogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYgQ09SQkFf
QWJzdHJhY3RJbnRlcmZhY2VEZWZTZXEgQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CiAgdHlwZWRl
ZiBDT1JCQV9BYnN0cmFjdEludGVyZmFjZURlZlNlcV92YXIgQWJzdHJhY3RJbnRlcmZhY2VEZWZT
ZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfQWJzdHJhY3RJbnRlcmZhY2VEZWZTZXFfb3V0IEFic3Ry
YWN0SW50ZXJmYWNlRGVmU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
QWJzdHJhY3RJbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYgQ09SQkFfTG9jYWxJbnRlcmZhY2VE
ZWZTZXEgTG9jYWxJbnRlcmZhY2VEZWZTZXE7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbEludGVyZmFj
ZURlZlNlcV92YXIgTG9jYWxJbnRlcmZhY2VEZWZTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfTG9j
YWxJbnRlcmZhY2VEZWZTZXFfb3V0IExvY2FsSW50ZXJmYWNlRGVmU2VxX291dDsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTG9jYWxJbnRlcmZhY2VEZWZTZXE7CgogIHR5cGVkZWYg
Q09SQkFfVmFsdWVEZWYgVmFsdWVEZWY7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZURlZiAqVmFsdWVE
ZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZWZfdmFyIFZhbHVlRGVmX3ZhcjsKICB0eXBl
ZGVmIENPUkJBX1ZhbHVlRGVmX291dCBWYWx1ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX1ZhbHVlRGVmOwoKICB0eXBlZGVmIENPUkJBX1ZhbHVlRGVmU2VxIFZhbHVl
RGVmU2VxOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZWZTZXFfdmFyIFZhbHVlRGVmU2VxX3ZhcjsK
ICB0eXBlZGVmIENPUkJBX1ZhbHVlRGVmU2VxX291dCBWYWx1ZURlZlNlcV9vdXQ7CiAgZXh0ZXJu
IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1ZhbHVlRGVmU2VxOwoKICB0eXBlZGVmIENPUkJBX1Zh
bHVlQm94RGVmIFZhbHVlQm94RGVmOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVCb3hEZWYgKlZhbHVl
Qm94RGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX1ZhbHVlQm94RGVmX3ZhciBWYWx1ZUJveERlZl92
YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZUJveERlZl9vdXQgVmFsdWVCb3hEZWZfb3V0OwogIGV4
dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZUJveERlZjsKCiAgdHlwZWRlZiBDT1JC
QV9TdHJ1Y3RNZW1iZXIgU3RydWN0TWVtYmVyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVy
X3ZhciBTdHJ1Y3RNZW1iZXJfdmFyOwogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVyX291dCBT
dHJ1Y3RNZW1iZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJ1Y3RN
ZW1iZXI7CgogIHR5cGVkZWYgQ09SQkFfU3RydWN0TWVtYmVyU2VxIFN0cnVjdE1lbWJlclNlcTsK
ICB0eXBlZGVmIENPUkJBX1N0cnVjdE1lbWJlclNlcV92YXIgU3RydWN0TWVtYmVyU2VxX3ZhcjsK
ICB0eXBlZGVmIENPUkJBX1N0cnVjdE1lbWJlclNlcV9vdXQgU3RydWN0TWVtYmVyU2VxX291dDsK
ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU3RydWN0TWVtYmVyU2VxOwoKICB0eXBl
ZGVmIENPUkJBX0luaXRpYWxpemVyIEluaXRpYWxpemVyOwogIHR5cGVkZWYgQ09SQkFfSW5pdGlh
bGl6ZXJfdmFyIEluaXRpYWxpemVyX3ZhcjsKICB0eXBlZGVmIENPUkJBX0luaXRpYWxpemVyX291
dCBJbml0aWFsaXplcl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luaXRp
YWxpemVyOwoKICB0eXBlZGVmIENPUkJBX0luaXRpYWxpemVyU2VxIEluaXRpYWxpemVyU2VxOwog
IHR5cGVkZWYgQ09SQkFfSW5pdGlhbGl6ZXJTZXFfdmFyIEluaXRpYWxpemVyU2VxX3ZhcjsKICB0
eXBlZGVmIENPUkJBX0luaXRpYWxpemVyU2VxX291dCBJbml0aWFsaXplclNlcV9vdXQ7CiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luaXRpYWxpemVyU2VxOwoKICB0eXBlZGVmIENP
UkJBX1VuaW9uTWVtYmVyIFVuaW9uTWVtYmVyOwogIHR5cGVkZWYgQ09SQkFfVW5pb25NZW1iZXJf
dmFyIFVuaW9uTWVtYmVyX3ZhcjsKICB0eXBlZGVmIENPUkJBX1VuaW9uTWVtYmVyX291dCBVbmlv
bk1lbWJlcl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1VuaW9uTWVtYmVy
OwoKICB0eXBlZGVmIENPUkJBX1VuaW9uTWVtYmVyU2VxIFVuaW9uTWVtYmVyU2VxOwogIHR5cGVk
ZWYgQ09SQkFfVW5pb25NZW1iZXJTZXFfdmFyIFVuaW9uTWVtYmVyU2VxX3ZhcjsKICB0eXBlZGVm
IENPUkJBX1VuaW9uTWVtYmVyU2VxX291dCBVbmlvbk1lbWJlclNlcV9vdXQ7CiAgZXh0ZXJuIENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1VuaW9uTWVtYmVyU2VxOwoKICB0eXBlZGVmIENPUkJBX0Vu
dW1NZW1iZXJTZXEgRW51bU1lbWJlclNlcTsKICB0eXBlZGVmIENPUkJBX0VudW1NZW1iZXJTZXFf
dmFyIEVudW1NZW1iZXJTZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfRW51bU1lbWJlclNlcV9vdXQg
RW51bU1lbWJlclNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0VudW1N
ZW1iZXJTZXE7CgogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVzY3JpcHRpb24gTW9kdWxlRGVzY3Jp
cHRpb247CiAgdHlwZWRlZiBDT1JCQV9Nb2R1bGVEZXNjcmlwdGlvbl92YXIgTW9kdWxlRGVzY3Jp
cHRpb25fdmFyOwogIHR5cGVkZWYgQ09SQkFfTW9kdWxlRGVzY3JpcHRpb25fb3V0IE1vZHVsZURl
c2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTW9kdWxlRGVz
Y3JpcHRpb247CgogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbiBDb25zdGFudERl
c2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfQ29uc3RhbnREZXNjcmlwdGlvbl92YXIgQ29uc3Rh
bnREZXNjcmlwdGlvbl92YXI7CiAgdHlwZWRlZiBDT1JCQV9Db25zdGFudERlc2NyaXB0aW9uX291
dCBDb25zdGFudERlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfQ29uc3RhbnREZXNjcmlwdGlvbjsKCiAgdHlwZWRlZiBDT1JCQV9UeXBlZGVmRGVmIFR5cGVk
ZWZEZWY7CiAgdHlwZWRlZiBDT1JCQV9UeXBlZGVmRGVmICpUeXBlZGVmRGVmX3B0cjsKICB0eXBl
ZGVmIENPUkJBX1R5cGVkZWZEZWZfdmFyIFR5cGVkZWZEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFf
VHlwZWRlZkRlZl9vdXQgVHlwZWRlZkRlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w
dHIgX3RjX1R5cGVkZWZEZWY7CgogIHR5cGVkZWYgQ09SQkFfVHlwZURlc2NyaXB0aW9uIFR5cGVE
ZXNjcmlwdGlvbjsKICB0eXBlZGVmIENPUkJBX1R5cGVEZXNjcmlwdGlvbl92YXIgVHlwZURlc2Ny
aXB0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX1R5cGVEZXNjcmlwdGlvbl9vdXQgVHlwZURlc2Ny
aXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVHlwZURlc2NyaXB0
aW9uOwoKICB0eXBlZGVmIENPUkJBX1ByaW1pdGl2ZURlZiBQcmltaXRpdmVEZWY7CiAgdHlwZWRl
ZiBDT1JCQV9QcmltaXRpdmVEZWYgKlByaW1pdGl2ZURlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Q
cmltaXRpdmVEZWZfdmFyIFByaW1pdGl2ZURlZl92YXI7CiAgdHlwZWRlZiBDT1JCQV9QcmltaXRp
dmVEZWZfb3V0IFByaW1pdGl2ZURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX1ByaW1pdGl2ZURlZjsKCiAgdHlwZWRlZiBDT1JCQV9TdHJpbmdEZWYgU3RyaW5nRGVmOwog
IHR5cGVkZWYgQ09SQkFfU3RyaW5nRGVmICpTdHJpbmdEZWZfcHRyOwogIHR5cGVkZWYgQ09SQkFf
U3RyaW5nRGVmX3ZhciBTdHJpbmdEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfU3RyaW5nRGVmX291
dCBTdHJpbmdEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TdHJpbmdE
ZWY7CgogIHR5cGVkZWYgQ09SQkFfV3N0cmluZ0RlZiBXc3RyaW5nRGVmOwogIHR5cGVkZWYgQ09S
QkFfV3N0cmluZ0RlZiAqV3N0cmluZ0RlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9Xc3RyaW5nRGVm
X3ZhciBXc3RyaW5nRGVmX3ZhcjsKICB0eXBlZGVmIENPUkJBX1dzdHJpbmdEZWZfb3V0IFdzdHJp
bmdEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Xc3RyaW5nRGVmOwoK
ICB0eXBlZGVmIENPUkJBX0ZpeGVkRGVmIEZpeGVkRGVmOwogIHR5cGVkZWYgQ09SQkFfRml4ZWRE
ZWYgKkZpeGVkRGVmX3B0cjsKICB0eXBlZGVmIENPUkJBX0ZpeGVkRGVmX3ZhciBGaXhlZERlZl92
YXI7CiAgdHlwZWRlZiBDT1JCQV9GaXhlZERlZl9vdXQgRml4ZWREZWZfb3V0OwogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19GaXhlZERlZjsKCiAgdHlwZWRlZiBDT1JCQV9TZXF1ZW5j
ZURlZiBTZXF1ZW5jZURlZjsKICB0eXBlZGVmIENPUkJBX1NlcXVlbmNlRGVmICpTZXF1ZW5jZURl
Zl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9TZXF1ZW5jZURlZl92YXIgU2VxdWVuY2VEZWZfdmFyOwog
IHR5cGVkZWYgQ09SQkFfU2VxdWVuY2VEZWZfb3V0IFNlcXVlbmNlRGVmX291dDsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VxdWVuY2VEZWY7CgogIHR5cGVkZWYgQ09SQkFfQXJy
YXlEZWYgQXJyYXlEZWY7CiAgdHlwZWRlZiBDT1JCQV9BcnJheURlZiAqQXJyYXlEZWZfcHRyOwog
IHR5cGVkZWYgQ09SQkFfQXJyYXlEZWZfdmFyIEFycmF5RGVmX3ZhcjsKICB0eXBlZGVmIENPUkJB
X0FycmF5RGVmX291dCBBcnJheURlZl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX0FycmF5RGVmOwoKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlc2NyaXB0aW9uIEV4Y2Vw
dGlvbkRlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfRXhjZXB0aW9uRGVzY3JpcHRpb25fdmFy
IEV4Y2VwdGlvbkRlc2NyaXB0aW9uX3ZhcjsKICB0eXBlZGVmIENPUkJBX0V4Y2VwdGlvbkRlc2Ny
aXB0aW9uX291dCBFeGNlcHRpb25EZXNjcmlwdGlvbl9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX0V4Y2VwdGlvbkRlc2NyaXB0aW9uOwoKICB0eXBlZGVmIENPUkJBX0V4Y2Vw
dGlvbkRlZlNlcSBFeGNlcHRpb25EZWZTZXE7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWZT
ZXFfdmFyIEV4Y2VwdGlvbkRlZlNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9FeGNlcHRpb25EZWZT
ZXFfb3V0IEV4Y2VwdGlvbkRlZlNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX0V4Y2VwdGlvbkRlZlNlcTsKCiAgdHlwZWRlZiBDT1JCQV9FeGNEZXNjcmlwdGlvblNlcSBF
eGNEZXNjcmlwdGlvblNlcTsKICB0eXBlZGVmIENPUkJBX0V4Y0Rlc2NyaXB0aW9uU2VxX3ZhciBF
eGNEZXNjcmlwdGlvblNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9FeGNEZXNjcmlwdGlvblNlcV9v
dXQgRXhjRGVzY3JpcHRpb25TZXFfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19FeGNEZXNjcmlwdGlvblNlcTsKCiAgZW51bSBBdHRyaWJ1dGVNb2RlCiAgewogICAgQVRUUl9O
T1JNQUwsCiAgICBBVFRSX1JFQURPTkxZCiAgfTsKCiAgdHlwZWRlZiBBdHRyaWJ1dGVNb2RlICZB
dHRyaWJ1dGVNb2RlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQXR0cmli
dXRlTW9kZTsKCiAgdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZWYgQXR0cmlidXRlRGVmOwogIHR5
cGVkZWYgQ09SQkFfQXR0cmlidXRlRGVmICpBdHRyaWJ1dGVEZWZfcHRyOwogIHR5cGVkZWYgQ09S
QkFfQXR0cmlidXRlRGVmX3ZhciBBdHRyaWJ1dGVEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfQXR0
cmlidXRlRGVmX291dCBBdHRyaWJ1dGVEZWZfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf
cHRyIF90Y19BdHRyaWJ1dGVEZWY7CgogIHR5cGVkZWYgQ09SQkFfQXR0cmlidXRlRGVzY3JpcHRp
b24gQXR0cmlidXRlRGVzY3JpcHRpb247CiAgdHlwZWRlZiBDT1JCQV9BdHRyaWJ1dGVEZXNjcmlw
dGlvbl92YXIgQXR0cmlidXRlRGVzY3JpcHRpb25fdmFyOwogIHR5cGVkZWYgQ09SQkFfQXR0cmli
dXRlRGVzY3JpcHRpb25fb3V0IEF0dHJpYnV0ZURlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfQXR0cmlidXRlRGVzY3JpcHRpb247CgogIGVudW0gUHJpbWl0
aXZlS2luZAogICAgewogICAgICBwa19udWxsLAogICAgICBwa192b2lkLAogICAgICBwa19zaG9y
dCwKICAgICAgcGtfbG9uZywKICAgICAgcGtfdXNob3J0LAogICAgICBwa191bG9uZywKICAgICAg
cGtfZmxvYXQsCiAgICAgIHBrX2RvdWJsZSwKICAgICAgcGtfYm9vbGVhbiwKICAgICAgcGtfY2hh
ciwKICAgICAgcGtfb2N0ZXQsCiAgICAgIHBrX2FueSwKICAgICAgcGtfVHlwZUNvZGUsCiAgICAg
IHBrX1ByaW5jaXBhbCwKICAgICAgcGtfc3RyaW5nLAogICAgICBwa19vYmpyZWYsCiAgICAgIHBr
X2xvbmdsb25nLAogICAgICBwa191bG9uZ2xvbmcsCiAgICAgIHBrX2xvbmdkb3VibGUsCiAgICAg
IHBrX3djaGFyLAogICAgICBwa193c3RyaW5nLAogICAgICBwa192YWx1ZV9iYXNlCiAgICB9OwoK
ICB0eXBlZGVmIFByaW1pdGl2ZUtpbmQgJlByaW1pdGl2ZUtpbmRfb3V0OwogIGV4dGVybiBDT1JC
QTo6VHlwZUNvZGVfcHRyIF90Y19QcmltaXRpdmVLaW5kOwoKICBlbnVtIFBhcmFtZXRlck1vZGUK
ICAgIHsKICAgICAgUEFSQU1fSU4sCiAgICAgIFBBUkFNX09VVCwKICAgICAgUEFSQU1fSU5PVVQK
ICAgIH07CgogIHR5cGVkZWYgUGFyYW1ldGVyTW9kZSAmUGFyYW1ldGVyTW9kZV9vdXQ7CiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BhcmFtZXRlck1vZGU7CgogIHR5cGVkZWYgQ09S
QkFfUGFyYW1ldGVyRGVzY3JpcHRpb24gUGFyYW1ldGVyRGVzY3JpcHRpb247CiAgdHlwZWRlZiBD
T1JCQV9QYXJhbWV0ZXJEZXNjcmlwdGlvbl92YXIgUGFyYW1ldGVyRGVzY3JpcHRpb25fdmFyOwog
IHR5cGVkZWYgQ09SQkFfUGFyYW1ldGVyRGVzY3JpcHRpb25fb3V0IFBhcmFtZXRlckRlc2NyaXB0
aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyYW1ldGVyRGVzY3Jp
cHRpb247CgogIHR5cGVkZWYgQ09SQkFfUGFyRGVzY3JpcHRpb25TZXEgUGFyRGVzY3JpcHRpb25T
ZXE7CiAgdHlwZWRlZiBDT1JCQV9QYXJEZXNjcmlwdGlvblNlcV92YXIgUGFyRGVzY3JpcHRpb25T
ZXFfdmFyOwogIHR5cGVkZWYgQ09SQkFfUGFyRGVzY3JpcHRpb25TZXFfb3V0IFBhckRlc2NyaXB0
aW9uU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyRGVzY3JpcHRp
b25TZXE7CgogIHR5cGVkZWYgQ09SQkFfQ29udGV4dElkU2VxIENvbnRleHRJZFNlcTsKICB0eXBl
ZGVmIENPUkJBX0NvbnRleHRJZFNlcV92YXIgQ29udGV4dElkU2VxX3ZhcjsKICB0eXBlZGVmIENP
UkJBX0NvbnRleHRJZFNlcV9vdXQgQ29udGV4dElkU2VxX291dDsKICBleHRlcm4gQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfQ29udGV4dElkU2VxOwoKICB0eXBlZGVmIENPUkJBX09wZXJhdGlvbkRl
ZiBPcGVyYXRpb25EZWY7CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWYgKk9wZXJhdGlvbkRl
Zl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWZfdmFyIE9wZXJhdGlvbkRlZl92YXI7
CiAgdHlwZWRlZiBDT1JCQV9PcGVyYXRpb25EZWZfb3V0IE9wZXJhdGlvbkRlZl9vdXQ7CiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09wZXJhdGlvbkRlZjsKCiAgZW51bSBPcGVyYXRp
b25Nb2RlCiAgICB7CiAgICAgIE9QX05PUk1BTCwKICAgICAgT1BfT05FV0FZCiAgICB9OwoKICB0
eXBlZGVmIE9wZXJhdGlvbk1vZGUgJk9wZXJhdGlvbk1vZGVfb3V0OwogIGV4dGVybiBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90Y19PcGVyYXRpb25Nb2RlOwoKICB0eXBlZGVmIENPUkJBX09wZXJhdGlv
bkRlc2NyaXB0aW9uIE9wZXJhdGlvbkRlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfT3BlcmF0
aW9uRGVzY3JpcHRpb25fdmFyIE9wZXJhdGlvbkRlc2NyaXB0aW9uX3ZhcjsKICB0eXBlZGVmIENP
UkJBX09wZXJhdGlvbkRlc2NyaXB0aW9uX291dCBPcGVyYXRpb25EZXNjcmlwdGlvbl9vdXQ7CiAg
ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09wZXJhdGlvbkRlc2NyaXB0aW9uOwoKICB0
eXBlZGVmIENPUkJBX1JlcG9zaXRvcnlJZFNlcSBSZXBvc2l0b3J5SWRTZXE7CiAgdHlwZWRlZiBD
T1JCQV9SZXBvc2l0b3J5SWRTZXFfdmFyIFJlcG9zaXRvcnlJZFNlcV92YXI7CiAgdHlwZWRlZiBD
T1JCQV9SZXBvc2l0b3J5SWRTZXFfb3V0IFJlcG9zaXRvcnlJZFNlcV9vdXQ7CiAgZXh0ZXJuIENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcG9zaXRvcnlJZFNlcTsKCiAgdHlwZWRlZiBDT1JCQV9P
cERlc2NyaXB0aW9uU2VxIE9wRGVzY3JpcHRpb25TZXE7CiAgdHlwZWRlZiBDT1JCQV9PcERlc2Ny
aXB0aW9uU2VxX3ZhciBPcERlc2NyaXB0aW9uU2VxX3ZhcjsKICB0eXBlZGVmIENPUkJBX09wRGVz
Y3JpcHRpb25TZXFfb3V0IE9wRGVzY3JpcHRpb25TZXFfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlw
ZUNvZGVfcHRyIF90Y19PcERlc2NyaXB0aW9uU2VxOwoKICB0eXBlZGVmIENPUkJBX0F0dHJEZXNj
cmlwdGlvblNlcSBBdHRyRGVzY3JpcHRpb25TZXE7CiAgdHlwZWRlZiBDT1JCQV9BdHRyRGVzY3Jp
cHRpb25TZXFfdmFyIEF0dHJEZXNjcmlwdGlvblNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9BdHRy
RGVzY3JpcHRpb25TZXFfb3V0IEF0dHJEZXNjcmlwdGlvblNlcV9vdXQ7CiAgZXh0ZXJuIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX0F0dHJEZXNjcmlwdGlvblNlcTsKCiAgdHlwZWRlZiBDT1JCQV9J
bnRlcmZhY2VEZXNjcmlwdGlvbiBJbnRlcmZhY2VEZXNjcmlwdGlvbjsKICB0eXBlZGVmIENPUkJB
X0ludGVyZmFjZURlc2NyaXB0aW9uX3ZhciBJbnRlcmZhY2VEZXNjcmlwdGlvbl92YXI7CiAgdHlw
ZWRlZiBDT1JCQV9JbnRlcmZhY2VEZXNjcmlwdGlvbl9vdXQgSW50ZXJmYWNlRGVzY3JpcHRpb25f
b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbnRlcmZhY2VEZXNjcmlwdGlv
bjsKCiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlciBWYWx1ZU1lbWJlcjsKICB0eXBlZGVmIENP
UkJBX1ZhbHVlTWVtYmVyX3ZhciBWYWx1ZU1lbWJlcl92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1
ZU1lbWJlcl9vdXQgVmFsdWVNZW1iZXJfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRy
IF90Y19WYWx1ZU1lbWJlcjsKCiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlclNlcSBWYWx1ZU1l
bWJlclNlcTsKICB0eXBlZGVmIENPUkJBX1ZhbHVlTWVtYmVyU2VxX3ZhciBWYWx1ZU1lbWJlclNl
cV92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlclNlcV9vdXQgVmFsdWVNZW1iZXJTZXFf
b3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19WYWx1ZU1lbWJlclNlcTsKCiAg
dHlwZWRlZiBDT1JCQV9WYWx1ZU1lbWJlckRlZiBWYWx1ZU1lbWJlckRlZjsKICB0eXBlZGVmIENP
UkJBX1ZhbHVlTWVtYmVyRGVmICpWYWx1ZU1lbWJlckRlZl9wdHI7CiAgdHlwZWRlZiBDT1JCQV9W
YWx1ZU1lbWJlckRlZl92YXIgVmFsdWVNZW1iZXJEZWZfdmFyOwogIHR5cGVkZWYgQ09SQkFfVmFs
dWVNZW1iZXJEZWZfb3V0IFZhbHVlTWVtYmVyRGVmX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfVmFsdWVNZW1iZXJEZWY7CgogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZXNjcmlw
dGlvbiBWYWx1ZURlc2NyaXB0aW9uOwogIHR5cGVkZWYgQ09SQkFfVmFsdWVEZXNjcmlwdGlvbl92
YXIgVmFsdWVEZXNjcmlwdGlvbl92YXI7CiAgdHlwZWRlZiBDT1JCQV9WYWx1ZURlc2NyaXB0aW9u
X291dCBWYWx1ZURlc2NyaXB0aW9uX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfVmFsdWVEZXNjcmlwdGlvbjsKCgoKCgogIGV4dGVybiBPUkJfcHRyIE9SQl9pbml0IChpbnQg
JmFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKmFyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqb3JiX25hbWUgPSAwKTsKICBleHRlcm4gT1JCX3B0ciBPUkJfaW5pdCAo
aW50ICZhcmdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGFyICphcmd2W10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKm9yYl9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSk7CgoKCgogIGV4dGVybiBDT1JCQV9FbnZpcm9ubWVudCYgZGVmYXVsdF9l
bnZpcm9ubWVudCAodm9pZCk7CgoKCgp9CiMgMTc4MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIgp0eXBlZGVmIFRBT19VbmJvdW5k
ZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiBUQU9fb3BhcXVlOwpleHRlcm4gQ09SQkE6OlR5cGVD
b2RlX3B0ciBUQ19vcGFxdWU7CgogICAgICAgICAgIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPDwg
KFRBT19PdXRwdXRDRFImLCBjb25zdCBUQU9fb3BhcXVlJik7CgogICAgICAgICAgIENPUkJBOjpC
b29sZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiYsIFRBT19vcGFxdWUmKTsKCmNsYXNzIFRB
T19PYmplY3RLZXk7CmNsYXNzIFRBT19PYmplY3RLZXlfdmFyOwpjbGFzcyBUQU9fT2JqZWN0S2V5
X291dDsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vY29yYmFmd2QuaSIgMQoKCgppbmxpbmUgY2hhciAqCkNPUkJBOjpzdHJpbmdfYWxsb2Mg
KENPUkJBOjpVTG9uZyBsZW4pCnsKCgogIGNoYXIgKnMgPSAwOwogIGRvIHsgdHJ5IHsgcyA9IG5l
dyBjaGFyW3NpemVfdCAobGVuICsgMSldOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKCgogIHJl
dHVybiBzOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6c3RyaW5nX2ZyZWUgKGNoYXIgKnN0cikKewog
IGRlbGV0ZSBbXSBzdHI7Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIqCkNPUkJBOjp3c3RyaW5nX2Fs
bG9jIChDT1JCQTo6VUxvbmcgbGVuKQp7CiAgQ09SQkE6OldDaGFyICpzID0gMDsKICBkbyB7IHRy
eSB7IHMgPSBuZXcgQ09SQkE6OldDaGFyIFsoc2l6ZV90KSAobGVuICsgMSldOyB9IGNhdGNoIChz
dGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9
IH0gd2hpbGUgKDApOwoKCgogIHJldHVybiBzOwp9CgppbmxpbmUgdm9pZApDT1JCQTo6d3N0cmlu
Z19mcmVlIChDT1JCQTo6V0NoYXIgKmNvbnN0IHN0cikKewogIGRlbGV0ZSBbXSBzdHI7Cn0KCmlu
bGluZSBDT1JCQV9FbnZpcm9ubWVudCYKQ09SQkE6OmRlZmF1bHRfZW52aXJvbm1lbnQgKCkKewog
IHJldHVybiBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKTsKfQojIDE3OTYgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMgoKCgoK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0
LmgiIDEKIyAxODAzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL2NvcmJhZndkLmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgiIDEKIyA0MyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyA0NCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIg
MgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L2NvcmJhZndkLmgiIDEKIyA0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9DRFIuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIgMQojIDM2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDM3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5o
IiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9D
RFJfQmFzZS5oIiAxCiMgMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9DRFJfU3RyZWFtLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NZXNzYWdlX0Jsb2NrLmgiIDEKIyAxMyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3NhZ2VfQmxvY2suaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQUNFLmgiIDEK
IyAxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01lc3Nh
Z2VfQmxvY2suaCIgMgojIDQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvQ0RSX1N0cmVhbS5oIiAyCgpjbGFzcyBBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0
b3I7CmNsYXNzIEFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I7CmNsYXNzIEFDRV9DU3RyaW5n
OwoKY2xhc3MgQUNFX0lucHV0Q0RSOwojIDY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgpjbGFzcyBBQ0VfT3V0cHV0Q0RSCnsKcHVi
bGljOgoKCgoKCiAgZnJpZW5kIGNsYXNzIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjsKICBm
cmllbmQgY2xhc3MgQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjsKICBmcmllbmQgY2xhc3Mg
QUNFX0lucHV0Q0RSOwoKCgogIEFDRV9PdXRwdXRDRFIgKHNpemVfdCBzaXplID0gMCwKICAgICAg
ICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9j
YXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv
ciogZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0
b3IqIG1lc3NhZ2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAgICAgICAgICBzaXplX3Qg
bWVtY3B5X3RyYWRlb2ZmID0KICAgICAgICAgICAgICAgICAgIDI1NiwKICAgICAgICAgICAgICAg
ICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDEsCiAg
ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAg
ICAgICAgICAyKTsKCgoKICBBQ0VfT3V0cHV0Q0RSIChjaGFyICpkYXRhLAogICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAg
ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBidWZmZXJfYWxsb2NhdG9yID0gMCwKICAgICAg
ICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBkYXRhX2Jsb2NrX2FsbG9jYXRvciA9IDAsCiAgICAg
ICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogbWVzc2FnZV9ibG9ja19hbGxvY2F0b3IgPSAwLAog
ICAgICAgICAgICAgICAgIHNpemVfdCBtZW1jcHlfdHJhZGVvZmY9CiAgICAgICAgICAgICAgICAg
ICAyNTYsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgZ2lvcF9tYWpvcl92ZXJzaW9u
ID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQg
Z2lvcF9taW5vcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDIpOwoKCgogIEFDRV9PdXRw
dXRDRFIgKEFDRV9NZXNzYWdlX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgIGludCBieXRl
X29yZGVyID0gMSwKICAgICAgICAgICAgICAgICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmPQogICAg
ICAgICAgICAgICAgICAgMjU2LAogICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IGdpb3Bf
bWFqb3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIEFD
RV9DRFI6Ok9jdGV0IGdpb3BfbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAyKTsK
CgogIH5BQ0VfT3V0cHV0Q0RSICh2b2lkKTsKCgoKCgoKCiAgc3RydWN0IGZyb21fYm9vbGVhbgog
IHsKICAgIGZyb21fYm9vbGVhbiAoQUNFX0NEUjo6Qm9vbGVhbiBiKTsKICAgIEFDRV9DRFI6OkJv
b2xlYW4gdmFsXzsKICB9OwoKICBzdHJ1Y3QgZnJvbV9vY3RldAogIHsKICAgIGZyb21fb2N0ZXQg
KEFDRV9DRFI6Ok9jdGV0IG8pOwogICAgQUNFX0NEUjo6T2N0ZXQgdmFsXzsKICB9OwoKICBzdHJ1
Y3QgZnJvbV9jaGFyCiAgewogICAgZnJvbV9jaGFyIChBQ0VfQ0RSOjpDaGFyIGMpOwogICAgQUNF
X0NEUjo6Q2hhciB2YWxfOwogIH07CgogIHN0cnVjdCBmcm9tX3djaGFyCiAgewogICAgZnJvbV93
Y2hhciAoQUNFX0NEUjo6V0NoYXIgd2MpOwogICAgQUNFX0NEUjo6V0NoYXIgdmFsXzsKICB9OwoK
ICBzdHJ1Y3QgZnJvbV9zdHJpbmcKICB7CiAgICBmcm9tX3N0cmluZyAoQUNFX0NEUjo6Q2hhciog
cywKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAgICAgICAgIEFD
RV9DRFI6OkJvb2xlYW4gbm9jb3B5ID0gMCk7CiAgICBmcm9tX3N0cmluZyAoY29uc3QgQUNFX0NE
Ujo6Q2hhciogcywKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAg
ICAgICAgIEFDRV9DRFI6OkJvb2xlYW4gbm9jb3B5ID0gMCk7CiAgICBBQ0VfQ0RSOjpDaGFyICp2
YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogICAgQUNFX0NEUjo6Qm9vbGVhbiBub2Nv
cHlfOwogIH07CgogIHN0cnVjdCBmcm9tX3dzdHJpbmcKICB7CiAgICBmcm9tX3dzdHJpbmcgKEFD
RV9DRFI6OldDaGFyKiB3cywKICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgYiwKICAg
ICAgICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkgPSAwKTsKICAgIGZyb21fd3N0
cmluZyAoY29uc3QgQUNFX0NEUjo6V0NoYXIqIHdzLAogICAgICAgICAgICAgICAgICBBQ0VfQ0RS
OjpVTG9uZyBiLAogICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpCb29sZWFuIG5vY29weSA9IDAp
OwogICAgQUNFX0NEUjo6V0NoYXIgKnZhbF87CiAgICBBQ0VfQ0RSOjpVTG9uZyBib3VuZF87CiAg
ICBBQ0VfQ0RSOjpCb29sZWFuIG5vY29weV87CiAgfTsKCgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiB3
cml0ZV9ib29sZWFuIChBQ0VfQ0RSOjpCb29sZWFuIHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3Jp
dGVfY2hhciAoQUNFX0NEUjo6Q2hhciB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3djaGFy
IChBQ0VfQ0RSOjpXQ2hhciB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX29jdGV0IChBQ0Vf
Q0RSOjpPY3RldCB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3Nob3J0IChBQ0VfQ0RSOjpT
aG9ydCB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3VzaG9ydCAoQUNFX0NEUjo6VVNob3J0
IHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfbG9uZyAoQUNFX0NEUjo6TG9uZyB4KTsKICBB
Q0VfQ0RSOjpCb29sZWFuIHdyaXRlX3Vsb25nIChBQ0VfQ0RSOjpVTG9uZyB4KTsKICBBQ0VfQ0RS
OjpCb29sZWFuIHdyaXRlX2xvbmdsb25nIChjb25zdCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCk7CiAg
QUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV91bG9uZ2xvbmcgKGNvbnN0IEFDRV9DRFI6OlVMb25nTG9u
ZyAmeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9mbG9hdCAoQUNFX0NEUjo6RmxvYXQgeCk7
CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9kb3VibGUgKGNvbnN0IEFDRV9DRFI6OkRvdWJsZSAm
eCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9sb25nZG91YmxlIChjb25zdCBBQ0VfQ0RSOjpM
b25nRG91YmxlICZ4KTsKCgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfc3RyaW5nIChjb25zdCBB
Q0VfQ0RSOjpDaGFyICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoQUNFX0NE
Ujo6VUxvbmcgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0Vf
Q0RSOjpDaGFyICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoY29uc3QgQUNF
X0NTdHJpbmcgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoY29uc3QgQUNF
X0NEUjo6V0NoYXIgKngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoQUNFX0NE
Ujo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
QUNFX0NEUjo6V0NoYXIgKngpOwoKCgoKCgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfYm9vbGVh
bl9hcnJheSAoY29uc3QgQUNFX0NEUjo6Qm9vbGVhbiAqeCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6Qm9v
bGVhbiB3cml0ZV9jaGFyX2FycmF5IChjb25zdCBBQ0VfQ0RSOjpDaGFyICp4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0Vf
Q0RSOjpCb29sZWFuIHdyaXRlX3djaGFyX2FycmF5IChjb25zdCBBQ0VfQ0RSOjpXQ2hhciogeCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5n
dGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfb2N0ZXRfYXJyYXkgKGNvbnN0IEFDRV9DRFI6
Ok9jdGV0KiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6
OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV9zaG9ydF9hcnJheSAoY29u
c3QgQUNFX0NEUjo6U2hvcnQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3VzaG9y
dF9hcnJheSAoY29uc3QgQUNFX0NEUjo6VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xl
YW4gd3JpdGVfbG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6TG9uZyAqeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NE
Ujo6Qm9vbGVhbiB3cml0ZV91bG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6VUxvbmcgKngsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3Ro
KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2xvbmdsb25nX2FycmF5IChjb25zdCBBQ0VfQ0RS
OjpMb25nTG9uZyogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfdWxvbmdsb25n
X2FycmF5IChjb25zdCBBQ0VfQ0RSOjpVTG9uZ0xvbmcgKngsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CiAgQUNFX0NEUjo6
Qm9vbGVhbiB3cml0ZV9mbG9hdF9hcnJheSAoY29uc3QgQUNFX0NEUjo6RmxvYXQgKngsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsK
ICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2RvdWJsZV9hcnJheSAoY29uc3QgQUNFX0NEUjo6RG91
YmxlICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpV
TG9uZyBsZW5ndGgpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfbG9uZ2RvdWJsZV9hcnJheSAo
Y29uc3QgQUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CgoKCiAgQUNFX0NEUjo6Qm9v
bGVhbiB3cml0ZV9vY3RldF9hcnJheV9tYiAoY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iKTsK
CgoKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIGFwcGVuZF9ib29sZWFuIChBQ0VfSW5wdXRDRFIgJik7
CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfY2hhciAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9D
RFI6OkJvb2xlYW4gYXBwZW5kX3djaGFyIChBQ0VfSW5wdXRDRFIgJik7CiAgQUNFX0NEUjo6Qm9v
bGVhbiBhcHBlbmRfb2N0ZXQgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFuIGFw
cGVuZF9zaG9ydCAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX3Vz
aG9ydCAoQUNFX0lucHV0Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX2xvbmcgKEFD
RV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFuIGFwcGVuZF91bG9uZyAoQUNFX0lucHV0
Q0RSICYpOwogIEFDRV9DRFI6OkJvb2xlYW4gYXBwZW5kX2xvbmdsb25nIChBQ0VfSW5wdXRDRFIg
Jik7CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfdWxvbmdsb25nIChBQ0VfSW5wdXRDRFIgJik7
CiAgQUNFX0NEUjo6Qm9vbGVhbiBhcHBlbmRfZmxvYXQgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0Vf
Q0RSOjpCb29sZWFuIGFwcGVuZF9kb3VibGUgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpC
b29sZWFuIGFwcGVuZF9sb25nZG91YmxlIChBQ0VfSW5wdXRDRFIgJik7CgogIEFDRV9DRFI6OkJv
b2xlYW4gYXBwZW5kX3dzdHJpbmcgKEFDRV9JbnB1dENEUiAmKTsKICBBQ0VfQ0RSOjpCb29sZWFu
IGFwcGVuZF9zdHJpbmcgKEFDRV9JbnB1dENEUiAmKTsKCgoKCiAgaW50IGdvb2RfYml0ICh2b2lk
KSBjb25zdDsKCgogIHZvaWQgcmVzZXQgKHZvaWQpOwoKCiAgc2l6ZV90IHRvdGFsX2xlbmd0aCAo
dm9pZCkgY29uc3Q7CgoKCgoKCiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgKmJlZ2luICh2b2lk
KSBjb25zdDsKCgogIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICplbmQgKHZvaWQpIGNvbnN0OwoK
CiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sgKmN1cnJlbnQgKHZvaWQpIGNvbnN0OwoKCgoKCgog
IGNvbnN0IGNoYXIgKmJ1ZmZlciAodm9pZCkgY29uc3Q7CgoKCgoKCiAgc2l6ZV90IGxlbmd0aCAo
dm9pZCkgY29uc3Q7CgoKCgoKCgogIGludCBhbGlnbl93cml0ZV9wdHIgKHNpemVfdCBhbGlnbm1l
bnQpOwoKCiAgQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICpjaGFyX3RyYW5zbGF0b3IgKHZv
aWQpIGNvbnN0OwogIEFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3IgKndjaGFyX3RyYW5zbGF0
b3IgKHZvaWQpIGNvbnN0OwoKCgoKCgogIHNpemVfdCBjdXJyZW50X2FsaWdubWVudCAodm9pZCkg
Y29uc3Q7CgoKCgoKCgogIGludCBhZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgIGNo
YXIgKiZidWYpOwoKCgogIGludCBhZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgIHNp
emVfdCBhbGlnbiwKICAgICAgICAgICAgICBjaGFyIComYnVmKTsKCgoKICBpbnQgZG9fYnl0ZV9z
d2FwICh2b2lkKSBjb25zdDsKCgoKCgogIHZvaWQgcmVzZXRfYnl0ZV9vcmRlciAoaW50IGJ5dGVf
b3JkZXIpOwoKCiAgaW50IHNldF92ZXJzaW9uIChBQ0VfQ0RSOjpPY3RldCBtYWpvciwgQUNFX0NE
Ujo6T2N0ZXQgbWlub3IpOwoKcHJpdmF0ZToKCiAgQUNFX091dHB1dENEUiAoY29uc3QgQUNFX091
dHB1dENEUiYgcmhzKTsKICBBQ0VfT3V0cHV0Q0RSJiBvcGVyYXRvcj0gKGNvbnN0IEFDRV9PdXRw
dXRDRFImIHJocyk7CgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfMSAoY29uc3QgQUNFX0NEUjo6
T2N0ZXQgKngpOwogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfMiAoY29uc3QgQUNFX0NEUjo6VVNo
b3J0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlXzQgKGNvbnN0IEFDRV9DRFI6OlVMb25n
ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlXzggKGNvbnN0IEFDRV9DRFI6OlVMb25nTG9u
ZyAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV8xNiAoY29uc3QgQUNFX0NEUjo6TG9uZ0Rv
dWJsZSAqeCk7CiMgMzY4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvQ0RSX1N0cmVhbS5oIgogIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfYXJyYXkgKGNvbnN0
IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCk7CgoKCgoKCgogIGludCBn
cm93X2FuZF9hZGp1c3QgKHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBhbGlnbiwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyIComYnVmKTsKCnByaXZhdGU6Cgog
IEFDRV9NZXNzYWdlX0Jsb2NrIHN0YXJ0XzsKCgogIEFDRV9NZXNzYWdlX0Jsb2NrICpjdXJyZW50
XzsKCgoKCgoKCiAgaW50IGN1cnJlbnRfaXNfd3JpdGFibGVfOwojIDQwNiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKICBzaXplX3Qg
Y3VycmVudF9hbGlnbm1lbnRfOwojIDQxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKICBpbnQgZG9fYnl0ZV9zd2FwXzsKCgogIGlu
dCBnb29kX2JpdF87CgoKICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmXzsKCgogIEFDRV9DRFI6Ok9j
dGV0IG1ham9yX3ZlcnNpb25fOwogIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb25fOwoKcHJv
dGVjdGVkOgoKICBBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3IgKmNoYXJfdHJhbnNsYXRvcl87
CiAgQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqd2NoYXJfdHJhbnNsYXRvcl87Cn07CiMg
NDUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0
cmVhbS5oIgpjbGFzcyBBQ0VfSW5wdXRDRFIKewpwdWJsaWM6CgoKICBmcmllbmQgY2xhc3MgQUNF
X0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOwogIGZyaWVuZCBjbGFzcyBBQ0VfV0NoYXJfQ29kZXNl
dF9UcmFuc2xhdG9yOwoKCgoKCgogIEFDRV9JbnB1dENEUiAoY29uc3QgY2hhciAqYnVmLAogICAg
ICAgICAgICAgICAgc2l6ZV90IGJ1ZnNpeiwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVy
ID0gMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAg
ICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy
c2lvbiA9CiAgICAgICAgICAgICAgICAgIDIpOwoKCgogIEFDRV9JbnB1dENEUiAoc2l6ZV90IGJ1
ZnNpeiwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAgICAgICAgICAgICAg
IEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAxLAogICAg
ICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAg
ICAgIDIpOwoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZGF0YSwK
ICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0gMSwKICAgICAgICAgICAgICAgIEFDRV9D
RFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAxLAogICAgICAgICAg
ICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgIDIp
OwoKCgoKICBBQ0VfSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAg
ICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZyA9IDAsCiAgICAgICAgICAg
ICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBt
YWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIEFDRV9D
RFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyKTsKCgoKCgogIEFD
RV9JbnB1dENEUiAoQUNFX0RhdGFfQmxvY2sgKmRhdGEsCiAgICAgICAgICAgICAgICBBQ0VfTWVz
c2FnZV9CbG9jazo6TWVzc2FnZV9GbGFncyBmbGFnID0gMCwKICAgICAgICAgICAgICAgIHNpemVf
dCByZWFkX3BvaW50ZXJfcG9zaXRpb24gPSAwLAogICAgICAgICAgICAgICAgc2l6ZV90IHdyaXRl
X3BvaW50ZXJfcG9zaXRpb24gPSAwLAogICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAx
LAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWFqb3JfdmVyc2lvbiA9CiAgICAgICAg
ICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9u
ID0KICAgICAgICAgICAgICAgICAgMik7CgoKCgoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0Vf
SW5wdXRDRFImIHJocyk7CgogIEFDRV9JbnB1dENEUiYgb3BlcmF0b3I9IChjb25zdCBBQ0VfSW5w
dXRDRFImIHJocyk7CgoKCiAgQUNFX0lucHV0Q0RSIChjb25zdCBBQ0VfSW5wdXRDRFImIHJocywK
ICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6TG9u
ZyBvZmZzZXQpOwoKCgogIEFDRV9JbnB1dENEUiAoY29uc3QgQUNFX0lucHV0Q0RSJiByaHMsCiAg
ICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSk7CgoKICBBQ0VfSW5wdXRDRFIgKGNvbnN0IEFDRV9P
dXRwdXRDRFImIHJocywKICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IqIGJ1ZmZlcl9hbGxv
Y2F0b3IgPSAwLAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogZGF0YV9ibG9ja19hbGxv
Y2F0b3IgPSAwLAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogbWVzc2FnZV9ibG9ja19h
bGxvY2F0b3IgPSAwKTsKCgoKCiAgc3RydWN0IFRyYW5zZmVyX0NvbnRlbnRzCiAgewogICAgVHJh
bnNmZXJfQ29udGVudHMgKEFDRV9JbnB1dENEUiAmcmhzKTsKCiAgICBBQ0VfSW5wdXRDRFIgJnJo
c187CiAgfTsKCiAgQUNFX0lucHV0Q0RSIChUcmFuc2Zlcl9Db250ZW50cyByaHMpOwoKCiAgfkFD
RV9JbnB1dENEUiAodm9pZCk7CgoKCgoKICBzdHJ1Y3QgdG9fYm9vbGVhbgogIHsKICAgIHRvX2Jv
b2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4gJmIpOwogICAgQUNFX0NEUjo6Qm9vbGVhbiAmcmVmXzsK
ICB9OwoKICBzdHJ1Y3QgdG9fY2hhcgogIHsKICAgIHRvX2NoYXIgKEFDRV9DRFI6OkNoYXIgJmMp
OwogICAgQUNFX0NEUjo6Q2hhciAmcmVmXzsKICB9OwoKICBzdHJ1Y3QgdG9fd2NoYXIKICB7CiAg
ICB0b193Y2hhciAoQUNFX0NEUjo6V0NoYXIgJndjKTsKICAgIEFDRV9DRFI6OldDaGFyICZyZWZf
OwogIH07CgogIHN0cnVjdCB0b19vY3RldAogIHsKICAgIHRvX29jdGV0IChBQ0VfQ0RSOjpPY3Rl
dCAmbyk7CiAgICBBQ0VfQ0RSOjpPY3RldCAmcmVmXzsKICB9OwoKICBzdHJ1Y3QgdG9fc3RyaW5n
CiAgewoKCgogICAgdG9fc3RyaW5nIChBQ0VfQ0RSOjpDaGFyIComcywKICAgICAgICAgICAgICAg
QUNFX0NEUjo6VUxvbmcgYik7CiAgICB0b19zdHJpbmcgKGNvbnN0IEFDRV9DRFI6OkNoYXIgKiZz
LAogICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiKTsKICAgIGNvbnN0IEFDRV9DRFI6OkNo
YXIgKiZ2YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogIH07CgogIHN0cnVjdCB0b193
c3RyaW5nCiAgewoKCgogICAgdG9fd3N0cmluZyAoQUNFX0NEUjo6V0NoYXIgKiZ3cywKICAgICAg
ICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpOwogICAgdG9fd3N0cmluZyAoY29uc3QgQUNFX0NE
Ujo6V0NoYXIgKiZ3cywKICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpOwogICAgY29u
c3QgQUNFX0NEUjo6V0NoYXIgKiZ2YWxfOwogICAgQUNFX0NEUjo6VUxvbmcgYm91bmRfOwogIH07
CgoKCgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4m
IHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9jaGFyIChBQ0VfQ0RSOjpDaGFyICZ4KTsKICBB
Q0VfQ0RSOjpCb29sZWFuIHJlYWRfd2NoYXIgKEFDRV9DRFI6OldDaGFyJiB4KTsKICBBQ0VfQ0RS
OjpCb29sZWFuIHJlYWRfb2N0ZXQgKEFDRV9DRFI6Ok9jdGV0JiB4KTsKICBBQ0VfQ0RSOjpCb29s
ZWFuIHJlYWRfc2hvcnQgKEFDRV9DRFI6OlNob3J0ICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJl
YWRfdXNob3J0IChBQ0VfQ0RSOjpVU2hvcnQgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9s
b25nIChBQ0VfQ0RSOjpMb25nICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdWxvbmcgKEFD
RV9DRFI6OlVMb25nICZ4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfbG9uZ2xvbmcgKEFDRV9D
RFI6OkxvbmdMb25nJiB4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdWxvbmdsb25nIChBQ0Vf
Q0RSOjpVTG9uZ0xvbmcmIHgpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9mbG9hdCAoQUNFX0NE
Ujo6RmxvYXQgJngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9kb3VibGUgKEFDRV9DRFI6OkRv
dWJsZSAmeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2xvbmdkb3VibGUgKEFDRV9DRFI6Okxv
bmdEb3VibGUgJngpOwoKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfc3RyaW5nIChBQ0VfQ0RSOjpD
aGFyIComeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX3N0cmluZyAoQUNFX0NTdHJpbmcgJngp
OwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF93c3RyaW5nIChBQ0VfQ0RSOjpXQ2hhciomIHgpOwoj
IDY0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9T
dHJlYW0uaCIKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfYm9vbGVhbl9hcnJheSAoQUNFX0NEUjo6
Qm9vbGVhbiogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE
Ujo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfY2hhcl9hcnJheSAoQUNF
X0NEUjo6Q2hhciAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE
Ujo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfd2NoYXJfYXJyYXkgKEFD
RV9DRFI6OldDaGFyKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF
X0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfb2N0ZXRfYXJyYXkg
KEFDRV9DRFI6Ok9jdGV0KiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfc2hvcnRfYXJy
YXkgKEFDRV9DRFI6OlNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfdXNob3J0
X2FycmF5IChBQ0VfQ0RSOjpVU2hvcnQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRf
bG9uZ19hcnJheSAoQUNFX0NEUjo6TG9uZyAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRf
dWxvbmdfYXJyYXkgKEFDRV9DRFI6OlVMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJl
YWRfbG9uZ2xvbmdfYXJyYXkgKEFDRV9DRFI6OkxvbmdMb25nKiB4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RS
OjpCb29sZWFuIHJlYWRfdWxvbmdsb25nX2FycmF5IChBQ0VfQ0RSOjpVTG9uZ0xvbmcqIHgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVu
Z3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfZmxvYXRfYXJyYXkgKEFDRV9DRFI6OkZsb2F0
ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcg
bGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfZG91YmxlX2FycmF5IChBQ0VfQ0RSOjpE
b3VibGUgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6
VUxvbmcgbGVuZ3RoKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfbG9uZ2RvdWJsZV9hcnJheSAo
QUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKCgoKCgoKICBBQ0VfQ0RSOjpCb29sZWFu
IHNraXBfYm9vbGVhbiAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiBza2lwX2NoYXIgKHZvaWQp
OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF93Y2hhciAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVh
biBza2lwX29jdGV0ICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfc2hvcnQgKHZvaWQp
OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF91c2hvcnQgKHZvaWQpOwogIEFDRV9DRFI6OkJvb2xl
YW4gc2tpcF9sb25nICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfdWxvbmcgKHZvaWQp
OwogIEFDRV9DRFI6OkJvb2xlYW4gc2tpcF9sb25nbG9uZyAodm9pZCk7CiAgQUNFX0NEUjo6Qm9v
bGVhbiBza2lwX3Vsb25nbG9uZyAodm9pZCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiBza2lwX2Zsb2F0
ICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfZG91YmxlICh2b2lkKTsKICBBQ0VfQ0RS
OjpCb29sZWFuIHNraXBfbG9uZ2RvdWJsZSAodm9pZCk7CgoKCgoKCgogIEFDRV9DRFI6OkJvb2xl
YW4gc2tpcF93c3RyaW5nICh2b2lkKTsKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfc3RyaW5nICh2
b2lkKTsKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIHNraXBfYnl0ZXMgKHNpemVfdCBuKTsKCgogIGlu
dCBnb29kX2JpdCAodm9pZCkgY29uc3Q7CgoKCgoKCiAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sq
IHN0YXJ0ICh2b2lkKSBjb25zdDsKIyA3MTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9DRFJfU3RyZWFtLmgiCiAgaW50IGdyb3cgKHNpemVfdCBuZXdzaXpl
KTsKCgoKCgoKICB2b2lkIHJlc2V0X2J5dGVfb3JkZXIgKGludCBieXRlX29yZGVyKTsKCgoKICB2
b2lkIHJlc2V0IChjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICBp
bnQgYnl0ZV9vcmRlcik7CgoKICBBQ0VfTWVzc2FnZV9CbG9jayAqc3RlYWxfY29udGVudHMgKHZv
aWQpOwoKCgogIHZvaWQgc3RlYWxfZnJvbSAoQUNFX0lucHV0Q0RSICZjZHIpOwoKCgoKICB2b2lk
IGV4Y2hhbmdlX2RhdGFfYmxvY2tzIChBQ0VfSW5wdXRDRFIgJmNkcik7CgoKCgoKICBBQ0VfRGF0
YV9CbG9jayogY2xvbmVfZnJvbSAoQUNFX0lucHV0Q0RSICZjZHIpOwoKCgogIHZvaWQgcmVzZXRf
Y29udGVudHMgKHZvaWQpOwoKCiAgY2hhciogcmRfcHRyICh2b2lkKTsKCgogIHNpemVfdCBsZW5n
dGggKHZvaWQpIGNvbnN0OwoKCgoKCgoKICBpbnQgYWxpZ25fcmVhZF9wdHIgKHNpemVfdCBhbGln
bm1lbnQpOwoKCgogIGludCBkb19ieXRlX3N3YXAgKHZvaWQpIGNvbnN0OwoKCgogIGludCBieXRl
X29yZGVyICh2b2lkKSBjb25zdDsKCgogIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hh
cl90cmFuc2xhdG9yICh2b2lkKSBjb25zdDsKICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9y
ICp3Y2hhcl90cmFuc2xhdG9yICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgaW50IGFkanVzdCAoc2l6
ZV90IHNpemUsCiAgICAgICAgICAgICAgY2hhciAqJmJ1Zik7CgoKCiAgaW50IGFkanVzdCAoc2l6
ZV90IHNpemUsCiAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgIGNoYXIg
KiZidWYpOwoKcHJvdGVjdGVkOgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sgc3RhcnRfOwoKCgogIGlu
dCBkb19ieXRlX3N3YXBfOwoKCiAgaW50IGdvb2RfYml0XzsKCgogIEFDRV9DaGFyX0NvZGVzZXRf
VHJhbnNsYXRvciAqY2hhcl90cmFuc2xhdG9yXzsKICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh
dG9yICp3Y2hhcl90cmFuc2xhdG9yXzsKCnByaXZhdGU6CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFk
XzEgKEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfMiAoQUNFX0NE
Ujo6VVNob3J0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfNCAoQUNFX0NEUjo6VUxvbmcg
KngpOwogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF84IChBQ0VfQ0RSOjpVTG9uZ0xvbmcgKngpOwog
IEFDRV9DRFI6OkJvb2xlYW4gcmVhZF8xNiAoQUNFX0NEUjo6TG9uZ0RvdWJsZSAqeCk7CiMgODM2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVh
bS5oIgogIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF9hcnJheSAodm9pZCogeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE
Ujo6VUxvbmcgbGVuZ3RoKTsKCgogIHZvaWQgcmRfcHRyIChzaXplX3Qgb2Zmc2V0KTsKCgogIGNo
YXIqIGVuZCAodm9pZCk7CgogIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb25fOwogIEFDRV9D
RFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb25fOwp9OwojIDg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaCIKY2xhc3MgQUNFX0NoYXJfQ29k
ZXNldF9UcmFuc2xhdG9yCnsKcHVibGljOgoKCiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHJl
YWRfY2hhciAoQUNFX0lucHV0Q0RSJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBQ0VfQ0RSOjpDaGFyJikgPSAwOwoKCgogIHZpcnR1YWwgQUNFX0NEUjo6Qm9vbGVhbiBy
ZWFkX3N0cmluZyAoQUNFX0lucHV0Q0RSJiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFDRV9DRFI6OkNoYXIgKiYpID0gMDsKCgoKICB2aXJ0dWFsIEFDRV9DRFI6OkJv
b2xlYW4gcmVhZF9jaGFyX2FycmF5IChBQ0VfSW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OkNoYXIqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nKSA9IDA7CgoK
CiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX2NoYXIgKEFDRV9PdXRwdXRDRFImLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpDaGFyKSA9IDA7
CgoKCiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHdyaXRlX3N0cmluZyAoQUNFX091dHB1dENE
UiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxv
bmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NE
Ujo6Q2hhciopID0gMDsKCgoKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfY2hhcl9h
cnJheSAoQUNFX091dHB1dENEUiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OkNoYXIqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZykgPSAwOwoKcHJvdGVjdGVkOgoKCiAg
QUNFX0NEUjo6Qm9vbGVhbiByZWFkXzEgKEFDRV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFuIHdy
aXRlXzEgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KTsKCgoKICBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfYXJy
YXkgKEFDRV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpOwoKCgoKCgoKICBBQ0VfQ0RSOjpC
b29sZWFuIHdyaXRlX2FycmF5IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcg
bGVuZ3RoKTsKIyA5MzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9DRFJfU3RyZWFtLmgiCiAgaW50IGFkanVzdCAoQUNFX091dHB1dENEUiYgb3V0LAogICAg
ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAgICAg
ICAgICAgICBjaGFyIComYnVmKTsKCgogIHZvaWQgZ29vZF9iaXQgKEFDRV9PdXRwdXRDRFImIG91
dCwgaW50IGJpdCk7Cn07CiMgOTU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgpjbGFzcyBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh
dG9yCnsKcHVibGljOgogIHZpcnR1YWwgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX3djaGFyIChBQ0Vf
SW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RS
OjpXQ2hhciYpID0gMDsKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gcmVhZF93c3RyaW5nIChB
Q0VfSW5wdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9DRFI6OldDaGFyIComKSA9IDA7CiAgdmlydHVhbCBBQ0VfQ0RSOjpCb29sZWFuIHJlYWRfd2No
YXJfYXJyYXkgKEFDRV9JbnB1dENEUiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OldDaGFyKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcpID0gMDsKICB2aXJ0dWFsIEFD
RV9DRFI6OkJvb2xlYW4gd3JpdGVfd2NoYXIgKEFDRV9PdXRwdXRDRFImLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6V0NoYXIpID0gMDsKICB2aXJ0dWFs
IEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd3N0cmluZyAoQUNFX091dHB1dENEUiYsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQ0RSOjpXQ2hhciop
ID0gMDsKICB2aXJ0dWFsIEFDRV9DRFI6OkJvb2xlYW4gd3JpdGVfd2NoYXJfYXJyYXkgKEFDRV9P
dXRwdXRDRFImLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQUNFX0NEUjo6V0NoYXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcpID0gMDsKCnByb3RlY3RlZDoKCgogIEFDRV9DRFI6
OkJvb2xlYW4gcmVhZF8xIChBQ0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQ0RSOjpPY3RldCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkXzIgKEFD
RV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVT
aG9ydCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkXzQgKEFDRV9JbnB1dENEUiYgaW5wdXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nICp4KTsKICBBQ0VfQ0RS
OjpCb29sZWFuIHdyaXRlXzEgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KTsKICBBQ0VfQ0RSOjpCb29sZWFu
IHdyaXRlXzIgKEFDRV9PdXRwdXRDRFImIG91dHB1dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEFDRV9DRFI6OlVTaG9ydCAqeCk7CiAgQUNFX0NEUjo6Qm9vbGVhbiB3cml0ZV80
IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBBQ0VfQ0RSOjpVTG9uZyAqeCk7CgoKCiAgQUNFX0NEUjo6Qm9vbGVhbiByZWFkX2FycmF5IChB
Q0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCog
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKTsKCgoKCgoKCiAgQUNFX0NEUjo6Qm9vbGVh
biB3cml0ZV9hcnJheSAoQUNFX091dHB1dENEUiYgb3V0cHV0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGFs
aWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0
aCk7CiMgMTAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L0NEUl9TdHJlYW0uaCIKICBpbnQgYWRqdXN0IChBQ0VfT3V0cHV0Q0RSJiBvdXQsCiAgICAgICAg
ICAgICAgc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAg
ICAgIGNoYXIgKiZidWYpOwoKCiAgdm9pZCBnb29kX2JpdCAoQUNFX091dHB1dENEUiYgb3V0LCBp
bnQgYml0KTsKfTsKCgoKZXh0ZXJuIEFDRV9DRFI6OkJvb2xlYW4gb3BlcmF0b3I8PCAoQUNFX091
dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQUNFX0NTdHJpbmcgJngpOwoKZXh0ZXJuIEFDRV9DRFI6OkJvb2xlYW4gb3BlcmF0
b3I+PiAoQUNFX0lucHV0Q0RSICZpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBQ0VfQ1N0cmluZyAmeCk7CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0NEUl9TdHJlYW0uaSIgMQoKCgoKCgoKaW5saW5l
CkFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbjo6ZnJvbV9ib29sZWFuIChBQ0VfQ0RSOjpCb29s
ZWFuIGIpCiAgOiB2YWxfIChiKQp7Cn0KCmlubGluZQpBQ0VfSW5wdXRDRFI6OnRvX2Jvb2xlYW46
OnRvX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4gJmIpCiAgOiByZWZfIChiKQp7Cn0KCmlubGlu
ZQpBQ0VfT3V0cHV0Q0RSOjpmcm9tX29jdGV0Ojpmcm9tX29jdGV0IChBQ0VfQ0RSOjpPY3RldCBv
KQogIDogdmFsXyAobykKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RSOjp0b19vY3RldDo6dG9fb2N0
ZXQgKEFDRV9DRFI6Ok9jdGV0ICZvKQogIDogcmVmXyAobykKewp9CgppbmxpbmUKQUNFX091dHB1
dENEUjo6ZnJvbV9jaGFyOjpmcm9tX2NoYXIgKEFDRV9DRFI6OkNoYXIgYykKICA6IHZhbF8gKGMp
CnsKfQoKaW5saW5lCkFDRV9JbnB1dENEUjo6dG9fY2hhcjo6dG9fY2hhciAoQUNFX0NEUjo6Q2hh
ciAmYykKICA6IHJlZl8gKGMpCnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6OmZyb21fd2NoYXI6
OmZyb21fd2NoYXIgKEFDRV9DRFI6OldDaGFyIHdjKQogIDogdmFsXyAod2MpCnsKfQoKaW5saW5l
CkFDRV9JbnB1dENEUjo6dG9fd2NoYXI6OnRvX3djaGFyIChBQ0VfQ0RSOjpXQ2hhciAmd2MpCiAg
OiByZWZfICh3YykKewp9CgppbmxpbmUKQUNFX091dHB1dENEUjo6ZnJvbV9zdHJpbmc6OmZyb21f
c3RyaW5nIChBQ0VfQ0RSOjpDaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkpCiAgOiB2YWxfIChzKSwKICAgIGJv
dW5kXyAoYiksCiAgICBub2NvcHlfIChub2NvcHkpCnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6
OmZyb21fc3RyaW5nOjpmcm9tX3N0cmluZyAoY29uc3QgQUNFX0NEUjo6Q2hhciAqcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkJvb2xlYW4gbm9j
b3B5KQogIDogdmFsXyAoY29uc3RfY2FzdDxBQ0VfQ0RSOjpDaGFyICo+IChzKSksCiAgICBib3Vu
ZF8gKGIpLAogICAgbm9jb3B5XyAobm9jb3B5KQp7Cn0KCmlubGluZQpBQ0VfSW5wdXRDRFI6OnRv
X3N0cmluZzo6dG9fc3RyaW5nIChBQ0VfQ0RSOjpDaGFyIComcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgYikKICA6IHZhbF8gKGNvbnN0X2Nhc3Q8
Y29uc3QgQUNFX0NEUjo6Q2hhciAqJj4gKHMpKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUK
QUNFX0lucHV0Q0RSOjp0b19zdHJpbmc6OnRvX3N0cmluZyAoY29uc3QgQUNFX0NEUjo6Q2hhciAq
JnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIp
CiAgOiB2YWxfIChzKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUKQUNFX091dHB1dENEUjo6
ZnJvbV93c3RyaW5nOjpmcm9tX3dzdHJpbmcgKEFDRV9DRFI6OldDaGFyICp3cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpCb29sZWFuIG5v
Y29weSkKICA6IHZhbF8gKHdzKSwKICAgIGJvdW5kXyAoYiksCiAgICBub2NvcHlfIChub2NvcHkp
CnsKfQoKaW5saW5lCkFDRV9PdXRwdXRDRFI6OmZyb21fd3N0cmluZzo6ZnJvbV93c3RyaW5nIChj
b25zdCBBQ0VfQ0RSOjpXQ2hhciAqd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX0NEUjo6Qm9vbGVhbiBub2NvcHkpCiAgOiB2YWxfIChjb25zdF9j
YXN0PEFDRV9DRFI6OldDaGFyICo+ICh3cykpLAogICAgYm91bmRfIChiKSwKICAgIG5vY29weV8g
KG5vY29weSkKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RSOjp0b193c3RyaW5nOjp0b193c3RyaW5n
IChBQ0VfQ0RSOjpXQ2hhciAqJndzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFDRV9DRFI6OlVMb25nIGIpCiAgOiB2YWxfIChjb25zdF9jYXN0PGNvbnN0IEFDRV9DRFI6
OldDaGFyIComPiAod3MpKSwKICAgIGJvdW5kXyAoYikKewp9CgppbmxpbmUKQUNFX0lucHV0Q0RS
Ojp0b193c3RyaW5nOjp0b193c3RyaW5nIChjb25zdCBBQ0VfQ0RSOjpXQ2hhciAqJndzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGIpCiAgOiB2
YWxfICh3cyksCiAgICBib3VuZF8gKGIpCnsKfQoKaW5saW5lCkFDRV9JbnB1dENEUjo6VHJhbnNm
ZXJfQ29udGVudHM6OlRyYW5zZmVyX0NvbnRlbnRzIChBQ0VfSW5wdXRDRFIgJnJocykKICA6IHJo
c18gKHJocykKewp9CgoKCmlubGluZQpBQ0VfT3V0cHV0Q0RSOjp+QUNFX091dHB1dENEUiAodm9p
ZCkKewogIGlmICh0aGlzLT5zdGFydF8uY29udCAoKSAhPSAwKQogICAgewogICAgICBBQ0VfTWVz
c2FnZV9CbG9jazo6cmVsZWFzZSAodGhpcy0+c3RhcnRfLmNvbnQgKCkpOwogICAgICB0aGlzLT5z
dGFydF8uY29udCAoMCk7CiAgICB9CiAgdGhpcy0+Y3VycmVudF8gPSAwOwp9CgppbmxpbmUgdm9p
ZApBQ0VfT3V0cHV0Q0RSOjpyZXNldCAodm9pZCkKewogIHRoaXMtPmN1cnJlbnRfID0gJnRoaXMt
PnN0YXJ0XzsKICB0aGlzLT5jdXJyZW50X2lzX3dyaXRhYmxlXyA9IDE7CiAgQUNFX0NEUjo6bWJf
YWxpZ24gKCZ0aGlzLT5zdGFydF8pOwogIHRoaXMtPmN1cnJlbnRfYWxpZ25tZW50XyA9IDA7CgoK
CgogIEFDRV9NZXNzYWdlX0Jsb2NrICpjb250ID0gdGhpcy0+c3RhcnRfLmNvbnQgKCk7CiAgaWYg
KGNvbnQgIT0gMCkKICAgIHsKICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6OnJlbGVhc2UgKGNvbnQp
OwogICAgICB0aGlzLT5zdGFydF8uY29udCAoMCk7CiAgICB9Cgp9CgoKCmlubGluZSBBQ0VfQ0RS
OjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX29jdGV0IChBQ0VfQ0RSOjpPY3RldCB4KQp7
CiAgcmV0dXJuIHRoaXMtPndyaXRlXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6
T2N0ZXQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6
d3JpdGVfYm9vbGVhbiAoQUNFX0NEUjo6Qm9vbGVhbiB4KQp7CiAgcmV0dXJuIChBQ0VfQ0RSOjpC
b29sZWFuKSB0aGlzLT53cml0ZV9vY3RldCAoeCA/IDEgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6
OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfY2hhciAoQUNFX0NEUjo6Q2hhciB4KQp7CiAg
aWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT53cml0ZV8x
IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6Ok9jdGV0Kj4gKCZ4KSk7CiAgcmV0dXJu
IHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8tPndyaXRlX2NoYXIgKCp0aGlzLCB4KTsKfQoKaW5saW5l
IEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfc2hvcnQgKEFDRV9DRFI6OlNo
b3J0IHgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfMiAocmVpbnRlcnByZXRfY2FzdDxjb25zdCBB
Q0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091
dHB1dENEUjo6d3JpdGVfdXNob3J0IChBQ0VfQ0RSOjpVU2hvcnQgeCkKewogIHJldHVybiB0aGlz
LT53cml0ZV8yIChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVTaG9ydCo+ICgmeCkp
Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9sb25nIChB
Q0VfQ0RSOjpMb25nIHgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfNCAocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBBQ0VfQ0RSOjpVTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh
bgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZyAoQUNFX0NEUjo6VUxvbmcgeCkKewogIHJldHVy
biB0aGlzLT53cml0ZV80IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nKj4g
KCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX2xv
bmdsb25nIChjb25zdCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT53cml0
ZV84IChyZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZ2xvbmcg
KGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT53cml0ZV84IChy
ZWludGVycHJldF9jYXN0PGNvbnN0IEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9Cgppbmxp
bmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9mbG9hdCAoQUNFX0NEUjo6
RmxvYXQgeCkKewogIHJldHVybiB0aGlzLT53cml0ZV80IChyZWludGVycHJldF9jYXN0PGNvbnN0
IEFDRV9DRFI6OlVMb25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9P
dXRwdXRDRFI6OndyaXRlX2RvdWJsZSAoY29uc3QgQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgcmV0
dXJuIHRoaXMtPndyaXRlXzggKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6VUxvbmdM
b25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6Ondy
aXRlX2xvbmdkb3VibGUgKGNvbnN0IEFDRV9DRFI6OkxvbmdEb3VibGUgJngpCnsKICByZXR1cm4g
dGhpcy0+d3JpdGVfMTYgKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQUNFX0NEUjo6TG9uZ0RvdWJs
ZSo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0
ZV9zdHJpbmcgKGNvbnN0IEFDRV9DRFI6OkNoYXIgKngpCnsKICBpZiAoeCAhPSAwKQogICAgcmV0
dXJuIHRoaXMtPndyaXRlX3N0cmluZyAoQUNFX09TOjpzdHJsZW4oeCksIHgpOwogIHJldHVybiB0
aGlzLT53cml0ZV9zdHJpbmcgKDAsIDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0Vf
T3V0cHV0Q0RSOjp3cml0ZV93c3RyaW5nIChjb25zdCBBQ0VfQ0RSOjpXQ2hhciAqeCkKewogIGlm
ICh4ICE9IDApCiAgICByZXR1cm4gdGhpcy0+d3JpdGVfd3N0cmluZyAoQUNFX09TOjp3c2xlbiAo
eCksIHgpOwogIHJldHVybiB0aGlzLT53cml0ZV93c3RyaW5nICgwLCAwKTsKfQoKaW5saW5lIEFD
RV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfY2hhcl9hcnJheSAoY29uc3QgQUNF
X0NEUjo6Q2hhciAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6
VUxvbmcgbGVuZ3RoKQp7CiAgaWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJl
dHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6T0NURVRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE
Ujo6T0NURVRfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7CiAg
cmV0dXJuIHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8tPndyaXRlX2NoYXJfYXJyYXkgKCp0aGlzLCB4
LCBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0
ZV93Y2hhcl9hcnJheSAoY29uc3QgQUNFX0NEUjo6V0NoYXIqIHgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAodGhpcy0+d2No
YXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfU0laRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfQUxJR04sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxlbmd0aCk7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3RyYW5zbGF0b3Jf
LT53cml0ZV93Y2hhcl9hcnJheSAoKnRoaXMsIHgsIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RS
OjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX29jdGV0X2FycmF5IChjb25zdCBBQ0VfQ0RS
OjpPY3RldCogeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVM
b25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9DVEVUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQ0RSOjpPQ1RFVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRl
X3Nob3J0X2FycmF5IChjb25zdCBBQ0VfQ0RSOjpTaG9ydCAqeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53
cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlNIT1JU
X1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpC
b29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRlX3VzaG9ydF9hcnJheSAoY29uc3QgQUNFX0NEUjo6
VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVM
b25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0ZV9hcnJheSAoeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6OlNIT1JUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OndyaXRl
X2xvbmdfYXJyYXkgKGNvbnN0IEFDRV9DRFI6OkxvbmcgKngsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiB0aGlzLT53cml0
ZV9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0la
RSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfQUxJR04sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh
bgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV91bG9uZ19hcnJheSAoY29uc3QgQUNFX0NEUjo6VUxvbmcg
KngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5n
dGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQ0RSOjpMT05HX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfQ0RSOjpMT05HX0FMSUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsK
fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfbG9uZ2xvbmdf
YXJyYXkgKGNvbnN0IEFDRV9DRFI6OkxvbmdMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIHRoaXMtPndy
aXRlX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xP
TkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FM
SUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9D
RFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6d3JpdGVfdWxvbmdsb25nX2FycmF5IChjb25zdCBB
Q0VfQ0RSOjpVTG9uZ0xvbmcgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIHRoaXMtPndyaXRlX2FycmF5ICh4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfU0laRSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FMSUdOLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4K
QUNFX091dHB1dENEUjo6d3JpdGVfZmxvYXRfYXJyYXkgKGNvbnN0IEFDRV9DRFI6OkZsb2F0ICp4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3Ro
KQp7CiAgcmV0dXJuIHRoaXMtPndyaXRlX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX0NEUjo6TE9OR19TSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNF
X0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0K
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9kb3VibGVfYXJy
YXkgKGNvbnN0IEFDRV9DRFI6OkRvdWJsZSAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJy
YXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9OR19TSVpF
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfQUxJR04sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v
bGVhbgpBQ0VfT3V0cHV0Q0RSOjp3cml0ZV9sb25nZG91YmxlX2FycmF5IChjb25zdCBBQ0VfQ0RS
OjpMb25nRG91YmxlKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKICByZXR1cm4gdGhpcy0+d3JpdGVfYXJyYXkgKHgsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HRE9VQkxFX1NJWkUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HRE9VQkxFX0FMSUdOLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIGludApBQ0VfT3V0cHV0Q0RS
Ojpnb29kX2JpdCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5nb29kX2JpdF87Cn0KCmlu
bGluZSBpbnQKQUNFX091dHB1dENEUjo6YWRqdXN0IChzaXplX3Qgc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciomIGJ1
ZikKewogIGlmICghdGhpcy0+Y3VycmVudF9pc193cml0YWJsZV8pCiAgICByZXR1cm4gdGhpcy0+
Z3Jvd19hbmRfYWRqdXN0IChzaXplLCBhbGlnbiwgYnVmKTsKCiAgc2l6ZV90IG9mZnNldCA9CiAg
ICAoKHRoaXMtPmN1cnJlbnRfYWxpZ25tZW50XyArICgocHRyX2FyaXRoX3QpKChhbGlnbiktMSkp
KSAmICh+KChwdHJfYXJpdGhfdCkoKGFsaWduKS0xKSkpKQogICAgLSB0aGlzLT5jdXJyZW50X2Fs
aWdubWVudF87CgogIGJ1ZiA9IHRoaXMtPmN1cnJlbnRfLT53cl9wdHIgKCkgKyBvZmZzZXQ7CiAg
Y2hhciAqZW5kID0gYnVmICsgc2l6ZTsKCiAgaWYgKGVuZCA8PSB0aGlzLT5jdXJyZW50Xy0+ZW5k
ICgpKQogICAgewogICAgICB0aGlzLT5jdXJyZW50X2FsaWdubWVudF8gKz0gb2Zmc2V0ICsgc2l6
ZTsKICAgICAgdGhpcy0+Y3VycmVudF8tPndyX3B0ciAoZW5kKTsKICAgICAgcmV0dXJuIDA7CiAg
ICB9CgogIHJldHVybiB0aGlzLT5ncm93X2FuZF9hZGp1c3QgKHNpemUsIGFsaWduLCBidWYpOwp9
CgppbmxpbmUgaW50CkFDRV9PdXRwdXRDRFI6OmFkanVzdCAoc2l6ZV90IHNpemUsIGNoYXIqJiBi
dWYpCnsKICByZXR1cm4gdGhpcy0+YWRqdXN0IChzaXplLCBzaXplLCBidWYpOwp9CgppbmxpbmUg
aW50CkFDRV9PdXRwdXRDRFI6OnNldF92ZXJzaW9uIChBQ0VfQ0RSOjpPY3RldCBtYWpvciwgQUNF
X0NEUjo6T2N0ZXQgbWlub3IpCnsKICB0aGlzLT5tYWpvcl92ZXJzaW9uXyA9IG1ham9yOwogIHRo
aXMtPm1pbm9yX3ZlcnNpb25fID0gbWlub3I7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBjb25zdCBB
Q0VfTWVzc2FnZV9CbG9jayoKQUNFX091dHB1dENEUjo6YmVnaW4gKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gJnRoaXMtPnN0YXJ0XzsKfQoKaW5saW5lIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKgpB
Q0VfT3V0cHV0Q0RSOjplbmQgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y3VycmVudF8t
PmNvbnQgKCk7Cn0KCmlubGluZSBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayoKQUNFX091dHB1dENE
Ujo6Y3VycmVudCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5jdXJyZW50XzsKfQoKaW5s
aW5lIHNpemVfdApBQ0VfT3V0cHV0Q0RSOjp0b3RhbF9sZW5ndGggKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gQUNFX0NEUjo6dG90YWxfbGVuZ3RoICh0aGlzLT5iZWdpbiAoKSwgdGhpcy0+ZW5kICgp
KTsKfQoKaW5saW5lIGNvbnN0IGNoYXIqCkFDRV9PdXRwdXRDRFI6OmJ1ZmZlciAodm9pZCkgY29u
c3QKewogIHJldHVybiB0aGlzLT5zdGFydF8ucmRfcHRyICgpOwp9CgppbmxpbmUgc2l6ZV90CkFD
RV9PdXRwdXRDRFI6Omxlbmd0aCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdGFydF8u
bGVuZ3RoICgpOwp9CgppbmxpbmUgaW50CkFDRV9PdXRwdXRDRFI6OmRvX2J5dGVfc3dhcCAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5kb19ieXRlX3N3YXBfOwp9CgppbmxpbmUgdm9pZApB
Q0VfT3V0cHV0Q0RSOjpyZXNldF9ieXRlX29yZGVyIChpbnQgYnl0ZV9vcmRlcikKewogIHRoaXMt
PmRvX2J5dGVfc3dhcF8gPSAoYnl0ZV9vcmRlciAhPSAxKTsKfQoKaW5saW5lIHNpemVfdApBQ0Vf
T3V0cHV0Q0RSOjpjdXJyZW50X2FsaWdubWVudCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlz
LT5jdXJyZW50X2FsaWdubWVudF87Cn0KCmlubGluZSBpbnQKQUNFX091dHB1dENEUjo6YWxpZ25f
d3JpdGVfcHRyIChzaXplX3QgYWxpZ25tZW50KQp7CiAgY2hhciAqZHVtbXk7CiAgcmV0dXJuIHRo
aXMtPmFkanVzdCAoMCwgYWxpZ25tZW50LCBkdW1teSk7Cn0KCmlubGluZSBBQ0VfQ2hhcl9Db2Rl
c2V0X1RyYW5zbGF0b3IgKgpBQ0VfT3V0cHV0Q0RSOjpjaGFyX3RyYW5zbGF0b3IgKHZvaWQpIGNv
bnN0CnsKICByZXR1cm4gdGhpcy0+Y2hhcl90cmFuc2xhdG9yXzsKfQoKaW5saW5lIEFDRV9XQ2hh
cl9Db2Rlc2V0X1RyYW5zbGF0b3IgKgpBQ0VfT3V0cHV0Q0RSOjp3Y2hhcl90cmFuc2xhdG9yICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3RyYW5zbGF0b3JfOwp9CgoKCmlubGlu
ZQpBQ0VfSW5wdXRDRFI6On5BQ0VfSW5wdXRDRFIgKHZvaWQpCnsKfQoKaW5saW5lIEFDRV9DRFI6
OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX29jdGV0IChBQ0VfQ0RSOjpPY3RldCYgeCkKewog
IHJldHVybiB0aGlzLT5yZWFkXzEgKCZ4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNF
X0lucHV0Q0RSOjpyZWFkX2Jvb2xlYW4gKEFDRV9DRFI6OkJvb2xlYW4mIHgpCnsKICBBQ0VfQ0RS
OjpPY3RldCB0bXA7CiAgdGhpcy0+cmVhZF9vY3RldCAodG1wKTsKICB4ID0gdG1wID8gMSA6IDA7
CiAgcmV0dXJuIChBQ0VfQ0RSOjpCb29sZWFuKSB0aGlzLT5nb29kX2JpdF87Cn0KCmlubGluZSBB
Q0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9jaGFyIChBQ0VfQ0RSOjpDaGFyICZ4
KQp7CiAgaWYgKHRoaXMtPmNoYXJfdHJhbnNsYXRvcl8gPT0gMCkKICAgIHJldHVybiB0aGlzLT5y
ZWFkXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNFX0NEUjo6T2N0ZXQqPiAoJngpKTsKICByZXR1cm4g
dGhpcy0+Y2hhcl90cmFuc2xhdG9yXy0+cmVhZF9jaGFyICgqdGhpcywgeCk7Cn0KCgppbmxpbmUg
QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfc2hvcnQgKEFDRV9DRFI6OlNob3J0
ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfMiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpV
U2hvcnQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpy
ZWFkX3VzaG9ydCAoQUNFX0NEUjo6VVNob3J0ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfMiAo
cmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKCmlubGluZSBBQ0Vf
Q0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9sb25nIChBQ0VfQ0RSOjpMb25nICZ4KQp7
CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVTG9uZyo+
ICgmeCkpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX3Vs
b25nIChBQ0VfQ0RSOjpVTG9uZyAmeCkKewogIHJldHVybiB0aGlzLT5yZWFkXzQgKHJlaW50ZXJw
cmV0X2Nhc3Q8QUNFX0NEUjo6VUxvbmcqPiAoJngpKTsKfQoKCmlubGluZSBBQ0VfQ0RSOjpCb29s
ZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9sb25nbG9uZyAoQUNFX0NEUjo6TG9uZ0xvbmcgJngpCnsK
ICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nTG9u
Zyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRf
dWxvbmdsb25nIChBQ0VfQ0RSOjpVTG9uZ0xvbmcgJngpCnsKICByZXR1cm4gdGhpcy0+cmVhZF84
IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUg
QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfZmxvYXQgKEFDRV9DRFI6OkZsb2F0
ICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpV
TG9uZyo+ICgmeCkpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpy
ZWFkX2RvdWJsZSAoQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgcmV0dXJuIHRoaXMtPnJlYWRfOCAo
cmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVTG9uZ0xvbmcqPiAoJngpKTsKfQoKaW5saW5lIEFD
RV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX2xvbmdkb3VibGUgKEFDRV9DRFI6Okxv
bmdEb3VibGUgJngpCnsKICByZXR1cm4gdGhpcy0+cmVhZF8xNiAocmVpbnRlcnByZXRfY2FzdDxB
Q0VfQ0RSOjpMb25nRG91YmxlKj4gKCZ4KSk7Cn0KCmlubGluZSBzaXplX3QKQUNFX0lucHV0Q0RS
OjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3RhcnRfLmxlbmd0aCAoKTsK
fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX2NoYXJfYXJyYXkg
KEFDRV9DRFI6OkNoYXIqIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RS
OjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlzLT5sZW5ndGgoKSkKICAgIHJl
dHVybiAwOwoKICBpZiAodGhpcy0+Y2hhcl90cmFuc2xhdG9yXyA9PSAwKQogICAgcmV0dXJuIHRo
aXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6
T0NURVRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPQ1RFVF9B
TElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwogIHJldHVybiB0aGlz
LT5jaGFyX3RyYW5zbGF0b3JfLT5yZWFkX2NoYXJfYXJyYXkgKCp0aGlzLCB4LCBsZW5ndGgpOwp9
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfd2NoYXJfYXJyYXkg
KEFDRV9DRFI6OldDaGFyKiB4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9D
RFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAg
cmV0dXJuIDA7CgogIGlmICh0aGlzLT53Y2hhcl90cmFuc2xhdG9yXyA9PSAwKQogICAgcmV0dXJu
IHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NE
Ujo6U0hPUlRfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9S
VF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpOwogIHJldHVybiB0
aGlzLT53Y2hhcl90cmFuc2xhdG9yXy0+cmVhZF93Y2hhcl9hcnJheSAoKnRoaXMsIHgsIGxlbmd0
aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9vY3RldF9h
cnJheSAoQUNFX0NEUjo6T2N0ZXQqIHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVuZ3RoKCkp
CiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9DVEVUX1NJWkUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFDRV9DRFI6Ok9DVEVUX0FMSUdOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnJlYWRfc2hv
cnRfYXJyYXkgKEFDRV9DRFI6OlNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0
aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0aGlzLT5yZWFkX2FycmF5ICh4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9TSVpFLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBBQ0VfQ0RSOjpTSE9SVF9BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFk
X3VzaG9ydF9hcnJheSAoQUNFX0NEUjo6VVNob3J0ICp4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlz
LT5sZW5ndGgoKSkKICAgIHJldHVybiAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAoeCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfU0laRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6U0hPUlRfQUxJR04sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENE
Ujo6cmVhZF9sb25nX2FycmF5IChBQ0VfQ0RSOjpMb25nICp4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhp
cy0+bGVuZ3RoKCkpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0laRSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RS
OjpyZWFkX3Vsb25nX2FycmF5IChBQ0VfQ0RSOjpVTG9uZyAqeCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBQ0VfQ0RSOjpVTG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0
aGlzLT5sZW5ndGgoKSkKICAgIHJldHVybiAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAo
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TE9OR19TSVpFLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HX0FMSUdOLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD
RFI6OnJlYWRfbG9uZ2xvbmdfYXJyYXkgKEFDRV9DRFI6OkxvbmdMb25nICp4LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoKCiAgaWYg
KGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0aGlzLT5y
ZWFkX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9O
R19TSVpFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpMT05HTE9OR19BTElH
TiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKTsKfQoKaW5saW5lIEFDRV9DRFI6
OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpyZWFkX3Vsb25nbG9uZ19hcnJheSAoQUNFX0NEUjo6VUxv
bmdMb25nICp4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpV
TG9uZyBsZW5ndGgpCnsKCgogIGlmIChsZW5ndGggPiB0aGlzLT5sZW5ndGgoKSkKICAgIHJldHVy
biAwOwoKICByZXR1cm4gdGhpcy0+cmVhZF9hcnJheSAoeCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX0NEUjo6TE9OR0xPTkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6TE9OR0xPTkdfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9mbG9hdF9h
cnJheSAoQUNFX0NEUjo6RmxvYXQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVuZ3RoKCkp
CiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdfU0laRSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX0NEUjo6TE9OR19BTElHTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVu
Z3RoKTsKfQoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6cmVhZF9kb3Vi
bGVfYXJyYXkgKEFDRV9DRFI6OkRvdWJsZSAqeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CgoKICBpZiAobGVuZ3RoID4gdGhpcy0+bGVu
Z3RoKCkpCiAgICByZXR1cm4gMDsKCiAgcmV0dXJuIHRoaXMtPnJlYWRfYXJyYXkgKHgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX1NJWkUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdMT05HX0FMSUdOLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD
RFI6OnJlYWRfbG9uZ2RvdWJsZV9hcnJheSAoQUNFX0NEUjo6TG9uZ0RvdWJsZSogeCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OlVMb25nIGxlbmd0aCkKewoK
CiAgaWYgKGxlbmd0aCA+IHRoaXMtPmxlbmd0aCgpKQogICAgcmV0dXJuIDA7CgogIHJldHVybiB0
aGlzLT5yZWFkX2FycmF5ICh4LAogICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpM
T05HRE9VQkxFX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6OkxPTkdE
T1VCTEVfQUxJR04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCk7Cn0KCmlubGlu
ZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6c2tpcF9jaGFyICh2b2lkKQp7CiAgQUNF
X0NEUjo6Q2hhciB4OwogIHJldHVybiB0aGlzLT5yZWFkXzEgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNF
X0NEUjo6T2N0ZXQqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0
Q0RSOjpza2lwX29jdGV0ICh2b2lkKQp7CiAgQUNFX0NEUjo6T2N0ZXQgeDsKICByZXR1cm4gdGhp
cy0+cmVhZF8xICgmeCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6
c2tpcF9ib29sZWFuICh2b2lkKQp7CiAgQUNFX0NEUjo6T2N0ZXQgdG1wOwogIHRoaXMtPnJlYWRf
b2N0ZXQgKHRtcCk7CiAgcmV0dXJuIHRoaXMtPmdvb2RfYml0XzsKfQoKaW5saW5lIEFDRV9DRFI6
OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX3Nob3J0ICh2b2lkKQp7CiAgQUNFX0NEUjo6U2hv
cnQgeDsKICByZXR1cm4gdGhpcy0+cmVhZF8yIChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVT
aG9ydCo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnNr
aXBfdXNob3J0ICh2b2lkKQp7CiAgQUNFX0NEUjo6VVNob3J0IHg7CiAgcmV0dXJuIHRoaXMtPnJl
YWRfMiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpVU2hvcnQqPiAoJngpKTsKfQoKaW5saW5l
IEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX2xvbmcgKHZvaWQpCnsKICBBQ0Vf
Q0RSOjpMb25nIHg7CiAgcmV0dXJuIHRoaXMtPnJlYWRfNCAocmVpbnRlcnByZXRfY2FzdDxBQ0Vf
Q0RSOjpVTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRD
RFI6OnNraXBfdWxvbmcgKHZvaWQpCnsKICBBQ0VfQ0RSOjpVTG9uZyB4OwogIHJldHVybiB0aGlz
LT5yZWFkXzQgKHJlaW50ZXJwcmV0X2Nhc3Q8QUNFX0NEUjo6VUxvbmcqPiAoJngpKTsKfQoKaW5s
aW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0Q0RSOjpza2lwX2xvbmdsb25nICh2b2lkKQp7
CiAgQUNFX0NEUjo6TG9uZ0xvbmcgeDsKICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJl
dF9jYXN0PEFDRV9DRFI6OlVMb25nTG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v
bGVhbgpBQ0VfSW5wdXRDRFI6OnNraXBfdWxvbmdsb25nICh2b2lkKQp7CiAgQUNFX0NEUjo6VUxv
bmdMb25nIHg7CiAgcmV0dXJuIHRoaXMtPnJlYWRfOCAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RS
OjpVTG9uZ0xvbmcqPiAoJngpKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0lucHV0
Q0RSOjpza2lwX2Zsb2F0ICh2b2lkKQp7CiAgZmxvYXQgeDsKICByZXR1cm4gdGhpcy0+cmVhZF80
IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25nKj4gKCZ4KSk7Cn0KCmlubGluZSBBQ0Vf
Q0RSOjpCb29sZWFuCkFDRV9JbnB1dENEUjo6c2tpcF9kb3VibGUgKHZvaWQpCnsKICBkb3VibGUg
eDsKICByZXR1cm4gdGhpcy0+cmVhZF84IChyZWludGVycHJldF9jYXN0PEFDRV9DRFI6OlVMb25n
TG9uZyo+ICgmeCkpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfSW5wdXRDRFI6OnNr
aXBfbG9uZ2RvdWJsZSAodm9pZCkKewogIEFDRV9DRFI6OkxvbmdEb3VibGUgeDsKICByZXR1cm4g
dGhpcy0+cmVhZF8xNiAocmVpbnRlcnByZXRfY2FzdDxBQ0VfQ0RSOjpMb25nRG91YmxlKj4gKCZ4
KSk7Cn0KCmlubGluZSBjaGFyKgpBQ0VfSW5wdXRDRFI6OmVuZCAodm9pZCkKewogIHJldHVybiB0
aGlzLT5zdGFydF8uZW5kICgpOwp9CgppbmxpbmUgdm9pZApBQ0VfSW5wdXRDRFI6OnJkX3B0ciAo
c2l6ZV90IG9mZnNldCkKewogIHRoaXMtPnN0YXJ0Xy5yZF9wdHIgKG9mZnNldCk7Cn0KCmlubGlu
ZSBjaGFyKgpBQ0VfSW5wdXRDRFI6OnJkX3B0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5zdGFy
dF8ucmRfcHRyICgpOwp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6YWRqdXN0IChzaXplX3Qg
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIqJiBidWYpCnsKICBidWYgPSAoKGNoYXIgKikgKCgoKHB0cl9hcml0aF90KSAo
dGhpcy0+cmRfcHRyICgpKSkgKyAoKHB0cl9hcml0aF90KSgoKGFsaWduKSktMSkpKSAmICh+KChw
dHJfYXJpdGhfdCkoKChhbGlnbikpLTEpKSkpKTsKICBjaGFyICplbmQgPSBidWYgKyBzaXplOwog
IGlmIChlbmQgPD0gdGhpcy0+ZW5kICgpKQogICAgewogICAgICB0aGlzLT5zdGFydF8ucmRfcHRy
IChlbmQpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGhpcy0+Z29vZF9iaXRfID0gMDsKICBy
ZXR1cm4gLTE7Cn0KCmlubGluZSBpbnQKQUNFX0lucHV0Q0RSOjphZGp1c3QgKHNpemVfdCBzaXpl
LAogICAgICAgICAgICAgICAgICAgICAgY2hhciomIGJ1ZikKewogIHJldHVybiB0aGlzLT5hZGp1
c3QgKHNpemUsIHNpemUsIGJ1Zik7Cn0KCmlubGluZSBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayoK
QUNFX0lucHV0Q0RSOjpzdGFydCAodm9pZCkgY29uc3QKewogIHJldHVybiAmdGhpcy0+c3RhcnRf
Owp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6Z29vZF9iaXQgKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gdGhpcy0+Z29vZF9iaXRfOwp9CgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJh
dG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9zLCBBQ0VfQ0RSOjpDaGFyIHgpCnsKICBvcy53cml0ZV9j
aGFyICh4KTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29s
ZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9zLCBBQ0VfQ0RSOjpTaG9ydCB4KQp7CiAg
b3Mud3JpdGVfc2hvcnQgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFD
RV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OlVT
aG9ydCB4KQp7CiAgb3Mud3JpdGVfdXNob3J0ICh4KTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7
Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9z
LCBBQ0VfQ0RSOjpMb25nIHgpCnsKICBvcy53cml0ZV9sb25nICh4KTsKICByZXR1cm4gb3MuZ29v
ZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRw
dXRDRFIgJm9zLCBBQ0VfQ0RSOjpVTG9uZyB4KQp7CiAgb3Mud3JpdGVfdWxvbmcgKHgpOwogIHJl
dHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8
PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OkxvbmdMb25nIHgpCnsKICBvcy53cml0ZV9s
b25nbG9uZyAoeCk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6
Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX0NEUjo6VUxvbmdMb25n
IHgpCnsKICBvcy53cml0ZV91bG9uZ2xvbmcgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsK
fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3Ms
IEFDRV9DRFI6OkxvbmdEb3VibGUgeCkKewogIG9zLndyaXRlX2xvbmdkb3VibGUgKHgpOwogIHJl
dHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8
PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9DRFI6OkZsb2F0IHgpCnsKICBvcy53cml0ZV9mbG9h
dCAoeCk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh
bgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX0NEUjo6RG91YmxlIHgpCnsKICBv
cy53cml0ZV9kb3VibGUgKHgpOwogIHJldHVybiBvcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFD
RV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIGNvbnN0IEFDRV9D
RFI6OkNoYXIgKngpCnsKICBvcy53cml0ZV9zdHJpbmcgKHgpOwogIHJldHVybiBvcy5nb29kX2Jp
dCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoQUNFX091dHB1dENE
UiAmb3MsIGNvbnN0IEFDRV9DRFI6OldDaGFyICp4KQp7CiAgb3Mud3JpdGVfd3N0cmluZyAoeCk7
CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3Bl
cmF0b3I8PCAoQUNFX091dHB1dENEUiAmb3MsIEFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbiB4
KQp7CiAgb3Mud3JpdGVfYm9vbGVhbiAoeC52YWxfKTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCk7
Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPDwgKEFDRV9PdXRwdXRDRFIgJm9z
LCBBQ0VfT3V0cHV0Q0RSOjpmcm9tX2NoYXIgeCkKewogIG9zLndyaXRlX2NoYXIgKHgudmFsXyk7
CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVy
YXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENEUjo6ZnJvbV93Y2hhciB4KQp7
CiAgb3Mud3JpdGVfd2NoYXIgKHgudmFsXyk7CiAgcmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9Cgpp
bmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNF
X091dHB1dENEUjo6ZnJvbV9vY3RldCB4KQp7CiAgb3Mud3JpdGVfb2N0ZXQgKHgudmFsXyk7CiAg
cmV0dXJuIG9zLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRv
cjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENEUjo6ZnJvbV9zdHJpbmcgeCkKewog
IEFDRV9DRFI6OlVMb25nIGxlbiA9IDA7CiAgaWYgKHgudmFsXyAhPSAwKQogICAgbGVuID0gQUNF
X09TOjpzdHJsZW4gKHgudmFsXyk7CiAgb3Mud3JpdGVfc3RyaW5nIChsZW4sIHgudmFsXyk7CiAg
cmV0dXJuIG9zLmdvb2RfYml0ICgpICYmIChsZW4gPD0geC5ib3VuZF8pOwp9CgppbmxpbmUgQUNF
X0NEUjo6Qm9vbGVhbgpvcGVyYXRvcjw8IChBQ0VfT3V0cHV0Q0RSICZvcywgQUNFX091dHB1dENE
Ujo6ZnJvbV93c3RyaW5nIHgpCnsKICBBQ0VfQ0RSOjpVTG9uZyBsZW4gPSAwOzsKICBpZiAoeC52
YWxfICE9IDApCiAgICBsZW4gPSBBQ0VfT1M6OndzbGVuICh4LnZhbF8pOwogIG9zLndyaXRlX3dz
dHJpbmcgKGxlbiwgeC52YWxfKTsKICByZXR1cm4gb3MuZ29vZF9iaXQgKCkgJiYgKGxlbiA8PSB4
LmJvdW5kXyk7Cn0KCgoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lu
cHV0Q0RSICZpcywgQUNFX0NEUjo6Q2hhciAmeCkKewogIGlzLnJlYWRfY2hhciAoeCk7CiAgcmV0
dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+
IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpTaG9ydCAmeCkKewogIGlzLnJlYWRfc2hvcnQg
KHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4K
b3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSICZpcywgQUNFX0NEUjo6VVNob3J0ICZ4KQp7CiAgaXMu
cmVhZF91c2hvcnQgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9D
RFI6OkJvb2xlYW4Kb3BlcmF0b3I+PihBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpMb25nICZ4
KQp7CiAgaXMucmVhZF9sb25nICh4KTsKICByZXR1cm4gaXMuZ29vZF9iaXQgKCk7Cn0KCmlubGlu
ZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9DRFI6
OlVMb25nICZ4KQp7CiAgaXMucmVhZF91bG9uZyAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgp
Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFImIGlz
LCBBQ0VfQ0RSOjpMb25nTG9uZyAmeCkKewogIGlzLnJlYWRfbG9uZ2xvbmcgKHgpOwogIHJldHVy
biBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAo
QUNFX0lucHV0Q0RSJiBpcywgQUNFX0NEUjo6VUxvbmdMb25nICZ4KQp7CiAgaXMucmVhZF91bG9u
Z2xvbmcgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJv
b2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSJiBpcywgQUNFX0NEUjo6TG9uZ0RvdWJsZSAm
eCkKewogIGlzLnJlYWRfbG9uZ2RvdWJsZSAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBB
Q0VfQ0RSOjpGbG9hdCAmeCkKewogIGlzLnJlYWRfZmxvYXQgKHgpOwogIHJldHVybiBpcy5nb29k
X2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0
Q0RSICZpcywgQUNFX0NEUjo6RG91YmxlICZ4KQp7CiAgaXMucmVhZF9kb3VibGUgKHgpOwogIHJl
dHVybiBpcy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+
PiAoQUNFX0lucHV0Q0RSICZpcywgQUNFX0NEUjo6Q2hhciAqJngpCnsKICBpcy5yZWFkX3N0cmlu
ZyAoeCk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVh
bgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfQ0RSOjpXQ2hhciAqJngpCnsKICBp
cy5yZWFkX3dzdHJpbmcgKHgpOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsKfQoKCmlubGluZSBB
Q0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9yPj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9JbnB1dENE
Ujo6dG9fYm9vbGVhbiB4KQp7CiAgaXMucmVhZF9ib29sZWFuICh4LnJlZl8pOwogIHJldHVybiBp
cy5nb29kX2JpdCAoKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNF
X0lucHV0Q0RSICZpcywgQUNFX0lucHV0Q0RSOjp0b19jaGFyIHgpCnsKICBpcy5yZWFkX2NoYXIg
KHgucmVmXyk7CiAgcmV0dXJuIGlzLmdvb2RfYml0ICgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v
bGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRDRFIgJmlzLCBBQ0VfSW5wdXRDRFI6OnRvX3djaGFy
IHgpCnsKICBpcy5yZWFkX3djaGFyICh4LnJlZl8pOwogIHJldHVybiBpcy5nb29kX2JpdCAoKTsK
fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4Kb3BlcmF0b3I+PiAoQUNFX0lucHV0Q0RSICZpcywg
QUNFX0lucHV0Q0RSOjp0b19vY3RldCB4KQp7CiAgaXMucmVhZF9vY3RldCAoeC5yZWZfKTsKICBy
ZXR1cm4gaXMuZ29vZF9iaXQgKCk7Cn0KCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCm9wZXJhdG9y
Pj4gKEFDRV9JbnB1dENEUiAmaXMsIEFDRV9JbnB1dENEUjo6dG9fc3RyaW5nIHgpCnsKICBpcy5y
ZWFkX3N0cmluZyAoY29uc3RfY2FzdDxjaGFyIComPiAoeC52YWxfKSk7CgogIHJldHVybiAoaXMu
Z29vZF9iaXQgKCkgJiYKICAgICAgICAgIChBQ0VfT1M6OnN0cmxlbiAoeC52YWxfKSA8PSB4LmJv
dW5kXykpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpvcGVyYXRvcj4+IChBQ0VfSW5wdXRD
RFIgJmlzLCBBQ0VfSW5wdXRDRFI6OnRvX3dzdHJpbmcgeCkKewogIGlzLnJlYWRfd3N0cmluZyAo
Y29uc3RfY2FzdDxBQ0VfQ0RSOjpXQ2hhciAqJj4gKHgudmFsXykpOwoKICByZXR1cm4gKGlzLmdv
b2RfYml0ICgpICYmCiAgICAgICAgICAoQUNFX09TOjp3c2xlbiAoeC52YWxfKSA8PSB4LmJvdW5k
XykpOwp9CgoKCgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OmFwcGVu
ZF9ib29sZWFuIChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkJvb2xlYW4geDsK
ICByZXR1cm4gKHN0cmVhbS5yZWFkX2Jvb2xlYW4gKHgpID8gdGhpcy0+d3JpdGVfYm9vbGVhbiAo
eCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5k
X2NoYXIgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6Q2hhciB4OwogIHJldHVy
biAoc3RyZWFtLnJlYWRfY2hhciAoeCkgPyB0aGlzLT53cml0ZV9jaGFyICh4KSA6IDApOwp9Cgpp
bmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfd2NoYXIgKEFDRV9J
bnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6V0NoYXIgeDsKICByZXR1cm4gKHN0cmVhbS5y
ZWFkX3djaGFyICh4KSA/IHRoaXMtPndyaXRlX3djaGFyICh4KSA6IDApOwp9CgppbmxpbmUgQUNF
X0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfb2N0ZXQgKEFDRV9JbnB1dENEUiAm
c3RyZWFtKQp7CiAgQUNFX0NEUjo6T2N0ZXQgeDsKICByZXR1cm4gKHN0cmVhbS5yZWFkX29jdGV0
ICh4KSA/IHRoaXMtPndyaXRlX29jdGV0ICh4KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9v
bGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfc2hvcnQgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7
CiAgQUNFX0NEUjo6U2hvcnQgeDsKICByZXR1cm4gKHN0cmVhbS5yZWFkX3Nob3J0ICh4KSA/IHRo
aXMtPndyaXRlX3Nob3J0ICh4KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0Vf
T3V0cHV0Q0RSOjphcHBlbmRfdXNob3J0IChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9D
RFI6OlVTaG9ydCB4OwogIHJldHVybiAoc3RyZWFtLnJlYWRfdXNob3J0ICh4KSA/IHRoaXMtPndy
aXRlX3VzaG9ydCAoeCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1
dENEUjo6YXBwZW5kX2xvbmcgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6TG9u
ZyB4OwogIHJldHVybiAoc3RyZWFtLnJlYWRfbG9uZyAoeCkgPyB0aGlzLT53cml0ZV9sb25nICh4
KSA6IDApOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRf
dWxvbmcgKEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6VUxvbmcgeDsKICByZXR1
cm4gKHN0cmVhbS5yZWFkX3Vsb25nICh4KSA/IHRoaXMtPndyaXRlX3Vsb25nICh4KSA6IDApOwp9
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfbG9uZ2xvbmcg
KEFDRV9JbnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6TG9uZ0xvbmcgeDsKICByZXR1cm4g
KHN0cmVhbS5yZWFkX2xvbmdsb25nICh4KSA/IHRoaXMtPndyaXRlX2xvbmdsb25nICh4KSA6IDAp
Owp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfT3V0cHV0Q0RSOjphcHBlbmRfdWxvbmds
b25nIChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OlVMb25nTG9uZyB4OwogIHJl
dHVybiAoc3RyZWFtLnJlYWRfdWxvbmdsb25nICh4KSA/IHRoaXMtPndyaXRlX3Vsb25nbG9uZyAo
eCkgOiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5k
X2Zsb2F0IChBQ0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkZsb2F0IHg7CiAgcmV0
dXJuIChzdHJlYW0ucmVhZF9mbG9hdCAoeCkgPyB0aGlzLT53cml0ZV9mbG9hdCAoeCkgOiAwKTsK
fQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX2RvdWJsZSAo
QUNFX0lucHV0Q0RSICZzdHJlYW0pCnsKICBBQ0VfQ0RSOjpEb3VibGUgeDsKICByZXR1cm4gKHN0
cmVhbS5yZWFkX2RvdWJsZSAoeCkgPyB0aGlzLT53cml0ZV9kb3VibGUgKHgpIDogMCk7Cn0KCmlu
bGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9PdXRwdXRDRFI6OmFwcGVuZF9sb25nZG91YmxlIChB
Q0VfSW5wdXRDRFIgJnN0cmVhbSkKewogIEFDRV9DRFI6OkxvbmdEb3VibGUgeDsKICByZXR1cm4g
KHN0cmVhbS5yZWFkX2xvbmdkb3VibGUgKHgpID8gdGhpcy0+d3JpdGVfbG9uZ2RvdWJsZSAoeCkg
OiAwKTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX3N0
cmluZyAoQUNFX0lucHV0Q0RSICZzdHJlYW0pCnsKICBBQ0VfQ0RSOjpDaGFyICp4OwogIEFDRV9D
RFI6OkJvb2xlYW4gZmxhZyA9CiAgICAoc3RyZWFtLnJlYWRfc3RyaW5nICh4KSA/IHRoaXMtPndy
aXRlX3N0cmluZyAoeCkgOiAwKTsKICBkZWxldGUgW10geDsKICByZXR1cm4gZmxhZzsKfQoKaW5s
aW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX091dHB1dENEUjo6YXBwZW5kX3dzdHJpbmcgKEFDRV9J
bnB1dENEUiAmc3RyZWFtKQp7CiAgQUNFX0NEUjo6V0NoYXIgKng7CiAgQUNFX0NEUjo6Qm9vbGVh
biBmbGFnID0KICAgIChzdHJlYW0ucmVhZF93c3RyaW5nICh4KSA/IHRoaXMtPndyaXRlX3dzdHJp
bmcgKHgpIDogMCk7CiAgZGVsZXRlIFtdIHg7CiAgcmV0dXJuIGZsYWc7Cn0KCmlubGluZSB2b2lk
CkFDRV9JbnB1dENEUjo6cmVzZXRfYnl0ZV9vcmRlciAoaW50IGJ5dGVfb3JkZXIpCnsKICB0aGlz
LT5kb19ieXRlX3N3YXBfID0gKGJ5dGVfb3JkZXIgIT0gMSk7Cn0KCmlubGluZSBpbnQKQUNFX0lu
cHV0Q0RSOjpkb19ieXRlX3N3YXAgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ZG9fYnl0
ZV9zd2FwXzsKfQoKaW5saW5lIGludApBQ0VfSW5wdXRDRFI6OmJ5dGVfb3JkZXIgKHZvaWQpIGNv
bnN0CnsKICBpZiAodGhpcy0+ZG9fYnl0ZV9zd2FwICgpKQogICAgcmV0dXJuICExOwogIGVsc2UK
ICAgIHJldHVybiAxOwp9CgppbmxpbmUgaW50CkFDRV9JbnB1dENEUjo6YWxpZ25fcmVhZF9wdHIg
KHNpemVfdCBhbGlnbm1lbnQpCnsKICBjaGFyICpidWYgPSAoKGNoYXIgKikgKCgoKHB0cl9hcml0
aF90KSAodGhpcy0+cmRfcHRyICgpKSkgKyAoKHB0cl9hcml0aF90KSgoKGFsaWdubWVudCkpLTEp
KSkgJiAofigocHRyX2FyaXRoX3QpKCgoYWxpZ25tZW50KSktMSkpKSkpOwoKCiAgaWYgKGJ1ZiA8
PSB0aGlzLT5lbmQgKCkpCiAgICB7CiAgICAgIHRoaXMtPnN0YXJ0Xy5yZF9wdHIgKGJ1Zik7CiAg
ICAgIHJldHVybiAwOwogICAgfQoKICB0aGlzLT5nb29kX2JpdF8gPSAwOwogIHJldHVybiAtMTsK
fQoKaW5saW5lIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqCkFDRV9JbnB1dENEUjo6Y2hh
cl90cmFuc2xhdG9yICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmNoYXJfdHJhbnNsYXRv
cl87Cn0KCmlubGluZSBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICoKQUNFX0lucHV0Q0RS
Ojp3Y2hhcl90cmFuc2xhdG9yICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPndjaGFyX3Ry
YW5zbGF0b3JfOwp9CgoKCmlubGluZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9DaGFyX0NvZGVzZXRf
VHJhbnNsYXRvcjo6cmVhZF8xIChBQ0VfSW5wdXRDRFImIGlucHV0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgKngpCnsKICByZXR1cm4gaW5wdXQu
cmVhZF8xICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX0NoYXJfQ29kZXNldF9U
cmFuc2xhdG9yOjp3cml0ZV8xIChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NEUjo6T2N0ZXQgKngpCnsKICByZXR1
cm4gb3V0cHV0LndyaXRlXzEgKHgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfQ2hh
cl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfYXJyYXkgKEFDRV9JbnB1dENEUiYgaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogeCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJu
IGluLnJlYWRfYXJyYXkgKHgsIHNpemUsIGFsaWduLCBsZW5ndGgpOwp9CgppbmxpbmUgQUNFX0NE
Ujo6Qm9vbGVhbgpBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OndyaXRlX2FycmF5IChBQ0Vf
T3V0cHV0Q0RSJiBvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHZvaWQgKngsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFD
RV9DRFI6OlVMb25nIGxlbmd0aCkKewogIHJldHVybiBvdXQud3JpdGVfYXJyYXkoeCwgc2l6ZSwg
YWxpZ24sIGxlbmd0aCk7Cn0KCmlubGluZSBpbnQKQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9y
OjphZGp1c3QgKEFDRV9PdXRwdXRDRFImIG91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqJmJ1ZikKewogIHJldHVybiBvdXQuYWRqdXN0KHNpemUsIGFsaWduLCBidWYpOwp9Cgppbmxp
bmUgdm9pZApBQ0VfQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6Omdvb2RfYml0IChBQ0VfT3V0cHV0
Q0RSJiBvdXQsIGludCBiaXQpCnsKICBvdXQuZ29vZF9iaXRfID0gYml0Owp9CgoKCmlubGluZSBB
Q0VfQ0RSOjpCb29sZWFuCkFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfMSAoQUNF
X0lucHV0Q0RSJiBpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
Q0VfQ0RSOjpPY3RldCAqeCkKewogIHJldHVybiBpbnB1dC5yZWFkXzEgKHgpOwp9CgppbmxpbmUg
QUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjpyZWFkXzIgKEFD
RV9JbnB1dENEUiYgaW5wdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NEUjo6VVNob3J0ICp4KQp7CiAgcmV0dXJuIGlucHV0LnJlYWRfMiAoeCk7Cn0KCmlubGlu
ZSBBQ0VfQ0RSOjpCb29sZWFuCkFDRV9XQ2hhcl9Db2Rlc2V0X1RyYW5zbGF0b3I6OnJlYWRfNCAo
QUNFX0lucHV0Q0RSJiBpbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBQ0VfQ0RSOjpVTG9uZyAqeCkKewogIHJldHVybiBpbnB1dC5yZWFkXzQgKHgpOwp9Cgppbmxp
bmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjp3cml0ZV8x
IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEFDRV9DRFI6Ok9jdGV0ICp4KQp7CiAgcmV0dXJuIG91dHB1dC53cml0ZV8x
ICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xlYW4KQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNs
YXRvcjo6d3JpdGVfMiAoQUNFX091dHB1dENEUiYgb3V0cHV0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBQ0VfQ0RSOjpVU2hvcnQgKngpCnsKICByZXR1cm4g
b3V0cHV0LndyaXRlXzIgKHgpOwp9CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJf
Q29kZXNldF9UcmFuc2xhdG9yOjp3cml0ZV80IChBQ0VfT3V0cHV0Q0RSJiBvdXRwdXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9DRFI6OlVMb25nICp4
KQp7CiAgcmV0dXJuIG91dHB1dC53cml0ZV80ICh4KTsKfQoKaW5saW5lIEFDRV9DRFI6OkJvb2xl
YW4KQUNFX1dDaGFyX0NvZGVzZXRfVHJhbnNsYXRvcjo6cmVhZF9hcnJheSAoQUNFX0lucHV0Q0RS
JiBpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogeCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhbGlnbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVu
Z3RoKQp7CiAgcmV0dXJuIGluLnJlYWRfYXJyYXkgKHgsIHNpemUsIGFsaWduLCBsZW5ndGgpOwp9
CgppbmxpbmUgQUNFX0NEUjo6Qm9vbGVhbgpBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yOjp3
cml0ZV9hcnJheSAoQUNFX091dHB1dENEUiYgb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqeCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGFsaWduLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6VUxvbmcgbGVuZ3RoKQp7CiAgcmV0dXJuIG91dC53
cml0ZV9hcnJheSh4LCBzaXplLCBhbGlnbiwgbGVuZ3RoKTsKfQoKaW5saW5lIGludApBQ0VfV0No
YXJfQ29kZXNldF9UcmFuc2xhdG9yOjphZGp1c3QgKEFDRV9PdXRwdXRDRFImIG91dCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxpZ24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqJmJ1ZikKewogIHJldHVybiBvdXQuYWRqdXN0KHNp
emUsIGFsaWduLCBidWYpOwp9CgppbmxpbmUgdm9pZApBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh
dG9yOjpnb29kX2JpdCAoQUNFX091dHB1dENEUiYgb3V0LCBpbnQgYml0KQp7CiAgb3V0Lmdvb2Rf
Yml0XyA9IGJpdDsKfQojIDEwMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9DRFJfU3RyZWFtLmgiIDIKIyAxMTI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMTI4ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvQ0RSX1N0cmVhbS5oIiAyCiMg
NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RS
LmgiIDIKCmNsYXNzIFRBT19PUkJfQ29yZTsKIyA3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIKY2xhc3MgVEFPX091dHB1dENEUiA6IHB1
YmxpYyBBQ0VfT3V0cHV0Q0RSCnsKcHVibGljOgoKICBmcmllbmQgY2xhc3MgVEFPX0lucHV0Q0RS
OwojIDg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L0NEUi5oIgogIFRBT19PdXRwdXRDRFIgKHNpemVfdCBzaXplID0gMCwKICAgICAgICAgICAgICAg
ICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogYnVm
ZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogZGF0YV9i
bG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IqIG1lc3Nh
Z2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAgICAgICAgICBzaXplX3QgbWVtY3B5X3Ry
YWRlb2ZmID0gMCwKICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9u
ID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQg
bWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICAgIEFD
RV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hhcl90cmFuc2xhdG9yID0gMCwKICAgICAgICAg
ICAgICAgICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICp3Y2hhcl90cmFuc2xhdG9yID0g
MCk7CgoKCiAgVEFPX091dHB1dENEUiAoY2hhciAqZGF0YSwKICAgICAgICAgICAgICAgICBzaXpl
X3Qgc2l6ZSwKICAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAg
ICAgICAgQUNFX0FsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAgICAgICAgICAgICAg
ICAgQUNFX0FsbG9jYXRvciogZGF0YV9ibG9ja19hbGxvY2F0b3IgPSAwLAogICAgICAgICAgICAg
ICAgIEFDRV9BbGxvY2F0b3IqIG1lc3NhZ2VfYmxvY2tfYWxsb2NhdG9yID0gMCwKICAgICAgICAg
ICAgICAgICBzaXplX3QgbWVtY3B5X3RyYWRlb2ZmID0gMCwKICAgICAgICAgICAgICAgICBBQ0Vf
Q0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgIDEsCiAgICAgICAg
ICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiA9CiAgICAgICAgICAgICAgICAg
ICAyLAogICAgICAgICAgICAgICAgIEFDRV9DaGFyX0NvZGVzZXRfVHJhbnNsYXRvciAqY2hhcl90
cmFuc2xhdG9yID0gMCwKICAgICAgICAgICAgICAgICBBQ0VfV0NoYXJfQ29kZXNldF9UcmFuc2xh
dG9yICp3Y2hhcl90cmFuc2xhdG9yID0gMCk7CgoKCiAgVEFPX091dHB1dENEUiAoQUNFX01lc3Nh
Z2VfQmxvY2sgKmRhdGEsCiAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAxLAogICAg
ICAgICAgICAgICAgIHNpemVfdCBtZW1jcHlfdHJhZGVvZmYgPSAwLAogICAgICAgICAgICAgICAg
IEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAgMSwKICAg
ICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uID0KICAgICAgICAgICAg
ICAgICAgIDIsCiAgICAgICAgICAgICAgICAgQUNFX0NoYXJfQ29kZXNldF9UcmFuc2xhdG9yICpj
aGFyX3RyYW5zbGF0b3IgPSAwLAogICAgICAgICAgICAgICAgIEFDRV9XQ2hhcl9Db2Rlc2V0X1Ry
YW5zbGF0b3IgKndjaGFyX3RyYW5zbGF0b3IgPSAwKTsKCgogIH5UQU9fT3V0cHV0Q0RSICh2b2lk
KTsKCgoKCgoKcHJpdmF0ZToKCiAgVEFPX091dHB1dENEUiAoY29uc3QgVEFPX091dHB1dENEUiYg
cmhzKTsKICBUQU9fT3V0cHV0Q0RSJiBvcGVyYXRvcj0gKGNvbnN0IFRBT19PdXRwdXRDRFImIHJo
cyk7Cn07CiMgMTYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL0NEUi5oIgpjbGFzcyBUQU9fSW5wdXRDRFIgOiBwdWJsaWMgQUNFX0lucHV0Q0RSCnsK
cHVibGljOgoKCgoKCiAgVEFPX0lucHV0Q0RSIChjb25zdCBjaGFyKiBidWYsCiAgICAgICAgICAg
ICAgICBzaXplX3QgYnVmc2l6LAogICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIgPSAxLAog
ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWFqb3JfdmVyc2lvbiA9CiAgICAgICAgICAg
ICAgICAgIDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uID0K
ICAgICAgICAgICAgICAgICAgMiwKICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2Nv
cmUgPSAwKTsKCgoKICBUQU9fSW5wdXRDRFIgKHNpemVfdCBidWZzaXosCiAgICAgICAgICAgICAg
ICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpv
cl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6
Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyLAogICAgICAgICAgICAg
ICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9IDApOwoKCiAgVEFPX0lucHV0Q0RSIChjb25zdCBB
Q0VfTWVzc2FnZV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyID0g
MSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24gPQogICAgICAg
ICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lv
biA9CiAgICAgICAgICAgICAgICAgIDIsCiAgICAgICAgICAgICAgICBUQU9fT1JCX0NvcmUqIG9y
Yl9jb3JlID0gMCk7CgoKICBUQU9fSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAg
ICAgICAgICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZyA9IDAsCiAg
ICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAgICAgICAgICAgICBBQ0VfQ0RS
OjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAg
ICAgIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAgICAgICAgICAgICAgICAyLAog
ICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9IDApOwoKCiAgVEFPX0lucHV0
Q0RSIChBQ0VfRGF0YV9CbG9jayAqZGF0YSwKICAgICAgICAgICAgICAgIEFDRV9NZXNzYWdlX0Js
b2NrOjpNZXNzYWdlX0ZsYWdzIGZsYWcgPSAwLAogICAgICAgICAgICAgICAgc2l6ZV90IHJlYWRf
cG9pbnRlcl9wb3NpdGlvbiA9IDAsCiAgICAgICAgICAgICAgICBzaXplX3Qgd3JpdGVfcG9pbnRl
cl9wb3NpdGlvbiA9IDAsCiAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciA9IDEsCiAgICAg
ICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uID0KICAgICAgICAgICAgICAg
ICAgMSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1pbm9yX3ZlcnNpb24gPQogICAg
ICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSA9
IDApOwoKCgoKCgogIFRBT19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMpOwoKCgog
IFRBT19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMsCiAgICAgICAgICAgICAgICBz
aXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgIEFDRV9DRFI6Okxvbmcgb2Zmc2V0KTsKIyAyMzkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgi
CiAgVEFPX0lucHV0Q0RSIChjb25zdCBUQU9fSW5wdXRDRFImIHJocywKICAgICAgICAgICAgICAg
IHNpemVfdCBzaXplKTsKCgogIFRBT19JbnB1dENEUiAoY29uc3QgVEFPX091dHB1dENEUiYgcmhz
LAogICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciogYnVmZmVyX2FsbG9jYXRvciA9IDAsCiAg
ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBkYXRhX2Jsb2NrX2FsbG9jYXRvciA9IDAsCiAg
ICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yKiBtZXNzYWdlX2Jsb2NrX2FsbG9jYXRvciA9IDAs
CiAgICAgICAgICAgICAgICBUQU9fT1JCX0NvcmUqIG9yYl9jb3JlID0gMCk7CgoKCiAgVEFPX0lu
cHV0Q0RSIChBQ0VfSW5wdXRDRFI6OlRyYW5zZmVyX0NvbnRlbnRzIHJocywKICAgICAgICAgICAg
ICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUgPSAwKTsKCgogIH5UQU9fSW5wdXRDRFIgKHZvaWQp
OwoKCgoKICBUQU9fT1JCX0NvcmUgKm9yYl9jb3JlICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAg
dm9pZCBpbml0X3RyYW5zbGF0b3JzICh2b2lkKTsKCnByaXZhdGU6CgogIFRBT19PUkJfQ29yZSog
b3JiX2NvcmVfOwp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9DRFIuaSIgMQoKCgppbmxpbmUKVEFPX091dHB1dENEUjo6flRBT19PdXRw
dXRDRFIgKHZvaWQpCnsKfQoKaW5saW5lClRBT19JbnB1dENEUjo6VEFPX0lucHV0Q0RSIChjb25z
dCBjaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYnVmc2l6LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lvbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUpCiAgOiBBQ0VfSW5wdXRDRFIg
KGJ1ZiwKICAgICAgICAgICAgICAgICAgYnVmc2l6LAogICAgICAgICAgICAgICAgICBieXRlX29y
ZGVyLAogICAgICAgICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAgICAgICBt
aW5vcl92ZXJzaW9uKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0aGlzLT5pbml0X3Ry
YW5zbGF0b3JzICgpOwp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKHNpemVf
dCBidWZzaXosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZV9vcmRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9DRFI6Ok9jdGV0IG1ham9yX3ZlcnNpb24sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtaW5vcl92ZXJzaW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJfY29yZSkKICA6IEFD
RV9JbnB1dENEUiAoYnVmc2l6LAogICAgICAgICAgICAgICAgICBieXRlX29yZGVyLAogICAgICAg
ICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAgICAgICAgICAgICBtaW5vcl92ZXJzaW9u
KSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgp
Owp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKGNvbnN0IEFDRV9NZXNzYWdl
X0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJzaW9u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVyc2lv
biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUpCiAg
OiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGJ5dGVfb3JkZXIsCiAgICAg
ICAgICAgICAgICAgIG1ham9yX3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgIG1pbm9yX3ZlcnNp
b24pLAogICAgb3JiX2NvcmVfIChvcmJfY29yZSkKewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMg
KCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRBT19JbnB1dENEUiAoQUNFX0RhdGFfQmxvY2sg
KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfTWVzc2FnZV9CbG9jazo6TWVz
c2FnZV9GbGFncyBmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3Jk
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJz
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy
c2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUp
CiAgOiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGZsYWcsCiAgICAgICAg
ICAgICAgICAgIGJ5dGVfb3JkZXIsCiAgICAgICAgICAgICAgICAgIG1ham9yX3ZlcnNpb24sCiAg
ICAgICAgICAgICAgICAgIG1pbm9yX3ZlcnNpb24pLAogICAgb3JiX2NvcmVfIChvcmJfY29yZSkK
ewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMgKCk7Cn0KCgppbmxpbmUKVEFPX0lucHV0Q0RSOjpU
QU9fSW5wdXRDRFIgKEFDRV9EYXRhX0Jsb2NrICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQUNFX01lc3NhZ2VfQmxvY2s6Ok1lc3NhZ2VfRmxhZ3MgZmxhZywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCByZF9wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3Qgd3JfcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3Jk
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0RSOjpPY3RldCBtYWpvcl92ZXJz
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6T2N0ZXQgbWlub3JfdmVy
c2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSogb3JiX2NvcmUp
CiAgOiBBQ0VfSW5wdXRDRFIgKGRhdGEsCiAgICAgICAgICAgICAgICAgIGZsYWcsCiAgICAgICAg
ICAgICAgICAgIHJkX3BvcywKICAgICAgICAgICAgICAgICAgd3JfcG9zLAogICAgICAgICAgICAg
ICAgICBieXRlX29yZGVyLAogICAgICAgICAgICAgICAgICBtYWpvcl92ZXJzaW9uLAogICAgICAg
ICAgICAgICAgICBtaW5vcl92ZXJzaW9uKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsKICB0
aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9CgoKaW5saW5lClRBT19JbnB1dENEUjo6VEFPX0lu
cHV0Q0RSIChjb25zdCBUQU9fSW5wdXRDRFImIHJocywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NEUjo6TG9u
ZyBvZmZzZXQpCiAgOiBBQ0VfSW5wdXRDRFIgKHJocywKICAgICAgICAgICAgICAgICAgc2l6ZSwK
ICAgICAgICAgICAgICAgICAgb2Zmc2V0KSwKICAgIG9yYl9jb3JlXyAocmhzLm9yYl9jb3JlXykK
ewogIHRoaXMtPmluaXRfdHJhbnNsYXRvcnMgKCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRB
T19JbnB1dENEUiAoY29uc3QgVEFPX0lucHV0Q0RSJiByaHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3Qgc2l6ZSkKICA6IEFDRV9JbnB1dENEUiAocmhzLAogICAgICAgICAgICAg
ICAgICBzaXplKSwKICAgIG9yYl9jb3JlXyAocmhzLm9yYl9jb3JlXykKewogIHRoaXMtPmluaXRf
dHJhbnNsYXRvcnMgKCk7Cn0KCmlubGluZQpUQU9fSW5wdXRDRFI6OlRBT19JbnB1dENEUiAoY29u
c3QgVEFPX0lucHV0Q0RSJiByaHMpCiAgOiBBQ0VfSW5wdXRDRFIgKHJocyksCiAgICBvcmJfY29y
ZV8gKHJocy5vcmJfY29yZV8pCnsKICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9Cgppbmxp
bmUKVEFPX0lucHV0Q0RSOjpUQU9fSW5wdXRDRFIgKEFDRV9JbnB1dENEUjo6VHJhbnNmZXJfQ29u
dGVudHMgcmhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX09SQl9Db3JlKiBvcmJf
Y29yZSkKICA6IEFDRV9JbnB1dENEUiAocmhzKSwKICAgIG9yYl9jb3JlXyAob3JiX2NvcmUpCnsK
ICB0aGlzLT5pbml0X3RyYW5zbGF0b3JzICgpOwp9CgppbmxpbmUKVEFPX0lucHV0Q0RSOjp+VEFP
X0lucHV0Q0RSICh2b2lkKQp7Cn0KCmlubGluZSBUQU9fT1JCX0NvcmUqClRBT19JbnB1dENEUjo6
b3JiX2NvcmUgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+b3JiX2NvcmVfOwp9CgoKCmlu
bGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6U2hvcnQgeCkKewogIHJldHVy
biBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVU2hvcnQgeCkKewogIHJldHVybiBzdGF0aWNf
Y2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpMb25nIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX091
dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8
IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6VUxvbmcgeCkKewogIHJldHVybiBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+
IChvcykgPDwgeDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRw
dXRDRFIgJm9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpM
b25nTG9uZyB4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8
PCB4Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAm
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nTG9u
ZyB4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9
CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiYgb3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmdEb3VibGUgeCkK
ewogIHJldHVybiBzdGF0aWNfY2FzdDxBQ0VfT3V0cHV0Q0RSICY+IChvcykgPDwgeDsKfQoKaW5s
aW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJm9zLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbG9hdCB4KQp7CiAgcmV0dXJu
IHN0YXRpY19jYXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9CgppbmxpbmUgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkRvdWJsZSB4KQp7CiAgcmV0dXJuIHN0YXRpY19j
YXN0PEFDRV9PdXRwdXRDRFIgJj4gKG9zKSA8PCB4Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIqIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8
QUNFX091dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcjw8IChUQU9fT3V0cHV0Q0RSICZvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDT1JCQTo6V0NoYXIqIHgpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNF
X091dHB1dENEUiAmPiAob3MpIDw8IHg7Cn0KCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OlNob3J0ICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENE
UiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9f
SW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpVU2hvcnQgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykg
Pj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAm
aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmcgJngp
CnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSJj4gKGlzKSA+PiB4Owp9Cgppbmxp
bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZpcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgJngpCnsKICByZXR1cm4g
c3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkxvbmdMb25nICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19j
YXN0PEFDRV9JbnB1dENEUiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpVTG9uZ0xvbmcgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNF
X0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkxvbmdEb3VibGUgJngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0
Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRB
T19JbnB1dENEUiAmaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OkZsb2F0ICZ4KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENEUiAmPiAoaXMp
ID4+IHg7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg
JmlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpEb3VibGUg
JngpCnsKICByZXR1cm4gc3RhdGljX2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoK
aW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmaXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNoYXIqICZ4KQp7CiAgcmV0
dXJuIHN0YXRpY19jYXN0PEFDRV9JbnB1dENEUiAmPiAoaXMpID4+IHg7Cn0KCmlubGluZSBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJmlzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciogJngpCnsKICByZXR1cm4gc3RhdGlj
X2Nhc3Q8QUNFX0lucHV0Q0RSICY+IChpcykgPj4geDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
Cm9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IENPUkJBOjpQYXJhbWV0ZXJN
b2RlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVt
dmFsOwogIHJldHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
Cm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgQ09SQkE6OlBhcmFtZXRlck1vZGUgJl90
YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29s
ZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9
PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxDT1JCQTo6UGFyYW1l
dGVyTW9kZT4gKF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQojIDI3
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIu
aCIgMgojIDMyOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9DRFIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvcG9zdC5oIiAxCiMgMzMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgMTcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMg
MTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55
LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9DRFIuaCIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL0FueS5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDEKIyAyMyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg
MQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L0Vudmlyb25tZW50LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMgoKCgoKCmNsYXNz
IFRBT19PUkJfQ29yZTsKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgpjbGFzcyBDT1JCQV9FbnZpcm9ubWVudAp7CnB1
YmxpYzoKCgogIENPUkJBX0Vudmlyb25tZW50ICh2b2lkKTsKCgogIENPUkJBX0Vudmlyb25tZW50
IChjb25zdCBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSk7CgoKICBDT1JCQV9FbnZpcm9ubWVudCAmb3BlcmF0b3I9KGNvbnN0IENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIH5DT1JCQV9FbnZpcm9u
bWVudCAodm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfRW52aXJvbm1lbnQgKiBfZHVwbGljYXRlIChD
T1JCQV9FbnZpcm9ubWVudCAqKTsKICBzdGF0aWMgQ09SQkFfRW52aXJvbm1lbnQgKiBfbmlsICh2
b2lkKTsKCgoKICBDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbiAodm9pZCkgY29uc3Q7CgoKICB2
b2lkIGV4Y2VwdGlvbiAoQ09SQkFfRXhjZXB0aW9uICpleCk7CgoKCiAgaW50IGV4Y2VwdGlvbl90
eXBlICh2b2lkKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmV4Y2VwdGlvbl9pZCAodm9pZCkgY29u
c3Q7CgoKICB2b2lkIGNsZWFyICh2b2lkKTsKCgoKICB2b2lkIHByaW50X2V4Y2VwdGlvbiAoY29u
c3QgY2hhciAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqZj1zdGRvdXQpIGNv
bnN0OwoKCiAgc3RhdGljIENPUkJBX0Vudmlyb25tZW50ICZkZWZhdWx0X2Vudmlyb25tZW50ICh2
b2lkKTsKCgogIHR5cGVkZWYgQ09SQkFfRW52aXJvbm1lbnRfcHRyIF9wdHJfdHlwZTsKICB0eXBl
ZGVmIENPUkJBX0Vudmlyb25tZW50X3ZhciBfdmFyX3R5cGU7CgoKCnByaXZhdGU6CgoKCiAgZnJp
ZW5kIGNsYXNzIFRBT19PUkJfQ29yZTsKICBDT1JCQV9FbnZpcm9ubWVudCAoVEFPX09SQl9Db3Jl
ICpvcmJfY29yZSk7CgoKICBDT1JCQV9FeGNlcHRpb24gKmV4Y2VwdGlvbl87CgoKICBDT1JCQV9F
bnZpcm9ubWVudCAqcHJldmlvdXNfOwp9OwojIDEzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbnZpcm9ubWVudC5oIgpjbGFzcyBDT1JCQV9FbnZp
cm9ubWVudF92YXIKewpwdWJsaWM6CgoKCgoKICBDT1JCQV9FbnZpcm9ubWVudF92YXIgKHZvaWQp
OwogIENPUkJBX0Vudmlyb25tZW50X3ZhciAoQ09SQkFfRW52aXJvbm1lbnRfcHRyKTsKICBDT1JC
QV9FbnZpcm9ubWVudF92YXIgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3ZhciAmKTsKICB+Q09S
QkFfRW52aXJvbm1lbnRfdmFyICh2b2lkKTsKCiAgQ09SQkFfRW52aXJvbm1lbnRfdmFyICZvcGVy
YXRvcj0gKENPUkJBX0Vudmlyb25tZW50X3B0cik7CiAgQ09SQkFfRW52aXJvbm1lbnRfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3ZhciAmKTsKICBDT1JCQV9FbnZpcm9u
bWVudF9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JC
QV9FbnZpcm9ubWVudF9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX0Vudmlyb25tZW50
X3B0ciAmKCk7CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyIGluICh2b2lkKSBjb25zdDsKICBDT1JC
QV9FbnZpcm9ubWVudF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9FbnZpcm9ubWVudF9wdHIg
Jm91dCAodm9pZCk7CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JC
QV9FbnZpcm9ubWVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgQ09SQkFfRW52
aXJvbm1lbnRfcHRyIHB0cl87Cn07CiMgMTY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiCmNsYXNzIENPUkJBX0Vudmlyb25t
ZW50X291dAp7CnB1YmxpYzoKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKENPUkJBX0Vudmlyb25t
ZW50X3B0ciAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKENPUkJBX0Vudmlyb25tZW50X3Zh
ciAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50X291
dCAmKTsKICBDT1JCQV9FbnZpcm9ubWVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRW52
aXJvbm1lbnRfb3V0ICYpOwogIENPUkJBX0Vudmlyb25tZW50X291dCAmb3BlcmF0b3I9IChDT1JC
QV9FbnZpcm9ubWVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0Vudmlyb25tZW50X3B0ciAmKCk7
CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRyICZwdHIgKHZvaWQpOwogIENPUkJBX0Vudmlyb25tZW50
X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfRW52aXJvbm1lbnRfcHRy
ICZwdHJfOwoKCiAgQ09SQkFfRW52aXJvbm1lbnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJB
X0Vudmlyb25tZW50X3ZhciAmKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaSIgMQoKCgppbmxpbmUgQ09SQkE6
OkJvb2xlYW4KQ09SQkE6OmlzX25pbCAoQ09SQkE6OkVudmlyb25tZW50X3B0ciBlbnYpCnsKICBy
ZXR1cm4gZW52ID09IDA7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6RW52
aXJvbm1lbnRfcHRyIGVudikKewogIGlmIChlbnYgPT0gMCkKICAgIHJldHVybjsKICBkZWxldGUg
ZW52Owp9CgppbmxpbmUgQ09SQkFfRXhjZXB0aW9uKgpDT1JCQV9FbnZpcm9ubWVudDo6ZXhjZXB0
aW9uICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmV4Y2VwdGlvbl87Cn0KCmlubGluZSBD
T1JCQV9FbnZpcm9ubWVudCAqCkNPUkJBX0Vudmlyb25tZW50OjpfZHVwbGljYXRlIChDT1JCQV9F
bnZpcm9ubWVudCAqeCkKewogIGlmICh4ID09IDApCiAgICByZXR1cm4gMDsKICByZXR1cm4gbmV3
IENPUkJBX0Vudmlyb25tZW50ICgqeCk7Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIK
Q09SQkFfRW52aXJvbm1lbnQ6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gKENPUkJBX0Vudmlyb25t
ZW50X3B0cikwOwp9CgoKCmlubGluZQpDT1JCQV9FbnZpcm9ubWVudF92YXI6OkNPUkJBX0Vudmly
b25tZW50X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1l
bnRfdmFyOjpDT1JCQV9FbnZpcm9ubWVudF92YXIgKENPUkJBX0Vudmlyb25tZW50X3B0ciBwKQog
IDogcHRyXyAocCkKe30KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIKQ09SQkFfRW52aXJv
bm1lbnRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lCkNPUkJBX0Vudmlyb25tZW50X3Zhcjo6Q09SQkFfRW52aXJvbm1lbnRfdmFyIChjb25zdCBD
T1JCQV9FbnZpcm9ubWVudF92YXIgJnApCiAgOiBwdHJfIChuZXcgQ09SQkFfRW52aXJvbm1lbnQg
KCpwLnB0ciAoKSkpCnt9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1lbnRfdmFyOjp+Q09SQkFfRW52
aXJvbm1lbnRfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JC
QV9FbnZpcm9ubWVudF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX0Vudmlyb25tZW50X3B0ciAm
KCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfRW52aXJvbm1l
bnRfdmFyOjpvcGVyYXRvciBDT1JCQV9FbnZpcm9ubWVudF9wdHIgJigpCnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpDT1JCQV9FbnZpcm9ubWVu
dF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpDT1JCQV9FbnZpcm9ubWVudF92YXI6OmluICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9u
bWVudF9wdHIgJgpDT1JCQV9FbnZpcm9ubWVudF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9wdHIgJgpDT1JCQV9FbnZp
cm9ubWVudF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfRW52aXJvbm1lbnRf
cHRyCkNPUkJBX0Vudmlyb25tZW50X3Zhcjo6X3JldG4gKHZvaWQpCnsKCiAgQ09SQkFfRW52aXJv
bm1lbnRfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHZh
bDsKfQoKCgppbmxpbmUKQ09SQkFfRW52aXJvbm1lbnRfb3V0OjpDT1JCQV9FbnZpcm9ubWVudF9v
dXQgKENPUkJBX0Vudmlyb25tZW50X3B0ciAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJf
ID0gMDsKfQoKaW5saW5lCkNPUkJBX0Vudmlyb25tZW50X291dDo6Q09SQkFfRW52aXJvbm1lbnRf
b3V0IChDT1JCQV9FbnZpcm9ubWVudF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRl
bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfRW52aXJv
bm1lbnRfb3V0OjpDT1JCQV9FbnZpcm9ubWVudF9vdXQgKGNvbnN0IENPUkJBX0Vudmlyb25tZW50
X291dCAmcCkKICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9v
dXQgJgpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRW52aXJv
bm1lbnRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IHAucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0K
CmlubGluZSBDT1JCQV9FbnZpcm9ubWVudF9vdXQgJgpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9w
ZXJhdG9yPSAoQ09SQkFfRW52aXJvbm1lbnRfcHRyIHApCnsKICB0aGlzLT5wdHJfID0gcDsKICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yIENP
UkJBX0Vudmlyb25tZW50X3B0ciAmKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
Q09SQkFfRW52aXJvbm1lbnRfcHRyICYKQ09SQkFfRW52aXJvbm1lbnRfb3V0OjpwdHIgKHZvaWQp
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX0Vudmlyb25tZW50X3B0cgpD
T1JCQV9FbnZpcm9ubWVudF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQojIDE5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9FbnZpcm9ubWVudC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTkzICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDIKIyAyNiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq
ZWN0LmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9PYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAyNyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq
ZWN0X1Byb3h5X0Jyb2tlci5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0Jyb2tlci5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94
eV9Ccm9rZXIuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9Ccm9rZXIuaCIgMgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Q
cm94eV9JbXBsLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9JbXBsLmgi
IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L2NvcmJhZndkLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMzEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0ltcGwuaCIK
Y2xhc3MgVEFPX09iamVjdF9Qcm94eV9JbXBsCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fT2Jq
ZWN0X1Byb3h5X0ltcGwgKHZvaWQpOwoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAo
Y29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICpsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUpID0gMDsKCgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3Rl
bnQgKGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlKSA9IDA7CgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0
X2ludGVyZmFjZSAoCiAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAg
Q09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkg
PSAwOwoKCgpwcm90ZWN0ZWQ6CiAgVEFPX09iamVjdF9Qcm94eV9JbXBsICh2b2lkKTsKCn07Cgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0Lmgi
IDEKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X1Byb3h5X0Jyb2tlci5oIiAyCgoKCgoKY2xh
c3MgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIKewpwdWJsaWM6CgoKICB2aXJ0dWFsIH5UQU9fT2Jq
ZWN0X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBs
ICZzZWxlY3RfcHJveHkgKENPUkJBOjpPYmplY3RfcHRyIG9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpID0gMDsKCnByb3RlY3RlZDoKICBUQU9fT2JqZWN0
X1Byb3h5X0Jyb2tlciAodm9pZCk7Cn07CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQ3ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9Qcm94eV9Ccm9rZXIuaCIgMgoj
IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09i
amVjdC5oIiAyCgoKCgoKY2xhc3MgVEFPX1N0dWI7CgpjbGFzcyBUQU9fQWJzdHJhY3RfU2VydmFu
dEJhc2U7CgpjbGFzcyBDT1JCQV9PYmplY3QKewpwdWJsaWM6CgogIHZpcnR1YWwgfkNPUkJBX09i
amVjdCAodm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfZHVwbGljYXRlIChDT1JC
QV9PYmplY3RfcHRyIG9iaik7CgoKICBzdGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfbmlsICh2b2lk
KTsKCgogIGlubGluZQogIHN0YXRpYyBDT1JCQV9PYmplY3RfcHRyIF9uYXJyb3cgKENPUkJBX09i
amVjdF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICBz
dGF0aWMgQ09SQkFfT2JqZWN0X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoQ09SQkFfT2JqZWN0X3B0
ciBvYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
X0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpKTsKCgogIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsK
CgogIHN0YXRpYyBDT1JCQTo6Qm9vbGVhbiBpc19uaWxfaSAoQ09SQkFfT2JqZWN0X3B0ciBvYmop
OwojIDcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L09iamVjdC5oIgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IGNoYXIgKmxv
Z2ljYWxfdHlwZV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgdmly
dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK
CiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfY29sbG9jYXRlZCAodm9pZCkgY29uc3Q7CgoK
ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19sb2NhbCAodm9pZCkgY29uc3Q7CgogIHZpcnR1
YWwgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlKl9zZXJ2YW50ICh2b2lkKSBjb25zdDsKCgoKICB2
aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgogIHZpcnR1
YWwgQ09SQkE6OkltcGxlbWVudGF0aW9uRGVmX3B0ciBfZ2V0X2ltcGxlbWVudGF0aW9uICgKICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgdmlydHVhbCBDT1JC
QV9JbnRlcmZhY2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlICgKICAgICAgQ09SQkFfRW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICApOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgX2NyZWF0ZV9yZXF1
ZXN0IChDT1JCQTo6Q29udGV4dF9wdHIgY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6TlZMaXN0X3B0ciBhcmdfbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6TmFtZWRWYWx1ZV9wdHIgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpKTsKCiAgdmlydHVhbCB2b2lkIF9jcmVhdGVfcmVxdWVzdCAoQ09SQkE6OkNv
bnRleHRfcHRyIGN0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok5WTGlz
dF9wdHIgYXJnX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6Ok5h
bWVkVmFsdWVfcHRyIHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6RXhjZXB0aW9uTGlzdF9wdHIgZXhjbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6Q29udGV4dExpc3RfcHRyIGN0eHRsaXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpKTsKCgoKCgoKICB2aXJ0dWFsIENPUkJBOjpSZXF1ZXN0X3B0ciBfcmVx
dWVzdCAoY29uc3QgY2hhciAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKSk7CgoKCgoKICBDT1JCQTo6UG9saWN5X3B0ciBfZ2V0X3BvbGljeSAo
CiAgICAgIENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICk7CiAgQ09SQkE6OlBvbGljeV9wdHIgX2dldF9jbGllbnRfcG9saWN5
ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgKTsKICBDT1JCQTo6T2JqZWN0X3B0ciBfc2V0X3BvbGljeV9vdmVy
cmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5TGlzdCAmIHBvbGljaWVzLAogICAgICBD
T1JCQTo6U2V0T3ZlcnJpZGVUeXBlIHNldF9hZGQsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICk7CiAgQ09SQkE6OlBvbGljeUxpc3QgKiBfZ2V0X3BvbGljeV9vdmVy
cmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5VHlwZVNlcSAmIHR5cGVzLAogICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIENPUkJBOjpCb29sZWFuIF92
YWxpZGF0ZV9jb25uZWN0aW9uICgKICAgICAgQ09SQkE6OlBvbGljeUxpc3Rfb3V0IGluY29uc2lz
dGVudF9wb2xpY2llcywKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
KTsKIyAxODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vT2JqZWN0LmgiCiAgdmlydHVhbCBDT1JCQTo6VUxvbmcgX2hhc2ggKENPUkJBOjpVTG9uZyBt
YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgoKICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIF9pc19lcXVpdmFsZW50IChDT1JCQTo6T2JqZWN0X3B0ciBvdGhlcl9vYmos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkKICAg
IHRocm93ICgpOwoKCgogIHZpcnR1YWwgVEFPX09iamVjdEtleSAqX2tleSAoQ09SQkFfRW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgoKCgogIHZpcnR1YWwg
Y29uc3QgVEFPX09iamVjdEtleSAmX29iamVjdF9rZXkgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9p
ZCAqIF90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKCiAgdHlwZWRlZiBD
T1JCQV9PYmplY3RfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENPUkJBX09iamVjdF92YXIgX3Zh
cl90eXBlOwoKCgoKCiAgdmlydHVhbCB2b2lkIF9hZGRfcmVmICh2b2lkKTsKCgogIHZpcnR1YWwg
dm9pZCBfcmVtb3ZlX3JlZiAodm9pZCk7CgoKCiAgQ09SQkFfT2JqZWN0IChUQU9fU3R1YiAqcCA9
IDAsCiAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBjb2xsb2NhdGVkID0gMCwKICAgICAg
ICAgICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudCA9IDApOwoKCgogIHZp
cnR1YWwgVEFPX1N0dWIgKl9zdHVib2JqICh2b2lkKSBjb25zdDsKCgogIHZpcnR1YWwgdm9pZCBf
cHJveHlfYnJva2VyIChUQU9fT2JqZWN0X1Byb3h5X0Jyb2tlciAqcHJveHlfYnJva2VyKTsKCgog
IHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIgKl9wcm94eV9icm9rZXIgKHZvaWQpOwoK
cHJvdGVjdGVkOgoKICBDT1JCQV9PYmplY3QgKGludCBkdW1teSk7CgoKCiAgQ09SQkE6OlVMb25n
IF9pbmNyX3JlZmNudCAodm9pZCk7CgoKICBDT1JCQTo6VUxvbmcgX2RlY3JfcmVmY250ICh2b2lk
KTsKCgoKICBDT1JCQTo6Qm9vbGVhbiBpc19jb2xsb2NhdGVkXzsKCgogIFRBT19BYnN0cmFjdF9T
ZXJ2YW50QmFzZSAqc2VydmFudF87CgoKICBDT1JCQTo6Qm9vbGVhbiBpc19sb2NhbF87CgoKCgoK
CiAgVEFPX09iamVjdF9Qcm94eV9Ccm9rZXIgKnByb3h5X2Jyb2tlcl87Cgpwcml2YXRlOgoKCgoK
CgogIFRBT19TdHViICpwcm90b2NvbF9wcm94eV87CgoKICBDT1JCQTo6VUxvbmcgcmVmY291bnRf
OwoKCgogIEFDRV9NVF9TWU5DSDo6TVVURVggcmVmY291bnRfbG9ja187CgoKICBDT1JCQV9PYmpl
Y3QgKGNvbnN0IENPUkJBX09iamVjdCAmKTsKICBDT1JCQV9PYmplY3QgJm9wZXJhdG9yID0gKGNv
bnN0IENPUkJBX09iamVjdCAmKTsKfTsKCmNsYXNzIENPUkJBX09iamVjdF92YXIKewpwdWJsaWM6
CiAgQ09SQkFfT2JqZWN0X3ZhciAodm9pZCk7CiAgQ09SQkFfT2JqZWN0X3ZhciAoQ09SQkE6Ok9i
amVjdF9wdHIpOwogIENPUkJBX09iamVjdF92YXIgKGNvbnN0IENPUkJBX09iamVjdF92YXIgJik7
CiAgfkNPUkJBX09iamVjdF92YXIgKHZvaWQpOwoKICBDT1JCQV9PYmplY3RfdmFyICZvcGVyYXRv
cj0gKENPUkJBOjpPYmplY3RfcHRyKTsKICBDT1JCQV9PYmplY3RfdmFyICZvcGVyYXRvcj0gKGNv
bnN0IENPUkJBX09iamVjdF92YXIgJik7CiAgQ09SQkE6Ok9iamVjdF9wdHIgb3BlcmF0b3ItPiAo
dm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6T2JqZWN0X3B0ciAmKCkgY29u
c3Q7CiAgb3BlcmF0b3IgQ09SQkE6Ok9iamVjdF9wdHIgJigpOwogIENPUkJBOjpPYmplY3RfcHRy
IGluICh2b2lkKSBjb25zdDsKICBDT1JCQTo6T2JqZWN0X3B0ciAmaW5vdXQgKHZvaWQpOwogIENP
UkJBOjpPYmplY3RfcHRyICZvdXQgKHZvaWQpOwogIENPUkJBOjpPYmplY3RfcHRyIF9yZXRuICh2
b2lkKTsKICBDT1JCQTo6T2JqZWN0X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKICBzdGF0aWMgQ09S
QkE6Ok9iamVjdF9wdHIgZHVwbGljYXRlIChDT1JCQTo6T2JqZWN0X3B0cik7CiAgc3RhdGljIHZv
aWQgcmVsZWFzZSAoQ09SQkE6Ok9iamVjdF9wdHIpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0X3B0
ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0X3B0ciBuYXJyb3cgKENPUkJBOjpP
YmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICog
dXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQTo6T2JqZWN0X3B0ciBwdHJfOwp9OwoK
Y2xhc3MgQ09SQkFfT2JqZWN0X291dAp7CnB1YmxpYzoKICBDT1JCQV9PYmplY3Rfb3V0IChDT1JC
QTo6T2JqZWN0X3B0ciAmKTsKICBDT1JCQV9PYmplY3Rfb3V0IChDT1JCQV9PYmplY3RfdmFyICYp
OwogIENPUkJBX09iamVjdF9vdXQgKGNvbnN0IENPUkJBX09iamVjdF9vdXQgJik7CiAgQ09SQkFf
T2JqZWN0X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3Rfb3V0ICYpOwogIENPUkJB
X09iamVjdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT2JqZWN0X3ZhciAmKTsKICBDT1JC
QV9PYmplY3Rfb3V0ICZvcGVyYXRvcj0gKENPUkJBOjpPYmplY3RfcHRyKTsKICBvcGVyYXRvciBD
T1JCQTo6T2JqZWN0X3B0ciAmKCk7CiAgQ09SQkE6Ok9iamVjdF9wdHIgJnB0ciAodm9pZCk7CiAg
Q09SQkE6Ok9iamVjdF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENPUkJBOjpP
YmplY3RfcHRyICZwdHJfOwp9OwoKCmV4dGVybiBUQU9fT2JqZWN0X1Byb3h5X0Jyb2tlciAqICgq
X1RBT19jb2xsb2NhdGlvbl9PYmplY3RfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25fcG9p
bnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCgoKCiAgICAgICAgICAgQ09S
QkE6OkJvb2xlYW4Kb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiYsIGNvbnN0IENPUkJBX09iamVj
dCopOwoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIm
LCBDT1JCQV9PYmplY3QqJik7CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5pIiAxCgoKCgppbmxpbmUKQ09SQkFfT2JqZWN0OjpD
T1JCQV9PYmplY3QgKGludCkKICA6IGlzX2NvbGxvY2F0ZWRfICgwKSwKICAgIHNlcnZhbnRfICgw
KSwKICAgIGlzX2xvY2FsXyAoMSksCiAgICBwcm94eV9icm9rZXJfICgwKSwKICAgIHByb3RvY29s
X3Byb3h5XyAoMCksCiAgICByZWZjb3VudF8gKDEpLAogICAgcmVmY291bnRfbG9ja18gKCkKewp9
CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX09iamVjdDo6X2luY3JfcmVmY250ICh2b2lkKQp7
CiAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKHRoaXMtPnJlZmNvdW50
X2xvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gMDs7CiAgcmV0dXJuIHRo
aXMtPnJlZmNvdW50XysrOwp9CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX09iamVjdDo6X2Rl
Y3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVY
ID4gbW9uICh0aGlzLT5yZWZjb3VudF9sb2NrXyk7IGlmIChtb24ubG9ja2VkICgpID09IDApIHJl
dHVybiAwOzsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRoaXMtPnJlZmNvdW50XyAh
PSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAgZGVsZXRlIHRoaXM7CiAg
cmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVjdDo6X2R1cGxp
Y2F0ZSAoQ09SQkFfT2JqZWN0X3B0ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fYWRkX3Jl
ZiAoKTsKICByZXR1cm4gb2JqOwp9CgoKCgppbmxpbmUgdm9pZApDT1JCQTo6cmVsZWFzZSAoQ09S
QkFfT2JqZWN0X3B0ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fcmVtb3ZlX3JlZiAoKTsK
fQoKaW5saW5lIENPUkJBOjpCb29sZWFuCkNPUkJBOjppc19uaWwgKENPUkJBX09iamVjdF9wdHIg
b2JqKQp7CiAgaWYgKG9iaiA9PSAwKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KCiAgcmV0
dXJuIENPUkJBX09iamVjdDo6aXNfbmlsX2kgKG9iaik7Cn0KCgoKCgppbmxpbmUgQ09SQkFfT2Jq
ZWN0X3B0cgpDT1JCQV9PYmplY3Q6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5l
IENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0OjpfdW5jaGVja2VkX25hcnJvdyAoQ09SQkFf
T2JqZWN0X3B0ciBvYmosIENPUkJBOjpFbnZpcm9ubWVudCAmKQp7CiAgaWYgKENPUkJBOjppc19u
aWwgKG9iaikpCiAgICByZXR1cm4gQ09SQkE6Ok9iamVjdDo6X25pbCAoKTsKCiAgaWYgKG9iai0+
aXNfbG9jYWxfKQogICAgcmV0dXJuCiAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6Ok9iamVj
dF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKHJlaW50ZXJwcmV0X2Nhc3Q8cHRyX2Fy
aXRoX3Q+ICgmQ09SQkE6Ok9iamVjdDo6X25hcnJvdykpKTsKCgoKICBlbHNlCiAgICByZXR1cm4g
Q09SQkE6Ok9iamVjdDo6X2R1cGxpY2F0ZSAob2JqKTsKfQoKaW5saW5lIENPUkJBX09iamVjdF9w
dHIKQ09SQkFfT2JqZWN0OjpfbmFycm93IChDT1JCQV9PYmplY3RfcHRyIG9iaiwgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgcmV0dXJuIENP
UkJBX09iamVjdDo6X3VuY2hlY2tlZF9uYXJyb3cgKG9iaiwgX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSk7Cn0KCmlubGluZSBUQU9fU3R1YiAqCkNPUkJBX09iamVjdDo6X3N0dWJvYmog
KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHJvdG9jb2xfcHJveHlfOwp9CgoKCgoKaW5s
aW5lCkNPUkJBX09iamVjdF92YXI6OkNPUkJBX09iamVjdF92YXIgKHZvaWQpCiAgOiBwdHJfIChD
T1JCQV9PYmplY3Q6Ol9uaWwgKCkpCnsKfQoKaW5saW5lCkNPUkJBX09iamVjdF92YXI6OkNPUkJB
X09iamVjdF92YXIgKENPUkJBX09iamVjdF9wdHIgcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUK
Q09SQkFfT2JqZWN0X3Zhcjo6fkNPUkJBX09iamVjdF92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVs
ZWFzZSAodGhpcy0+cHRyXyk7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVj
dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUK
Q09SQkFfT2JqZWN0X3Zhcjo6Q09SQkFfT2JqZWN0X3ZhciAoY29uc3QgQ09SQkFfT2JqZWN0X3Zh
ciAmcCkKICAgICAgICA6IHB0cl8gKENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkp
KQp7fQoKaW5saW5lIENPUkJBX09iamVjdF92YXIgJgpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRv
cj0gKENPUkJBX09iamVjdF9wdHIgcCkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsK
ICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PYmplY3Rf
dmFyICYKQ09SQkFfT2JqZWN0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3RfdmFy
ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgewogICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0
cl8pOwogICAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkp
OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRv
ciBjb25zdCBDT1JCQV9PYmplY3RfcHRyICYoKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZQpDT1JCQV9PYmplY3RfdmFyOjpvcGVyYXRvciBDT1JCQV9PYmplY3RfcHRyICYo
KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJB
X09iamVjdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0X3Zhcjo6aW4gKHZvaWQp
IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIg
JgpDT1JCQV9PYmplY3RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUgQ09SQkFfT2JqZWN0X3B0ciAmCkNPUkJBX09iamVjdF92YXI6Om91dCAodm9pZCkK
ewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gQ09SQkFfT2Jq
ZWN0OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfT2JqZWN0
X3B0cgpDT1JCQV9PYmplY3RfdmFyOjpfcmV0biAodm9pZCkKewoKICBDT1JCQV9PYmplY3RfcHRy
IHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X25pbCAoKTsK
ICByZXR1cm4gdmFsOwp9CgppbmxpbmUgQ09SQkFfT2JqZWN0X3B0cgpDT1JCQV9PYmplY3RfdmFy
OjpkdXBsaWNhdGUgKENPUkJBX09iamVjdF9wdHIgcCkKewogIHJldHVybiBDT1JCQV9PYmplY3Q6
Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZApDT1JCQV9PYmplY3RfdmFyOjpyZWxlYXNl
IChDT1JCQV9PYmplY3RfcHRyIHApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBD
T1JCQV9PYmplY3RfcHRyCkNPUkJBX09iamVjdF92YXI6Om5pbCAodm9pZCkKewogIHJldHVybiBD
T1JCQV9PYmplY3Q6Ol9uaWwgKCk7Cn0KCmlubGluZSBDT1JCQV9PYmplY3RfcHRyCkNPUkJBX09i
amVjdF92YXI6Om5hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmly
b25tZW50ICYKICApCnsKICByZXR1cm4gQ09SQkFfT2JqZWN0OjpfZHVwbGljYXRlIChwKTsKfQoK
aW5saW5lIENPUkJBOjpPYmplY3QgKgpDT1JCQV9PYmplY3RfdmFyOjp1cGNhc3QgKHZvaWQgKnNy
YykKewogIENPUkJBX09iamVjdCAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9PYmplY3Qg
Kio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CgoKCgoKaW5saW5lCkNPUkJBX09iamVjdF9vdXQ6
OkNPUkJBX09iamVjdF9vdXQgKENPUkJBX09iamVjdF9wdHIgJnApCiAgICAgICAgOiBwdHJfIChw
KQp7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJB
X09iamVjdF9vdXQ6OkNPUkJBX09iamVjdF9vdXQgKENPUkJBX09iamVjdF92YXIgJnApCiAgICAg
ICAgOiBwdHJfIChwLm91dCAoKSkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0
aGlzLT5wdHJfID0gQ09SQkFfT2JqZWN0OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfT2JqZWN0
X291dDo6Q09SQkFfT2JqZWN0X291dCAoY29uc3QgQ09SQkFfT2JqZWN0X291dCAmcCkKICAgICAg
ICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBDT1JCQV9PYmplY3Rfb3V0ICYKQ09SQkFfT2Jq
ZWN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3Rfb3V0ICZwKQp7CiAgdGhpcy0+
cHRyXyA9IHAucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PYmplY3Rfb3V0
ICYKQ09SQkFfT2JqZWN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PYmplY3RfdmFyICZw
KQp7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkpOwog
IHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX09iamVjdF9vdXQgJgpDT1JCQV9PYmplY3Rf
b3V0OjpvcGVyYXRvcj0gKENPUkJBX09iamVjdF9wdHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwog
IHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX09iamVjdF9vdXQ6Om9wZXJhdG9yIENPUkJB
X09iamVjdF9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX09i
amVjdF9wdHIgJgpDT1JCQV9PYmplY3Rfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lIENPUkJBX09iamVjdF9wdHIKQ09SQkFfT2JqZWN0X291dDo6b3BlcmF0
b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMzUyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAyCgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg
MzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09i
amVjdC5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vQW55LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE5ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIK
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNo
LmgiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9UeXBlY29kZS5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0
aW9uLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiIDEKIyAxNSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK
IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJp
bmcuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvQUNFLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1NTdHJpbmcuaCIgMgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvU1N0cmluZy5oIgp0eXBlZGVmIEFDRV9VU0hPUlQxNiBBQ0VfV1NUUklO
R19UWVBFOwoKCgoKCgoKY2xhc3MgQUNFX0FsbG9jYXRvcjsKIyA1NCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX0NTdHJp
bmcKewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsKCgogIEFDRV9DU3RyaW5nIChB
Q0VfQWxsb2NhdG9yICphbGxvYyA9IDApOwoKCgoKCgoKICBBQ0VfQ1N0cmluZyAoY29uc3QgY2hh
ciAqcywKICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwLAogICAgICAgICAg
ICAgICBpbnQgcmVsZWFzZSA9IDEpOwoKCgoKCgoKICBBQ0VfQ1N0cmluZyAoY29uc3QgY2hhciAq
cywKICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRv
ciAqYWxsb2MgPSAwLAogICAgICAgICAgICAgICBpbnQgcmVsZWFzZSA9IDEpOwoKCiAgQUNFX0NT
dHJpbmcgKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCgogIEFDRV9DU3RyaW5nIChjb25zdCBBQ0Vf
V1NUUklOR19UWVBFICpzLAogICAgICAgICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvYyA9IDAp
OwoKCiAgQUNFX0NTdHJpbmcgKGNoYXIgYywgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgog
IH5BQ0VfQ1N0cmluZyAodm9pZCk7CgoKCiAgY29uc3QgY2hhciAmb3BlcmF0b3IgW10gKHNpemVf
dCBzbG90KSBjb25zdDsKCgoKICBjaGFyICZvcGVyYXRvciBbXSAoc2l6ZV90IHNsb3QpOwoKCiAg
QUNFX0NTdHJpbmcgJm9wZXJhdG9yID0gKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCgogIHZvaWQg
c2V0IChjb25zdCBjaGFyICpzLCBpbnQgcmVsZWFzZSA9IDEpOwoKCgogIHZvaWQgc2V0IChjb25z
dCBjaGFyICpzLAogICAgICAgICAgICBzaXplX3QgbGVuLAogICAgICAgICAgICBpbnQgcmVsZWFz
ZSk7CgoKCgoKCiAgQUNFX0NTdHJpbmcgc3Vic3RyaW5nIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90
IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIEFDRV9DU3RyaW5nIHN1YnN0ciAoc2l6ZV90IG9mZnNl
dCwgc3NpemVfdCBsZW5ndGggPSAtMSkgY29uc3Q7CgoKICBBQ0VfQ1N0cmluZyAmb3BlcmF0b3Ig
Kz0gKGNvbnN0IEFDRV9DU3RyaW5nICYpOwoKCiAgdV9sb25nIGhhc2ggKHZvaWQpIGNvbnN0OwoK
CiAgc2l6ZV90IGxlbmd0aCAodm9pZCkgY29uc3Q7CgoKICBjaGFyICpyZXAgKHZvaWQpIGNvbnN0
OwoKCgoKCgogIGNvbnN0IGNoYXIgKmZhc3RfcmVwICh2b2lkKSBjb25zdDsKCgogIGNvbnN0IGNo
YXIgKmNfc3RyICh2b2lkKSBjb25zdDsKCgoKICBpbnQgc3Ryc3RyIChjb25zdCBBQ0VfQ1N0cmlu
ZyAmcykgY29uc3Q7CgoKCiAgaW50IGZpbmQgKGNvbnN0IEFDRV9DU3RyaW5nICZzdHIsIGludCBw
b3MgPSAwKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY29uc3QgY2hhciAqcywgaW50IHBvcyA9IDAp
IGNvbnN0OwoKCgogIGludCBmaW5kIChjaGFyIGMsIGludCBwb3MgPSAwKSBjb25zdDsKCgoKICBp
bnQgcmZpbmQgKGNoYXIgYywgaW50IHBvcyA9IG5wb3MpIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9y
ID09IChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPCAoY29u
c3QgQUNFX0NTdHJpbmcgJnMpIGNvbnN0OwoKCiAgaW50IG9wZXJhdG9yID4gKGNvbnN0IEFDRV9D
U3RyaW5nICZzKSBjb25zdDsKCgogIGludCBvcGVyYXRvciAhPSAoY29uc3QgQUNFX0NTdHJpbmcg
JnMpIGNvbnN0OwoKCiAgaW50IGNvbXBhcmUgKGNvbnN0IEFDRV9DU3RyaW5nICZzKSBjb25zdDsK
CgogIHZvaWQgZHVtcCAodm9pZCkgY29uc3Q7CgoKICBzdHJ1Y3QgX19BY2Uge307Cgpwcml2YXRl
OgoKICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3JfOwoKCiAgc2l6ZV90IGxlbl87CgoKCiAgc2l6
ZV90IGJ1Zl9sZW5fOwoKCiAgY2hhciAqcmVwXzsKCgogIGludCByZWxlYXNlXzsKCgogIHN0YXRp
YyBjaGFyIE5VTExfQ1N0cmluZ187Cn07CgogICAgICAgICAgIGlubGluZSBBQ0VfQ1N0cmluZyBv
cGVyYXRvciArIChjb25zdCBBQ0VfQ1N0cmluZyAmLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX0NTdHJpbmcgJik7CgogICAgICAgICAgIG9z
dHJlYW0gJm9wZXJhdG9yIDw8IChvc3RyZWFtICYsIGNvbnN0IEFDRV9DU3RyaW5nICYpOwojIDIz
MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcu
aCIKY2xhc3MgQUNFX1dTdHJpbmcKewpwdWJsaWM6CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsK
CgogIEFDRV9XU3RyaW5nIChBQ0VfQWxsb2NhdG9yICphbGxvYyA9IDApOwoKCiAgQUNFX1dTdHJp
bmcgKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0g
MCk7CgoKICBBQ0VfV1N0cmluZyAoY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqcywKICAgICAgICAg
ICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKIyAyNTcgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiCiAgQUNFX1dTdHJpbmcgKGNv
bnN0IEFDRV9XU1RSSU5HX1RZUEUgKnMsCiAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCiAgICAg
ICAgICAgICAgIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKCiAgQUNFX1dTdHJpbmcgKHNp
emVfdCBsZW4sIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKICBBQ0VfV1N0cmluZyAoY29u
c3QgQUNFX1dTdHJpbmcgJnMpOwoKCiAgQUNFX1dTdHJpbmcgKEFDRV9XU1RSSU5HX1RZUEUgYywg
QUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgogIH5BQ0VfV1N0cmluZyAodm9pZCk7CgoKCiAg
QUNFX1dTVFJJTkdfVFlQRSBvcGVyYXRvciBbXSAoc2l6ZV90IHNsb3QpIGNvbnN0OwoKCgogIEFD
RV9XU1RSSU5HX1RZUEUgJm9wZXJhdG9yIFtdIChzaXplX3Qgc2xvdCk7CgoKICBBQ0VfV1N0cmlu
ZyAmb3BlcmF0b3IgPSAoY29uc3QgQUNFX1dTdHJpbmcgJik7CgoKICB2b2lkIHNldCAoY29uc3Qg
QUNFX1dTVFJJTkdfVFlQRSAqcyk7CgoKICB2b2lkIHNldCAoY29uc3QgQUNFX1dTVFJJTkdfVFlQ
RSAqcywKICAgICAgICAgICAgc2l6ZV90IGxlbik7CgoKCgoKCiAgQUNFX1dTdHJpbmcgc3Vic3Ry
aW5nIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIEFDRV9X
U3RyaW5nIHN1YnN0ciAoc2l6ZV90IG9mZnNldCwgc3NpemVfdCBsZW5ndGggPSAtMSkgY29uc3Q7
CgoKICBBQ0VfV1N0cmluZyAmb3BlcmF0b3IgKz0gKGNvbnN0IEFDRV9XU3RyaW5nICYpOwoKCiAg
QUNFX1dTdHJpbmcgJm9wZXJhdG9yICs9IChjb25zdCBBQ0VfV1NUUklOR19UWVBFICopOwoKCiAg
dV9sb25nIGhhc2ggKHZvaWQpIGNvbnN0OwoKCiAgc2l6ZV90IGxlbmd0aCAodm9pZCkgY29uc3Q7
CgoKICBzaXplX3QgYnVmZmVyX3NpemUodm9pZCkgY29uc3Q7CgoKICBBQ0VfV1NUUklOR19UWVBF
ICpyZXAgKHZvaWQpIGNvbnN0OwoKCgogIGNoYXIgKmNoYXJfcmVwICh2b2lkKSBjb25zdDsKCgoK
ICBBQ0VfVVNIT1JUMTYgKnVzaG9ydF9yZXAgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1dT
VFJJTkdfVFlQRSAqZmFzdF9yZXAgKHZvaWQpIGNvbnN0OwoKCiAgY29uc3QgQUNFX1dTVFJJTkdf
VFlQRSAqY19zdHIgKHZvaWQpIGNvbnN0OwoKCgogIGludCBzdHJzdHIgKGNvbnN0IEFDRV9XU3Ry
aW5nICZzKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY29uc3QgQUNFX1dTdHJpbmcgJnN0ciwgaW50
IHBvcyA9IDApIGNvbnN0OwoKCgogIGludCBmaW5kIChjb25zdCBBQ0VfV1NUUklOR19UWVBFICpz
LCBpbnQgcG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IGZpbmQgKEFDRV9XU1RSSU5HX1RZUEUgYywg
aW50IHBvcyA9IDApIGNvbnN0OwoKCgogIGludCByZmluZCAoQUNFX1dTVFJJTkdfVFlQRSBjLCBp
bnQgcG9zID0gbnBvcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPT0gKGNvbnN0IEFDRV9XU3Ry
aW5nICZzKSBjb25zdDsKCgogIGludCBvcGVyYXRvciA8IChjb25zdCBBQ0VfV1N0cmluZyAmcykg
Y29uc3Q7CgoKICBpbnQgb3BlcmF0b3IgPiAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0OwoK
CiAgaW50IG9wZXJhdG9yICE9IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQg
Y29tcGFyZSAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lk
KSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCgogIHN0YXRpYyBzaXplX3Qgc3RybGVuIChj
b25zdCBBQ0VfV1NUUklOR19UWVBFICopOwoKCiAgc3RhdGljIGNvbnN0IEFDRV9XU1RSSU5HX1RZ
UEUgKnN0cnN0ciAoY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqczEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqczIpOwoKCgoK
CgoKICB2b2lkIHJlc2l6ZSAoc2l6ZV90IGxlbik7Cgpwcml2YXRlOgoKCgoKCiAgdm9pZCBjaGVj
a19hbGxvY2F0ZSAoc2l6ZV90IGxlbik7CgoKICBBQ0VfQWxsb2NhdG9yICphbGxvY2F0b3JfOwoK
CiAgc2l6ZV90IGJ1Zl9sZW5fOwoKCiAgc2l6ZV90IGxlbl87CgoKICBBQ0VfV1NUUklOR19UWVBF
ICpyZXBfOwoKCiAgc3RhdGljIEFDRV9XU1RSSU5HX1RZUEUgTlVMTF9XU3RyaW5nXzsKfTsKCiAg
ICAgICAgICAgaW5saW5lIEFDRV9XU3RyaW5nIG9wZXJhdG9yKyAoY29uc3QgQUNFX1dTdHJpbmcg
JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQUNF
X1dTdHJpbmcgJik7CgogICAgICAgICAgIG9zdHJlYW0gJm9wZXJhdG9yIDw8IChvc3RyZWFtICYs
IGNvbnN0IEFDRV9XU3RyaW5nICYpOwojIDQzOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX1NTdHJpbmcKewpwdWJsaWM6
CgogIHN0YXRpYyBjb25zdCBpbnQgbnBvczsKCgogIEFDRV9TU3RyaW5nIChBQ0VfQWxsb2NhdG9y
ICphbGxvYyA9IDApOwoKCiAgQUNFX1NTdHJpbmcgKGNvbnN0IGNoYXIgKnMsIEFDRV9BbGxvY2F0
b3IgKmFsbG9jID0gMCk7CgoKCiAgQUNFX1NTdHJpbmcgKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBs
ZW4sIEFDRV9BbGxvY2F0b3IgKmFsbG9jID0gMCk7CgoKICBBQ0VfU1N0cmluZyAoY29uc3QgQUNF
X1NTdHJpbmcgJik7CgoKICBBQ0VfU1N0cmluZyAoY2hhciBjLCBBQ0VfQWxsb2NhdG9yICphbGxv
YyA9IDApOwoKCiAgfkFDRV9TU3RyaW5nICh2b2lkKTsKCgoKICBjaGFyIG9wZXJhdG9yIFtdIChz
aXplX3Qgc2xvdCkgY29uc3Q7CgoKCiAgY2hhciAmb3BlcmF0b3IgW10gKHNpemVfdCBzbG90KTsK
CgogIEFDRV9TU3RyaW5nICZvcGVyYXRvciA9IChjb25zdCBBQ0VfU1N0cmluZyAmKTsKCgoKCgoK
ICBBQ0VfU1N0cmluZyBzdWJzdHJpbmcgKHNpemVfdCBvZmZzZXQsIHNzaXplX3QgbGVuZ3RoID0g
LTEpIGNvbnN0OwoKCiAgQUNFX1NTdHJpbmcgc3Vic3RyIChzaXplX3Qgb2Zmc2V0LCBzc2l6ZV90
IGxlbmd0aCA9IC0xKSBjb25zdDsKCgogIHVfbG9uZyBoYXNoICh2b2lkKSBjb25zdDsKCgogIHNp
emVfdCBsZW5ndGggKHZvaWQpIGNvbnN0OwoKCgogIHZvaWQgcmVwIChjaGFyICpzKTsKCgogIGNv
bnN0IGNoYXIgKnJlcCAodm9pZCkgY29uc3Q7CgoKICBjb25zdCBjaGFyICpmYXN0X3JlcCAodm9p
ZCkgY29uc3Q7CgoKICBjb25zdCBjaGFyICpjX3N0ciAodm9pZCkgY29uc3Q7CgoKCiAgaW50IHN0
cnN0ciAoY29uc3QgQUNFX1NTdHJpbmcgJnMpIGNvbnN0OwoKCgogIGludCBmaW5kIChjb25zdCBB
Q0VfU1N0cmluZyAmc3RyLCBpbnQgcG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IGZpbmQgKGNvbnN0
IGNoYXIgKnMsIGludCBwb3MgPSAwKSBjb25zdDsKCgoKICBpbnQgZmluZCAoY2hhciBjLCBpbnQg
cG9zID0gMCkgY29uc3Q7CgoKCiAgaW50IHJmaW5kIChjaGFyIGMsIGludCBwb3MgPSBucG9zKSBj
b25zdDsKCgogIGludCBvcGVyYXRvciA9PSAoY29uc3QgQUNFX1NTdHJpbmcgJnMpIGNvbnN0OwoK
CiAgaW50IG9wZXJhdG9yIDwgKGNvbnN0IEFDRV9TU3RyaW5nICZzKSBjb25zdDsKCgogIGludCBv
cGVyYXRvciA+IChjb25zdCBBQ0VfU1N0cmluZyAmcykgY29uc3Q7CgoKICBpbnQgb3BlcmF0b3Ig
IT0gKGNvbnN0IEFDRV9TU3RyaW5nICZzKSBjb25zdDsKCgogIGludCBjb21wYXJlIChjb25zdCBB
Q0VfU1N0cmluZyAmcykgY29uc3Q7CgoKICB2b2lkIGR1bXAgKHZvaWQpIGNvbnN0OwoKCiAgc3Ry
dWN0IF9fQWNlIHt9OwoKcHJpdmF0ZToKCiAgQUNFX0FsbG9jYXRvciAqYWxsb2NhdG9yXzsKCgog
IHNpemVfdCBsZW5fOwoKCiAgY2hhciAqcmVwXzsKfTsKCgogICAgICAgICAgIG9zdHJlYW0gJm9w
ZXJhdG9yIDw8IChvc3RyZWFtICYsIGNvbnN0IEFDRV9TU3RyaW5nICYpOwojIDU4MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3Mg
QUNFX1Rva2VuaXplcgp7CnB1YmxpYzoKCgoKCgoKCiAgQUNFX1Rva2VuaXplciAoQUNFX1RDSEFS
ICpidWZmZXIpOwojIDYxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1NTdHJpbmcuaCIKICBpbnQgZGVsaW1pdGVyIChBQ0VfVENIQVIgZCk7CiMgNjMxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1N0cmluZy5oIgog
IGludCBkZWxpbWl0ZXJfcmVwbGFjZSAoQUNFX1RDSEFSIGQsIEFDRV9UQ0hBUiByZXBsYWNlbWVu
dCk7CiMgNjcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
U1N0cmluZy5oIgogIGludCBwcmVzZXJ2ZV9kZXNpZ25hdG9ycyAoQUNFX1RDSEFSIHN0YXJ0LCBB
Q0VfVENIQVIgc3RvcCwgaW50IHN0cmlwPTEpOwoKCiAgQUNFX1RDSEFSICpuZXh0ICh2b2lkKTsK
CiAgZW51bSB7CiAgICBNQVhfREVMSU1JVEVSUz0xNiwKICAgIE1BWF9QUkVTRVJWRVM9MTYKICB9
OwoKcHJvdGVjdGVkOgoKCiAgaW50IGlzX2RlbGltaXRlciAoQUNFX1RDSEFSIGQsIGludCAmcmVw
bGFjZSwgQUNFX1RDSEFSICZyKTsKCgoKCgoKICBpbnQgaXNfcHJlc2VydmVfZGVzaWduYXRvciAo
QUNFX1RDSEFSIHN0YXJ0LCBBQ0VfVENIQVIgJnN0b3AsIGludCAmc3RyaXApOwoKcHJpdmF0ZToK
ICBBQ0VfVENIQVIgKmJ1ZmZlcl87CiAgaW50IGluZGV4XzsKIyA3MDggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmgiCiAgY2xhc3MgUHJlc2Vy
dmVfRW50cnkKICB7CiAgcHVibGljOgoKCgoKCiAgICBBQ0VfVENIQVIgc3RhcnRfOwogICAgQUNF
X1RDSEFSIHN0b3BfOwogICAgaW50IHN0cmlwXzsKICB9OwoKCiAgUHJlc2VydmVfRW50cnkgcHJl
c2VydmVzX1tNQVhfUFJFU0VSVkVTXTsKCgogIGludCBwcmVzZXJ2ZXNfaW5kZXhfOwojIDczNCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIK
ICBjbGFzcyBEZWxpbWl0ZXJfRW50cnkKICB7CiAgcHVibGljOgoKCgoKCgoKICAgIEFDRV9UQ0hB
UiBkZWxpbWl0ZXJfOwogICAgQUNFX1RDSEFSIHJlcGxhY2VtZW50XzsKICAgIGludCByZXBsYWNl
XzsKICB9OwoKCiAgRGVsaW1pdGVyX0VudHJ5IGRlbGltaXRlcnNfW01BWF9ERUxJTUlURVJTXTsK
CgogIGludCBkZWxpbWl0ZXJfaW5kZXhfOwp9OwojIDc2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NTdHJpbmcuaCIKY2xhc3MgQUNFX0F1dG9fU3RyaW5n
X0ZyZWUKewpwdWJsaWM6CiAgZXhwbGljaXQgQUNFX0F1dG9fU3RyaW5nX0ZyZWUgKGNoYXIqIHAg
PSAwKTsKICBBQ0VfQXV0b19TdHJpbmdfRnJlZSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUgJnJocyk7
CiAgQUNFX0F1dG9fU3RyaW5nX0ZyZWUmIG9wZXJhdG9yPSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUg
JnJocyk7CiAgfkFDRV9BdXRvX1N0cmluZ19GcmVlICh2b2lkKTsKCiAgY2hhciogb3BlcmF0b3Iq
ICgpIGNvbnN0OwogIGNoYXIgb3BlcmF0b3JbXSAoaW50IGkpIGNvbnN0OwogIGNoYXIqIGdldCAo
dm9pZCkgY29uc3Q7CiAgY2hhciogcmVsZWFzZSAodm9pZCk7CiAgdm9pZCByZXNldCAoY2hhciog
cCA9IDApOwoKcHJpdmF0ZToKICBjaGFyKiBwXzsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5nLmkiIDEKCgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFsbG9jX0Jhc2UuaCIgMQoj
IDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TU3RyaW5n
LmkiIDIKCgoKaW5saW5lCkFDRV9DU3RyaW5nOjpBQ0VfQ1N0cmluZyAoQUNFX0FsbG9jYXRvciAq
YWxsb2MpCiAgOiBhbGxvY2F0b3JfIChhbGxvYyA/IGFsbG9jIDogQUNFX0FsbG9jYXRvcjo6aW5z
dGFuY2UgKCkpLAogICAgbGVuXyAoMCksCiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgmQUNF
X0NTdHJpbmc6Ok5VTExfQ1N0cmluZ18pLAogICAgcmVsZWFzZV8gKDApCnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgppbmxpbmUKQUNFX0NTdHJpbmc6OkFD
RV9DU3RyaW5nIChjb25zdCBjaGFyICpzLAogICAgICAgICAgICAgICAgICAgICAgICAgIEFDRV9B
bGxvY2F0b3IgKmFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWxlYXNlKQog
IDogYWxsb2NhdG9yXyAoYWxsb2MgPyBhbGxvYyA6IEFDRV9BbGxvY2F0b3I6Omluc3RhbmNlICgp
KSwKICAgIGxlbl8gKDApLAogICAgYnVmX2xlbl8gKDApLAogICAgcmVwXyAoMCksCiAgICByZWxl
YXNlXyAoMCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBz
aXplX3QgbGVuZ3RoOwogIGlmIChzICE9IDApCiAgICBsZW5ndGggPSBBQ0VfT1M6OnN0cmxlbiAo
cyk7CiAgZWxzZQogICAgbGVuZ3RoID0gMDsKCiAgdGhpcy0+c2V0IChzLCBsZW5ndGgsIHJlbGVh
c2UpOwp9CgppbmxpbmUKQUNFX0NTdHJpbmc6OkFDRV9DU3RyaW5nIChjaGFyIGMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgQUNFX0FsbG9jYXRvciAqYWxsb2MpCiAgOiBhbGxvY2F0b3JfIChh
bGxvYyA/IGFsbG9jIDogQUNFX0FsbG9jYXRvcjo6aW5zdGFuY2UgKCkpLAogICAgbGVuXyAoMCks
CiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgwKSwKICAgIHJlbGVhc2VfICgwKQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHRoaXMtPnNldCAoJmMsIDEs
IDEpOwp9CgoKCmlubGluZQpBQ0VfQ1N0cmluZzo6QUNFX0NTdHJpbmcgKGNvbnN0IGNoYXIgKnMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBBQ0VfQWxsb2NhdG9yICphbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgcmVsZWFzZSkKICA6IGFsbG9jYXRvcl8gKGFsbG9jID8gYWxsb2MgOiBBQ0VfQWxsb2NhdG9y
OjppbnN0YW5jZSAoKSksCiAgICBsZW5fICgwKSwKICAgIGJ1Zl9sZW5fICgwKSwKICAgIHJlcF8g
KDApLAogICAgcmVsZWFzZV8gKDApCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgdGhpcy0+c2V0IChzLCBsZW4sIHJlbGVhc2UpOwp9CgoKCmlubGluZQpBQ0Vf
Q1N0cmluZzo6QUNFX0NTdHJpbmcgKGNvbnN0IEFDRV9DU3RyaW5nICZzKQogIDogYWxsb2NhdG9y
XyAocy5hbGxvY2F0b3JfID8gcy5hbGxvY2F0b3JfIDogQUNFX0FsbG9jYXRvcjo6aW5zdGFuY2Ug
KCkpLAogICAgbGVuXyAoMCksCiAgICBidWZfbGVuXyAoMCksCiAgICByZXBfICgwKSwKICAgIHJl
bGVhc2VfICgwKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IHRoaXMtPnNldCAocy5yZXBfLCBzLmxlbl8sIDEpOwp9CgppbmxpbmUKQUNFX0NTdHJpbmc6On5B
Q0VfQ1N0cmluZyAodm9pZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgdGhpcy0+c2V0ICgwLCAwLCAwKTsKfQoKaW5saW5lIHZvaWQKQUNFX0NTdHJpbmc6
OmR1bXAgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9
CgoKCmlubGluZSBBQ0VfQ1N0cmluZyAmCkFDRV9DU3RyaW5nOjpvcGVyYXRvcj0gKGNvbnN0IEFD
RV9DU3RyaW5nICZzKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgaWYgKHRoaXMgIT0gJnMpCiAgICB0aGlzLT5zZXQgKHMucmVwXywgcy5sZW5fLCAxKTsKCiAg
cmV0dXJuICp0aGlzOwp9CgppbmxpbmUgdm9pZApBQ0VfQ1N0cmluZzo6c2V0IChjb25zdCBjaGFy
ICpzLCBpbnQgcmVsZWFzZSkKewogIHNpemVfdCBsZW5ndGg7CiAgaWYgKHMgIT0gMCkKICAgIGxl
bmd0aCA9IEFDRV9PUzo6c3RybGVuIChzKTsKICBlbHNlCiAgICBsZW5ndGggPSAwOwoKICB0aGlz
LT5zZXQgKHMsIGxlbmd0aCwgcmVsZWFzZSk7Cn0KCmlubGluZSBzaXplX3QKQUNFX0NTdHJpbmc6
Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICByZXR1cm4gdGhpcy0+bGVuXzsKfQoKaW5saW5lIEFDRV9DU3RyaW5nCkFDRV9DU3RyaW5n
OjpzdWJzdHIgKHNpemVfdCBvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgIHNzaXplX3QgbGVu
Z3RoKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1YnN0cmluZyAob2Zmc2V0LCBsZW5ndGgpOwp9
CgoKCmlubGluZSBjb25zdCBjaGFyICYKQUNFX0NTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVfdCBz
bG90KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBy
ZXR1cm4gdGhpcy0+cmVwX1tzbG90XTsKfQoKCgppbmxpbmUgY2hhciAmCkFDRV9DU3RyaW5nOjpv
cGVyYXRvcltdIChzaXplX3Qgc2xvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF9bc2xvdF07Cn0KCgoKaW5saW5lIGNoYXIgKgpB
Q0VfQ1N0cmluZzo6cmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICBjaGFyICpuZXdfc3RyaW5nOwogIGRvIHsgdHJ5IHsgbmV3X3N0cmluZyA9IG5l
dyBjaGFyW3RoaXMtPmxlbl8gKyAxXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKICBBQ0VfT1M6
OnN0cm5jcHkgKG5ld19zdHJpbmcsIHRoaXMtPnJlcF8sIHRoaXMtPmxlbl8pOwogIG5ld19zdHJp
bmdbdGhpcy0+bGVuX10gPSAnXDAnOwoKICByZXR1cm4gbmV3X3N0cmluZzsKfQoKaW5saW5lIGNv
bnN0IGNoYXIgKgpBQ0VfQ1N0cmluZzo6ZmFzdF9yZXAgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cmVwXzsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpBQ0VfQ1N0cmluZzo6Y19zdHIgKHZv
aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cmVwXzsKfQoKCgppbmxpbmUgaW50CkFDRV9DU3Ry
aW5nOjpvcGVyYXRvcj09IChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5sZW5fID09IHMu
bGVuXwogICAgJiYgQUNFX09TOjpzdHJuY21wICh0aGlzLT5yZXBfLCBzLnJlcF8sIHRoaXMtPmxl
bl8pID09IDA7Cn0KCgoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6b3BlcmF0b3IgPCAoY29uc3Qg
QUNFX0NTdHJpbmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICByZXR1cm4gKHRoaXMtPnJlcF8gJiYgcy5yZXBfKQogICAgPyBBQ0VfT1M6OnN0
cmNtcCAodGhpcy0+cmVwXywgcy5yZXBfKSA8IDAKICAgIDogKChzLnJlcF8pID8gMSA6IDAgKTsK
fQoKCgppbmxpbmUgaW50CkFDRV9DU3RyaW5nOjpvcGVyYXRvciA+IChjb25zdCBBQ0VfQ1N0cmlu
ZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog
IHJldHVybiAodGhpcy0+cmVwXyAmJiBzLnJlcF8pCiAgICA/IEFDRV9PUzo6c3RyY21wICh0aGlz
LT5yZXBfLCBzLnJlcF8pID4gMAogICAgOiAoKHRoaXMtPnJlcF8pID8gMSA6IDAgKTsKfQoKCgoK
aW5saW5lIGludApBQ0VfQ1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX0NTdHJpbmcgJnMp
IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy
biAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9DU3RyaW5nOjpjb21wYXJlIChjb25z
dCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKCgoKICBpbnQgc21hbGxlcl9sZW5ndGggPSAodGhpcy0+bGVuXyA8IHMubGVuXykg
PyB0aGlzLT5sZW5fIDogcy5sZW5fOwogIGludCByZXN1bHQgPSBBQ0VfT1M6OnN0cm5jbXAgKHRo
aXMtPnJlcF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcy5yZXBfLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsZXJfbGVuZ3RoKTsKCiAgaWYgKHJlc3VsdCAh
PSAwIHx8IHMubGVuXyA9PSB0aGlzLT5sZW5fKQogICAgcmV0dXJuIHJlc3VsdDsKCiAgZWxzZQoK
ICAgIGlmICh0aGlzLT5sZW5fID4gcy5sZW5fKQogICAgICByZXR1cm4gKHRoaXMtPnJlcF9bc21h
bGxlcl9sZW5ndGhdIC0gJ1wwJyk7CgogICAgZWxzZQogICAgICByZXR1cm4gKCdcMCcgLSBzLnJl
cF9bc21hbGxlcl9sZW5ndGhdKTsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6ZmluZCAoY29u
c3QgY2hhciAqcywgaW50IHBvcykgY29uc3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8g
KyBwb3M7CiAgc2l6ZV90IGxlbiA9IEFDRV9PUzo6c3RybGVuIChzKTsKICBjaGFyICpwb2ludGVy
ID0gQUNFX09TOjpzdHJuc3RyIChzdWJzdHIsIHMsIGxlbik7CiAgaWYgKHBvaW50ZXIgPT0gMCkK
ICAgIHJldHVybiBBQ0VfQ1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAt
IHRoaXMtPnJlcF87Cn0KCmlubGluZSBpbnQKQUNFX0NTdHJpbmc6OmZpbmQgKGNoYXIgYywgaW50
IHBvcykgY29uc3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8gKyBwb3M7CiAgY2hhciAq
cG9pbnRlciA9IEFDRV9PUzo6c3RybmNociAoc3Vic3RyLCBjLCB0aGlzLT5sZW5fIC0gcG9zKTsK
ICBpZiAocG9pbnRlciA9PSAwKQogICAgcmV0dXJuIEFDRV9DU3RyaW5nOjpucG9zOwogIGVsc2UK
ICAgIHJldHVybiBwb2ludGVyIC0gdGhpcy0+cmVwXzsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmlu
Zzo6ZmluZCAoY29uc3QgQUNFX0NTdHJpbmcgJnN0ciwgaW50IHBvcykgY29uc3QKewogIHJldHVy
biB0aGlzLT5maW5kIChzdHIucmVwXywgcG9zKTsKfQoKaW5saW5lIGludApBQ0VfQ1N0cmluZzo6
c3Ryc3RyIChjb25zdCBBQ0VfQ1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmZpbmQgKHMucmVwXyk7Cn0KCmlubGlu
ZSBpbnQKQUNFX0NTdHJpbmc6OnJmaW5kIChjaGFyIGMsIGludCBwb3MpIGNvbnN0CnsKICBpZiAo
cG9zID09IEFDRV9DU3RyaW5nOjpucG9zKQogICAgcG9zID0gdGhpcy0+bGVuXzsKCiAgZm9yIChp
bnQgaSA9IHBvcyAtIDE7IGkgPj0gMDsgaS0tKQogICAgaWYgKHRoaXMtPnJlcF9baV0gPT0gYykK
ICAgICAgcmV0dXJuIGk7CgogIHJldHVybiBBQ0VfQ1N0cmluZzo6bnBvczsKfQoKaW5saW5lIHVf
bG9uZwpBQ0VfQ1N0cmluZzo6aGFzaCAodm9pZCkgY29uc3QKewogIHJldHVybiBBQ0U6Omhhc2hf
cGp3ICh0aGlzLT5yZXBfLCB0aGlzLT5sZW5fKTsKfQoKaW5saW5lIEFDRV9DU3RyaW5nCm9wZXJh
dG9yKyAoY29uc3QgQUNFX0NTdHJpbmcgJnMsIGNvbnN0IEFDRV9DU3RyaW5nICZ0KQp7CiAgQUNF
X0NTdHJpbmcgdGVtcCAocyk7CiAgdGVtcCArPSB0OwogIHJldHVybiB0ZW1wOwp9CgppbmxpbmUK
QUNFX1NTdHJpbmc6On5BQ0VfU1N0cmluZyAodm9pZCkKewp9CgppbmxpbmUgQUNFX1NTdHJpbmcK
QUNFX1NTdHJpbmc6OnN1YnN0ciAoc2l6ZV90IG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAg
c3NpemVfdCBsZW5ndGgpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3Vic3RyaW5nIChvZmZzZXQs
IGxlbmd0aCk7Cn0KCgoKaW5saW5lIGNoYXIKQUNFX1NTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVf
dCBzbG90KSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICByZXR1cm4gdGhpcy0+cmVwX1tzbG90XTsKfQoKCgppbmxpbmUgY2hhciAmCkFDRV9TU3RyaW5n
OjpvcGVyYXRvcltdIChzaXplX3Qgc2xvdCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF9bc2xvdF07Cn0KCgoKaW5saW5lIGNvbnN0
IGNoYXIgKgpBQ0VfU1N0cmluZzo6cmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5yZXBfOwp9CgoKCmlubGluZSBjb25zdCBj
aGFyICoKQUNFX1NTdHJpbmc6OmZhc3RfcmVwICh2b2lkKSBjb25zdAp7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnJlcF87Cn0KCgoKaW5saW5l
IGNvbnN0IGNoYXIgKgpBQ0VfU1N0cmluZzo6Y19zdHIgKHZvaWQpIGNvbnN0CnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+cmVwXzsKfQoKCgppbmxp
bmUgaW50CkFDRV9TU3RyaW5nOjpvcGVyYXRvcj09IChjb25zdCBBQ0VfU1N0cmluZyAmcykgY29u
c3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRo
aXMtPmxlbl8gPT0gcy5sZW5fCiAgICAmJiBBQ0VfT1M6OnN0cmNtcCAodGhpcy0+cmVwXywgcy5y
ZXBfKSA9PSAwOwp9CgoKCmlubGluZSBpbnQKQUNFX1NTdHJpbmc6Om9wZXJhdG9yIDwgKGNvbnN0
IEFDRV9TU3RyaW5nICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgcmV0dXJuICh0aGlzLT5yZXBfICYmIHMucmVwXykKICAgID8gQUNFX09TOjpz
dHJjbXAgKHRoaXMtPnJlcF8sIHMucmVwXykgPCAwCiAgICA6ICgocy5yZXBfKSA/IDEgOiAwICk7
Cn0KCgoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6b3BlcmF0b3IgPiAoY29uc3QgQUNFX1NTdHJp
bmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICByZXR1cm4gKHRoaXMtPnJlcF8gJiYgcy5yZXBfKQogICAgPyBBQ0VfT1M6OnN0cmNtcCAodGhp
cy0+cmVwXywgcy5yZXBfKSA+IDAKICAgIDogKCh0aGlzLT5yZXBfKSA/IDEgOiAwICk7Cn0KCgoK
aW5saW5lIGludApBQ0VfU1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1NTdHJpbmcgJnMp
IGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVy
biAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9TU3RyaW5nOjpjb21wYXJlIChjb25z
dCBBQ0VfU1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgcmV0dXJuIEFDRV9PUzo6c3RyY21wICh0aGlzLT5yZXBfLCBzLnJlcF8pOwp9Cgpp
bmxpbmUgaW50CkFDRV9TU3RyaW5nOjpmaW5kIChjb25zdCBjaGFyICpzLCBpbnQgcG9zKSBjb25z
dAp7CiAgY2hhciAqc3Vic3RyID0gdGhpcy0+cmVwXyArIHBvczsKICBjaGFyICpwb2ludGVyID0g
QUNFX09TOjpzdHJzdHIgKHN1YnN0ciwgcyk7CiAgaWYgKHBvaW50ZXIgPT0gMCkKICAgIHJldHVy
biBBQ0VfU1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAtIHRoaXMtPnJl
cF87Cn0KCmlubGluZSBpbnQKQUNFX1NTdHJpbmc6OmZpbmQgKGNoYXIgYywgaW50IHBvcykgY29u
c3QKewogIGNoYXIgKnN1YnN0ciA9IHRoaXMtPnJlcF8gKyBwb3M7CiAgY2hhciAqcG9pbnRlciA9
IEFDRV9PUzo6c3RyY2hyIChzdWJzdHIsIGMpOwogIGlmIChwb2ludGVyID09IDApCiAgICByZXR1
cm4gQUNFX1NTdHJpbmc6Om5wb3M7CiAgZWxzZQogICAgcmV0dXJuIHBvaW50ZXIgLSB0aGlzLT5y
ZXBfOwp9CgppbmxpbmUgaW50CkFDRV9TU3RyaW5nOjpzdHJzdHIgKGNvbnN0IEFDRV9TU3RyaW5n
ICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1
cm4gdGhpcy0+ZmluZCAocy5yZXBfKTsKfQoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6ZmluZCAo
Y29uc3QgQUNFX1NTdHJpbmcgJnN0ciwgaW50IHBvcykgY29uc3QKewogIHJldHVybiB0aGlzLT5m
aW5kIChzdHIucmVwXywgcG9zKTsKfQoKaW5saW5lIGludApBQ0VfU1N0cmluZzo6cmZpbmQgKGNo
YXIgYywgaW50IHBvcykgY29uc3QKewogIGlmIChwb3MgPT0gQUNFX1NTdHJpbmc6Om5wb3MpCiAg
ICBwb3MgPSB0aGlzLT5sZW5fOwoKICBmb3IgKGludCBpID0gcG9zIC0gMTsgaSA+PSAwOyBpLS0p
CiAgICBpZiAodGhpcy0+cmVwX1tpXSA9PSBjKQogICAgICByZXR1cm4gaTsKCiAgcmV0dXJuIEFD
RV9TU3RyaW5nOjpucG9zOwp9CgppbmxpbmUgdV9sb25nCkFDRV9TU3RyaW5nOjpoYXNoICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIEFDRTo6aGFzaF9wancgKHRoaXMtPnJlcF8pOwp9CgppbmxpbmUg
c2l6ZV90CkFDRV9TU3RyaW5nOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl87Cn0KCmlubGluZSBzaXpl
X3QKQUNFX1dTdHJpbmc6Omxlbmd0aCAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVuXzsKfQoKaW5saW5lIEFDRV9XU3Ry
aW5nCm9wZXJhdG9yKyAoY29uc3QgQUNFX1dTdHJpbmcgJnMsCiAgICAgICAgICAgY29uc3QgQUNF
X1dTdHJpbmcgJnQpCnsKICBBQ0VfV1N0cmluZyB0ZW1wIChzLmxlbmd0aCAoKSArIHQubGVuZ3Ro
ICgpKTsKICB0ZW1wID0gczsKICB0ZW1wICs9IHQ7CiAgcmV0dXJuIHRlbXA7Cn0KCmlubGluZSBB
Q0VfV1N0cmluZwpBQ0VfV1N0cmluZzo6c3Vic3RyIChzaXplX3Qgb2Zmc2V0LAogICAgICAgICAg
ICAgICAgICAgICBzc2l6ZV90IGxlbmd0aCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdWJzdHJp
bmcgKG9mZnNldCwgbGVuZ3RoKTsKfQoKCgppbmxpbmUgQUNFX1dTVFJJTkdfVFlQRSAqCkFDRV9X
U3RyaW5nOjpyZXAgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIEFDRV9XU1RSSU5HX1RZUEUgKnQ7CiAgZG8geyB0cnkgeyB0ID0gbmV3IEFDRV9XU1RS
SU5HX1RZUEVbdGhpcy0+bGVuXyArIDFdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9f
ZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKCiAgQUNF
X09TOjptZW1jcHkgKHQsCiAgICAgICAgICAgICAgICAgIHRoaXMtPnJlcF8sCiAgICAgICAgICAg
ICAgICAgIHRoaXMtPmxlbl8gKiBzaXplb2YgKEFDRV9XU1RSSU5HX1RZUEUpKTsKCgogIHRbdGhp
cy0+bGVuX10gPSAwOwoKICByZXR1cm4gdDsKfQoKCgppbmxpbmUgY29uc3QgQUNFX1dTVFJJTkdf
VFlQRSAqCkFDRV9XU3RyaW5nOjpmYXN0X3JlcCAodm9pZCkgY29uc3QKewogIGlmICh0aGlzLT5y
ZXBfID09IDApCiAgICByZXR1cm4gJkFDRV9XU3RyaW5nOjpOVUxMX1dTdHJpbmdfOwogIGVsc2UK
ICAgIHJldHVybiB0aGlzLT5yZXBfOwp9CgppbmxpbmUgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAq
CkFDRV9XU3RyaW5nOjpjX3N0ciAodm9pZCkgY29uc3QKewogIGlmICh0aGlzLT5yZXBfID09IDAp
CiAgICByZXR1cm4gJkFDRV9XU3RyaW5nOjpOVUxMX1dTdHJpbmdfOwogIGVsc2UKICAgIHJldHVy
biB0aGlzLT5yZXBfOwp9CgoKCmlubGluZSBpbnQKQUNFX1dTdHJpbmc6Om9wZXJhdG9yPT0gKGNv
bnN0IEFDRV9XU3RyaW5nICZzKSBjb25zdAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+bGVuXyA9PSBzLmxlbl8KICAgICYmIEFDRV9PUzo6
bWVtY21wICgoY29uc3Qgdm9pZCAqKSB0aGlzLT5yZXBfLAogICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCB2b2lkICopIHMucmVwXywKICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5sZW5f
ICogc2l6ZW9mIChBQ0VfV1NUUklOR19UWVBFKSkgPT0gMDsKfQoKCgppbmxpbmUgaW50CkFDRV9X
U3RyaW5nOjpvcGVyYXRvciA8IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl8gPCBz
Lmxlbl8KICAgICAgICAgID8gQUNFX09TOjptZW1jbXAgKChjb25zdCB2b2lkICopIHRoaXMtPnJl
cF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSBzLnJlcF8sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5sZW5fICogc2l6ZW9mIChBQ0VfV1NUUklO
R19UWVBFKSkgPD0gMAogICAgICAgICAgOiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikg
dGhpcy0+cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMu
cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMubGVuXyAqIHNpemVvZiAoQUNFX1dT
VFJJTkdfVFlQRSkpIDwgMDsKfQoKCgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpvcGVyYXRvciA+
IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPmxlbl8gPD0gcy5sZW5fCiAgICAgICAgICA/
IEFDRV9PUzo6bWVtY21wICgoY29uc3Qgdm9pZCAqKSB0aGlzLT5yZXBfLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgcy5yZXBfLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy0+bGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpID4gMAogICAg
ICAgICAgOiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikgdGhpcy0+cmVwXywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMucmVwXywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHMubGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpID49IDA7
Cn0KCgoKaW5saW5lIGludApBQ0VfV1N0cmluZzo6b3BlcmF0b3IhPSAoY29uc3QgQUNFX1dTdHJp
bmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
IHJldHVybiAhKCp0aGlzID09IHMpOwp9CgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpjb21wYXJl
IChjb25zdCBBQ0VfV1N0cmluZyAmcykgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgogIHJldHVybiBBQ0VfT1M6Om1lbWNtcCAoKGNvbnN0IHZvaWQgKikgdGhp
cy0+cmVwXywKICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopIHMucmVwXywK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmxlbl8gKiBzaXplb2YgKEFDRV9XU1RSSU5H
X1RZUEUpKTsKfQoKCgppbmxpbmUgQUNFX1dTVFJJTkdfVFlQRQpBQ0VfV1N0cmluZzo6b3BlcmF0
b3JbXSAoc2l6ZV90IHNsb3QpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogIHJldHVybiB0aGlzLT5yZXBfW3Nsb3RdOwp9CgoKCmlubGluZSBBQ0VfV1NU
UklOR19UWVBFICYKQUNFX1dTdHJpbmc6Om9wZXJhdG9yW10gKHNpemVfdCBzbG90KQp7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+cmVwX1tz
bG90XTsKfQoKaW5saW5lIGludApBQ0VfV1N0cmluZzo6ZmluZCAoY29uc3QgQUNFX1dTVFJJTkdf
VFlQRSAqcywgaW50IHBvcykgY29uc3QKewogIEFDRV9XU1RSSU5HX1RZUEUgKnN1YnN0ciA9IHRo
aXMtPnJlcF8gKyBwb3M7CiAgY29uc3QgQUNFX1dTVFJJTkdfVFlQRSAqcG9pbnRlciA9IEFDRV9X
U3RyaW5nOjpzdHJzdHIgKHN1YnN0ciwgcyk7CiAgaWYgKHBvaW50ZXIgPT0gMCkKICAgIHJldHVy
biBBQ0VfV1N0cmluZzo6bnBvczsKICBlbHNlCiAgICByZXR1cm4gcG9pbnRlciAtIHRoaXMtPnJl
cF87Cn0KCmlubGluZSBpbnQKQUNFX1dTdHJpbmc6OmZpbmQgKEFDRV9XU1RSSU5HX1RZUEUgYywg
aW50IHBvcykgY29uc3QKewogIGlmIChwb3MgPT0gQUNFX1dTdHJpbmc6Om5wb3MpCiAgICBwb3Mg
PSB0aGlzLT5sZW5fOwoKICBmb3IgKHNpemVfdCBpID0gcG9zOyBpIDwgdGhpcy0+bGVuXzsgaSsr
KQogICAgaWYgKHRoaXMtPnJlcF9baV0gPT0gYykKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4gKGkpOwoKICByZXR1cm4gQUNFX1dTdHJpbmc6Om5wb3M7Cn0KCmlubGluZSBpbnQKQUNFX1dT
dHJpbmc6OnN0cnN0ciAoY29uc3QgQUNFX1dTdHJpbmcgJnMpIGNvbnN0CnsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVybiB0aGlzLT5maW5kIChzLnJlcF8pOwp9
CgppbmxpbmUgaW50CkFDRV9XU3RyaW5nOjpmaW5kIChjb25zdCBBQ0VfV1N0cmluZyAmc3RyLCBp
bnQgcG9zKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPmZpbmQgKHN0ci5yZXBfLCBwb3MpOwp9Cgpp
bmxpbmUgaW50CkFDRV9XU3RyaW5nOjpyZmluZCAoQUNFX1dTVFJJTkdfVFlQRSBjLCBpbnQgcG9z
KSBjb25zdAp7CiAgaWYgKHBvcyA9PSBBQ0VfV1N0cmluZzo6bnBvcykKICAgIHBvcyA9IHRoaXMt
Pmxlbl87CgogIGZvciAoaW50IGkgPSBwb3MgLSAxOyBpID49IDA7IGktLSkKICAgIGlmICh0aGlz
LT5yZXBfW2ldID09IGMpCiAgICAgIHJldHVybiBpOwoKICByZXR1cm4gQUNFX1dTdHJpbmc6Om5w
b3M7Cn0KCmlubGluZSBzaXplX3QKQUNFX1dTdHJpbmc6OmJ1ZmZlcl9zaXplKHZvaWQpIGNvbnN0
CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgIHJldHVybiB0
aGlzLT5idWZfbGVuXzsKfQoKaW5saW5lIHVfbG9uZwpBQ0VfV1N0cmluZzo6aGFzaCAodm9pZCkg
Y29uc3QKewogIHJldHVybiBBQ0U6Omhhc2hfcGp3CiAgICAocmVpbnRlcnByZXRfY2FzdDxjaGFy
ICo+IChjb25zdF9jYXN0PEFDRV9XU1RSSU5HX1RZUEUgKj4gKHRoaXMtPnJlcF8pKSwKCiAgICAg
dGhpcy0+bGVuXyAqIHNpemVvZiAoQUNFX1dTVFJJTkdfVFlQRSkpOwp9CgoKaW5saW5lCkFDRV9B
dXRvX1N0cmluZ19GcmVlOjpBQ0VfQXV0b19TdHJpbmdfRnJlZSAoY2hhciogcCkKICA6IHBfIChw
KQp7Cn0KCmlubGluZQpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6QUNFX0F1dG9fU3RyaW5nX0ZyZWUg
KEFDRV9BdXRvX1N0cmluZ19GcmVlJiByaHMpCiAgOiBwXyAocmhzLnBfKQp7CiAgcmhzLnBfID0g
MDsKfQoKaW5saW5lIHZvaWQKQUNFX0F1dG9fU3RyaW5nX0ZyZWU6OnJlc2V0IChjaGFyKiBwKQp7
CiAgaWYgKHRoaXMtPnBfICE9IDApCiAgICBBQ0VfT1M6OmZyZWUgKHRoaXMtPnBfKTsKICB0aGlz
LT5wXyA9IHA7Cn0KCmlubGluZSBBQ0VfQXV0b19TdHJpbmdfRnJlZSYKQUNFX0F1dG9fU3RyaW5n
X0ZyZWU6Om9wZXJhdG9yPSAoQUNFX0F1dG9fU3RyaW5nX0ZyZWUmIHJocykKewogIGlmICh0aGlz
ICE9ICZyaHMpCiAgICB7CiAgICAgIHRoaXMtPnJlc2V0IChyaHMucF8pOwogICAgICByaHMucF8g
PSAwOwogICAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkFDRV9BdXRvX1N0cmluZ19GcmVl
Ojp+QUNFX0F1dG9fU3RyaW5nX0ZyZWUgKHZvaWQpCnsKICB0aGlzLT5yZXNldCAoMCk7Cn0KCmlu
bGluZSBjaGFyKgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6b3BlcmF0b3IqICh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIHRoaXMtPnBfOwp9CgppbmxpbmUgY2hhcgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6
b3BlcmF0b3JbXSAoaW50IGkpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cF9baV07Cn0KCmlubGlu
ZSBjaGFyKgpBQ0VfQXV0b19TdHJpbmdfRnJlZTo6Z2V0ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu
IHRoaXMtPnBfOwp9CgppbmxpbmUgY2hhcioKQUNFX0F1dG9fU3RyaW5nX0ZyZWU6OnJlbGVhc2Ug
KHZvaWQpCnsKICBjaGFyKiBwID0gdGhpcy0+cF87CiAgdGhpcy0+cF8gPSAwOwogIHJldHVybiBw
Owp9CiMgNzg5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
U1N0cmluZy5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvcG9zdC5oIiAxCiMgNzkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvU1N0cmluZy5oIiAyCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDIKIyAzNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU1N0cmluZy5o
IiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vRXhjZXB0aW9uLmgiIDIKCmNsYXNzIENPUkJBX0FueTsKY2xhc3MgVEFPX091dHB1dENEUjsK
Y2xhc3MgVEFPX0lucHV0Q0RSOwojIDUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFzcyBDT1JCQV9FeGNlcHRpb24Kewpw
dWJsaWM6CgoKCiAgQ09SQkFfRXhjZXB0aW9uIChjb25zdCBDT1JCQV9FeGNlcHRpb24gJnNyYyk7
CgoKICBDT1JCQV9FeGNlcHRpb24gJm9wZXJhdG9yID0gKGNvbnN0IENPUkJBX0V4Y2VwdGlvbiAm
c3JjKTsKCgogIHZpcnR1YWwgfkNPUkJBX0V4Y2VwdGlvbiAodm9pZCk7CgoKICB2aXJ0dWFsIHZv
aWQgX3JhaXNlICh2b2lkKSA9IDA7CgoKICBzdGF0aWMgQ09SQkFfRXhjZXB0aW9uICpfZG93bmNh
c3QgKENPUkJBX0V4Y2VwdGlvbiAqeCk7CgoKCgogIGNvbnN0IGNoYXIgKl9pZCAodm9pZCkgY29u
c3Q7CgoKICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwoK
CiAgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHJlcG9zaXRvcnlfaWQpIGNvbnN0OwoK
CiAgQ09SQkFfRXhjZXB0aW9uIChjb25zdCBjaGFyKiByZXBvc2l0b3J5X2lkKTsKCgoKICB2b2lk
IF90YW9fcHJpbnRfZXhjZXB0aW9uIChjb25zdCBjaGFyICppbmZvLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEZJTEUgKmYgPSBzdGRvdXQpIGNvbnN0OwoKCgogIHZpcnR1YWwgQUNFX0NT
dHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0ID0gMDsKCiAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2Rl
IChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJikgY29uc3QgPSAwOwogIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAoVEFP
X0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJikgPSAwOwoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCAq
KTsKCgogIENPUkJBOjpVTG9uZyBfaW5jcl9yZWZjbnQgKHZvaWQpOwogIENPUkJBOjpVTG9uZyBf
ZGVjcl9yZWZjbnQgKHZvaWQpOwoKcHJvdGVjdGVkOgogIENPUkJBX0V4Y2VwdGlvbiAodm9pZCk7
CgoKcHJpdmF0ZToKCiAgY2hhciAqaWRfOwoKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgoK
CgoKCiAgQUNFX01UX1NZTkNIOjpNVVRFWCByZWZjb3VudF9sb2NrXzsKfTsKCgoKCiAgICAgICAg
ICAgb3N0cmVhbSYgb3BlcmF0b3I8PCAob3N0cmVhbSAmb3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgQ09SQkFfRXhjZXB0aW9uICZlKTsKIyAxNDIgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiCmNsYXNz
IENPUkJBX1VzZXJFeGNlcHRpb24gOiBwdWJsaWMgQ09SQkFfRXhjZXB0aW9uCnsKcHVibGljOgoK
CgogIENPUkJBX1VzZXJFeGNlcHRpb24gKGNvbnN0IENPUkJBX1VzZXJFeGNlcHRpb24gJnNyYyk7
CgoKICB+Q09SQkFfVXNlckV4Y2VwdGlvbiAodm9pZCk7CgoKICBDT1JCQV9Vc2VyRXhjZXB0aW9u
ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1VzZXJFeGNlcHRpb24gJnNyYyk7CgoKICBzdGF0aWMg
Q09SQkFfVXNlckV4Y2VwdGlvbiAqX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24gKmV4Y2VwdGlv
bik7CgoKCgogIENPUkJBX1VzZXJFeGNlcHRpb24gKGNvbnN0IGNoYXIqIHJlcG9zaXRvcnlfaWQp
OwoKICB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciAqaW50ZXJmYWNlX2lkKSBjb25zdDsK
CgoKCgogIHZpcnR1YWwgQUNFX0NTdHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0OwoKCgogIENPUkJB
X1VzZXJFeGNlcHRpb24gKHZvaWQpOwp9OwojIDE4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIKY2xhc3MgQ09SQkFfU3lzdGVt
RXhjZXB0aW9uIDogcHVibGljIENPUkJBX0V4Y2VwdGlvbgp7CnB1YmxpYzoKCgoKICBDT1JCQV9T
eXN0ZW1FeGNlcHRpb24gKHZvaWQpOwoKCiAgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIChjb25zdCBD
T1JCQV9TeXN0ZW1FeGNlcHRpb24gJnNyYyk7CgoKICB+Q09SQkFfU3lzdGVtRXhjZXB0aW9uICh2
b2lkKTsKCgogIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9T
eXN0ZW1FeGNlcHRpb24gJnNyYyk7CgoKICBDT1JCQTo6VUxvbmcgbWlub3IgKHZvaWQpIGNvbnN0
OwoKCiAgdm9pZCBtaW5vciAoQ09SQkE6OlVMb25nIG0pOwoKCiAgQ09SQkE6OkNvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkICh2b2lkKSBjb25zdDsKCgogIHZvaWQgY29tcGxldGVkIChDT1JCQTo6
Q29tcGxldGlvblN0YXR1cyBjKTsKCgogIHN0YXRpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKl9k
b3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uICpleGNlcHRpb24pOwoKCgoKICB2aXJ0dWFsIGludCBf
aXNfYSAoY29uc3QgY2hhciAqdHlwZV9pZCkgY29uc3Q7CgoKCiAgdm9pZCBfdGFvX3ByaW50X3N5
c3RlbV9leGNlcHRpb24gKEZJTEUgKmYgPSBzdGRvdXQpIGNvbnN0OwoKCgogIHZpcnR1YWwgQUNF
X0NTdHJpbmcgX2luZm8gKHZvaWQpIGNvbnN0OwoKICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUg
KFRBT19PdXRwdXRDRFIgJmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmKSBjb25zdDsKICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRBT19JbnB1
dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICYpOwoKCiAgc3RhdGljIENPUkJBOjpVTG9uZyBfdGFvX21pbm9yX2NvZGUgKHVfaW50IGxvY2F0
aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZXJybm9fdmFs
dWUpOwoKCgogIHN0YXRpYyBDT1JCQTo6VUxvbmcgX3Rhb19lcnJubyAoaW50IGVycm5vX3ZhbHVl
KTsKCnByb3RlY3RlZDoKCgogIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoY29uc3QgY2hhciAqcmVw
b3NpdG9yeV9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBjb2RlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
KTsKCgoKICBzdGF0aWMgY29uc3QgY2hhciAqX3Rhb19nZXRfb21nX2V4Y2VwdGlvbl9kZXNjcmlw
dGlvbiAoCiAgICBjb25zdCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICZleGMsCiAgICBDT1JCQTo6
VUxvbmcgbWlub3JfY29kZSk7Cgpwcml2YXRlOgoKICBDT1JCQTo6VUxvbmcgbWlub3JfOwoKCiAg
Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkXzsKCn07CiMgMjkwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFz
cyBDT1JCQV9VTktOT1dOIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzog
Q09SQkFfVU5LTk9XTiAodm9pZCk7IENPUkJBX1VOS05PV04gKENPUkJBOjpVTG9uZyBjb2RlLCBD
T1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9u
ICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiVU5LTk9XTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQp
IHsgfSBzdGF0aWMgQ09SQkFfVU5LTk9XTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl
eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk
Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVU5LTk9X
TiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9VTktOT1dOICopOyBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JC
QV9VTktOT1dOIComKTsKY2xhc3MgQ09SQkFfQkFEX1BBUkFNIDogcHVibGljIENPUkJBX1N5c3Rl
bUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX1BBUkFNICh2b2lkKTsgQ09SQkFfQkFEX1BB
UkFNIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9QQVJB
TSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfQkFEX1BBUkFNICog
X2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19h
IChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7
IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2
b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09S
QkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfUEFSQU0gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENP
UkJBOjpBbnkgJiwgQ09SQkFfQkFEX1BBUkFNICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfUEFSQU0gKiYpOwpjbGFzcyBD
T1JCQV9OT19NRU1PUlkgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBD
T1JCQV9OT19NRU1PUlkgKHZvaWQpOyBDT1JCQV9OT19NRU1PUlkgKENPUkJBOjpVTG9uZyBjb2Rl
LCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0
aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiTk9fTUVNT1JZIiAiOjEuMCIsIGNvZGUsIGNvbXBs
ZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9OT19NRU1PUlkgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2Vw
dGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQp
IGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3Rv
ciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJB
X05PX01FTU9SWSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9OT19N
RU1PUlkgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYs
IGNvbnN0IENPUkJBX05PX01FTU9SWSAqJik7CmNsYXNzIENPUkJBX0lNUF9MSU1JVCA6IHB1Ymxp
YyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lNUF9MSU1JVCAodm9pZCk7
IENPUkJBX0lNUF9MSU1JVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3Rh
dHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JC
QS8iICJJTVBfTElNSVQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJB
X0lNUF9MSU1JVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0
dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBf
cmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNv
bnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3Bl
cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU1QX0xJTUlUICYpOyB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX0lNUF9MSU1JVCAqKTsgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU1QX0xJTUlU
IComKTsKY2xhc3MgQ09SQkFfQ09NTV9GQUlMVVJFIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw
dGlvbiB7IHB1YmxpYzogQ09SQkFfQ09NTV9GQUlMVVJFICh2b2lkKTsgQ09SQkFfQ09NTV9GQUlM
VVJFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkNPTU1fRkFJ
TFVSRSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfQ09NTV9GQUlM
VVJFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50
IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAo
dm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0
YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9DT01NX0ZBSUxVUkUgJik7IHZvaWQgb3BlcmF0
b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQ09NTV9GQUlMVVJFICopOyBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9DT01NX0ZBSUxV
UkUgKiYpOwpjbGFzcyBDT1JCQV9JTlZfT0JKUkVGIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw
dGlvbiB7IHB1YmxpYzogQ09SQkFfSU5WX09CSlJFRiAodm9pZCk7IENPUkJBX0lOVl9PQkpSRUYg
KENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDog
Q09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5WX09CSlJFRiIg
IjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX09CSlJFRiAqIF9k
b3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAo
Y29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2
aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9p
ZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB
OjpBbnkgJiwgY29uc3QgQ09SQkFfSU5WX09CSlJFRiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09S
QkE6OkFueSAmLCBDT1JCQV9JTlZfT0JKUkVGICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfT0JKUkVGIComKTsKY2xhc3Mg
Q09SQkFfT0JKRUNUX05PVF9FWElTVCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBw
dWJsaWM6IENPUkJBX09CSkVDVF9OT1RfRVhJU1QgKHZvaWQpOyBDT1JCQV9PQkpFQ1RfTk9UX0VY
SVNUIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVk
KSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIk9CSkVDVF9O
T1RfRVhJU1QiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX09CSkVD
VF9OT1RfRVhJU1QgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmly
dHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQg
X3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBj
b25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX09CSkVDVF9OT1RfRVhJU1QgJik7
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfT0JKRUNUX05PVF9FWElTVCAq
KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg
Q09SQkFfT0JKRUNUX05PVF9FWElTVCAqJik7CmNsYXNzIENPUkJBX05PX1BFUk1JU1NJT04gOiBw
dWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9OT19QRVJNSVNTSU9O
ICh2b2lkKTsgQ09SQkFfTk9fUEVSTUlTU0lPTiAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpD
b21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6
b21nLm9yZy9DT1JCQS8iICJOT19QRVJNSVNTSU9OIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkg
eyB9IHN0YXRpYyBDT1JCQV9OT19QRVJNSVNTSU9OICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp
b24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBj
b25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl
X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig
KHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9O
T19QRVJNSVNTSU9OICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX05P
X1BFUk1JU1NJT04gKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIGNvbnN0IENPUkJBX05PX1BFUk1JU1NJT04gKiYpOwpjbGFzcyBDT1JCQV9JTlRFUk5B
TCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOVEVSTkFM
ICh2b2lkKTsgQ09SQkFfSU5URVJOQUwgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v
cmcvQ09SQkEvIiAiSU5URVJOQUwiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGlj
IENPUkJBX0lOVEVSTkFMICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7
IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2
b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9p
ZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlRFUk5BTCAmKTsgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9JTlRFUk5BTCAqKTsgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5URVJO
QUwgKiYpOwpjbGFzcyBDT1JCQV9NQVJTSEFMIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlv
biB7IHB1YmxpYzogQ09SQkFfTUFSU0hBTCAodm9pZCk7IENPUkJBX01BUlNIQUwgKENPUkJBOjpV
TG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lz
dGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiTUFSU0hBTCIgIjoxLjAiLCBjb2Rl
LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfTUFSU0hBTCAqIF9kb3duY2FzdCAoQ09SQkFf
RXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlw
ZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpU
eXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0
cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3Qg
Q09SQkFfTUFSU0hBTCAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9N
QVJTSEFMICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm
LCBjb25zdCBDT1JCQV9NQVJTSEFMIComKTsKY2xhc3MgQ09SQkFfSU5JVElBTElaRSA6IHB1Ymxp
YyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOSVRJQUxJWkUgKHZvaWQp
OyBDT1JCQV9JTklUSUFMSVpFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NP
UkJBLyIgIklOSVRJQUxJWkUiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENP
UkJBX0lOSVRJQUxJWkUgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsg
dmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZv
aWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lk
KSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lk
IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0lOSVRJQUxJWkUgJik7IHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfSU5JVElBTElaRSAqKTsgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5J
VElBTElaRSAqJik7CmNsYXNzIENPUkJBX05PX0lNUExFTUVOVCA6IHB1YmxpYyBDT1JCQV9TeXN0
ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX05PX0lNUExFTUVOVCAodm9pZCk7IENPUkJBX05P
X0lNUExFTUVOVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNv
bXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJO
T19JTVBMRU1FTlQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX05P
X0lNUExFTUVOVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0
dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBf
cmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNv
bnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3Bl
cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfTk9fSU1QTEVNRU5UICYpOyB2b2lk
IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX05PX0lNUExFTUVOVCAqKTsgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfTk9f
SU1QTEVNRU5UIComKTsKY2xhc3MgQ09SQkFfQkFEX1RZUEVDT0RFIDogcHVibGljIENPUkJBX1N5
c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX1RZUEVDT0RFICh2b2lkKTsgQ09SQkFf
QkFEX1RZUEVDT0RFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMg
Y29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIg
IkJBRF9UWVBFQ09ERSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFf
QkFEX1RZUEVDT0RFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZp
cnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lk
IF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkg
Y29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBv
cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9CQURfVFlQRUNPREUgJik7IHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQkFEX1RZUEVDT0RFICopOyBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9C
QURfVFlQRUNPREUgKiYpOwpjbGFzcyBDT1JCQV9CQURfT1BFUkFUSU9OIDogcHVibGljIENPUkJB
X1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfQkFEX09QRVJBVElPTiAodm9pZCk7IENP
UkJBX0JBRF9PUEVSQVRJT04gKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0
YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09S
QkEvIiAiQkFEX09QRVJBVElPTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMg
Q09SQkFfQkFEX09QRVJBVElPTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRp
b24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1
YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUg
KHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfQkFEX09QRVJBVElP
TiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9CQURfT1BFUkFUSU9O
ICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25z
dCBDT1JCQV9CQURfT1BFUkFUSU9OIComKTsKY2xhc3MgQ09SQkFfTk9fUkVTT1VSQ0VTIDogcHVi
bGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfTk9fUkVTT1VSQ0VTICh2
b2lkKTsgQ09SQkFfTk9fUkVTT1VSQ0VTIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBs
ZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcu
b3JnL0NPUkJBLyIgIk5PX1JFU09VUkNFUyIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz
dGF0aWMgQ09SQkFfTk9fUkVTT1VSQ0VTICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4
Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsg
dmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq
KTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9OT19SRVNP
VVJDRVMgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfTk9fUkVTT1VS
Q0VTICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBj
b25zdCBDT1JCQV9OT19SRVNPVVJDRVMgKiYpOwpjbGFzcyBDT1JCQV9OT19SRVNQT05TRSA6IHB1
YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX05PX1JFU1BPTlNFICh2
b2lkKTsgQ09SQkFfTk9fUkVTUE9OU0UgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v
cmcvQ09SQkEvIiAiTk9fUkVTUE9OU0UiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3Rh
dGljIENPUkJBX05PX1JFU1BPTlNFICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2Vw
dGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmly
dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlw
ZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsg
fTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9OT19SRVNQT05T
RSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9OT19SRVNQT05TRSAq
KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg
Q09SQkFfTk9fUkVTUE9OU0UgKiYpOwpjbGFzcyBDT1JCQV9QRVJTSVNUX1NUT1JFIDogcHVibGlj
IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfUEVSU0lTVF9TVE9SRSAodm9p
ZCk7IENPUkJBX1BFUlNJU1RfU1RPUkUgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxl
dGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5v
cmcvQ09SQkEvIiAiUEVSU0lTVF9TVE9SRSIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz
dGF0aWMgQ09SQkFfUEVSU0lTVF9TVE9SRSAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl
eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk
Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfUEVSU0lT
VF9TVE9SRSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9QRVJTSVNU
X1NUT1JFICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm
LCBjb25zdCBDT1JCQV9QRVJTSVNUX1NUT1JFIComKTsKY2xhc3MgQ09SQkFfQkFEX0lOVl9PUkRF
UiA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0JBRF9JTlZf
T1JERVIgKHZvaWQpOyBDT1JCQV9CQURfSU5WX09SREVSIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S
QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo
IklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9JTlZfT1JERVIiICI6MS4wIiwgY29kZSwgY29tcGxl
dGVkKSB7IH0gc3RhdGljIENPUkJBX0JBRF9JTlZfT1JERVIgKiBfZG93bmNhc3QgKENPUkJBX0V4
Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVf
aWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlw
ZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1
Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENP
UkJBX0JBRF9JTlZfT1JERVIgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09S
QkFfQkFEX0lOVl9PUkRFUiAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENP
UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfQkFEX0lOVl9PUkRFUiAqJik7CmNsYXNzIENPUkJBX1RS
QU5TSUVOVCA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX1RS
QU5TSUVOVCAodm9pZCk7IENPUkJBX1RSQU5TSUVOVCAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJB
OjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJ
REw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0lFTlQiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7
IH0gc3RhdGljIENPUkJBX1RSQU5TSUVOVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl
eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk
Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVFJBTlNJ
RU5UICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RSQU5TSUVOVCAq
KTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg
Q09SQkFfVFJBTlNJRU5UIComKTsKY2xhc3MgQ09SQkFfRlJFRV9NRU0gOiBwdWJsaWMgQ09SQkFf
U3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9GUkVFX01FTSAodm9pZCk7IENPUkJBX0ZS
RUVfTUVNIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxl
dGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkZSRUVf
TUVNIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9GUkVFX01FTSAq
IF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNf
YSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQp
OyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMg
dm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENP
UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfRlJFRV9NRU0gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENP
UkJBOjpBbnkgJiwgQ09SQkFfRlJFRV9NRU0gKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0ZSRUVfTUVNIComKTsKY2xhc3MgQ09S
QkFfSU5WX0lERU5UIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09S
QkFfSU5WX0lERU5UICh2b2lkKTsgQ09SQkFfSU5WX0lERU5UIChDT1JCQTo6VUxvbmcgY29kZSwg
Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlv
biAoIklETDpvbWcub3JnL0NPUkJBLyIgIklOVl9JREVOVCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0
ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX0lERU5UICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp
b24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBj
b25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl
X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig
KHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9J
TlZfSURFTlQgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfSU5WX0lE
RU5UICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBj
b25zdCBDT1JCQV9JTlZfSURFTlQgKiYpOwpjbGFzcyBDT1JCQV9JTlZfRkxBRyA6IHB1YmxpYyBD
T1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6IENPUkJBX0lOVl9GTEFHICh2b2lkKTsgQ09S
QkFfSU5WX0ZMQUcgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBj
b21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAi
SU5WX0ZMQUciICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX0lOVl9G
TEFHICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50
IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAo
dm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0
YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfRkxBRyAmKTsgdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9JTlZfRkxBRyAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfSU5WX0ZMQUcgKiYpOwpjbGFz
cyBDT1JCQV9JTlRGX1JFUE9TIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1Ymxp
YzogQ09SQkFfSU5URl9SRVBPUyAodm9pZCk7IENPUkJBX0lOVEZfUkVQT1MgKENPUkJBOjpVTG9u
ZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVt
RXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5URl9SRVBPUyIgIjoxLjAiLCBjb2Rl
LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5URl9SRVBPUyAqIF9kb3duY2FzdCAoQ09S
QkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciog
dHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9k
ZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u
c3QgQ09SQkFfSU5URl9SRVBPUyAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD
T1JCQV9JTlRGX1JFUE9TICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlRGX1JFUE9TIComKTsKY2xhc3MgQ09SQkFfQkFEX0NP
TlRFWFQgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9CQURf
Q09OVEVYVCAodm9pZCk7IENPUkJBX0JBRF9DT05URVhUIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S
QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo
IklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9DT05URVhUIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRl
ZCkgeyB9IHN0YXRpYyBDT1JCQV9CQURfQ09OVEVYVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0
aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkg
Y29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y
ICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf
QkFEX0NPTlRFWFQgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfQkFE
X0NPTlRFWFQgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55
ICYsIGNvbnN0IENPUkJBX0JBRF9DT05URVhUIComKTsKY2xhc3MgQ09SQkFfT0JKX0FEQVBURVIg
OiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9PQkpfQURBUFRF
UiAodm9pZCk7IENPUkJBX09CSl9BREFQVEVSIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNv
bXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpv
bWcub3JnL0NPUkJBLyIgIk9CSl9BREFQVEVSIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9
IHN0YXRpYyBDT1JCQV9PQkpfQURBUFRFUiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBl
eGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk
Kik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfT0JKX0FE
QVBURVIgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfT0JKX0FEQVBU
RVIgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNv
bnN0IENPUkJBX09CSl9BREFQVEVSIComKTsKY2xhc3MgQ09SQkFfREFUQV9DT05WRVJTSU9OIDog
cHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfREFUQV9DT05WRVJT
SU9OICh2b2lkKTsgQ09SQkFfREFUQV9DT05WRVJTSU9OIChDT1JCQTo6VUxvbmcgY29kZSwgQ09S
QkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAo
IklETDpvbWcub3JnL0NPUkJBLyIgIkRBVEFfQ09OVkVSU0lPTiIgIjoxLjAiLCBjb2RlLCBjb21w
bGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfREFUQV9DT05WRVJTSU9OICogX2Rvd25jYXN0IChDT1JC
QV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0
eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rl
c3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25z
dCBDT1JCQV9EQVRBX0NPTlZFUlNJT04gJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg
JiwgQ09SQkFfREFUQV9DT05WRVJTSU9OICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo
Y29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9EQVRBX0NPTlZFUlNJT04gKiYpOwpjbGFz
cyBDT1JCQV9JTlZfUE9MSUNZIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1Ymxp
YzogQ09SQkFfSU5WX1BPTElDWSAodm9pZCk7IENPUkJBX0lOVl9QT0xJQ1kgKENPUkJBOjpVTG9u
ZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVt
RXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09SQkEvIiAiSU5WX1BPTElDWSIgIjoxLjAiLCBjb2Rl
LCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfSU5WX1BPTElDWSAqIF9kb3duY2FzdCAoQ09S
QkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciog
dHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9k
ZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u
c3QgQ09SQkFfSU5WX1BPTElDWSAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD
T1JCQV9JTlZfUE9MSUNZICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZfUE9MSUNZIComKTsKY2xhc3MgQ09SQkFfUkVCSU5E
IDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfUkVCSU5EICh2
b2lkKTsgQ09SQkFfUkVCSU5EIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25T
dGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NP
UkJBLyIgIlJFQklORCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFf
UkVCSU5EICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2VwdGlvbik7IHZpcnR1YWwg
aW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmlydHVhbCB2b2lkIF9yYWlz
ZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7
IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsgfTsgdm9pZCBvcGVyYXRv
cjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9SRUJJTkQgJik7IHZvaWQgb3BlcmF0b3I8
PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfUkVCSU5EICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9SRUJJTkQgKiYpOwpjbGFzcyBD
T1JCQV9USU1FT1VUIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09S
QkFfVElNRU9VVCAodm9pZCk7IENPUkJBX1RJTUVPVVQgKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JC
QTo6Q29tcGxldGlvblN0YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgi
SURMOm9tZy5vcmcvQ09SQkEvIiAiVElNRU9VVCIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsg
fSBzdGF0aWMgQ09SQkFfVElNRU9VVCAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNl
cHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZp
cnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5
cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7
IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVElNRU9VVCAm
KTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9USU1FT1VUICopOyBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9U
SU1FT1VUIComKTsKY2xhc3MgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUgOiBwdWJsaWMg
Q09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9UUkFOU0FDVElPTl9VTkFWQUlM
QUJMRSAodm9pZCk7IENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIChDT1JCQTo6VUxvbmcg
Y29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4
Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIlRSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIiAi
OjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9UUkFOU0FDVElPTl9VTkFW
QUlMQUJMRSAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFs
IGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFp
c2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0
OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0
b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfVFJBTlNBQ1RJT05fVU5BVkFJTEFCTEUg
Jik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfVFJBTlNBQ1RJT05fVU5B
VkFJTEFCTEUgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55
ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1VOQVZBSUxBQkxFIComKTsKY2xhc3MgQ09SQkFf
VFJBTlNBQ1RJT05fTU9ERSA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRpb24geyBwdWJsaWM6
IENPUkJBX1RSQU5TQUNUSU9OX01PREUgKHZvaWQpOyBDT1JCQV9UUkFOU0FDVElPTl9NT0RFIChD
T1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENP
UkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIlRSQU5TQUNUSU9OX01P
REUiICI6MS4wIiwgY29kZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX1RSQU5TQUNUSU9O
X01PREUgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBp
bnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNl
ICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsg
c3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9y
PDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX01PREUgJik7IHZvaWQg
b3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFfVFJBTlNBQ1RJT05fTU9ERSAqKTsgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf
VFJBTlNBQ1RJT05fTU9ERSAqJik7CmNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEIDog
cHVibGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiB7IHB1YmxpYzogQ09SQkFfVFJBTlNBQ1RJT05f
UkVRVUlSRUQgKHZvaWQpOyBDT1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCAoQ09SQkE6OlVMb25n
IGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkgOiBDT1JCQV9TeXN0ZW1F
eGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0FDVElPTl9SRVFVSVJFRCIgIjox
LjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBzdGF0aWMgQ09SQkFfVFJBTlNBQ1RJT05fUkVRVUlS
RUQgKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQg
X2lzX2EgKGNvbnN0IGNoYXIqIHR5cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2
b2lkKTsgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3Rh
dGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9
IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEICYpOyB2b2lk
IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RSQU5TQUNUSU9OX1JFUVVJUkVEICop
OyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBD
T1JCQV9UUkFOU0FDVElPTl9SRVFVSVJFRCAqJik7CmNsYXNzIENPUkJBX1RSQU5TQUNUSU9OX1JP
TExFREJBQ0sgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhjZXB0aW9uIHsgcHVibGljOiBDT1JCQV9U
UkFOU0FDVElPTl9ST0xMRURCQUNLICh2b2lkKTsgQ09SQkFfVFJBTlNBQ1RJT05fUk9MTEVEQkFD
SyAoQ09SQkE6OlVMb25nIGNvZGUsIENPUkJBOjpDb21wbGV0aW9uU3RhdHVzIGNvbXBsZXRlZCkg
OiBDT1JCQV9TeXN0ZW1FeGNlcHRpb24gKCJJREw6b21nLm9yZy9DT1JCQS8iICJUUkFOU0FDVElP
Tl9ST0xMRURCQUNLIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkgeyB9IHN0YXRpYyBDT1JCQV9U
UkFOU0FDVElPTl9ST0xMRURCQUNLICogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRpb24qIGV4Y2Vw
dGlvbik7IHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiB0eXBlX2lkKSBjb25zdDsgdmly
dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7IHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlw
ZSAodm9pZCkgY29uc3Q7IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsg
fTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9UUkFOU0FDVElP
Tl9ST0xMRURCQUNLICYpOyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1RS
QU5TQUNUSU9OX1JPTExFREJBQ0sgKik7IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z
dCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1RSQU5TQUNUSU9OX1JPTExFREJBQ0sgKiYpOwpj
bGFzcyBDT1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OIDogcHVibGljIENPUkJBX1N5c3RlbUV4Y2Vw
dGlvbiB7IHB1YmxpYzogQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiAodm9pZCk7IENPUkJBX0lO
VkFMSURfVFJBTlNBQ1RJT04gKENPUkJBOjpVTG9uZyBjb2RlLCBDT1JCQTo6Q29tcGxldGlvblN0
YXR1cyBjb21wbGV0ZWQpIDogQ09SQkFfU3lzdGVtRXhjZXB0aW9uICgiSURMOm9tZy5vcmcvQ09S
QkEvIiAiSU5WQUxJRF9UUkFOU0FDVElPTiIgIjoxLjAiLCBjb2RlLCBjb21wbGV0ZWQpIHsgfSBz
dGF0aWMgQ09SQkFfSU5WQUxJRF9UUkFOU0FDVElPTiAqIF9kb3duY2FzdCAoQ09SQkFfRXhjZXB0
aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlwZV9pZCkg
Y29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y
ICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFf
SU5WQUxJRF9UUkFOU0FDVElPTiAmKTsgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBD
T1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OICopOyBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo
Y29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9JTlZBTElEX1RSQU5TQUNUSU9OIComKTsK
Y2xhc3MgQ09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgOiBwdWJsaWMgQ09SQkFfU3lzdGVtRXhj
ZXB0aW9uIHsgcHVibGljOiBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRSAodm9pZCk7IENPUkJB
X0NPREVTRVRfSU5DT01QQVRJQkxFIChDT1JCQTo6VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRp
b25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3Jn
L0NPUkJBLyIgIkNPREVTRVRfSU5DT01QQVRJQkxFIiAiOjEuMCIsIGNvZGUsIGNvbXBsZXRlZCkg
eyB9IHN0YXRpYyBDT1JCQV9DT0RFU0VUX0lOQ09NUEFUSUJMRSAqIF9kb3duY2FzdCAoQ09SQkFf
RXhjZXB0aW9uKiBleGNlcHRpb24pOyB2aXJ0dWFsIGludCBfaXNfYSAoY29uc3QgY2hhciogdHlw
ZV9pZCkgY29uc3Q7IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOyB2aXJ0dWFsIENPUkJBOjpU
eXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OyBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0
cnVjdG9yICh2b2lkKik7IH07IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3Qg
Q09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpB
bnkgJiwgQ09SQkFfQ09ERVNFVF9JTkNPTVBBVElCTEUgKik7IENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX0NPREVTRVRfSU5DT01QQVRJ
QkxFIComKTsKY2xhc3MgQ09SQkFfQkFEX1FPUyA6IHB1YmxpYyBDT1JCQV9TeXN0ZW1FeGNlcHRp
b24geyBwdWJsaWM6IENPUkJBX0JBRF9RT1MgKHZvaWQpOyBDT1JCQV9CQURfUU9TIChDT1JCQTo6
VUxvbmcgY29kZSwgQ09SQkE6OkNvbXBsZXRpb25TdGF0dXMgY29tcGxldGVkKSA6IENPUkJBX1N5
c3RlbUV4Y2VwdGlvbiAoIklETDpvbWcub3JnL0NPUkJBLyIgIkJBRF9RT1MiICI6MS4wIiwgY29k
ZSwgY29tcGxldGVkKSB7IH0gc3RhdGljIENPUkJBX0JBRF9RT1MgKiBfZG93bmNhc3QgKENPUkJB
X0V4Y2VwdGlvbiogZXhjZXB0aW9uKTsgdmlydHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIHR5
cGVfaWQpIGNvbnN0OyB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsgdmlydHVhbCBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz
dHJ1Y3RvciAodm9pZCopOyB9OyB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0
IENPUkJBX0JBRF9RT1MgJik7IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkFf
QkFEX1FPUyAqKTsgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg
JiwgY29uc3QgQ09SQkFfQkFEX1FPUyAqJik7CiMgMzM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIgpjbGFzcyBUQU9fRXhjZXB0
aW9ucwp7CnB1YmxpYzoKCgoKCgogIHN0YXRpYyB2b2lkIG1ha2Vfc3RhbmRhcmRfdHlwZWNvZGUg
KENPUkJBOjpUeXBlQ29kZV9wdHIgJnRjcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgYnVmbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
X0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp
KTsKCgoKICBzdGF0aWMgdm9pZCBtYWtlX3Vua25vd25fdXNlcl90eXBlY29kZSAoQ09SQkE6OlR5
cGVDb2RlX3B0ciAmdGNwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkpOwoKCgogIHN0YXRpYyB2b2lkIGluaXQgKENPUkJBX0Vudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHN0YXRpYyB2b2lkIGZpbmkgKHZvaWQpOwoK
CiAgc3RhdGljIENPUkJBX1N5c3RlbUV4Y2VwdGlvbiAqY3JlYXRlX3N5c3RlbV9leGNlcHRpb24g
KAogICAgICBjb25zdCBjaGFyICppZCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpCiAgICApOwoKCgoKCgoKICBzdGF0aWMgQUNFX0FsbG9jYXRvciAqZ2xvYmFsX2FsbG9jYXRv
cl87Cgpwcml2YXRlOgoKCiAgc3RhdGljIGludCBpbml0aWFsaXplZF87Cn07CiMgNDAwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5o
IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
RXhjZXB0aW9uLmkiIDEKCgoKaW5saW5lIENPUkJBX0V4Y2VwdGlvbioKQ09SQkFfRXhjZXB0aW9u
OjpfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiogeCkKewogIHJldHVybiB4Owp9CgppbmxpbmUK
Q09SQkFfVXNlckV4Y2VwdGlvbjo6Q09SQkFfVXNlckV4Y2VwdGlvbiAoY29uc3QgQ09SQkFfVXNl
ckV4Y2VwdGlvbiAmc3JjKQogIDogQ09SQkFfRXhjZXB0aW9uIChzcmMpCnsKfQoKaW5saW5lIENP
UkJBOjpVTG9uZwpDT1JCQV9TeXN0ZW1FeGNlcHRpb246Om1pbm9yICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuIHRoaXMtPm1pbm9yXzsKfQoKaW5saW5lIHZvaWQKQ09SQkFfU3lzdGVtRXhjZXB0aW9u
OjptaW5vciAoQ09SQkE6OlVMb25nIG0pCnsKICB0aGlzLT5taW5vcl8gPSBtOwp9CgppbmxpbmUg
Q09SQkE6OkNvbXBsZXRpb25TdGF0dXMKQ09SQkFfU3lzdGVtRXhjZXB0aW9uOjpjb21wbGV0ZWQg
KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29tcGxldGVkXzsKfQoKaW5saW5lIHZvaWQK
Q09SQkFfU3lzdGVtRXhjZXB0aW9uOjpjb21wbGV0ZWQgKENPUkJBOjpDb21wbGV0aW9uU3RhdHVz
IGMpCnsKICB0aGlzLT5jb21wbGV0ZWRfID0gYzsKfQojIDQwMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIgMgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQw
NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNl
cHRpb24uaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIKCgpjbGFzcyBUQU9fSW5wdXRDRFI7CmNsYXNzIFRBT19P
dXRwdXRDRFI7CiMgNDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vVHlwZWNvZGUuaCIKY2xhc3MgVENfUHJpdmF0ZV9TdGF0ZTsKIyA2MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIgpj
bGFzcyBDT1JCQV9UeXBlQ29kZQp7CnB1YmxpYzoKCgoKICBjbGFzcyBCb3VuZHMgOiBwdWJsaWMg
Q09SQkFfVXNlckV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBCb3VuZHMgKHZvaWQpOwoKICAg
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29k
ZSAoVEFPX091dHB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJikgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRB
T19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJik7CgogICAgc3RhdGljIEJvdW5kcyogX2Rvd25jYXN0IChDT1JCQV9FeGNlcHRp
b24gKmV4KTsKICAgIHZpcnR1YWwgaW50IF9pc19hIChjb25zdCBjaGFyKiBpbnRlcmZhY2VfaWQp
IGNvbnN0OwogIH07CgogIGNsYXNzIEJhZEtpbmQgOiBwdWJsaWMgQ09SQkFfVXNlckV4Y2VwdGlv
bgogIHsKICBwdWJsaWM6CiAgICBCYWRLaW5kICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Jh
aXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIg
JmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJmNkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICAg
IHN0YXRpYyBCYWRLaW5kKiBfZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiAqZXgpOwogICAgdmly
dHVhbCBpbnQgX2lzX2EgKGNvbnN0IGNoYXIqIGludGVyZmFjZV9pZCkgY29uc3Q7CiAgfTsKCiAg
c3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0JvdW5kczsKICBzdGF0aWMgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfQmFkS2luZDsKCgogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF9k
dXBsaWNhdGUgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMpOwoKCiAgc3RhdGljIENPUkJBOjpUeXBl
Q29kZV9wdHIgX25pbCAodm9pZCk7CgoKICBDT1JCQTo6Qm9vbGVhbiBlcXVhbCAoQ09SQkE6OlR5
cGVDb2RlX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIGVx
dWl2YWxlbnQgKENPUkJBOjpUeXBlQ29kZV9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp
IGNvbnN0OwoKCiAgQ09SQkE6OlRDS2luZCBraW5kIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBjb25zdCBjaGFyICppZCAoQ09SQkFf
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg
ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIGNvbnN0IGNo
YXIgKm5hbWUgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBj
b25zdDsKCgoKICBDT1JCQTo6VUxvbmcgbWVtYmVyX2NvdW50IChDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKCiAgY29uc3QgY2hh
ciAqbWVtYmVyX25hbWUgKENPUkJBOjpVTG9uZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp
IGNvbnN0OwoKCgogIENPUkJBOjpUeXBlQ29kZV9wdHIgbWVtYmVyX3R5cGUgKENPUkJBOjpVTG9u
ZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgog
IENPUkJBOjpBbnlfcHRyIG1lbWJlcl9sYWJlbCAoQ09SQkE6OlVMb25nIG4sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpUeXBlQ29kZV9wdHIgZGlzY3Jp
bWluYXRvcl90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKSBjb25zdDsK
CgogIENPUkJBOjpMb25nIGRlZmF1bHRfaW5kZXggKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VUxvbmcgbGVu
Z3RoIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29u
c3Q7CgoKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjb250ZW50X3R5cGUgKENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CiMg
MTc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5
cGVjb2RlLmgiCiAgQ09SQkFfVHlwZUNvZGUgKENPUkJBOjpUQ0tpbmQga2luZCk7CiMgMTk2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2Rl
LmgiCiAgQ09SQkFfVHlwZUNvZGUgKENPUkJBOjpUQ0tpbmQga2luZCwKICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYnVmZmVyLAog
ICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcmJfb3duc190YywKICAgICAgICAgICAg
ICAgICAgQ09SQkE6OlVMb25nIHNpemUsCiAgICAgICAgICAgICAgICAgIENPUkJBOjpUeXBlQ29k
ZV9wdHIgcGFyZW50ID0gMCk7CgoKICB+Q09SQkFfVHlwZUNvZGUgKHZvaWQpOwoKICBlbnVtIHRy
YXZlcnNlX3N0YXR1cwogIHsKICAgIFRSQVZFUlNFX1NUT1AsCiAgICBUUkFWRVJTRV9DT05USU5V
RQogIH07CgoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9pZCk7CiAgQ09SQkE6OlVM
b25nIF9kZWNyX3JlZmNudCAodm9pZCk7CiMgMjI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiCiAgQ09SQkE6OkFueV9wdHIgcGFy
YW1ldGVyIChjb25zdCBDT1JCQTo6TG9uZyBzbG90LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7
CgoKCiAgQ09SQkE6OlVMb25nIHBhcmFtX2NvdW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBzdGF0aWMgdm9pZCBfdGFv
X2RlY29kZSAoY29uc3QgQ09SQkFfVHlwZUNvZGUgKnBhcmVudCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBX1R5cGVDb2RlIComY2hpbGQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiMgMjUwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgi
CiAgc2l6ZV90IGxlbmd0aF87CgoKICBjb25zdCBjaGFyKiBidWZmZXJfOwoKCiAgQ09SQkE6Okxv
bmcgYnl0ZV9vcmRlcl87CgoKICBDT1JCQTo6TG9uZyBraW5kXzsKCgoKCgoKICBDT1JCQTo6VHlw
ZUNvZGVfcHRyIHBhcmVudF87CgoKCgoKCiAgY29uc3QgY2hhciAqdGNfYmFzZV87CgoKCgoKCiAg
Y29uc3QgY2hhciAqcm9vdF90Y19iYXNlXzsKCgoKICBzdGF0aWMgQ09SQkE6OkJvb2xlYW4gc2tp
cF90eXBlY29kZSAoVEFPX0lucHV0Q0RSICZzdHJlYW0pOwoKCiAgdHlwZWRlZiBDT1JCQV9UeXBl
Q29kZV9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQ09SQkFfVHlwZUNvZGVfdmFyIF92YXJfdHlw
ZTsKCgoKcHJpdmF0ZToKIyAzMDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKICBDT1JCQTo6Qm9vbGVhbiBlcXVfY29tbW9uIChD
T1JCQTo6VHlwZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFf
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsK
CgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWwgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25s
eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKCiAgY29uc3QgY2hh
ciAqcHJpdmF0ZV9pZCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkpIGNvbnN0OwoKCiAgY29uc3QgY2hhciAqcHJpdmF0ZV9uYW1lIChDT1JCQV9FbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD
T1JCQTo6VUxvbmcgcHJpdmF0ZV9tZW1iZXJfY291bnQgKENPUkJBX0Vudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNvbnN0OwoKCgogIENPUkJB
OjpUeXBlQ29kZV9wdHIgcHJpdmF0ZV9tZW1iZXJfdHlwZSAoCiAgICAgIENPUkJBOjpVTG9uZyBz
bG90LAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApIGNvbnN0OwoKCgogIGNvbnN0
IGNoYXIgKnByaXZhdGVfbWVtYmVyX25hbWUgKENPUkJBOjpVTG9uZyBzbG90LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpBbnlfcHRyIHBy
aXZhdGVfbWVtYmVyX2xhYmVsIChDT1JCQTo6VUxvbmcgbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRy
IHByaXZhdGVfZGlzY3JpbWluYXRvcl90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAo
KQogICAgKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIHByaXZhdGVfZGlzY3JpbWlu
YXRvcl90eXBlX2kgKAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApIGNvbnN0OwoK
CiAgQ09SQkE6OkxvbmcgcHJpdmF0ZV9kZWZhdWx0X2luZGV4IChDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD
T1JCQTo6TG9uZyBwcml2YXRlX2RlZmF1bHRfaW5kZXhfaSAoQ09SQkFfRW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBD
T1JCQTo6TG9uZyBwcml2YXRlX2xlbmd0aCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgoKICBDT1JCQTo6VHlwZUNvZGVfcHRy
IHByaXZhdGVfY29udGVudF90eXBlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
KSBjb25zdDsKCgoKCiAgQ09SQkE6OkJvb2xlYW4gcHJpdmF0ZV9lcXVhbF9vYmpyZWYgKENPUkJB
OjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBOjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFs
X3N0cnVjdCAoQ09SQkE6OlR5cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFu
IHByaXZhdGVfZXF1YWxfdW5pb24gKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBDT1JC
QTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX2VudW0gKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBlcXVpdl9v
bmx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoK
ICBDT1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX3N0cmluZyAoQ09SQkE6OlR5cGVDb2RlX3B0
ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xl
YW4gZXF1aXZfb25seSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWxfd3N0cmluZyAoQ09S
QkE6OlR5cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIGVxdWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVf
ZXF1YWxfc2VxdWVuY2UgKENPUkJBOjpUeXBlQ29kZV9wdHIgdGMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXF1aXZfb25seSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkgY29uc3Q7CgoKICBD
T1JCQTo6Qm9vbGVhbiBwcml2YXRlX2VxdWFsX2FycmF5IChDT1JCQTo6VHlwZUNvZGVfcHRyIHRj
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGVx
dWl2X29ubHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNv
bnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gcHJpdmF0ZV9lcXVhbF9hbGlhcyAoQ09SQkE6OlR5cGVD
b2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiBlcXVpdl9vbmx5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpKSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIHByaXZhdGVfZXF1YWxfZXhjZXB0IChD
T1JCQTo6VHlwZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBlcXVpdl9vbmx5LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkpIGNvbnN0OwoKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsK
CgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNvdW50X2xvY2tfOwoKCgogIENPUkJBOjpCb29s
ZWFuIG9yYl9vd25zXzsKIyA0NjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKICBUQ19Qcml2YXRlX1N0YXRlICpwcml2YXRlX3N0
YXRlXzsKCgoKCiAgQ09SQkFfVHlwZUNvZGUgKGNvbnN0IENPUkJBOjpUeXBlQ29kZSAmc3JjKTsK
ICBDT1JCQV9UeXBlQ29kZSAmb3BlcmF0b3IgPSAoY29uc3QgQ09SQkE6OlR5cGVDb2RlICZzcmMp
OwoKCgoKCgogIGNoYXIgKm5vbl9hbGlnbmVkX2J1ZmZlcl87Cn07CiMgNDg3ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiCmNsYXNz
IFRDX1ByaXZhdGVfU3RhdGUKewpwdWJsaWM6CgogIFRDX1ByaXZhdGVfU3RhdGUgKENPUkJBOjpU
Q0tpbmQga2luZCk7CgoKICB+VENfUHJpdmF0ZV9TdGF0ZSAodm9pZCk7CgogIEFDRV9NVF9TWU5D
SDo6TVVURVggbXV0ZXhfOwoKCiAgQ09SQkE6OlRDS2luZCB0Y19raW5kXzsKCgoKICBDT1JCQTo6
Qm9vbGVhbiB0Y19pZF9rbm93bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfbmFtZV9rbm93bl87CiAg
Q09SQkE6OkJvb2xlYW4gdGNfbWVtYmVyX2NvdW50X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0
Y19tZW1iZXJfdHlwZV9saXN0X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19tZW1iZXJfbmFt
ZV9saXN0X2tub3duXzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19tZW1iZXJfbGFiZWxfbGlzdF9rbm93
bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfZGlzY3JpbWluYXRvcl90eXBlX2tub3duXzsKICBDT1JC
QTo6Qm9vbGVhbiB0Y19kZWZhdWx0X2luZGV4X3VzZWRfa25vd25fOwogIENPUkJBOjpCb29sZWFu
IHRjX2xlbmd0aF9rbm93bl87CiAgQ09SQkE6OkJvb2xlYW4gdGNfY29udGVudF90eXBlX2tub3du
XzsKICBDT1JCQTo6Qm9vbGVhbiB0Y19kaXNjcmltX3BhZF9zaXplX2tub3duXzsKCgogIGNoYXIg
KiB0Y19pZF87CiAgY2hhciAqIHRjX25hbWVfOwogIENPUkJBOjpVTG9uZyB0Y19tZW1iZXJfY291
bnRfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgKnRjX21lbWJlcl90eXBlX2xpc3RfOwogIGNoYXIg
Kip0Y19tZW1iZXJfbmFtZV9saXN0XzsKICBDT1JCQTo6QW55X3B0ciAqdGNfbWVtYmVyX2xhYmVs
X2xpc3RfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgdGNfZGlzY3JpbWluYXRvcl90eXBlXzsKICBD
T1JCQTo6TG9uZyB0Y19kZWZhdWx0X2luZGV4X3VzZWRfOwogIENPUkJBOjpVTG9uZyB0Y19sZW5n
dGhfOwogIENPUkJBOjpUeXBlQ29kZV9wdHIgdGNfY29udGVudF90eXBlXzsKfTsKIyA1MzUgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUu
aCIKY2xhc3MgQ09SQkFfVHlwZUNvZGVfdmFyCnsKcHVibGljOgogIENPUkJBX1R5cGVDb2RlX3Zh
ciAodm9pZCk7CiAgQ09SQkFfVHlwZUNvZGVfdmFyIChDT1JCQV9UeXBlQ29kZV9wdHIpOwogIENP
UkJBX1R5cGVDb2RlX3ZhciAoY29uc3QgQ09SQkFfVHlwZUNvZGVfdmFyICYpOwogIH5DT1JCQV9U
eXBlQ29kZV92YXIgKHZvaWQpOwoKICBDT1JCQV9UeXBlQ29kZV92YXIgJm9wZXJhdG9yPSAoQ09S
QkFfVHlwZUNvZGVfcHRyKTsKICBDT1JCQV9UeXBlQ29kZV92YXIgJm9wZXJhdG9yPSAoY29uc3Qg
Q09SQkFfVHlwZUNvZGVfdmFyICYpOwogIENPUkJBX1R5cGVDb2RlX3B0ciBvcGVyYXRvci0+ICh2
b2lkKSBjb25zdDsKCgogIG9wZXJhdG9yIGNvbnN0IENPUkJBX1R5cGVDb2RlX3B0ciAmKCkgY29u
c3Q7CiAgb3BlcmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKTsKICBDT1JCQV9UeXBlQ29kZV9w
dHIgaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1R5cGVDb2RlX3B0ciAmaW5vdXQgKHZvaWQpOwog
IENPUkJBX1R5cGVDb2RlX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9UeXBlQ29kZV9wdHIgX3Jl
dG4gKHZvaWQpOwogIENPUkJBX1R5cGVDb2RlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0
ZToKICBDT1JCQV9UeXBlQ29kZV9wdHIgcHRyXzsKfTsKIyA1NjcgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIKY2xhc3MgQ09SQkFf
VHlwZUNvZGVfb3V0CnsKcHVibGljOgogIENPUkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNv
ZGVfcHRyICYpOwogIENPUkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNvZGVfdmFyICYpOwog
IENPUkJBX1R5cGVDb2RlX291dCAoY29uc3QgQ09SQkFfVHlwZUNvZGVfb3V0ICYpOwogIENPUkJB
X1R5cGVDb2RlX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9UeXBlQ29kZV9vdXQgJik7CiAg
Q09SQkFfVHlwZUNvZGVfb3V0ICZvcGVyYXRvcj0gKENPUkJBX1R5cGVDb2RlX3B0cik7CiAgb3Bl
cmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKTsKICBDT1JCQV9UeXBlQ29kZV9wdHIgJnB0ciAo
dm9pZCk7CiAgQ09SQkFfVHlwZUNvZGVfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToK
ICBDT1JCQV9UeXBlQ29kZV9wdHIgJnB0cl87CgoKICBDT1JCQV9UeXBlQ29kZV9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgQ09SQkFfVHlwZUNvZGVfdmFyICYpOwp9OwoKCgoKCgoKY2xhc3MgVEFPX1R5
cGVDb2Rlcwp7CnB1YmxpYzoKCgoKICBzdGF0aWMgdm9pZCBpbml0ICh2b2lkKTsKCgogIHN0YXRp
YyB2b2lkIGZpbmkgKHZvaWQpOwoKcHJpdmF0ZToKCgoKICBzdGF0aWMgaW50IGluaXRpYWxpemVk
XzsKCn07CgoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0
Q0RSJiBjZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09S
QkE6OlR5cGVDb2RlICp4KTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU
QU9fSW5wdXRDRFImIGNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
T1JCQTo6VHlwZUNvZGUgKiZ4KTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaSIgMQoKCgppbmxpbmUgQ09SQkE6OlVMb25n
CkNPUkJBX1R5cGVDb2RlOjpfaW5jcl9yZWZjbnQgKHZvaWQpCnsKICBBQ0VfR3VhcmQ8IEFDRV9N
VF9TWU5DSDo6TVVURVggPiBndWFyZCAodGhpcy0+cmVmY291bnRfbG9ja18pOyBpZiAoZ3VhcmQu
bG9ja2VkICgpID09IDApIHJldHVybiAwOzsKICByZXR1cm4gdGhpcy0+cmVmY291bnRfKys7Cn0K
CmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfVHlwZUNvZGU6Ol9kZWNyX3JlZmNudCAodm9pZCkK
ewogIHsKICAgIEFDRV9HdWFyZDwgQUNFX01UX1NZTkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5y
ZWZjb3VudF9sb2NrXyk7IGlmIChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwogICAg
dGhpcy0+cmVmY291bnRfLS07CiAgICBpZiAodGhpcy0+cmVmY291bnRfICE9IDApCiAgICAgIHJl
dHVybiB0aGlzLT5yZWZjb3VudF87CiAgfQogIGRlbGV0ZSB0aGlzOwogIHJldHVybiAwOwp9Cgpp
bmxpbmUgQ09SQkE6OlR5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZTo6X2R1cGxpY2F0ZSAoQ09S
QkE6OlR5cGVDb2RlX3B0ciB0YykKewogIGlmICh0YykKICAgIHRjLT5faW5jcl9yZWZjbnQgKCk7
CiAgcmV0dXJuIHRjOwp9CgppbmxpbmUgQ09SQkE6OlR5cGVDb2RlX3B0cgpDT1JCQTo6VHlwZUNv
ZGU6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gKENPUkJBOjpUeXBlQ29kZV9wdHIpMDsKfQoKaW5s
aW5lIENPUkJBOjpUQ0tpbmQKQ09SQkFfVHlwZUNvZGU6OmtpbmQgKENPUkJBOjpFbnZpcm9ubWVu
dCAmKSBjb25zdAp7CiAgcmV0dXJuIChDT1JCQTo6VENLaW5kKSB0aGlzLT5raW5kXzsKfQoKCmlu
bGluZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQV9UeXBlQ29kZTo6ZXF1aXZhbGVudCAoQ09SQkE6OlR5
cGVDb2RlX3B0ciB0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgY29uc3QKewogIHJldHVybiB0
aGlzLT5lcXVfY29tbW9uICh0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0K
CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkFfVHlwZUNvZGU6OmVxdWFsIChDT1JCQTo6VHlw
ZUNvZGVfcHRyIHRjLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgY29uc3QKewogIHJldHVybiB0aGlzLT5l
cXVfY29tbW9uICh0YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCgppbmxp
bmUgY29uc3QgY2hhciAqCkNPUkJBX1R5cGVDb2RlOjppZCAoQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2
YXRlX3N0YXRlXy0+dGNfaWRfa25vd25fKQogICAgcmV0dXJuIHRoaXMtPnByaXZhdGVfc3RhdGVf
LT50Y19pZF87CiAgZWxzZQogICAgcmV0dXJuIHRoaXMtPnByaXZhdGVfaWQgKF9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgoKaW5saW5lIGNvbnN0IGNoYXIgKgpDT1JCQV9UeXBl
Q29kZTo6bmFtZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlKSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbmFtZV9rbm93
bl8pCiAgICByZXR1cm4gdGhpcy0+cHJpdmF0ZV9zdGF0ZV8tPnRjX25hbWVfOwogIGVsc2UKICAg
IHJldHVybiB0aGlzLT5wcml2YXRlX25hbWUgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUpOwp9CgoKCgoKCmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfVHlwZUNvZGU6Om1lbWJlcl9j
b3VudCAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
KSBjb25zdAp7CgogIGlmICh0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbWVtYmVyX2NvdW50X2tu
b3duXykKICAgIHJldHVybiB0aGlzLT5wcml2YXRlX3N0YXRlXy0+dGNfbWVtYmVyX2NvdW50XzsK
ICBlbHNlCiAgICByZXR1cm4gdGhpcy0+cHJpdmF0ZV9tZW1iZXJfY291bnQgKF9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkE6
OmlzX25pbCAoQ09SQkE6OlR5cGVDb2RlX3B0ciBvYmopCnsKICByZXR1cm4gb2JqID09IDA7Cn0K
CmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6VHlwZUNvZGVfcHRyIG9iaikKewog
IGlmIChvYmopCiAgICBvYmotPl9kZWNyX3JlZmNudCAoKTsKfQoKCgppbmxpbmUKQ09SQkFfVHlw
ZUNvZGVfdmFyOjpDT1JCQV9UeXBlQ29kZV92YXIgKHZvaWQpCiAgOiBwdHJfIChDT1JCQV9UeXBl
Q29kZTo6X25pbCAoKSkKe30KCmlubGluZQpDT1JCQV9UeXBlQ29kZV92YXI6OkNPUkJBX1R5cGVD
b2RlX3ZhciAoQ09SQkFfVHlwZUNvZGVfcHRyIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lIENP
UkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewog
IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfVHlwZUNvZGVfdmFyOjpDT1JCQV9U
eXBlQ29kZV92YXIgKGNvbnN0IENPUkJBX1R5cGVDb2RlX3ZhciAmcCkKICA6IHB0cl8gKENPUkJB
X1R5cGVDb2RlOjpfZHVwbGljYXRlIChwLnB0ciAoKSkpCnt9CgppbmxpbmUKQ09SQkFfVHlwZUNv
ZGVfdmFyOjp+Q09SQkFfVHlwZUNvZGVfdmFyICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRo
aXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfVHlwZUNvZGVfdmFyICYKQ09SQkFfVHlwZUNvZGVf
dmFyOjpvcGVyYXRvcj0gKENPUkJBX1R5cGVDb2RlX3B0ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2Ug
KHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IENPUkJBX1R5cGVDb2RlX3ZhciAmCkNPUkJBX1R5cGVDb2RlX3Zhcjo6b3BlcmF0b3I9IChjb25z
dCBDT1JCQV9UeXBlQ29kZV92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAg
Q09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAgICB0aGlzLT5wdHJfID0gQ09SQkFfVHlw
ZUNvZGU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICAgIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlu
bGluZQpDT1JCQV9UeXBlQ29kZV92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1R5cGVDb2RlX3B0
ciAmKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfVHlwZUNv
ZGVfdmFyOjpvcGVyYXRvciBDT1JCQV9UeXBlQ29kZV9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lIENPUkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6Om9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENP
UkJBX1R5cGVDb2RlX3B0cgpDT1JCQV9UeXBlQ29kZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9U
eXBlQ29kZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu
ZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9UeXBlQ29kZV92YXI6Om91dCAodm9pZCkKewog
IENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gQ09SQkFfVHlwZUNv
ZGU6Ol9uaWwgKCk7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29k
ZV9wdHIKQ09SQkFfVHlwZUNvZGVfdmFyOjpfcmV0biAodm9pZCkKewoKICBDT1JCQV9UeXBlQ29k
ZV9wdHIgdmFsID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gQ09SQkFfVHlwZUNvZGU6Ol9u
aWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGluZQpDT1JCQV9UeXBlQ29kZV9vdXQ6OkNP
UkJBX1R5cGVDb2RlX291dCAoQ09SQkFfVHlwZUNvZGVfcHRyICZwKQogIDogcHRyXyAocCkKewog
IHRoaXMtPnB0cl8gPSBDT1JCQV9UeXBlQ29kZTo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX1R5
cGVDb2RlX291dDo6Q09SQkFfVHlwZUNvZGVfb3V0IChDT1JCQV9UeXBlQ29kZV92YXIgJnApCiAg
OiBwdHJfIChwLm91dCAoKSkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICB0aGlz
LT5wdHJfID0gQ09SQkFfVHlwZUNvZGU6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9UeXBlQ29k
ZV9vdXQ6OkNPUkJBX1R5cGVDb2RlX291dCAoY29uc3QgQ09SQkFfVHlwZUNvZGVfb3V0ICZwKQog
IDogcHRyXyAocC5wdHJfKQp7fQoKaW5saW5lIENPUkJBX1R5cGVDb2RlX291dCAmCkNPUkJBX1R5
cGVDb2RlX291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9UeXBlQ29kZV9vdXQgJnApCnsKICB0
aGlzLT5wdHJfID0gcC5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1R5cGVD
b2RlX291dCAmCkNPUkJBX1R5cGVDb2RlX291dDo6b3BlcmF0b3I9IChDT1JCQV9UeXBlQ29kZV9w
dHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJB
X1R5cGVDb2RlX291dDo6b3BlcmF0b3IgQ09SQkFfVHlwZUNvZGVfcHRyICYoKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9UeXBlQ29kZV9wdHIgJgpDT1JCQV9UeXBlQ29k
ZV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf
VHlwZUNvZGVfcHRyCkNPUkJBX1R5cGVDb2RlX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CiMgNjE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1R5cGVjb2RlLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MjIgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIgMgojIDI4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5o
IiAyCiMgNTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vQW55LmgiCmNsYXNzIENPUkJBX0FueQp7CnB1YmxpYzoKCgogIGVudW0KICB7CiAgICBVTklO
SVRJQUxJWkVEX3R5cGUgPSAweGYwMDAsCiAgICBWQUxVRV9XSVRIT1VUX1RZUEUsCiAgICBVTlNV
UFBPUlRFRF9PUEVSQVRJT04KICB9OwoKCgoKICBDT1JCQV9BbnkgKHZvaWQpOwoKCiAgQ09SQkFf
QW55IChDT1JCQTo6VHlwZUNvZGVfcHRyIHR5cGUpOwojIDg0ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIgogIENPUkJBX0FueSAoQ09SQkE6
OlR5cGVDb2RlX3B0ciB0eXBlLAogICAgICAgICAgICAgQ09SQkE6OlVTaG9ydCBkdW1teSwKICAg
ICAgICAgICAgIGludCBieXRlX29yZGVyLAogICAgICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2Vf
QmxvY2sqIG1iKTsKCgogIENPUkJBX0FueSAoY29uc3QgQ09SQkFfQW55ICZhKTsKCgogIH5DT1JC
QV9BbnkgKHZvaWQpOwoKCiAgQ09SQkFfQW55ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0FueSAm
KTsKCgoKCgoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OlNob3J0KTsKCgogIHZvaWQgb3Bl
cmF0b3I8PD0gKENPUkJBOjpVU2hvcnQpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6Okxv
bmcpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OlVMb25nKTsKCgogIHZvaWQgb3BlcmF0
b3I8PD0gKENPUkJBOjpMb25nTG9uZyk7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6VUxv
bmdMb25nKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpGbG9hdCk7CgoKICB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6RG91YmxlKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpM
b25nRG91YmxlKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IENPUkJBX0FueSYpOwoKCiAg
dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkFfQW55X3B0cik7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChj
b25zdCBjaGFyKik7CgoKICB2b2lkIG9wZXJhdG9yPDw9IChjb25zdCBDT1JCQTo6V0NoYXIqKTsK
CgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpUeXBlQ29kZV9wdHIpOwoKCiAgdm9pZCBvcGVy
YXRvcjw8PSAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIpOwoKCgogIHZvaWQgb3BlcmF0b3I8PD0g
KENPUkJBOjpPYmplY3RfcHRyICopOwoKCgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo
Q09SQkE6OlNob3J0JikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09S
QkE6OlVTaG9ydCYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJB
OjpMb25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlVM
b25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OkxvbmdM
b25nJikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlVMb25n
TG9uZyYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBOjpGbG9h
dCYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBOjpEb3VibGUm
KSBjb25zdDsKCgogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChDT1JCQTo6TG9uZ0RvdWJs
ZSYpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKENPUkJBX0FueSYpIGNv
bnN0OwogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQV9BbnkqJikgY29u
c3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoQ09SQkE6OlR5cGVDb2RlX3B0ciYp
IGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IGNoYXIqJikgY29u
c3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OldDaGFyKiYp
IGNvbnN0OwojIDIwMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9BbnkuaCIKICB0eXBlZGVmIEFDRV9PdXRwdXRDRFI6OmZyb21fYm9vbGVhbiBmcm9t
X2Jvb2xlYW47CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpmcm9tX29jdGV0IGZyb21fb2N0ZXQ7
CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpmcm9tX2NoYXIgZnJvbV9jaGFyOwogIHR5cGVkZWYg
QUNFX091dHB1dENEUjo6ZnJvbV93Y2hhciBmcm9tX3djaGFyOwogIHR5cGVkZWYgQUNFX091dHB1
dENEUjo6ZnJvbV9zdHJpbmcgZnJvbV9zdHJpbmc7CiAgdHlwZWRlZiBBQ0VfT3V0cHV0Q0RSOjpm
cm9tX3dzdHJpbmcgZnJvbV93c3RyaW5nOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoZnJvbV9ib29s
ZWFuKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGZyb21fY2hhcik7CgoKICB2b2lkIG9wZXJhdG9y
PDw9IChmcm9tX3djaGFyKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGZyb21fb2N0ZXQpOwoKCiAg
dm9pZCBvcGVyYXRvcjw8PSAoZnJvbV9zdHJpbmcpOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAoZnJv
bV93c3RyaW5nKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IENPUkJBX0V4Y2VwdGlvbiAm
ZXhjZXB0aW9uKTsKCgogIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBX0V4Y2VwdGlvbiAqZXhjZXB0
aW9uKTsKCgoKCgoKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fYm9vbGVhbiB0b19ib29sZWFu
OwogIHR5cGVkZWYgQUNFX0lucHV0Q0RSOjp0b19jaGFyIHRvX2NoYXI7CiAgdHlwZWRlZiBBQ0Vf
SW5wdXRDRFI6OnRvX3djaGFyIHRvX3djaGFyOwogIHR5cGVkZWYgQUNFX0lucHV0Q0RSOjp0b19v
Y3RldCB0b19vY3RldDsKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fc3RyaW5nIHRvX3N0cmlu
ZzsKICB0eXBlZGVmIEFDRV9JbnB1dENEUjo6dG9fd3N0cmluZyB0b193c3RyaW5nOwoKCiAgc3Ry
dWN0IHRvX29iamVjdAogIHsKCgogICAgdG9fb2JqZWN0IChDT1JCQV9PYmplY3Rfb3V0IG9iaik7
CiAgICBDT1JCQTo6T2JqZWN0X3B0ciAmcmVmXzsKICB9OwoKCgoKICBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+PSAodG9fYm9vbGVhbikgY29uc3Q7CgoKICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PSAodG9fb2N0ZXQpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRv
X2NoYXIpIGNvbnN0OwoKCiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX3djaGFyKSBj
b25zdDsKCgogIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49ICh0b19zdHJpbmcpIGNvbnN0OwoK
CiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX3dzdHJpbmcpIGNvbnN0OwoKCiAgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHRvX29iamVjdCkgY29uc3Q7CgoKCgoKCiAgQ09SQkE6
OlR5cGVDb2RlX3B0ciB0eXBlICh2b2lkKSBjb25zdDsKCgoKICB2b2lkIHR5cGUgKENPUkJBOjpU
eXBlQ29kZV9wdHIgdHlwZSwKICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkpOwoKCgoKCgoKICBjb25zdCB2b2lkICp2YWx1ZSAodm9pZCkgY29uc3Q7CiMg
MzA1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Fu
eS5oIgogIENPUkJBOjpCb29sZWFuIGFueV9vd25zX2RhdGEgKHZvaWQpIGNvbnN0OwoKCgogIEFD
RV9NZXNzYWdlX0Jsb2NrKiBfdGFvX2dldF9jZHIgKHZvaWQpIGNvbnN0OwogIGludCBfdGFvX2J5
dGVfb3JkZXIgKHZvaWQpIGNvbnN0OwoKCgogIHR5cGVkZWYgdm9pZCAoKl90YW9fZGVzdHJ1Y3Rv
cikodm9pZCopOwoKCiAgdm9pZCBfdGFvX3JlcGxhY2UgKENPUkJBOjpUeXBlQ29kZV9wdHIsCiAg
ICAgICAgICAgICAgICAgICAgIGludCBieXRlX29yZGVyLAogICAgICAgICAgICAgICAgICAgICBj
b25zdCBBQ0VfTWVzc2FnZV9CbG9jayAqbWIpOwoKCiAgdm9pZCBfdGFvX3JlcGxhY2UgKENPUkJB
OjpUeXBlQ29kZV9wdHIgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVfb3JkZXIs
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrICptYiwKICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gYW55X293bnNfZGF0YSwKICAgICAgICAgICAg
ICAgICAgICAgdm9pZCogdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpBbnk6Ol90
YW9fZGVzdHJ1Y3RvciBkZXN0cnVjdG9yKTsKCgogIHZvaWQgX3Rhb19yZXBsYWNlIChDT1JCQTo6
VHlwZUNvZGVfcHRyIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGFu
eV9vd25zX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgIHZvaWQqIHZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6QW55OjpfdGFvX2Rlc3RydWN0b3IgZGVzdHJ1Y3Rvcik7CgoKICB2
b2lkIF90YW9fZW5jb2RlIChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAg
VEFPX09SQl9Db3JlICpvcmJfY29yZSwKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCiAgdm9pZCBfdGFvX2Rl
Y29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIHR5cGVkZWYgQ09S
QkFfQW55X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9BbnlfdmFyIF92YXJfdHlwZTsK
CgoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwogIHN0YXRpYyB2
b2lkIF90YW9fYW55X3N0cmluZ19kZXN0cnVjdG9yICh2b2lkKik7CiAgc3RhdGljIHZvaWQgX3Rh
b19hbnlfd3N0cmluZ19kZXN0cnVjdG9yICh2b2lkKik7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlf
dGNfZGVzdHJ1Y3RvciAodm9pZCopOwoKcHJvdGVjdGVkOgoKICB2b2lkIGZyZWVfdmFsdWUgKHZv
aWQpOwoKcHJpdmF0ZToKCiAgQ09SQkE6OlR5cGVDb2RlX3ZhciB0eXBlXzsKCgogIGludCBieXRl
X29yZGVyXzsKICBBQ0VfTWVzc2FnZV9CbG9jayAqY2RyXzsKCgogIENPUkJBOjpCb29sZWFuIGFu
eV9vd25zX2RhdGFfOwoKCiAgdm9pZCAqdmFsdWVfOwoKCiAgQ09SQkE6OkFueTo6X3Rhb19kZXN0
cnVjdG9yIGRlc3RydWN0b3JfOwoKCiAgdm9pZCBvcGVyYXRvcjw8PSAodW5zaWduZWQgY2hhcik7
CiAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKHVuc2lnbmVkIGNoYXImKSBjb25zdDsKCiAg
ZnJpZW5kIGNsYXNzIENPUkJBX05WTGlzdDsKICBmcmllbmQgY2xhc3MgVEFPX01hcnNoYWxfQW55
Owp9OwoKCgoKCgoKY2xhc3MgQ09SQkFfQW55X3Zhcgp7CnB1YmxpYzoKCiAgQ09SQkFfQW55X3Zh
ciAodm9pZCk7CgoKICBDT1JCQV9BbnlfdmFyIChDT1JCQV9BbnkgKmEpOwoKCiAgQ09SQkFfQW55
X3ZhciAoY29uc3QgQ09SQkFfQW55X3ZhciAmYSk7CgoKICB+Q09SQkFfQW55X3ZhciAodm9pZCk7
CgoKICBDT1JCQV9BbnlfdmFyICZvcGVyYXRvcj0gKENPUkJBX0FueSAqYSk7CgoKCgoKCgogIENP
UkJBX0FueV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQW55X3ZhciAmYSk7CgoKICBDT1JC
QV9BbnkgKm9wZXJhdG9yLT4gKHZvaWQpOwoKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfQW55ICoo
KSBjb25zdDsKCgogIG9wZXJhdG9yIENPUkJBX0FueSAqJigpOwoKCiAgY29uc3QgQ09SQkFfQW55
ICZpbiAodm9pZCkgY29uc3Q7CgoKICBDT1JCQV9BbnkgJmlub3V0ICh2b2lkKTsKCgogIENPUkJB
X0FueSAqJm91dCAodm9pZCk7CgoKICBDT1JCQV9BbnkgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6
CgogIENPUkJBX0FueSAqcHRyXzsKfTsKIyA0NTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCmNsYXNzIENPUkJBX0FueV9vdXQKewpwdWJs
aWM6CgoKCiAgQ09SQkFfQW55X291dCAoQ09SQkFfQW55IComcCk7CgoKICBDT1JCQV9Bbnlfb3V0
IChDT1JCQV9BbnlfdmFyICZwKTsKCgogIENPUkJBX0FueV9vdXQgKGNvbnN0IENPUkJBX0FueV9v
dXQgJnMpOwoKCiAgQ09SQkFfQW55X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Bbnlfb3V0
ICZzKTsKCgogIENPUkJBX0FueV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfQW55ICpwKTsKCgogIENP
UkJBX0FueV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQW55ICpwKTsKCgogIG9wZXJhdG9y
IENPUkJBX0FueSAqJigpOwoKCiAgQ09SQkFfQW55IComIHB0ciAodm9pZCk7CgogIENPUkJBX0Fu
eSAqb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgoKICBDT1JCQV9BbnkgKiZwdHJfOwoKCiAg
dm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0FueV92YXIgJik7Cn07CgoKICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSJiBjZHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkFueSAmeCk7CiAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSJiBjZHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkFueSAmeCk7CgoKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5pIiAxCgoK
CgoKaW5saW5lIENPUkJBOjpCb29sZWFuCkNPUkJBX0FueTo6YW55X293bnNfZGF0YSAodm9pZCkg
Y29uc3QKewogIHJldHVybiAodGhpcy0+YW55X293bnNfZGF0YV8gIT0gMCAmJiB0aGlzLT52YWx1
ZV8gIT0gMCk7Cn0KCmlubGluZSBBQ0VfTWVzc2FnZV9CbG9jayoKQ09SQkFfQW55OjpfdGFvX2dl
dF9jZHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y2RyXzsKfQoKaW5saW5lIGludApD
T1JCQV9Bbnk6Ol90YW9fYnl0ZV9vcmRlciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5i
eXRlX29yZGVyXzsKfQoKaW5saW5lCkNPUkJBX0FueTo6dG9fb2JqZWN0Ojp0b19vYmplY3QgKENP
UkJBX09iamVjdF9vdXQgb2JqKQogIDogcmVmXyAob2JqLnB0ciAoKSkKewp9CgoKCgoKaW5saW5l
CkNPUkJBX0FueV92YXI6OkNPUkJBX0FueV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7Cn0KCmlu
bGluZQpDT1JCQV9BbnlfdmFyOjpDT1JCQV9BbnlfdmFyIChDT1JCQV9BbnkgKnApCiAgOiBwdHJf
IChwKQp7Cn0KCmlubGluZQpDT1JCQV9BbnlfdmFyOjpDT1JCQV9BbnlfdmFyIChjb25zdCBDT1JC
QV9BbnlfdmFyJiByKQp7CiAgQ09SQkFfQW55X3B0ciBucHRyOwogIGRvIHsgdHJ5IHsgbnB0ciA9
IG5ldyBDT1JCQTo6QW55ICgqci5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CgogIHRoaXMt
PnB0cl8gPSBucHRyOwp9CgppbmxpbmUKQ09SQkFfQW55X3Zhcjo6fkNPUkJBX0FueV92YXIgKHZv
aWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0FueV92YXI6Om9wZXJh
dG9yIENPUkJBX0FueSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB
X0FueV92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX0FueSAqKCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6OkFueSAqCkNPUkJBX0FueV92YXI6Om9wZXJhdG9y
LT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IENPUkJBX0Fu
eSAmCkNPUkJBX0FueV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgppbmxpbmUgQ09SQkFfQW55ICYKQ09SQkFfQW55X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy
ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKiYKQ09SQkFfQW55X3Zhcjo6
b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKgpDT1JCQV9BbnlfdmFyOjpfcmV0
biAodm9pZCkKewogIENPUkJBX0FueSAqdGVtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9
IDA7CiAgcmV0dXJuIHRlbXA7Cn0KCgoKCgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJB
X0FueV92YXIgJmxocywgQ09SQkE6OlNob3J0IHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhz
Owp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6
OlVTaG9ydCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQKb3Bl
cmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpMb25nIHJocykKewogIGxocy5p
bm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92
YXIgJmxocywgQ09SQkE6OlVMb25nIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9Cgpp
bmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkxvbmdM
b25nIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRv
ciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OlVMb25nTG9uZyByaHMpCnsKICBsaHMu
aW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQKb3BlcmF0b3IgPDw9IChDT1JCQV9Bbnlf
dmFyICZsaHMsIENPUkJBOjpGbG9hdCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoK
aW5saW5lIHZvaWQKb3BlcmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpEb3Vi
bGUgcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9y
IDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBjb25zdCBDT1JCQV9BbnkmIHJocykKewogIGxocy5p
bm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92
YXIgJmxocywgY29uc3QgY2hhciogcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlu
bGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VHlwZUNv
ZGVfcHRyIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVy
YXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgcmhz
KQp7CiAgbGhzLmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAo
Q09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4gcmhzKQp7CiAgbGhz
Lmlub3V0ICgpIDw8PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55
X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojpmcm9tX2NoYXIgcmhzKQp7CiAgbGhzLmlub3V0ICgpIDw8
PSByaHM7Cn0KCmlubGluZSB2b2lkCm9wZXJhdG9yIDw8PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBD
T1JCQTo6QW55Ojpmcm9tX3djaGFyIHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9Cgpp
bmxpbmUgdm9pZApvcGVyYXRvciA8PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6
ZnJvbV9vY3RldCByaHMpCnsKICBsaHMuaW5vdXQgKCkgPDw9IHJoczsKfQoKaW5saW5lIHZvaWQK
b3BlcmF0b3IgPDw9IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpBbnk6OmZyb21fc3RyaW5n
IHJocykKewogIGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgppbmxpbmUgdm9pZApvcGVyYXRvciA8
PD0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6ZnJvbV93c3RyaW5nIHJocykKewog
IGxocy5pbm91dCAoKSA8PD0gcmhzOwp9CgoKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJh
dG9yID4+PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6U2hvcnQgJnJocykKewogIHJldHVy
biBsaHMuaW5vdXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9y
ID4+PSAoQ09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VVNob3J0ICZyaHMpCnsKICByZXR1cm4g
bGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+
Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkxvbmcgJnJocykKewogIHJldHVybiBsaHMu
aW5vdXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAo
Q09SQkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VUxvbmcgJnJocykKewogIHJldHVybiBsaHMuaW5v
dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S
QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6TG9uZ0xvbmcgJnJocykKewogIHJldHVybiBsaHMuaW5v
dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S
QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6VUxvbmdMb25nICZyaHMpCnsKICByZXR1cm4gbGhzLmlu
b3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0gKENP
UkJBX0FueV92YXIgJmxocywgQ09SQkE6OkZsb2F0ICZyaHMpCnsKICByZXR1cm4gbGhzLmlub3V0
ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0gKENPUkJB
X0FueV92YXIgJmxocywgQ09SQkE6OkRvdWJsZSAmcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAo
KSA+Pj0gcmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9B
bnlfdmFyICZsaHMsIENPUkJBX0FueSAmcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAoKSA+Pj0g
cmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9BbnlfdmFy
ICZsaHMsIENPUkJBOjpUeXBlQ29kZV9wdHIgJnJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkg
Pj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09SQkFfQW55
X3ZhciAmbGhzLCBjb25zdCBjaGFyIComcmhzKQp7CiAgcmV0dXJuIGxocy5pbm91dCAoKSA+Pj0g
cmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0b3IgPj49IChDT1JCQV9BbnlfdmFy
ICZsaHMsIGNvbnN0IENPUkJBOjpXQ2hhciAqJnJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkg
Pj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09SQkFfQW55
X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojp0b19ib29sZWFuIHJocykKewogIHJldHVybiBsaHMuaW5v
dXQgKCkgPj49IHJoczsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yID4+PSAoQ09S
QkFfQW55X3ZhciAmbGhzLCBDT1JCQTo6QW55Ojp0b19vY3RldCByaHMpCnsKICByZXR1cm4gbGhz
Lmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+Pj0g
KENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fY2hhciByaHMpCnsKICByZXR1cm4g
bGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvciA+
Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fd2NoYXIgcmhzKQp7CiAgcmV0
dXJuIGxocy5pbm91dCAoKSA+Pj0gcmhzOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4Kb3BlcmF0
b3IgPj49IChDT1JCQV9BbnlfdmFyICZsaHMsIENPUkJBOjpBbnk6OnRvX3N0cmluZyByaHMpCnsK
ICByZXR1cm4gbGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpv
cGVyYXRvciA+Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fd3N0cmluZyBy
aHMpCnsKICByZXR1cm4gbGhzLmlub3V0ICgpID4+PSByaHM7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbgpvcGVyYXRvciA+Pj0gKENPUkJBX0FueV92YXIgJmxocywgQ09SQkE6OkFueTo6dG9fb2Jq
ZWN0IHJocykKewogIHJldHVybiBsaHMuaW5vdXQgKCkgPj49IHJoczsKfQoKCgoKCmlubGluZQpD
T1JCQV9Bbnlfb3V0OjpDT1JCQV9Bbnlfb3V0IChDT1JCQV9BbnkgKiZzKQogIDogcHRyXyAocykK
ewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfQW55X291dDo6Q09SQkFfQW55X291
dCAoQ09SQkFfQW55X3ZhciAmcykKICA6IHB0cl8gKHMub3V0ICgpKQp7Cn0KCmlubGluZQpDT1JC
QV9Bbnlfb3V0OjpDT1JCQV9Bbnlfb3V0IChjb25zdCBDT1JCQV9Bbnlfb3V0ICZzKQogIDogcHRy
XyAocy5wdHJfKQp7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6b3Bl
cmF0b3I9IChjb25zdCBDT1JCQV9Bbnlfb3V0ICZzKQp7CiAgdGhpcy0+cHRyXyA9IHMucHRyXzsK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6
b3BlcmF0b3I9IChDT1JCQV9BbnkgKnMpCnsKICB0aGlzLT5wdHJfID0gczsKICByZXR1cm4gKnRo
aXM7Cn0KCmlubGluZSBDT1JCQV9Bbnlfb3V0ICYKQ09SQkFfQW55X291dDo6b3BlcmF0b3I9IChj
b25zdCBDT1JCQV9BbnkgKnMpCnsKICB0aGlzLT5wdHJfID0gbmV3IENPUkJBOjpBbnkgKCpzKTsK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9Bbnlfb3V0OjpvcGVyYXRvciBDT1JCQV9B
bnkgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9BbnkgKiYKQ09S
QkFfQW55X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD
T1JCQV9BbnkgKgpDT1JCQV9Bbnlfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KIyA0OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vQW55LmgiIDIKIyA1ODMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU4NCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMgojIDI5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCgoK
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L1RBT19FeHBvcnQuaCIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGllcy5o
IiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vU21hcnRQcm94aWVzL1NtYXJ0X1Byb3hpZXMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJv
eGllcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vU21hcnRQcm94aWVzL3NtYXJ0cHJveGllc19leHBvcnQuaCIgMQojIDEwICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGll
cy9zbWFydHByb3hpZXNfZXhwb3J0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1hbGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGllcy9zbWFydHByb3hp
ZXNfZXhwb3J0LmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGllcy5oIiAyCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMQoj
IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nt
YXJ0UHJveGllcy9TbWFydF9Qcm94aWVzLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaCIgMQojIDIxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0
b24uaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cHJlLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1N5bmNoLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKIyA0MSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu
Z2xldG9uLmgiCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFzcyBBQ0VfTE9DSz4KY2xhc3MgVEFP
X1NpbmdsZXRvbiA6IHB1YmxpYyBBQ0VfQ2xlYW51cAp7CgpwdWJsaWM6CgogIHN0YXRpYyBUWVBF
ICppbnN0YW5jZSAodm9pZCk7CgoKCiAgdmlydHVhbCB2b2lkIGNsZWFudXAgKHZvaWQgKnBhcmFt
ID0gMCk7CgoKICBzdGF0aWMgdm9pZCBkdW1wICh2b2lkKTsKCnByb3RlY3RlZDoKCiAgVEFPX1Np
bmdsZXRvbiAodm9pZCk7CgoKICBUWVBFIGluc3RhbmNlXzsKCgoKCgoKCiAgc3RhdGljIFRBT19T
aW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComaW5zdGFuY2VfaSAodm9pZCk7Cn07CiMgODMgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1Npbmds
ZXRvbi5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVFlQRSwgY2xhc3MgQUNFX0xPQ0s+CmNsYXNzIFRBT19U
U1NfU2luZ2xldG9uIDogcHVibGljIEFDRV9DbGVhbnVwCnsKCnB1YmxpYzoKCiAgc3RhdGljIFRZ
UEUgKmluc3RhbmNlICh2b2lkKTsKCgoKICB2aXJ0dWFsIHZvaWQgY2xlYW51cCAodm9pZCAqcGFy
YW0gPSAwKTsKCgogIHN0YXRpYyB2b2lkIGR1bXAgKHZvaWQpOwoKcHJvdGVjdGVkOgoKICBUQU9f
VFNTX1NpbmdsZXRvbiAodm9pZCk7CgoKICBBQ0VfVFNTPCBUWVBFID4gaW5zdGFuY2VfOwoKCgoK
CgoKICBzdGF0aWMgVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComaW5zdGFuY2Vf
aSAodm9pZCk7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaW5sIiAxCiMgOSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmlubCIKdGVtcGxh
dGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKVEFPX1NpbmdsZXRvbjxUWVBF
LCBBQ0VfTE9DSz46OlRBT19TaW5nbGV0b24gKHZvaWQpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFRZ
UEUsIGNsYXNzIEFDRV9MT0NLPiBpbmxpbmUKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xP
Q0s+OjpUQU9fVFNTX1NpbmdsZXRvbiAodm9pZCkKewp9CiMgMTE2ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uaCIgMgoKCgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFP
X1NpbmdsZXRvbi5jcHAiIDEKCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDEKIyA5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uY3Bw
IiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvU3luY2hfVC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbi5jcHAiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFnZXIuaCIgMQojIDE3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFn
ZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cHJlLmgiIDEKIyAxOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09iamVjdF9NYW5hZ2VyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDIKCgoKCgoKY2xhc3MgQUNF
X09iamVjdF9NYW5hZ2VyX1ByZWFsbG9jYXRpb25zOwpjbGFzcyBBQ0VfU2lnX0FkYXB0ZXI7CmNs
YXNzIEFDRV9TaWdfU2V0OwoKICBjbGFzcyBBQ0VfTXV0ZXg7CiAgY2xhc3MgQUNFX051bGxfTXV0
ZXg7CiAgY2xhc3MgQUNFX1RocmVhZF9NdXRleDsKICBjbGFzcyBBQ0VfUmVjdXJzaXZlX1RocmVh
ZF9NdXRleDsKICBjbGFzcyBBQ0VfUldfVGhyZWFkX011dGV4OwoKCmNsYXNzIEFDRV9DbGVhbnVw
X0luZm9fTm9kZTsKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIEFDRV9DbGVhbnVwX0FkYXB0ZXI7
CiMgMTc3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT2Jq
ZWN0X01hbmFnZXIuaCIKY2xhc3MgQUNFX09iamVjdF9NYW5hZ2VyIDogcHVibGljIEFDRV9PYmpl
Y3RfTWFuYWdlcl9CYXNlCnsKCnB1YmxpYzoKCgoKCgogIHZpcnR1YWwgaW50IGluaXQgKHZvaWQp
OwoKCgoKCgogIHZpcnR1YWwgaW50IGZpbmkgKHZvaWQpOwojIDIwNCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGlj
IGludCBzdGFydGluZ191cCAodm9pZCk7CiMgMjEzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvT2JqZWN0X01hbmFnZXIuaCIKICBzdGF0aWMgaW50IHNodXR0
aW5nX2Rvd24gKHZvaWQpOwojIDIyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIGludCBhdF9leGl0IChBQ0Vf
Q2xlYW51cCAqb2JqZWN0LCB2b2lkICpwYXJhbSA9IDApOwojIDI0MSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGlj
IGludCBhdF9leGl0ICh2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICBBQ0VfQ0xF
QU5VUF9GVU5DIGNsZWFudXBfaG9vaywKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBhcmFt
KTsKIyAyNTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9P
YmplY3RfTWFuYWdlci5oIgogIGVudW0gUHJlYWxsb2NhdGVkX09iamVjdAogICAgewogICAgICBB
Q0VfRklMRUNBQ0hFX0xPQ0ssCgogICAgICBBQ0VfU1RBVElDX09CSkVDVF9MT0NLLAoKCiAgICAg
IEFDRV9NVF9DT1JCQV9IQU5ETEVSX0xPQ0ssCiAgICAgIEFDRV9EVU1QX0xPQ0ssCiAgICAgIEFD
RV9TSUdfSEFORExFUl9MT0NLLAogICAgICBBQ0VfU0lOR0xFVE9OX05VTExfTE9DSywKICAgICAg
QUNFX1NJTkdMRVRPTl9SRUNVUlNJVkVfVEhSRUFEX0xPQ0ssCiAgICAgIEFDRV9USFJFQURfRVhJ
VF9MT0NLLAoKICAgICAgQUNFX1RPS0VOX01BTkFHRVJfQ1JFQVRJT05fTE9DSywKICAgICAgQUNF
X1RPS0VOX0lOVkFSSUFOVFNfQ1JFQVRJT05fTE9DSywKCiAgICAgIEFDRV9QUk9BQ1RPUl9FVkVO
VF9MT09QX0xPQ0ssCgoKCgoKICAgICAgQUNFX1BSRUFMTE9DQVRFRF9PQkpFQ1RTCiAgICB9OwoK
CgoKICBlbnVtIFByZWFsbG9jYXRlZF9BcnJheQogICAgewoKCgoKICAgICAgQUNFX0VNUFRZX1BS
RUFMTE9DQVRFRF9BUlJBWSwKCgoKCiAgICAgIEFDRV9QUkVBTExPQ0FURURfQVJSQVlTCiAgICB9
OwojIDMwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09i
amVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIEFDRV9TaWdfU2V0ICZkZWZhdWx0X21hc2sgKHZvaWQp
OwoKcHJpdmF0ZToKCiAgQUNFX09TX0V4aXRfSW5mbyBleGl0X2luZm9fOwoKCgogIEFDRV9PYmpl
Y3RfTWFuYWdlcl9QcmVhbGxvY2F0aW9ucyAqcHJlYWxsb2NhdGlvbnNfOwoKCiAgQUNFX1NpZ19B
ZGFwdGVyICphY2Vfc2VydmljZV9jb25maWdfc2lnX2hhbmRsZXJfOwoKCgoKICBpbnQgYXRfZXhp
dF9pICh2b2lkICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29rLCB2b2lkICpw
YXJhbSk7CgoKcHVibGljOgojIDMzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAgc3RhdGljIGludCBnZXRfc2luZ2xldG9u
X2xvY2sgKEFDRV9OdWxsX011dGV4IComKTsKCgoKCgoKICBzdGF0aWMgaW50IGdldF9zaW5nbGV0
b25fbG9jayAoQUNFX1RocmVhZF9NdXRleCAqJik7CgoKCgoKCiAgc3RhdGljIGludCBnZXRfc2lu
Z2xldG9uX2xvY2sgKEFDRV9NdXRleCAqJik7CgoKCgoKCiAgc3RhdGljIGludCBnZXRfc2luZ2xl
dG9uX2xvY2sgKEFDRV9SZWN1cnNpdmVfVGhyZWFkX011dGV4IComKTsKCgoKCgoKICBzdGF0aWMg
aW50IGdldF9zaW5nbGV0b25fbG9jayAoQUNFX1JXX1RocmVhZF9NdXRleCAqJik7CgoKcHVibGlj
OgoKCgoKCgoKICBzdGF0aWMgQUNFX09iamVjdF9NYW5hZ2VyICppbnN0YW5jZSAodm9pZCk7CgoK
ICBzdGF0aWMgdm9pZCAqcHJlYWxsb2NhdGVkX29iamVjdFtBQ0VfUFJFQUxMT0NBVEVEX09CSkVD
VFNdOwoKCiAgc3RhdGljIHZvaWQgKnByZWFsbG9jYXRlZF9hcnJheVtBQ0VfUFJFQUxMT0NBVEVE
X0FSUkFZU107CgpwdWJsaWM6CgoKCgogIEFDRV9PYmplY3RfTWFuYWdlciAodm9pZCk7CiAgfkFD
RV9PYmplY3RfTWFuYWdlciAodm9pZCk7Cgpwcml2YXRlOgoKICBzdGF0aWMgQUNFX09iamVjdF9N
YW5hZ2VyICppbnN0YW5jZV87CgoKCiAgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0ZXggKmludGVy
bmFsX2xvY2tfOwoKCiAgQUNFX0NsZWFudXBfQWRhcHRlcjxBQ0VfTnVsbF9NdXRleD4gKnNpbmds
ZXRvbl9udWxsX2xvY2tfOwoKCgogIEFDRV9DbGVhbnVwX0FkYXB0ZXI8QUNFX1JlY3Vyc2l2ZV9U
aHJlYWRfTXV0ZXg+ICpzaW5nbGV0b25fcmVjdXJzaXZlX2xvY2tfOwojIDQwOSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiAg
ZnJpZW5kIGNsYXNzIEFDRV9PYmplY3RfTWFuYWdlcl9NYW5hZ2VyOwoKCgogIEFDRV9PYmplY3Rf
TWFuYWdlciAoY29uc3QgQUNFX09iamVjdF9NYW5hZ2VyICYpOwogIEFDRV9PYmplY3RfTWFuYWdl
ciAmb3BlcmF0b3I9IChjb25zdCBBQ0VfT2JqZWN0X01hbmFnZXIgJik7Cn07CgoKCgpjbGFzcyBB
Q0VfUmVjdXJzaXZlX1RocmVhZF9NdXRleDsKIyA0MzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9PYmplY3RfTWFuYWdlci5oIgpjbGFzcyBBQ0VfU3RhdGlj
X09iamVjdF9Mb2NrCnsKcHVibGljOgoKICBzdGF0aWMgQUNFX1JlY3Vyc2l2ZV9UaHJlYWRfTXV0
ZXggKmluc3RhbmNlICh2b2lkKTsKCgoKICBzdGF0aWMgdm9pZCBjbGVhbnVwX2xvY2sgKHZvaWQp
Owp9OwoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL09iamVjdF9NYW5hZ2VyLmkiIDEKCgoKaW5saW5lCmludApBQ0VfT2JqZWN0X01hbmFnZXI6
OmF0X2V4aXQgKEFDRV9DbGVhbnVwICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqcGFyYW0pCnsKICByZXR1cm4gQUNFX09iamVjdF9NYW5hZ2VyOjppbnN0YW5jZSAo
KS0+YXRfZXhpdF9pICgKICAgIG9iamVjdCwKICAgIChBQ0VfQ0xFQU5VUF9GVU5DKSBhY2VfY2xl
YW51cF9kZXN0cm95ZXIsCiAgICBwYXJhbSk7Cn0KCmlubGluZQppbnQKQUNFX09iamVjdF9NYW5h
Z2VyOjphdF9leGl0ICh2b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QUNFX0NMRUFOVVBfRlVOQyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCAqcGFyYW0pCnsKICByZXR1cm4gQUNFX09iamVjdF9NYW5hZ2VyOjppbnN0YW5jZSAo
KS0+YXRfZXhpdF9pICgKICAgIG9iamVjdCwKICAgIGNsZWFudXBfaG9vaywKICAgIHBhcmFtKTsK
fQoKaW5saW5lCkFDRV9TaWdfU2V0ICYKQUNFX09iamVjdF9NYW5hZ2VyOjpkZWZhdWx0X21hc2sg
KHZvaWQpCnsKCgogIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxBQ0VfU2lnX1NldCAqPiAoQUNF
X09TX09iamVjdF9NYW5hZ2VyOjpkZWZhdWx0X21hc2sgKCkpOwoKfQojIDQ0OCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDIK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5h
Z2VkX09iamVjdC5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvT1MuaCIgMQojIDE5ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmpl
Y3QuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiIDIKIyAzOSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiCnRl
bXBsYXRlIDxjbGFzcyBUWVBFPgpjbGFzcyBBQ0VfQ2xlYW51cF9BZGFwdGVyIDogcHVibGljIEFD
RV9DbGVhbnVwCnsKcHVibGljOgoKICBBQ0VfQ2xlYW51cF9BZGFwdGVyICh2b2lkKTsKCgogIHZp
cnR1YWwgfkFDRV9DbGVhbnVwX0FkYXB0ZXIgKHZvaWQpOwoKCiAgVFlQRSAmb2JqZWN0ICh2b2lk
KTsKCnByaXZhdGU6CiAgQUNFX0NsZWFudXBfQWRhcHRlciAoY29uc3QgQUNFX0NsZWFudXBfQWRh
cHRlcjxUWVBFPiAmKTsKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQUNFX0NsZWFudXBfQWRhcHRl
cjxUWVBFPiAmKTsKCgogIFRZUEUgb2JqZWN0XzsKfTsKIyA5OCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL01hbmFnZWRfT2JqZWN0LmgiCnRlbXBsYXRlIDxj
bGFzcyBUWVBFPgpjbGFzcyBBQ0VfTWFuYWdlZF9PYmplY3QKewpwdWJsaWM6CiAgc3RhdGljIFRZ
UEUgKmdldF9wcmVhbGxvY2F0ZWRfb2JqZWN0IChBQ0VfT2JqZWN0X01hbmFnZXI6OlByZWFsbG9j
YXRlZF9PYmplY3QgaWQpCiAgewoKCgoKCgoKICAgIHJldHVybiAmKChBQ0VfQ2xlYW51cF9BZGFw
dGVyPFRZUEU+ICopCiAgICAgICAgICAgICBBQ0VfT2JqZWN0X01hbmFnZXI6OnByZWFsbG9jYXRl
ZF9vYmplY3RbaWRdKS0+b2JqZWN0ICgpOwogIH0KCgoKCgoKICBzdGF0aWMgVFlQRSAqZ2V0X3By
ZWFsbG9jYXRlZF9hcnJheSAoQUNFX09iamVjdF9NYW5hZ2VyOjpQcmVhbGxvY2F0ZWRfQXJyYXkg
aWQpCiAgewoKCgoKCgoKICAgIHJldHVybiAmKChBQ0VfQ2xlYW51cF9BZGFwdGVyPFRZUEU+ICop
CiAgICAgICAgICAgICBBQ0VfT2JqZWN0X01hbmFnZXI6OnByZWFsbG9jYXRlZF9hcnJheVtpZF0p
LT5vYmplY3QgKCk7CiAgfQoKCgoKCgpwcml2YXRlOgoKICBBQ0VfTWFuYWdlZF9PYmplY3QgKHZv
aWQpOwogIEFDRV9NYW5hZ2VkX09iamVjdCAoY29uc3QgQUNFX01hbmFnZWRfT2JqZWN0PFRZUEU+
ICYpOwogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBBQ0VfTWFuYWdlZF9PYmplY3Q8VFlQRT4gJik7
CgogIGZyaWVuZCBjbGFzcyB0aGlzX3ByZXZlbnRzX2NvbXBpbGVyX3dhcm5pbmdfYWJvdXRfb25s
eV9wcml2YXRlX2NvbnN0cnVjdG9yczsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5pIiAxCgoKCnRlbXBsYXRlIDxj
bGFzcyBUWVBFPgppbmxpbmUKQUNFX0NsZWFudXBfQWRhcHRlcjxUWVBFPjo6QUNFX0NsZWFudXBf
QWRhcHRlciAodm9pZCkKCgp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFPgppbmxpbmUKVFlQRSAm
CkFDRV9DbGVhbnVwX0FkYXB0ZXI8VFlQRT46Om9iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlz
LT5vYmplY3RfOwp9CiMgMTQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVjdC5jcHAiIDEKCgoKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09i
amVjdC5oIiAxCiMgNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL01hbmFnZWRfT2JqZWN0LmNwcCIgMgojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuY3BwIgppbmxpbmUgY29uc3QgY2hh
ciogZ2V0X3Jjc2lkX2FjZV9NYW5hZ2VkX09iamVjdCAoY29uc3QgY2hhciopIHsgcmV0dXJuICJN
YW5hZ2VkX09iamVjdC5jcHAsdiA0LjEyIDIwMDAvMDQvMTkgMDI6NDk6MzQgYnJ1bnNjaCBFeHAi
IDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNzaWRfYWNlX01hbmFnZWRfT2JqZWN0ID0gZ2V0X3Jj
c2lkX2FjZV9NYW5hZ2VkX09iamVjdCAoIHJjc2lkX2FjZV9NYW5hZ2VkX09iamVjdCApIDsKCnRl
bXBsYXRlIDxjbGFzcyBUWVBFPgpBQ0VfQ2xlYW51cF9BZGFwdGVyPFRZUEU+Ojp+QUNFX0NsZWFu
dXBfQWRhcHRlciAodm9pZCkKewp9CiMgMTUzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvTWFuYWdlZF9PYmplY3QuaCIgMgoKCgoKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxNjAgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9NYW5hZ2VkX09iamVj
dC5oIiAyCiMgNDUxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvT2JqZWN0X01hbmFnZXIuaCIgMgoKCgoKCmNsYXNzIEFDRV9TZXJ2aWNlX09iamVjdDsKZXh0
ZXJuICJDIgpBQ0VfU2VydmljZV9PYmplY3QgKgpfbWFrZV9BQ0VfU2VydmljZV9NYW5hZ2VyIChB
Q0VfU2VydmljZV9PYmplY3RfRXh0ZXJtaW5hdG9yICopOwojIDQ3OSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9NYW5hZ2VyLmgiCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDQ4
MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09iamVjdF9N
YW5hZ2VyLmgiIDIKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmNwcCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Mb2dfTXNnLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmNwcCIg
MgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
VEFPX1NpbmdsZXRvbl9NYW5hZ2VyLmgiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAy
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9f
U2luZ2xldG9uX01hbmFnZXIuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19FeHBvcnQuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b25fTWFuYWdl
ci5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9vcmJjb25mLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIgMgoKCgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TLmgiIDEKIyAzMiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu
Z2xldG9uX01hbmFnZXIuaCIgMgoKCgpleHRlcm4gIkMiCnZvaWQKVEFPX1NpbmdsZXRvbl9NYW5h
Z2VyX2NsZWFudXBfZGVzdHJveWVyICh2b2lkICosIHZvaWQgKik7CiMgNTUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbl9NYW5h
Z2VyLmgiCmNsYXNzIFRBT19TaW5nbGV0b25fTWFuYWdlciA6IHB1YmxpYyBBQ0VfT2JqZWN0X01h
bmFnZXJfQmFzZQp7CgogIGZyaWVuZCB2b2lkIFRBT19TaW5nbGV0b25fTWFuYWdlcl9jbGVhbnVw
X2Rlc3Ryb3llciAodm9pZCAqLCB2b2lkICopOwoKcHVibGljOgoKICB2aXJ0dWFsIGludCBpbml0
ICh2b2lkKTsKCgoKCgoKICBpbnQgaW5pdCAoaW50IHJlZ2lzdGVyX3dpdGhfb2JqZWN0X21hbmFn
ZXIpOwoKCiAgdmlydHVhbCBpbnQgZmluaSAodm9pZCk7CgoKCgoKCiAgc3RhdGljIGludCBzdGFy
dGluZ191cCAodm9pZCk7CgoKCiAgc3RhdGljIGludCBzaHV0dGluZ19kb3duICh2b2lkKTsKCiAg
ZW51bSBQcmVhbGxvY2F0ZWRfT2JqZWN0CiAgICB7CgoKCiAgICAgIFRBT19FTVBUWV9QUkVBTExP
Q0FURURfT0JKRUNULAoKCgoKCgoKICAgICAgVEFPX1BSRUFMTE9DQVRFRF9PQkpFQ1RTCiAgICB9
OwoKCgoKICBzdGF0aWMgc2lnc2V0X3QgKmRlZmF1bHRfbWFzayAodm9pZCk7CgoKICBzdGF0aWMg
QUNFX1RocmVhZF9Ib29rICp0aHJlYWRfaG9vayAodm9pZCk7CgoKICBzdGF0aWMgQUNFX1RocmVh
ZF9Ib29rICp0aHJlYWRfaG9vayAoQUNFX1RocmVhZF9Ib29rICpuZXdfdGhyZWFkX2hvb2spOwoK
CiAgc3RhdGljIFRBT19TaW5nbGV0b25fTWFuYWdlciAqaW5zdGFuY2UgKHZvaWQpOwojIDEyNSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2lu
Z2xldG9uX01hbmFnZXIuaCIKICBzdGF0aWMgaW50IGF0X2V4aXQgKEFDRV9DbGVhbnVwICpvYmpl
Y3QsIHZvaWQgKnBhcmFtID0gMCk7CiMgMTQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b25fTWFuYWdlci5oIgogIHN0YXRpYyBp
bnQgYXRfZXhpdCAodm9pZCAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgQUNFX0NMRUFO
VVBfRlVOQyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwYXJhbSk7
Cgpwcml2YXRlOgoKICBUQU9fU2luZ2xldG9uX01hbmFnZXIgKHZvaWQpOwogIH5UQU9fU2luZ2xl
dG9uX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyIChjb25zdCBUQU9f
U2luZ2xldG9uX01hbmFnZXIgJik7CiAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyICZvcGVyYXRvcj0g
KGNvbnN0IFRBT19TaW5nbGV0b25fTWFuYWdlciAmKTsKCgoKICBpbnQgYXRfZXhpdF9pICh2b2lk
ICpvYmplY3QsIEFDRV9DTEVBTlVQX0ZVTkMgY2xlYW51cF9ob29rLCB2b2lkICpwYXJhbSk7Cgpw
cml2YXRlOgoKCiAgc3RhdGljIFRBT19TaW5nbGV0b25fTWFuYWdlciAqaW5zdGFuY2VfOwoKCiAg
c3RhdGljIHZvaWQgKnByZWFsbG9jYXRlZF9vYmplY3RbVEFPX1BSRUFMTE9DQVRFRF9PQkpFQ1RT
XTsKCgogIHNpZ3NldF90ICpkZWZhdWx0X21hc2tfOwoKCiAgQUNFX1RocmVhZF9Ib29rICp0aHJl
YWRfaG9va187CgoKICBBQ0VfT1NfRXhpdF9JbmZvIGV4aXRfaW5mb187CgoKCiAgaW50IHJlZ2lz
dGVyZWRfd2l0aF9vYmplY3RfbWFuYWdlcl87CgoKCiAgQUNFX01UX1NZTkNIOjpSRUNVUlNJVkVf
TVVURVggKmludGVybmFsX2xvY2tfOwoKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVEFPX1NpbmdsZXRvbl9NYW5hZ2VyLmlubCIgMQoK
CgoKaW5saW5lCmludApUQU9fU2luZ2xldG9uX01hbmFnZXI6OmF0X2V4aXQgKEFDRV9DbGVhbnVw
ICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0pCnsKICBy
ZXR1cm4gVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjppbnN0YW5jZSAoKS0+YXRfZXhpdF9pICgKICAg
IG9iamVjdCwKICAgIChBQ0VfQ0xFQU5VUF9GVU5DKSBhY2VfY2xlYW51cF9kZXN0cm95ZXIsCiAg
ICBwYXJhbSk7Cn0KCmlubGluZQppbnQKVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjphdF9leGl0ICh2
b2lkICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX0NMRUFOVVBfRlVO
QyBjbGVhbnVwX2hvb2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcGFyYW0p
CnsKICByZXR1cm4gVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjppbnN0YW5jZSAoKS0+YXRfZXhpdF9p
ICgKICAgIG9iamVjdCwKICAgIGNsZWFudXBfaG9vaywKICAgIHBhcmFtKTsKfQojIDE4NyAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xl
dG9uX01hbmFnZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE5MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uX01hbmFnZXIuaCIgMgojIDE4ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5n
bGV0b24uY3BwIiAyCgoKCgoKaW5saW5lIGNvbnN0IGNoYXIqIGdldF9yY3NpZF90YW9fVEFPX1Np
bmdsZXRvbiAoY29uc3QgY2hhciopIHsgcmV0dXJuICJUQU9fU2luZ2xldG9uLmNwcCx2IDEuNSAy
MDAxLzA1LzMwIDE5OjI5OjExIG90aG1hbiBFeHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNz
aWRfdGFvX1RBT19TaW5nbGV0b24gPSBnZXRfcmNzaWRfdGFvX1RBT19TaW5nbGV0b24gKCByY3Np
ZF90YW9fVEFPX1NpbmdsZXRvbiApIDsKCgoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFD
RV9MT0NLPiB2b2lkClRBT19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjpkdW1wICh2b2lkKQp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK
CgoKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiBUQU9fU2luZ2xldG9u
PFRZUEUsIEFDRV9MT0NLPiAqJgpUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFu
Y2VfaSAodm9pZCkKewoKCgogIHN0YXRpYyBUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPiAq
c2luZ2xldG9uXyA9IDA7CgogIHJldHVybiBzaW5nbGV0b25fOwoKCgp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVFlQRSwgY2xhc3MgQUNFX0xPQ0s+IFRZUEUgKgpUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9M
T0NLPjo6aW5zdGFuY2UgKHZvaWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4g
KiZzaW5nbGV0b24gPQogICAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz46Omluc3RhbmNl
X2kgKCk7CgoKICBpZiAoc2luZ2xldG9uID09IDApCiAgICB7CiAgICAgIGlmIChUQU9fU2luZ2xl
dG9uX01hbmFnZXI6OnN0YXJ0aW5nX3VwICgpIHx8CiAgICAgICAgICBUQU9fU2luZ2xldG9uX01h
bmFnZXI6OnNodXR0aW5nX2Rvd24gKCkpCiAgICAgICAgewoKCgoKCgoKICAgICAgICAgIGRvIHsg
dHJ5IHsgc2luZ2xldG9uID0gbmV3IChUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPik7IH0g
Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0
dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKCgoK
ICAgICAgICAgIHN0YXRpYyBBQ0VfTE9DSyAqbG9jayA9IDA7CiAgICAgICAgICBpZiAoQUNFX09i
amVjdF9NYW5hZ2VyOjpnZXRfc2luZ2xldG9uX2xvY2sgKGxvY2spICE9IDApCgogICAgICAgICAg
ICByZXR1cm4gMDsKCiAgICAgICAgICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKmxv
Y2spOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICAgICAgICAgIGlm
IChzaW5nbGV0b24gPT0gMCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBkbyB7IHRyeSB7
IHNpbmdsZXRvbiA9IG5ldyAoVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4pOyB9IGNhdGNo
IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAw
OyB9IH0gd2hpbGUgKDApOwoKCiAgICAgICAgICAgICAgVEFPX1NpbmdsZXRvbl9NYW5hZ2VyOjph
dF9leGl0IChzaW5nbGV0b24pOwoKICAgICAgICAgICAgfQoKICAgICAgICB9CiAgICB9CgogIHJl
dHVybiAmc2luZ2xldG9uLT5pbnN0YW5jZV87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFz
cyBBQ0VfTE9DSz4gdm9pZApUQU9fU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6Y2xlYW51cCAo
dm9pZCAqKQp7CiAgZGVsZXRlIHRoaXM7CiAgVEFPX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz46
Omluc3RhbmNlX2kgKCkgPSAwOwp9CiMgMTIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1RBT19TaW5nbGV0b24uY3BwIgp0ZW1wbGF0ZSA8Y2xhc3Mg
VFlQRSwgY2xhc3MgQUNFX0xPQ0s+IHZvaWQKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xP
Q0s+OjpkdW1wICh2b2lkKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBUWVBFLCBjbGFzcyBB
Q0VfTE9DSz4gVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComClRBT19UU1NfU2lu
Z2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFuY2VfaSAodm9pZCkKewoKCgogIHN0YXRpYyBU
QU9fVFNTX1NpbmdsZXRvbjxUWVBFLCBBQ0VfTE9DSz4gKnNpbmdsZXRvbl8gPSAwOwoKICByZXR1
cm4gc2luZ2xldG9uXzsKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NL
PiBUWVBFICoKVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjppbnN0YW5jZSAodm9p
ZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCiAgVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+IComc2luZ2xldG9u
ID0KICAgIFRBT19UU1NfU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPjo6aW5zdGFuY2VfaSAoKTsK
CgogIGlmIChzaW5nbGV0b24gPT0gMCkKICAgIHsKICAgICAgaWYgKFRBT19TaW5nbGV0b25fTWFu
YWdlcjo6c3RhcnRpbmdfdXAgKCkgfHwKICAgICAgICAgIFRBT19TaW5nbGV0b25fTWFuYWdlcjo6
c2h1dHRpbmdfZG93biAoKSkKICAgICAgICB7CgoKCgoKCgogICAgICAgICAgZG8geyB0cnkgeyBz
aW5nbGV0b24gPSBuZXcgKFRBT19UU1NfU2luZ2xldG9uPFRZUEUsIEFDRV9MT0NLPik7IH0gY2F0
Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJu
IDA7IH0gfSB3aGlsZSAoMCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKCgoKICAg
ICAgICAgIHN0YXRpYyBBQ0VfTE9DSyAqbG9jayA9IDA7CiAgICAgICAgICBpZiAoQUNFX09iamVj
dF9NYW5hZ2VyOjpnZXRfc2luZ2xldG9uX2xvY2sgKGxvY2spICE9IDApCgogICAgICAgICAgICBy
ZXR1cm4gMDsKCiAgICAgICAgICBBQ0VfR3VhcmQ8IEFDRV9MT0NLID4gYWNlX21vbiAoKmxvY2sp
OyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwoKICAgICAgICAgIGlmIChz
aW5nbGV0b24gPT0gMCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBkbyB7IHRyeSB7IHNp
bmdsZXRvbiA9IG5ldyAoVEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+KTsgfSBjYXRj
aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4g
MDsgfSB9IHdoaWxlICgwKTsKCgoKICAgICAgICAgICAgICBUQU9fU2luZ2xldG9uX01hbmFnZXI6
OmF0X2V4aXQgKHNpbmdsZXRvbik7CgogICAgICAgICAgICB9CgogICAgICAgIH0KICAgIH0KCiAg
cmV0dXJuICgoJnNpbmdsZXRvbi0+aW5zdGFuY2VfKS0+b3BlcmF0b3IgVFlQRSAqICgpKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIFRZUEUsIGNsYXNzIEFDRV9MT0NLPiB2b2lkClRBT19UU1NfU2luZ2xl
dG9uPFRZUEUsIEFDRV9MT0NLPjo6Y2xlYW51cCAodm9pZCAqKQp7CiAgZGVsZXRlIHRoaXM7CiAg
VEFPX1RTU19TaW5nbGV0b248VFlQRSwgQUNFX0xPQ0s+OjppbnN0YW5jZV9pICgpID0gMDsKfQoj
IDEyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9U
QU9fU2luZ2xldG9uLmgiIDIKCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fU2luZ2xldG9uLmgiIDIKIyAyOSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hp
ZXMvU21hcnRfUHJveGllcy5oIiAyCgoKCgoKY2xhc3MgVEFPX1NtYXJ0X1Byb3h5X0Jhc2UKewoK
CgoKCgoKcHVibGljOgogIHZpcnR1YWwgflRBT19TbWFydF9Qcm94eV9CYXNlICh2b2lkKTsKCgpw
cm90ZWN0ZWQ6CiAgVEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKHZvaWQpOwogIFRBT19TbWFydF9Qcm94
eV9CYXNlIChDT1JCQTo6T2JqZWN0X3B0ciBwcm94eSk7CgoKICBDT1JCQTo6T2JqZWN0X3ZhciBi
YXNlX3Byb3h5XzsKCn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1NtYXJ0UHJveGllcy9TbWFydF9Qcm94aWVzLmlubCIgMQoKCgppbmxp
bmUKVEFPX1NtYXJ0X1Byb3h5X0Jhc2U6OlRBT19TbWFydF9Qcm94eV9CYXNlICh2b2lkKQp7Cn0K
CmlubGluZQpUQU9fU21hcnRfUHJveHlfQmFzZTo6VEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKENPUkJB
OjpPYmplY3RfcHRyIHByb3h5KQogIDogYmFzZV9wcm94eV8ocHJveHkpCnsKfQoKaW5saW5lClRB
T19TbWFydF9Qcm94eV9CYXNlOjp+VEFPX1NtYXJ0X1Byb3h5X0Jhc2UgKHZvaWQpCnsKfQojIDU4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NtYXJ0
UHJveGllcy9TbWFydF9Qcm94aWVzLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TbWFydFByb3hpZXMvU21hcnRfUHJveGll
cy5oIiAyCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vVGltZUJhc2VDLmgiIDIKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMuaCIKbmFtZXNwYWNlIFRpbWVCYXNlCnsKICB0
eXBlZGVmIENPUkJBOjpVTG9uZ0xvbmcgVGltZVQ7CiAgdHlwZWRlZiBDT1JCQTo6VUxvbmdMb25n
X291dCBUaW1lVF9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGltZVQ7
CgogIHR5cGVkZWYgVGltZVQgSW5hY2N1cmFjeVQ7CiAgdHlwZWRlZiBUaW1lVF9vdXQgSW5hY2N1
cmFjeVRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0luYWNjdXJhY3lU
OwoKICB0eXBlZGVmIENPUkJBOjpTaG9ydCBUZGZUOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291
dCBUZGZUX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19UZGZUOwoKICBz
dHJ1Y3QgVXRjVDsKICBjbGFzcyBVdGNUX3ZhcjsKCiAgc3RydWN0IFV0Y1QKICB7CgoKICAgIHR5
cGVkZWYgVXRjVF92YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0
cnVjdG9yICh2b2lkKik7CgogICAgVGltZUJhc2U6OlRpbWVUIHRpbWU7CiAgICBDT1JCQTo6VUxv
bmcgaW5hY2NsbzsKICAgIENPUkJBOjpVU2hvcnQgaW5hY2NoaTsKICAgIFRpbWVCYXNlOjpUZGZU
IHRkZjsKICB9OwoKICBjbGFzcyBVdGNUX3ZhcgogIHsKICBwdWJsaWM6CiAgICBVdGNUX3ZhciAo
dm9pZCk7CiAgICBVdGNUX3ZhciAoVXRjVCAqKTsKICAgIFV0Y1RfdmFyIChjb25zdCBVdGNUX3Zh
ciAmKTsKICAgIFV0Y1RfdmFyIChjb25zdCBVdGNUICYpOwogICAgflV0Y1RfdmFyICh2b2lkKTsK
CiAgICBVdGNUX3ZhciAmb3BlcmF0b3I9IChVdGNUICopOwogICAgVXRjVF92YXIgJm9wZXJhdG9y
PSAoY29uc3QgVXRjVF92YXIgJik7CiAgICBVdGNUX3ZhciAmb3BlcmF0b3I9IChjb25zdCBVdGNU
ICYpOwogICAgVXRjVCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBVdGNUICpvcGVyYXRv
ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBVdGNUICYoKSBjb25zdDsKICAg
IG9wZXJhdG9yIFV0Y1QgJigpOwogICAgb3BlcmF0b3IgVXRjVCAmKCkgY29uc3Q7CgoKICAgIGNv
bnN0IFV0Y1QgJmluICh2b2lkKSBjb25zdDsKICAgIFV0Y1QgJmlub3V0ICh2b2lkKTsKICAgIFV0
Y1QgJm91dCAodm9pZCk7CiAgICBVdGNUIF9yZXRuICh2b2lkKTsKICAgIFV0Y1QgKnB0ciAodm9p
ZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBVdGNUICpwdHJfOwogIH07CgogIHR5cGVkZWYgVXRj
VCAmVXRjVF9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19VdGNUOwoKICBz
dHJ1Y3QgSW50ZXJ2YWxUOwogIGNsYXNzIEludGVydmFsVF92YXI7CgogIHN0cnVjdCBJbnRlcnZh
bFQKICB7CgoKICAgIHR5cGVkZWYgSW50ZXJ2YWxUX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRp
YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBUaW1lQmFzZTo6VGltZVQg
bG93ZXJfYm91bmQ7CiAgICBUaW1lQmFzZTo6VGltZVQgdXBwZXJfYm91bmQ7CiAgfTsKCiAgY2xh
c3MgSW50ZXJ2YWxUX3ZhcgogIHsKICBwdWJsaWM6CiAgICBJbnRlcnZhbFRfdmFyICh2b2lkKTsK
ICAgIEludGVydmFsVF92YXIgKEludGVydmFsVCAqKTsKICAgIEludGVydmFsVF92YXIgKGNvbnN0
IEludGVydmFsVF92YXIgJik7CiAgICBJbnRlcnZhbFRfdmFyIChjb25zdCBJbnRlcnZhbFQgJik7
CiAgICB+SW50ZXJ2YWxUX3ZhciAodm9pZCk7CgogICAgSW50ZXJ2YWxUX3ZhciAmb3BlcmF0b3I9
IChJbnRlcnZhbFQgKik7CiAgICBJbnRlcnZhbFRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEludGVy
dmFsVF92YXIgJik7CiAgICBJbnRlcnZhbFRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEludGVydmFs
VCAmKTsKICAgIEludGVydmFsVCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBJbnRlcnZh
bFQgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEludGVydmFs
VCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBJbnRlcnZhbFQgJigpOwogICAgb3BlcmF0b3IgSW50
ZXJ2YWxUICYoKSBjb25zdDsKCgogICAgY29uc3QgSW50ZXJ2YWxUICZpbiAodm9pZCkgY29uc3Q7
CiAgICBJbnRlcnZhbFQgJmlub3V0ICh2b2lkKTsKICAgIEludGVydmFsVCAmb3V0ICh2b2lkKTsK
ICAgIEludGVydmFsVCBfcmV0biAodm9pZCk7CiAgICBJbnRlcnZhbFQgKnB0ciAodm9pZCkgY29u
c3Q7CgogIHByaXZhdGU6CiAgICBJbnRlcnZhbFQgKnB0cl87CiAgfTsKCiAgdHlwZWRlZiBJbnRl
cnZhbFQgJkludGVydmFsVF9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19J
bnRlcnZhbFQ7CgoKfQoKCgoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55
ICYsIGNvbnN0IFRpbWVCYXNlOjpVdGNUICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g
KENPUkJBOjpBbnkgJiwgVGltZUJhc2U6OlV0Y1QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBUaW1lQmFzZTo6VXRjVCAqJik7CiAg
ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg
Y29uc3QgVGltZUJhc2U6OlV0Y1QgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENP
UkJBOjpBbnkgJiwgY29uc3QgVGltZUJhc2U6OkludGVydmFsVCAmKTsKICAgICAgICAgICB2b2lk
IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFRpbWVCYXNlOjpJbnRlcnZhbFQqKTsKICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBUaW1l
QmFzZTo6SW50ZXJ2YWxUIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBUaW1lQmFzZTo6SW50ZXJ2YWxUIComKTsKIyAy
MDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGlt
ZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9UaW1lQmFzZUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlQy5pIgppbmxpbmUKVGltZUJhc2U6OlV0Y1Rf
dmFyOjpVdGNUX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKVGltZUJhc2U6OlV0
Y1RfdmFyOjpVdGNUX3ZhciAoVXRjVCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVGltZUJh
c2U6OlV0Y1RfdmFyOjpVdGNUX3ZhciAoY29uc3QgOjpUaW1lQmFzZTo6VXRjVF92YXIgJnApCnsK
ICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6
OlV0Y1QgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5w
dHJfID0gMDsKfQoKCmlubGluZQpUaW1lQmFzZTo6VXRjVF92YXI6OlV0Y1RfdmFyIChjb25zdCA6
OlRpbWVCYXNlOjpVdGNUICZwKQp7CiAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGlt
ZUJhc2U6OlV0Y1QgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKfQoKaW5saW5lClRpbWVCYXNl
OjpVdGNUX3Zhcjo6flV0Y1RfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSBUaW1lQmFzZTo6VXRjVF92YXIgJgpUaW1lQmFzZTo6VXRjVF92YXI6Om9wZXJhdG9yPSAo
VXRjVCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIDo6VGltZUJhc2U6OlV0Y1RfdmFyICYKVGltZUJhc2U6OlV0Y1Rf
dmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6VGltZUJhc2U6OlV0Y1RfdmFyICZwKQp7CiAgaWYgKHRo
aXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAg
ICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFV0Y1QgKmRlZXBfY29weSA9CiAgICAgICAg
ICAgIG5ldyBVdGNUICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBVdGNUICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg
ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g
dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBUaW1lQmFzZTo6VXRjVF92YXIg
JgpUaW1lQmFzZTo6VXRjVF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpUaW1lQmFzZTo6VXRjVCAm
cCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwog
ICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6OlV0Y1QgKHApOyB9IGNh
dGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVy
biAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29u
c3QgOjpUaW1lQmFzZTo6VXRjVCAqClRpbWVCYXNlOjpVdGNUX3Zhcjo6b3BlcmF0b3ItPiAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6VXRj
VCAqClRpbWVCYXNlOjpVdGNUX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlz
LT5wdHJfOwp9CgppbmxpbmUKVGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciBjb25zdCA6OlRp
bWVCYXNlOjpVdGNUICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK
VGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciA6OlRpbWVCYXNlOjpVdGNUICYoKQp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKVGltZUJhc2U6OlV0Y1RfdmFyOjpvcGVyYXRvciA6
OlRpbWVCYXNlOjpVdGNUICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgY29uc3QgOjpUaW1lQmFzZTo6VXRjVCAmClRpbWVCYXNlOjpVdGNUX3Zhcjo6aW4gKHZvaWQp
IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNU
ICYKVGltZUJhc2U6OlV0Y1RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRy
XzsKfQoKCmlubGluZSA6OlRpbWVCYXNlOjpVdGNUICYKVGltZUJhc2U6OlV0Y1RfdmFyOjpvdXQg
KHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNU
ClRpbWVCYXNlOjpVdGNUX3Zhcjo6X3JldG4gKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87
Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpVdGNUICoKVGltZUJhc2U6OlV0Y1RfdmFyOjpwdHIgKHZv
aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpUaW1lQmFzZTo6
SW50ZXJ2YWxUX3Zhcjo6SW50ZXJ2YWxUX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp
bmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6OkludGVydmFsVF92YXIgKEludGVydmFsVCAqcCkK
ICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6OkludGVydmFs
VF92YXIgKGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVF92YXIgJnApCnsKICBpZiAocC5wdHJf
KQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6VGltZUJhc2U6OkludGVydmFsVCAo
KnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAo
KSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAw
Owp9CgoKaW5saW5lClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpJbnRlcnZhbFRfdmFyIChjb25z
dCA6OlRpbWVCYXNlOjpJbnRlcnZhbFQgJnApCnsKICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBu
ZXcgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsg
KCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cn0KCmlu
bGluZQpUaW1lQmFzZTo6SW50ZXJ2YWxUX3Zhcjo6fkludGVydmFsVF92YXIgKHZvaWQpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyICYKVGlt
ZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yPSAoSW50ZXJ2YWxUICpwKQp7CiAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
OjpUaW1lQmFzZTo6SW50ZXJ2YWxUX3ZhciAmClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVy
YXRvcj0gKGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVF92YXIgJnApCnsKICBpZiAodGhpcyAh
PSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRl
bGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgSW50ZXJ2YWxUICpkZWVwX2NvcHkgPQogICAgICAg
ICAgICBuZXcgSW50ZXJ2YWxUICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBJbnRlcnZhbFQgKnRtcCA9IGRlZXBfY29w
eTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRo
aXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFRpbWVCYXNl
OjpJbnRlcnZhbFRfdmFyICYKVGltZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yPSAoY29u
c3QgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAg
ewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcg
OjpUaW1lQmFzZTo6SW50ZXJ2YWxUIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAg
fQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6VGltZUJhc2U6OkludGVydmFsVCAq
ClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpJbnRlcnZhbFQgKgpUaW1lQmFz
ZTo6SW50ZXJ2YWxUX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUKVGltZUJhc2U6OkludGVydmFsVF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6VGlt
ZUJhc2U6OkludGVydmFsVCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s
aW5lClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvcGVyYXRvciA6OlRpbWVCYXNlOjpJbnRlcnZh
bFQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpUaW1lQmFzZTo6SW50ZXJ2
YWxUX3Zhcjo6b3BlcmF0b3IgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYoKSBjb25zdAp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYK
VGltZUJhc2U6OkludGVydmFsVF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlz
LT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICYKVGltZUJhc2U6OkludGVy
dmFsVF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l
IDo6VGltZUJhc2U6OkludGVydmFsVCAmClRpbWVCYXNlOjpJbnRlcnZhbFRfdmFyOjpvdXQgKHZv
aWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlRpbWVCYXNlOjpJbnRlcnZh
bFQKVGltZUJhc2U6OkludGVydmFsVF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgcmV0dXJuICp0aGlz
LT5wdHJfOwp9CgppbmxpbmUgOjpUaW1lQmFzZTo6SW50ZXJ2YWxUICoKVGltZUJhc2U6OkludGVy
dmFsVF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3Qg
VGltZUJhc2U6OlV0Y1QgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rh
b19hZ2dyZWdhdGUudGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmluYWNjbG8p
ICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5pbmFjY2hpKSAmJgogICAgKHN0cm0gPDwg
X3Rhb19hZ2dyZWdhdGUudGRmKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAw
OwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3Ry
bSwgVGltZUJhc2U6OlV0Y1QgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4g
X3Rhb19hZ2dyZWdhdGUudGltZSkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLmluYWNj
bG8pICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5pbmFjY2hpKSAmJgogICAgKHN0cm0g
Pj4gX3Rhb19hZ2dyZWdhdGUudGRmKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVy
biAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIg
JnN0cm0sIGNvbnN0IFRpbWVCYXNlOjpJbnRlcnZhbFQgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYg
KAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubG93ZXJfYm91bmQpICYmCiAgICAoc3RybSA8
PCBfdGFvX2FnZ3JlZ2F0ZS51cHBlcl9ib3VuZCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5w
dXRDRFIgJnN0cm0sIFRpbWVCYXNlOjpJbnRlcnZhbFQgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYg
KAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUubG93ZXJfYm91bmQpICYmCiAgICAoc3RybSA+
PiBfdGFvX2FnZ3JlZ2F0ZS51cHBlcl9ib3VuZCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKCn0KIyAyMDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDIKIyAyMTMgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIxNCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZUMu
aCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1RpbWVCYXNlUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5oIiAxCiMgMjUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK
IyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9U
aW1lQmFzZVNfVC5oIiAyCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlU19ULmkiIDEKIyAzNiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5o
IiAyCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vVGltZUJhc2VTX1QuY3BwIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuY3BwIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTX1QuaCIgMQoj
IDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Rp
bWVCYXNlU19ULmNwcCIgMgojIDQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1RpbWVCYXNlU19ULmgiIDIKIyA1MiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1MyAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFz
ZVNfVC5oIiAyCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vVGltZUJhc2VTLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VTLmkiIDEKIyAzNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UaW1lQmFzZVMuaCIgMgoKCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIg
MQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L1RpbWVCYXNlUy5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVC
YXNlQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VD
LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL2NvcmJhLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9jb3JiYS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAyOSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAy
CgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL2NvcmJhZndkLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UeXBlY29kZS5oIiAxCiMgMzkgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55Lmgi
IDEKIyA0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9jb3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMQojIDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5oIiAxCiMgNDMg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEu
aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL05WTGlzdC5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDEKIyAyMCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9OVkxpc3Qu
aCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAxCiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxNyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAy
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9Ob2Rl
LmgiIDEKIyAxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L1VuYm91bmRlZF9RdWV1ZS5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL09TX01lbW9yeS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIgMgoKY2xh
c3MgQUNFX0FsbG9jYXRvcjsKCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBBQ0VfVW5ib3VuZGVk
X1F1ZXVlOwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1
ZV9JdGVyYXRvcgp7CnB1YmxpYzoKCiAgQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvciAoQUNF
X1VuYm91bmRlZF9RdWV1ZTxUPiAmcSwgaW50IGVuZCA9IDApOwoKCgoKCiAgaW50IG5leHQgKFQg
KiZuZXh0X2l0ZW0pOwoKCgogIGludCBhZHZhbmNlICh2b2lkKTsKCgoKICBpbnQgZmlyc3QgKHZv
aWQpOwoKCiAgaW50IGRvbmUgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25z
dDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIEFDRV9Ob2RlPFQ+ICpjdXJyZW50
XzsKCgogIEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnF1ZXVlXzsKfTsKIyA4MyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1ZQp7CnB1YmxpYzoKICBm
cmllbmQgY2xhc3MgQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjsKCgogIHR5cGVkZWYg
QUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPiBJVEVSQVRPUjsKCgoKCiAgQUNFX1VuYm91
bmRlZF9RdWV1ZSAoQUNFX0FsbG9jYXRvciAqYWxsb2MgPSAwKTsKCgogIEFDRV9VbmJvdW5kZWRf
UXVldWUgKGNvbnN0IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJik7CgoKICB2b2lkIG9wZXJhdG9y
PSAoY29uc3QgQUNFX1VuYm91bmRlZF9RdWV1ZTxUPiAmKTsKCgogIH5BQ0VfVW5ib3VuZGVkX1F1
ZXVlICh2b2lkKTsKCgoKCiAgaW50IGlzX2VtcHR5ICh2b2lkKSBjb25zdDsKCgogIGludCBpc19m
dWxsICh2b2lkKSBjb25zdDsKCgoKCgogIGludCBlbnF1ZXVlX3RhaWwgKGNvbnN0IFQgJm5ld19p
dGVtKTsKCgoKICBpbnQgZW5xdWV1ZV9oZWFkIChjb25zdCBUICZuZXdfaXRlbSk7CgoKCiAgaW50
IGRlcXVldWVfaGVhZCAoVCAmaXRlbSk7CgoKCgoKICB2b2lkIHJlc2V0ICh2b2lkKTsKCgoKICBp
bnQgZ2V0IChUIComaXRlbSwgc2l6ZV90IHNsb3QgPSAwKSBjb25zdDsKCgoKCgoKCiAgaW50IHNl
dCAoY29uc3QgVCAmaXRlbSwgc2l6ZV90IHNsb3QpOwoKCiAgc2l6ZV90IHNpemUgKHZvaWQpIGNv
bnN0OwoKCiAgdm9pZCBkdW1wICh2b2lkKSBjb25zdDsKCgogIEFDRV9VbmJvdW5kZWRfUXVldWVf
SXRlcmF0b3I8VD4gYmVnaW4gKHZvaWQpOwogIEFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8
VD4gZW5kICh2b2lkKTsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByb3RlY3RlZDoKCiAgdm9pZCBk
ZWxldGVfbm9kZXMgKHZvaWQpOwoKCiAgdm9pZCBjb3B5X25vZGVzIChjb25zdCBBQ0VfVW5ib3Vu
ZGVkX1F1ZXVlPFQ+ICYpOwoKCiAgQUNFX05vZGU8VD4gKmhlYWRfOwoKCiAgc2l6ZV90IGN1cl9z
aXplXzsKCgogIEFDRV9BbGxvY2F0b3IgKmFsbG9jYXRvcl87Cn07CgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1F1ZXVlLmlubCIg
MQoKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgc2l6ZV90CkFDRV9VbmJvdW5kZWRfUXVldWU8
VD46OnNpemUgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y3VyX3NpemVfOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Ojppc19lbXB0
eSAodm9pZCkgY29uc3QKewoKICByZXR1cm4gdGhpcy0+aGVhZF8gPT0gdGhpcy0+aGVhZF8tPm5l
eHRfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIGludApBQ0VfVW5ib3VuZGVkX1F1ZXVl
PFQ+Ojppc19mdWxsICh2b2lkKSBjb25zdAp7CgogIHJldHVybiAwOwp9CiMgMTc4ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvVW5ib3VuZGVkX1F1ZXVlLmgi
IDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
VW5ib3VuZGVkX1F1ZXVlLmNwcCIgMQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5oIiAxCiMgNyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAi
IDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvTWFs
bG9jX0Jhc2UuaCIgMQojIDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL0xvZ19Nc2cuaCIgMQojIDkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiAyCiMg
MTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5k
ZWRfUXVldWUuY3BwIgppbmxpbmUgY29uc3QgY2hhciogZ2V0X3Jjc2lkX2FjZV9VbmJvdW5kZWRf
UXVldWUgKGNvbnN0IGNoYXIqKSB7IHJldHVybiAiVW5ib3VuZGVkX1F1ZXVlLmNwcCx2IDQuMSAy
MDAxLzAzLzI2IDIxOjE4OjUxIGNvcnlhbiBFeHAiIDsgfSBzdGF0aWMgY29uc3QgY2hhciogcmNz
aWRfYWNlX1VuYm91bmRlZF9RdWV1ZSA9IGdldF9yY3NpZF9hY2VfVW5ib3VuZGVkX1F1ZXVlICgg
cmNzaWRfYWNlX1VuYm91bmRlZF9RdWV1ZSApIDsKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CkFDRV9V
bmJvdW5kZWRfUXVldWU8VD46OkFDRV9VbmJvdW5kZWRfUXVldWUgKEFDRV9BbGxvY2F0b3IgKmFs
bG9jKQogIDogaGVhZF8gKDApLAogICAgY3VyX3NpemVfICgwKSwKICAgIGFsbG9jYXRvcl8gKGFs
bG9jKQp7CgoKICBpZiAodGhpcy0+YWxsb2NhdG9yXyA9PSAwKQogICAgdGhpcy0+YWxsb2NhdG9y
XyA9IEFDRV9BbGxvY2F0b3I6Omluc3RhbmNlICgpOwoKICBkbyB7IHRoaXMtPmhlYWRfID0gKEFD
RV9Ob2RlPFQ+ICopIHRoaXMtPmFsbG9jYXRvcl8tPm1hbGxvYyAoc2l6ZW9mIChBQ0VfTm9kZTxU
PikpOyBpZiAodGhpcy0+aGVhZF8gPT0gMCkgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7
IHJldHVybjt9IGVsc2UgeyBuZXcgKHRoaXMtPmhlYWRfKSBBQ0VfTm9kZTxUPjsgfSB9IHdoaWxl
ICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+bmV4dF8gPSB0aGlzLT5oZWFkXzsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQ+CkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OkFDRV9VbmJvdW5kZWRfUXVldWUgKGNv
bnN0IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnVzKQogIDogaGVhZF8gKDApLAogICAgY3VyX3Np
emVfICgwKSwKICAgIGFsbG9jYXRvcl8gKHVzLmFsbG9jYXRvcl8pCnsKCgogIGlmICh0aGlzLT5h
bGxvY2F0b3JfID09IDApCiAgICB0aGlzLT5hbGxvY2F0b3JfID0gQUNFX0FsbG9jYXRvcjo6aW5z
dGFuY2UgKCk7CgogIGRvIHsgdGhpcy0+aGVhZF8gPSAoQUNFX05vZGU8VD4gKikgdGhpcy0+YWxs
b2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9Ob2RlPFQ+KSk7IGlmICh0aGlzLT5oZWFkXyA9
PSAwKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuO30gZWxzZSB7IG5ldyAo
dGhpcy0+aGVhZF8pIEFDRV9Ob2RlPFQ+OyB9IH0gd2hpbGUgKDApOwoKCiAgdGhpcy0+aGVhZF8t
Pm5leHRfID0gdGhpcy0+aGVhZF87CiAgdGhpcy0+Y29weV9ub2RlcyAodXMpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpvcGVyYXRvcj0gKGNvbnN0
IEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnVzKQp7CgoKICBpZiAodGhpcyAhPSAmdXMpCiAgICB7
CiAgICAgIHRoaXMtPmRlbGV0ZV9ub2RlcyAoKTsKICAgICAgdGhpcy0+Y29weV9ub2RlcyAodXMp
OwogICAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRv
cjxUPgpBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpiZWdpbiAodm9pZCkKewoKICByZXR1cm4gQUNF
X1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPiAoKnRoaXMpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPgpBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+
OjplbmQgKHZvaWQpCnsKCiAgcmV0dXJuIEFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8VD4g
KCp0aGlzLCAxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9RdWV1
ZTxUPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf
T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z
dGFuY2UgKCk7IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCA4OSwgMCwgX19h
Y2VfZXJyb3IpOyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbj09PT1cbiglUHwldHwleCkiLCB0
aGlzKTsgfSB3aGlsZSAoMCk7CiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3Rf
ZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7
IGFjZV9fXy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCA5MCwgMCwgX19hY2VfZXJyb3Ip
OyBhY2VfX18tPmxvZyAoTE1fREVCVUcsICJcbmhlYWRfID0gJXUiLCB0aGlzLT5oZWFkXyk7IH0g
d2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp
OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t
PmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgOTEsIDAsIF9fYWNlX2Vycm9yKTsgYWNlX19f
LT5sb2cgKExNX0RFQlVHLCAiXG5oZWFkXy0+bmV4dF8gPSAldSIsIHRoaXMtPmhlYWRfLT5uZXh0
Xyk7IH0gd2hpbGUgKDApOwogIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vy
cm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBh
Y2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgOTIsIDAsIF9fYWNlX2Vycm9yKTsg
YWNlX19fLT5sb2cgKExNX0RFQlVHLCAiXG5jdXJfc2l6ZV8gPSAlZFxuIiwgdGhpcy0+Y3VyX3Np
emVfKTsgfSB3aGlsZSAoMCk7CgogIFQgKml0ZW0gPSAwOwoKICBzaXplX3QgY291bnQgPSAxOwoK
CiAgZm9yIChBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9yPFQ+IGl0ZXIgKCooQUNFX1VuYm91
bmRlZF9RdWV1ZTxUPiAqKSB0aGlzKTsKICAgICAgIGl0ZXIubmV4dCAoaXRlbSkgIT0gMDsKICAg
ICAgIGl0ZXIuYWR2YW5jZSAoKSkKICAgIGRvIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps
YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl
ICgpOyBhY2VfX18tPmNvbmRpdGlvbmFsX3NldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuY3BwIiwgMTAyLCAwLCBfX2FjZV9l
cnJvcik7IGFjZV9fXy0+bG9nIChMTV9ERUJVRywgImNvdW50ID0gJWRcbiIsIGNvdW50KyspOyB9
IHdoaWxlICgwKTsKCiAgZG8geyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3Ig
KCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9f
Xy0+Y29uZGl0aW9uYWxfc2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL1VuYm91bmRlZF9RdWV1ZS5jcHAiLCAxMDQsIDAsIF9fYWNlX2Vycm9yKTsgYWNl
X19fLT5sb2cgKExNX0RFQlVHLCAiPT09PVxuIik7IH0gd2hpbGUgKDApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gdm9pZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+Ojpjb3B5X25vZGVzIChjb25zdCBB
Q0VfVW5ib3VuZGVkX1F1ZXVlPFQ+ICZ1cykKewogIGZvciAoQUNFX05vZGU8VD4gKmN1cnIgPSB1
cy5oZWFkXy0+bmV4dF87CiAgICAgICBjdXJyICE9IHVzLmhlYWRfOwogICAgICAgY3VyciA9IGN1
cnItPm5leHRfKQogICAgaWYgKHRoaXMtPmVucXVldWVfdGFpbCAoY3Vyci0+aXRlbV8pID09IC0x
KQoKICAgICAgdGhpcy0+ZGVsZXRlX25vZGVzICgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gdm9p
ZApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpkZWxldGVfbm9kZXMgKHZvaWQpCnsKICBmb3IgKEFD
RV9Ob2RlPFQ+ICpjdXJyID0gdGhpcy0+aGVhZF8tPm5leHRfOwoKICAgICAgIGN1cnIgIT0gdGhp
cy0+aGVhZF87CiAgICAgICApCiAgICB7CiAgICAgIEFDRV9Ob2RlPFQ+ICp0ZW1wID0gY3VycjsK
ICAgICAgY3VyciA9IGN1cnItPm5leHRfOwoKICAgICAgZG8geyBpZiAodGVtcCkgeyAodGVtcCkt
Pn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxsb2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3aGlsZSAo
MCk7CgoKCiAgICAgIHRoaXMtPmN1cl9zaXplXy0tOwoKCgogICAgfQoKCiAgdGhpcy0+aGVhZF8t
Pm5leHRfID0gdGhpcy0+aGVhZF87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpBQ0VfVW5ib3VuZGVk
X1F1ZXVlPFQ+Ojp+QUNFX1VuYm91bmRlZF9RdWV1ZSAodm9pZCkKewoKCiAgdGhpcy0+ZGVsZXRl
X25vZGVzICgpOwogIGRvIHsgaWYgKGhlYWRfKSB7IChoZWFkXyktPn5BQ0VfTm9kZSAoKTsgdGhp
cy0+YWxsb2NhdG9yXy0+ZnJlZSAoaGVhZF8pOyB9IH0gd2hpbGUgKDApOwoKCgogIHRoaXMtPmhl
YWRfID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+
OjplbnF1ZXVlX2hlYWQgKGNvbnN0IFQgJm5ld19pdGVtKQp7CgoKICBBQ0VfTm9kZTxUPiAqdGVt
cDsKCgogIGRvIHsgdGVtcCA9IChBQ0VfTm9kZTxUPiAqKSB0aGlzLT5hbGxvY2F0b3JfLT5tYWxs
b2MgKHNpemVvZiAoQUNFX05vZGU8VD4pKTsgaWYgKHRlbXAgPT0gMCkgeyAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID0gMTI7IHJldHVybiAtMTt9IGVsc2UgeyBuZXcgKHRlbXApIEFDRV9Ob2RlPFQ+
IChuZXdfaXRlbSwgdGhpcy0+aGVhZF8tPm5leHRfKTsgfSB9IHdoaWxlICgwKTsKCgoKCgoKICB0
aGlzLT5oZWFkXy0+bmV4dF8gPSB0ZW1wOwoKICB0aGlzLT5jdXJfc2l6ZV8rKzsKICByZXR1cm4g
MDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjplbnF1
ZXVlX3RhaWwgKGNvbnN0IFQgJm5ld19pdGVtKQp7CgoKICBBQ0VfTm9kZTxUPiAqdGVtcDsKCgoK
CiAgdGhpcy0+aGVhZF8tPml0ZW1fID0gbmV3X2l0ZW07CgoKICBkbyB7IHRlbXAgPSAoQUNFX05v
ZGU8VD4gKikgdGhpcy0+YWxsb2NhdG9yXy0+bWFsbG9jIChzaXplb2YgKEFDRV9Ob2RlPFQ+KSk7
IGlmICh0ZW1wID09IDApIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gLTE7
fSBlbHNlIHsgbmV3ICh0ZW1wKSBBQ0VfTm9kZTxUPiAodGhpcy0+aGVhZF8tPm5leHRfKTsgfSB9
IHdoaWxlICgwKTsKCgoKICB0aGlzLT5oZWFkXy0+bmV4dF8gPSB0ZW1wOwoKCiAgdGhpcy0+aGVh
ZF8gPSB0ZW1wOwoKICB0aGlzLT5jdXJfc2l6ZV8rKzsKICByZXR1cm4gMDsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlPFQ+OjpkZXF1ZXVlX2hlYWQgKFQgJml0
ZW0pCnsKCgoKICBpZiAodGhpcy0+aXNfZW1wdHkgKCkpCiAgICByZXR1cm4gLTE7CgogIEFDRV9O
b2RlPFQ+ICp0ZW1wID0gdGhpcy0+aGVhZF8tPm5leHRfOwoKICBpdGVtID0gdGVtcC0+aXRlbV87
CiAgdGhpcy0+aGVhZF8tPm5leHRfID0gdGVtcC0+bmV4dF87CiAgZG8geyBpZiAodGVtcCkgeyAo
dGVtcCktPn5BQ0VfTm9kZSAoKTsgdGhpcy0+YWxsb2NhdG9yXy0+ZnJlZSAodGVtcCk7IH0gfSB3
aGlsZSAoMCk7CgoKCiAgLS10aGlzLT5jdXJfc2l6ZV87CiAgcmV0dXJuIDA7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBUPiB2b2lkCkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OnJlc2V0ICh2b2lkKQp7CiAg
ICAgICAgICAgICAgICAgICAgIDsKCiAgdGhpcy0+ZGVsZXRlX25vZGVzICgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW50CkFDRV9VbmJvdW5kZWRfUXVldWU8VD46OmdldCAoVCAqJml0ZW0sIHNp
emVfdCBzbG90KSBjb25zdAp7CgoKICBBQ0VfTm9kZTxUPiAqY3VyciA9IHRoaXMtPmhlYWRfLT5u
ZXh0XzsKCiAgc2l6ZV90IGk7CgogIGZvciAoaSA9IDA7IGkgPCB0aGlzLT5jdXJfc2l6ZV87IGkr
KykKICAgIHsKICAgICAgaWYgKGkgPT0gc2xvdCkKICAgICAgICBicmVhazsKCiAgICAgIGN1cnIg
PSBjdXJyLT5uZXh0XzsKICAgIH0KCiAgaWYgKGkgPCB0aGlzLT5jdXJfc2l6ZV8pCiAgICB7CiAg
ICAgIGl0ZW0gPSAmY3Vyci0+aXRlbV87CiAgICAgIHJldHVybiAwOwogICAgfQogIGVsc2UKICAg
IHJldHVybiAtMTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVl
PFQ+OjpzZXQgKGNvbnN0IFQgJml0ZW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IHNsb3QpCnsKCgogIEFDRV9Ob2RlPFQ+ICpjdXJyID0gdGhpcy0+aGVhZF8tPm5leHRfOwoK
ICBzaXplX3QgaTsKCiAgZm9yIChpID0gMDsKICAgICAgIGkgPCBzbG90ICYmIGkgPCB0aGlzLT5j
dXJfc2l6ZV87CiAgICAgICBpKyspCiAgICBjdXJyID0gY3Vyci0+bmV4dF87CgogIGlmIChpIDwg
dGhpcy0+Y3VyX3NpemVfKQogICAgewoKICAgICAgY3Vyci0+aXRlbV8gPSBpdGVtOwogICAgICBy
ZXR1cm4gMDsKICAgIH0KICBlbHNlCiAgICB7CgoKCgogICAgICBpZiAoaSA9PSBzbG90KQogICAg
ICAgIHsKCiAgICAgICAgICBpZiAodGhpcy0+ZW5xdWV1ZV90YWlsIChpdGVtKSA9PSAtMSkKICAg
ICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUIGR1bW15OwoKCiAgICAg
ICAgICBmb3IgKDsgaSA8IHNsb3Q7IGkrKykKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAg
IGN1cnIgPSB0aGlzLT5oZWFkXzsKCgoKICAgICAgICAgICAgICBpZiAodGhpcy0+ZW5xdWV1ZV90
YWlsIChkdW1teSkgPT0gLTEpCiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAg
IH0KCiAgICAgICAgICBjdXJyLT5pdGVtXyA9IGl0ZW07CiAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICB9CiAgICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IHZvaWQKQUNFX1VuYm91bmRlZF9R
dWV1ZV9JdGVyYXRvcjxUPjo6ZHVtcCAodm9pZCkgY29uc3QKewoKfQoKdGVtcGxhdGUgPGNsYXNz
IFQ+CkFDRV9VbmJvdW5kZWRfUXVldWVfSXRlcmF0b3I8VD46OkFDRV9VbmJvdW5kZWRfUXVldWVf
SXRlcmF0b3IgKEFDRV9VbmJvdW5kZWRfUXVldWU8VD4gJnEsIGludCBlbmQpCiAgOiBjdXJyZW50
XyAoZW5kID09IDAgPyBxLmhlYWRfLT5uZXh0XyA6IHEuaGVhZF8gKSwKICAgIHF1ZXVlXyAocSkK
ewoKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJhdG9y
PFQ+OjphZHZhbmNlICh2b2lkKQp7CgogIHRoaXMtPmN1cnJlbnRfID0gdGhpcy0+Y3VycmVudF8t
Pm5leHRfOwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5xdWV1ZV8uaGVhZF87Cn0K
CnRlbXBsYXRlIDxjbGFzcyBUPiBpbnQKQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjo6
Zmlyc3QgKHZvaWQpCnsKCiAgdGhpcy0+Y3VycmVudF8gPSB0aGlzLT5xdWV1ZV8uaGVhZF8tPm5l
eHRfOwogIHJldHVybiB0aGlzLT5jdXJyZW50XyAhPSB0aGlzLT5xdWV1ZV8uaGVhZF87Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUPiBpbnQKQUNFX1VuYm91bmRlZF9RdWV1ZV9JdGVyYXRvcjxUPjo6ZG9u
ZSAodm9pZCkgY29uc3QKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIHRoaXMtPmN1cnJlbnRfID09IHRoaXMtPnF1ZXVlXy5o
ZWFkXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGludApBQ0VfVW5ib3VuZGVkX1F1ZXVlX0l0ZXJh
dG9yPFQ+OjpuZXh0IChUIComaXRlbSkKewoKICBpZiAodGhpcy0+Y3VycmVudF8gPT0gdGhpcy0+
cXVldWVfLmhlYWRfKQogICAgcmV0dXJuIDA7CiAgZWxzZQogICAgewogICAgICBpdGVtID0gJnRo
aXMtPmN1cnJlbnRfLT5pdGVtXzsKICAgICAgcmV0dXJuIDE7CiAgICB9Cn0KIyAxODIgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUu
aCIgMgoKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wb3N0LmgiIDEKIyAxODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9VbmJvdW5kZWRfUXVldWUuaCIgMgojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BbnkuaCIgMQojIDI3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5o
IiAyCgpjbGFzcyBUQU9fSW5wdXRDRFI7CiMgNDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05hbWVkVmFsdWUK
ewpwdWJsaWM6CgogIGNvbnN0IGNoYXIgKm5hbWUgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OkFu
eV9wdHIgdmFsdWUgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OkZsYWdzIGZsYWdzICh2b2lkKSBj
b25zdDsKCgogIH5DT1JCQV9OYW1lZFZhbHVlICh2b2lkKTsKCgogIHN0YXRpYyBDT1JCQV9OYW1l
ZFZhbHVlKiBfZHVwbGljYXRlIChDT1JCQV9OYW1lZFZhbHVlKik7CiAgc3RhdGljIENPUkJBX05h
bWVkVmFsdWUqIF9uaWwgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9p
ZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CgoKCiAgdHlwZWRlZiBDT1JC
QV9OYW1lZFZhbHVlX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9OYW1lZFZhbHVlX3Zh
ciBfdmFyX3R5cGU7CgoKcHJpdmF0ZToKCiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgogIEFD
RV9NVF9TWU5DSDo6TVVURVggcmVmY291bnRfbG9ja187CgoKICBDT1JCQTo6QW55IGFueV87CgoK
ICBDT1JCQTo6RmxhZ3MgZmxhZ3NfOwoKCiAgY2hhciAqbmFtZV87CgoKCiAgQ09SQkFfTmFtZWRW
YWx1ZSAodm9pZCk7CgogIGZyaWVuZCBjbGFzcyBDT1JCQV9PUkI7CiAgZnJpZW5kIGNsYXNzIENP
UkJBX05WTGlzdDsKICBmcmllbmQgY2xhc3MgQ09SQkFfUmVxdWVzdDsKfTsKIyAxMDcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiCmNs
YXNzIENPUkJBX05hbWVkVmFsdWVfdmFyCnsKcHVibGljOgogIENPUkJBX05hbWVkVmFsdWVfdmFy
ICh2b2lkKTsKICBDT1JCQV9OYW1lZFZhbHVlX3ZhciAoQ09SQkFfTmFtZWRWYWx1ZV9wdHIpOwog
IENPUkJBX05hbWVkVmFsdWVfdmFyIChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmKTsKICB+
Q09SQkFfTmFtZWRWYWx1ZV92YXIgKHZvaWQpOwoKICBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmb3Bl
cmF0b3I9IChDT1JCQV9OYW1lZFZhbHVlX3B0cik7CiAgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJm9w
ZXJhdG9yPSAoY29uc3QgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJik7CiAgQ09SQkFfTmFtZWRWYWx1
ZV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9O
YW1lZFZhbHVlX3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfTmFtZWRWYWx1ZV9wdHIg
JigpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyIGluICh2b2lkKSBjb25zdDsKICBDT1JCQV9OYW1l
ZFZhbHVlX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyICZvdXQgKHZv
aWQpOwogIENPUkJBX05hbWVkVmFsdWVfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQV9OYW1lZFZh
bHVlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9OYW1lZFZhbHVlX3B0
ciBwdHJfOwp9OwojIDE0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9OVkxpc3QuaCIKY2xhc3MgQ09SQkFfTmFtZWRWYWx1ZV9vdXQKewpwdWJsaWM6
CiAgQ09SQkFfTmFtZWRWYWx1ZV9vdXQgKENPUkJBX05hbWVkVmFsdWVfcHRyICYpOwogIENPUkJB
X05hbWVkVmFsdWVfb3V0IChDT1JCQV9OYW1lZFZhbHVlX3ZhciAmKTsKICBDT1JCQV9OYW1lZFZh
bHVlX291dCAoQ09SQkFfTmFtZWRWYWx1ZV9vdXQgJik7CiAgQ09SQkFfTmFtZWRWYWx1ZV9vdXQg
Jm9wZXJhdG9yPSAoQ09SQkFfTmFtZWRWYWx1ZV9vdXQgJik7CiAgQ09SQkFfTmFtZWRWYWx1ZV9v
dXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJik7CiAgQ09SQkFfTmFt
ZWRWYWx1ZV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfTmFtZWRWYWx1ZV9wdHIpOwogIG9wZXJhdG9y
IENPUkJBX05hbWVkVmFsdWVfcHRyICYoKTsKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmcHRyICh2
b2lkKTsKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6
CiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgJnB0cl87Cn07CiMgMTc3ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIgpjbGFzcyBDT1JCQV9O
Vkxpc3QKewpwdWJsaWM6CgogIH5DT1JCQV9OVkxpc3QgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25n
IGNvdW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp
IGNvbnN0OwoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkIChDT1JCQTo6RmxhZ3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkX2l0ZW0g
KGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkZs
YWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBDT1JCQV9OYW1l
ZFZhbHVlX3B0ciBhZGRfdmFsdWUgKGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpBbnkgJiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpGbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKSk7CgoKCiAgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgYWRkX2l0ZW1fY29uc3VtZSAoY2hhciAq
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbGFncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK
ICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBhZGRfdmFsdWVfY29uc3VtZSAoY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6QW55X3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBDT1JC
QV9OYW1lZFZhbHVlX3B0ciBpdGVtIChDT1JCQTo6VUxvbmcgbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpKTsKCgoKICB2b2lkIHJlbW92ZSAoQ09SQkE6OlVMb25nIG4sCiAgICAgICAgICAg
ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHN0YXRp
YyBDT1JCQV9OVkxpc3QqIF9kdXBsaWNhdGUgKENPUkJBX05WTGlzdCopOwogIHN0YXRpYyBDT1JC
QV9OVkxpc3QqIF9uaWwgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9p
ZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CiMgMjQ3ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL05WTGlzdC5oIgogIHZvaWQg
X3Rhb19pbmNvbWluZ19jZHIgKFRBT19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBmbGFnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCAmbGF6eV9ldmFs
dWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKCiAgdm9pZCBfdGFvX2VuY29kZSAoVEFP
X091dHB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAgICAgIFRBT19PUkJfQ29yZSAqb3JiX2Nv
cmUsCiAgICAgICAgICAgICAgICAgICAgaW50IGZsYWcsCiAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdm9pZCBf
dGFvX2RlY29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgaW50IGZs
YWcsCiAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKTsKCgoKCgoKICBwdHJfYXJpdGhfdCBfdGFvX3RhcmdldF9hbGln
bm1lbnQgKHZvaWQpOwoKCgoKCgogIENPUkJBOjpCb29sZWFuIF9sYXp5X2hhc19hcmd1bWVudHMg
KHZvaWQpIGNvbnN0OwoKCgogIHR5cGVkZWYgQ09SQkFfTlZMaXN0X3B0ciBfcHRyX3R5cGU7CiAg
dHlwZWRlZiBDT1JCQV9OVkxpc3RfdmFyIF92YXJfdHlwZTsKCgpwcml2YXRlOgoKCiAgQ09SQkFf
TlZMaXN0ICh2b2lkKTsKCgoKICBDT1JCQV9OYW1lZFZhbHVlX3B0ciBhZGRfZWxlbWVudCAoQ09S
QkE6OkZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoK
CiAgdm9pZCBldmFsdWF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlKTsKCnByaXZhdGU6CgogIEFDRV9VbmJvdW5kZWRfUXVldWU8Q09SQkFfTmFt
ZWRWYWx1ZV9wdHI+IHZhbHVlc187CgoKICBDT1JCQTo6VUxvbmcgbWF4XzsKCgogIENPUkJBOjpV
TG9uZyByZWZjb3VudF87CgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNvdW50X2xvY2tfOwoK
CgoKCgogIFRBT19JbnB1dENEUiAqaW5jb21pbmdfOwoKCgogIGludCBpbmNvbWluZ19mbGFnXzsK
CiAgZnJpZW5kIGNsYXNzIENPUkJBX09SQjsKICBmcmllbmQgY2xhc3MgQ09SQkFfUmVxdWVzdDsK
fTsKIyAzNDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05WTGlzdF92YXIKewpwdWJsaWM6CiAgQ09SQkFfTlZM
aXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfTlZMaXN0X3ZhciAoQ09SQkFfTlZMaXN0X3B0cik7CiAg
Q09SQkFfTlZMaXN0X3ZhciAoY29uc3QgQ09SQkFfTlZMaXN0X3ZhciAmKTsKICB+Q09SQkFfTlZM
aXN0X3ZhciAodm9pZCk7CgogIENPUkJBX05WTGlzdF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfTlZM
aXN0X3B0cik7CiAgQ09SQkFfTlZMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9OVkxp
c3RfdmFyICYpOwogIENPUkJBX05WTGlzdF9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoK
ICBvcGVyYXRvciBjb25zdCBDT1JCQV9OVkxpc3RfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBD
T1JCQV9OVkxpc3RfcHRyICYoKTsKICBDT1JCQV9OVkxpc3RfcHRyIGluICh2b2lkKSBjb25zdDsK
ICBDT1JCQV9OVkxpc3RfcHRyICZpbm91dCAodm9pZCk7CiAgQ09SQkFfTlZMaXN0X3B0ciAmb3V0
ICh2b2lkKTsKICBDT1JCQV9OVkxpc3RfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQV9OVkxpc3Rf
cHRyIHB0ciAodm9pZCkgY29uc3Q7Cgpwcml2YXRlOgogIENPUkJBX05WTGlzdF9wdHIgcHRyXzsK
fTsKIyAzNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vTlZMaXN0LmgiCmNsYXNzIENPUkJBX05WTGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfTlZM
aXN0X291dCAoQ09SQkFfTlZMaXN0X3B0ciAmKTsKICBDT1JCQV9OVkxpc3Rfb3V0IChDT1JCQV9O
Vkxpc3RfdmFyICYpOwogIENPUkJBX05WTGlzdF9vdXQgKENPUkJBX05WTGlzdF9vdXQgJik7CiAg
Q09SQkFfTlZMaXN0X291dCAmb3BlcmF0b3I9IChDT1JCQV9OVkxpc3Rfb3V0ICYpOwogIENPUkJB
X05WTGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfTlZMaXN0X3ZhciAmKTsKICBDT1JC
QV9OVkxpc3Rfb3V0ICZvcGVyYXRvcj0gKENPUkJBX05WTGlzdF9wdHIpOwogIG9wZXJhdG9yIENP
UkJBX05WTGlzdF9wdHIgJigpOwogIENPUkJBX05WTGlzdF9wdHIgJnB0ciAodm9pZCk7CiAgQ09S
QkFfTlZMaXN0X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfTlZMaXN0
X3B0ciAmcHRyXzsKfTsKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9OVkxpc3QuaSIgMQoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09S
QkE6OmlzX25pbCAoQ09SQkE6Ok5hbWVkVmFsdWVfcHRyIG52KQp7CiAgcmV0dXJuIG52ID09IDA7
Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JCQTo6TmFtZWRWYWx1ZV9wdHIgbnYp
CnsKICBpZiAobnYpCiAgICBudi0+X2RlY3JfcmVmY250ICgpOwp9CgoKaW5saW5lCkNPUkJBX05h
bWVkVmFsdWU6OkNPUkJBX05hbWVkVmFsdWUgKHZvaWQpCiAgOiByZWZjb3VudF8gKDEpLAogICAg
ZmxhZ3NfICgwKSwKICAgIG5hbWVfICgwKQp7Cn0KCgppbmxpbmUgY29uc3QgY2hhcioKQ09SQkFf
TmFtZWRWYWx1ZTo6bmFtZSAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5uYW1lXzsKfQoK
CmlubGluZSBDT1JCQTo6QW55X3B0cgpDT1JCQV9OYW1lZFZhbHVlOjp2YWx1ZSAodm9pZCkgY29u
c3QKewogIHJldHVybiBjb25zdF9jYXN0PENPUkJBOjpBbnlfcHRyPiAoJnRoaXMtPmFueV8pOwp9
CgoKaW5saW5lIENPUkJBOjpGbGFncwpDT1JCQV9OYW1lZFZhbHVlOjpmbGFncyAodm9pZCkgY29u
c3QKewogIHJldHVybiB0aGlzLT5mbGFnc187Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlKgpD
T1JCQV9OYW1lZFZhbHVlOjpfZHVwbGljYXRlIChDT1JCQV9OYW1lZFZhbHVlICp4KQp7CiAgaWYg
KHggIT0gMCkKICAgIHgtPl9pbmNyX3JlZmNudCAoKTsKICByZXR1cm4geDsKfQoKaW5saW5lIENP
UkJBX05hbWVkVmFsdWUqCkNPUkJBX05hbWVkVmFsdWU6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4g
MDsKfQoKCgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQTo6aXNfbmlsIChDT1JCQTo6TlZM
aXN0X3B0ciBudmwpCnsKICByZXR1cm4gKENPUkJBOjpCb29sZWFuKSAobnZsID09IDApOwp9Cgpp
bmxpbmUgdm9pZApDT1JCQTo6cmVsZWFzZSAoQ09SQkE6Ok5WTGlzdF9wdHIgbnZsKQp7CiAgaWYg
KG52bCkKICAgIG52bC0+X2RlY3JfcmVmY250ICgpOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1
ZV92YXI6OkNPUkJBX05hbWVkVmFsdWVfdmFyICh2b2lkKQogIDogcHRyXyAoQ09SQkFfTmFtZWRW
YWx1ZTo6X25pbCAoKSkKewp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OkNPUkJBX05h
bWVkVmFsdWVfdmFyIChDT1JCQV9OYW1lZFZhbHVlX3B0ciBwKQogIDogcHRyXyAocCkKe30KCmlu
bGluZQpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6fkNPUkJBX05hbWVkVmFsdWVfdmFyICh2b2lkKQp7
CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1
ZV9wdHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OkNPUkJBX05hbWVkVmFs
dWVfdmFyIChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAmcCkKICA6IHB0cl8gKENPUkJBX05h
bWVkVmFsdWU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKSkKe30KCmlubGluZSBDT1JCQV9OYW1lZFZh
bHVlX3ZhciAmCkNPUkJBX05hbWVkVmFsdWVfdmFyOjpvcGVyYXRvcj0gKENPUkJBX05hbWVkVmFs
dWVfcHRyIHApCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9
IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV92YXIgJgpDT1JC
QV9OYW1lZFZhbHVlX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3ZhciAm
cCkKewogIGlmICh0aGlzICE9ICZwKQogIHsKICAgIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJf
KTsKICAgIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfZHVwbGljYXRlIChwLnB0ciAo
KSk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX05hbWVkVmFsdWVfdmFyOjpv
cGVyYXRvciBjb25zdCBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmKCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV92YXI6Om9wZXJhdG9yIENPUkJB
X05hbWVkVmFsdWVfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JC
QV9OYW1lZFZhbHVlX3B0cgpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkg
Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV9w
dHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX3B0ciAmCkNPUkJBX05hbWVkVmFsdWVf
dmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf
TmFtZWRWYWx1ZV9wdHIgJgpDT1JCQV9OYW1lZFZhbHVlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09S
QkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVl
OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1
ZV9wdHIKQ09SQkFfTmFtZWRWYWx1ZV92YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBX05hbWVk
VmFsdWVfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX05hbWVkVmFs
dWU6Ol9uaWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGluZQpDT1JCQV9OYW1lZFZhbHVl
X291dDo6Q09SQkFfTmFtZWRWYWx1ZV9vdXQgKENPUkJBX05hbWVkVmFsdWVfcHRyICZwKQogICAg
ICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfbmlsICgp
Owp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OkNPUkJBX05hbWVkVmFsdWVfb3V0IChD
T1JCQV9OYW1lZFZhbHVlX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJl
bGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OYW1lZFZhbHVlOjpfbmls
ICgpOwp9CgppbmxpbmUKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OkNPUkJBX05hbWVkVmFsdWVfb3V0
IChDT1JCQV9OYW1lZFZhbHVlX291dCAmcCkKICA6IHB0cl8gKHAucHRyXykKe30KCmlubGluZSBD
T1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVfb3V0OjpvcGVyYXRvcj0gKENP
UkJBX05hbWVkVmFsdWVfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IHAucHRyXzsKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVf
b3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05hbWVkVmFsdWVfdmFyICZwKQp7CiAgdGhpcy0+
cHRyXyA9IENPUkJBX05hbWVkVmFsdWU6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9OYW1lZFZhbHVlX291dCAmCkNPUkJBX05hbWVkVmFsdWVf
b3V0OjpvcGVyYXRvcj0gKENPUkJBX05hbWVkVmFsdWVfcHRyIHApCnsKICB0aGlzLT5wdHJfID0g
cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9OYW1lZFZhbHVlX291dDo6b3BlcmF0
b3IgQ09SQkFfTmFtZWRWYWx1ZV9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIENPUkJBX05hbWVkVmFsdWVfcHRyICYKQ09SQkFfTmFtZWRWYWx1ZV9vdXQ6OnB0ciAodm9p
ZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTmFtZWRWYWx1ZV9wdHIK
Q09SQkFfTmFtZWRWYWx1ZV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKCgoKCgppbmxpbmUKQ09SQkFfTlZMaXN0OjpDT1JCQV9OVkxpc3QgKHZvaWQpCiAg
OiBtYXhfICgwKSwKICAgIHJlZmNvdW50XyAoMSksCiAgICBpbmNvbWluZ18gKDApLAogICAgaW5j
b21pbmdfZmxhZ18gKDApCnsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpDT1JCQV9OVkxpc3Q6OmNv
dW50IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkg
Y29uc3QKewogIChjb25zdF9jYXN0PENPUkJBX05WTGlzdCo+ICh0aGlzKSktPmV2YWx1YXRlIChf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgcmV0dXJuIHRoaXMtPm1heF87Cn0KCmlubGluZSBDT1JCQV9OVkxpc3QqCkNPUkJBX05WTGlz
dDo6X2R1cGxpY2F0ZSAoQ09SQkFfTlZMaXN0ICp4KQp7CiAgaWYgKHggIT0gMCkKICAgIHgtPl9p
bmNyX3JlZmNudCAoKTsKICByZXR1cm4geDsKfQoKaW5saW5lIENPUkJBX05WTGlzdCoKQ09SQkFf
TlZMaXN0OjpfbmlsICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCgoKCgppbmxpbmUKQ09SQkFfTlZM
aXN0X3Zhcjo6Q09SQkFfTlZMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKENPUkJBX05WTGlzdDo6
X25pbCAoKSkKewp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X3Zhcjo6Q09SQkFfTlZMaXN0X3ZhciAo
Q09SQkFfTlZMaXN0X3B0ciBwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpDT1JCQV9OVkxpc3Rf
dmFyOjp+Q09SQkFfTlZMaXN0X3ZhciAodm9pZCkKewogIENPUkJBOjpyZWxlYXNlICh0aGlzLT5w
dHJfKTsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9wdHIKQ09SQkFfTlZMaXN0X3Zhcjo6cHRyICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9OVkxpc3Rf
dmFyOjpDT1JCQV9OVkxpc3RfdmFyIChjb25zdCBDT1JCQV9OVkxpc3RfdmFyICZwKQogIDogcHRy
XyAoQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSkpCnt9CgppbmxpbmUgQ09SQkFf
TlZMaXN0X3ZhciAmCkNPUkJBX05WTGlzdF92YXI6Om9wZXJhdG9yPSAoQ09SQkFfTlZMaXN0X3B0
ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwog
IHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX05WTGlzdF92YXIgJgpDT1JCQV9OVkxpc3Rf
dmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05WTGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAh
PSAmcCkKICB7CiAgICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgICB0aGlzLT5wdHJf
ID0gQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSk7CiAgfQogIHJldHVybiAqdGhp
czsKfQoKaW5saW5lCkNPUkJBX05WTGlzdF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX05WTGlz
dF9wdHIgJigpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX05W
TGlzdF92YXI6Om9wZXJhdG9yIENPUkJBX05WTGlzdF9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9wdHIKQ09SQkFfTlZMaXN0X3Zhcjo6b3BlcmF0
b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf
TlZMaXN0X3B0cgpDT1JCQV9OVkxpc3RfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X3B0ciAmCkNPUkJBX05WTGlzdF92YXI6
Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9OVkxp
c3RfcHRyICYKQ09SQkFfTlZMaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2Ug
KHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OVkxpc3Q6Ol9uaWwgKCk7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9OVkxpc3RfcHRyCkNPUkJBX05WTGlzdF92
YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBX05WTGlzdF9wdHIgdmFsID0gdGhpcy0+cHRyXzsK
ICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0OjpfbmlsICgpOwogIHJldHVybiB2YWw7Cn0KCgoK
CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6Q09SQkFfTlZMaXN0X291dCAoQ09SQkFfTlZMaXN0
X3B0ciAmcCkKICAgICAgICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0
OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6Q09SQkFfTlZMaXN0X291dCAo
Q09SQkFfTlZMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJlbGVh
c2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBDT1JCQV9OVkxpc3Q6Ol9uaWwgKCk7Cn0K
CmlubGluZQpDT1JCQV9OVkxpc3Rfb3V0OjpDT1JCQV9OVkxpc3Rfb3V0IChDT1JCQV9OVkxpc3Rf
b3V0ICZwKQogIDogcHRyXyAocC5wdHJfKQp7fQoKaW5saW5lIENPUkJBX05WTGlzdF9vdXQgJgpD
T1JCQV9OVkxpc3Rfb3V0OjpvcGVyYXRvcj0gKENPUkJBX05WTGlzdF9vdXQgJnApCnsKICB0aGlz
LT5wdHJfID0gcC5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX05WTGlzdF9v
dXQgJgpDT1JCQV9OVkxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX05WTGlzdF92YXIg
JnApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTlZMaXN0OjpfZHVwbGljYXRlIChwLnB0ciAoKSk7
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X291dCAmCkNPUkJBX05WTGlz
dF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfTlZMaXN0X3B0ciBwKQp7CiAgdGhpcy0+cHRyXyA9IHA7
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfTlZMaXN0X291dDo6b3BlcmF0b3IgQ09S
QkFfTlZMaXN0X3B0ciAmKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf
TlZMaXN0X3B0ciAmCkNPUkJBX05WTGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlz
LT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTlZMaXN0X3B0cgpDT1JCQV9OVkxpc3Rfb3V0OjpvcGVy
YXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAzOTggIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTlZMaXN0LmgiIDIKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK
IyA0MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
TlZMaXN0LmgiIDIKIyA0NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9jb3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyA0NyAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIiAx
CiMgMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
TG9jYWxPYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvcHJlLmgiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyAyNiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5o
IiAyCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vTG9jYWxPYmplY3QuaCIKY2xhc3MgQ09SQkFfTG9jYWxPYmplY3QgOiBwdWJsaWMgdmlydHVh
bCBDT1JCQV9PYmplY3QKewpwdWJsaWM6CgoKICB2aXJ0dWFsIH5DT1JCQV9Mb2NhbE9iamVjdCAo
dm9pZCk7CgoKICBzdGF0aWMgQ09SQkFfTG9jYWxPYmplY3RfcHRyIF9kdXBsaWNhdGUgKENPUkJB
X0xvY2FsT2JqZWN0X3B0ciBvYmopOwoKCiAgc3RhdGljIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBf
bmlsICh2b2lkKTsKIyA1NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIgogIHN0YXRpYyBDT1JCQV9Mb2NhbE9iamVjdF9wdHIg
X25hcnJvdyAoQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICBzdGF0aWMgQ09SQkFfTG9jYWxPYmplY3RfcHRy
IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwK
ICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoK
ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdmly
dHVhbCBDT1JCQTo6SW1wbGVtZW50YXRpb25EZWZfcHRyCiAgICAgIF9nZXRfaW1wbGVtZW50YXRp
b24gKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7
CgoKICB2aXJ0dWFsIENPUkJBX0ludGVyZmFjZURlZl9wdHIgX2dldF9pbnRlcmZhY2UgKAogICAg
ICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgdmlydHVhbCB2b2lkIF9jcmVhdGVf
cmVxdWVzdCAoQ09SQkE6OkNvbnRleHRfcHRyIGN0eCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqb3BlcmF0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpOVkxpc3RfcHRyIGFyZ19saXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpOYW1lZFZhbHVlX3B0ciByZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlJlcXVlc3RfcHRyICZyZXF1ZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpGbGFncyByZXFfZmxhZ3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKICB2aXJ0dWFsIHZvaWQgX2NyZWF0ZV9yZXF1ZXN0
IChDT1JCQTo6Q29udGV4dF9wdHIgY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENPUkJBOjpDaGFyICpvcGVyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6Ok5WTGlzdF9wdHIgYXJnX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6Ok5hbWVkVmFsdWVfcHRyIHJlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6RXhjZXB0aW9uTGlzdF9wdHIgZXhjbGlzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Q29udGV4dExpc3RfcHRyIGN0eHRsaXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpSZXF1ZXN0X3B0ciAmcmVxdWVz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RmxhZ3MgcmVxX2ZsYWdz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIHZpcnR1YWwgQ09SQkE6OlJl
cXVlc3RfcHRyIF9yZXF1ZXN0IChjb25zdCBDT1JCQTo6Q2hhciAqb3BlcmF0aW9uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgogIENPUkJBOjpQ
b2xpY3lfcHRyIF9nZXRfcG9saWN5ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgQ09SQkE6OlBvbGlj
eV9wdHIgX2dldF9jbGllbnRfcG9saWN5ICgKICAgICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwK
ICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwoKCiAgQ09SQkE6Ok9i
amVjdF9wdHIgX3NldF9wb2xpY3lfb3ZlcnJpZGVzICgKICAgICAgY29uc3QgQ09SQkE6OlBvbGlj
eUxpc3QgJiBwb2xpY2llcywKICAgICAgQ09SQkE6OlNldE92ZXJyaWRlVHlwZSBzZXRfYWRkLAog
ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CgoKICBDT1JCQTo6UG9s
aWN5TGlzdCAqIF9nZXRfcG9saWN5X292ZXJyaWRlcyAoCiAgICAgIGNvbnN0IENPUkJBOjpQb2xp
Y3lUeXBlU2VxICYgdHlwZXMsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgKTsKCgogIENPUkJBOjpCb29sZWFuIF92YWxpZGF0ZV9jb25uZWN0aW9uICgKICAgICAgQ09S
QkE6OlBvbGljeUxpc3Rfb3V0IGluY29uc2lzdGVudF9wb2xpY2llcywKICAgICAgQ09SQkFfRW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwojIDE1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5oIgogIHZpcnR1YWwgQ09S
QkE6OlVMb25nIF9oYXNoIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpKTsKCgoKCgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfZXF1aXZhbGVu
dCAoQ09SQkFfT2JqZWN0X3B0ciBvdGhlcl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSkKICAgIHRocm93ICgpOwoKCgogIHZpcnR1YWwgdm9p
ZCBfYWRkX3JlZiAodm9pZCk7CgoKICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQpOwoK
CgoKICB2aXJ0dWFsIFRBT19PYmplY3RLZXkgKl9rZXkgKENPUkJBX0Vudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgoKICB0eXBlZGVmIENPUkJBX0xvY2FsT2Jq
ZWN0X3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9Mb2NhbE9iamVjdF92YXIgX3Zhcl90
eXBlOwoKCnByb3RlY3RlZDoKCgoKCgogIENPUkJBX0xvY2FsT2JqZWN0ICh2b2lkKTsKCnByaXZh
dGU6CgoKCgoKICBDT1JCQV9Mb2NhbE9iamVjdCAoY29uc3QgQ09SQkFfTG9jYWxPYmplY3QgJik7
CiAgQ09SQkFfTG9jYWxPYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0
ICYpOwoKCn07CgpjbGFzcyBDT1JCQV9Mb2NhbE9iamVjdF92YXIKewpwdWJsaWM6CiAgQ09SQkFf
TG9jYWxPYmplY3RfdmFyICh2b2lkKTsKICBDT1JCQV9Mb2NhbE9iamVjdF92YXIgKENPUkJBX0xv
Y2FsT2JqZWN0X3B0cik7CiAgQ09SQkFfTG9jYWxPYmplY3RfdmFyIChjb25zdCBDT1JCQV9Mb2Nh
bE9iamVjdF92YXIgJik7CiAgfkNPUkJBX0xvY2FsT2JqZWN0X3ZhciAodm9pZCk7CgogIENPUkJB
X0xvY2FsT2JqZWN0X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Mb2NhbE9iamVjdF9wdHIpOwogIENP
UkJBX0xvY2FsT2JqZWN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF92
YXIgJik7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK
CiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYoKSBjb25zdDsKICBvcGVy
YXRvciBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgJigpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBp
biAodm9pZCkgY29uc3Q7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyICZpbm91dCAodm9pZCk7CiAg
Q09SQkFfTG9jYWxPYmplY3RfcHRyICZvdXQgKHZvaWQpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0
ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIHB0ciAodm9pZCkgY29uc3Q7
Cgpwcml2YXRlOgogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciBwdHJfOwp9OwoKY2xhc3MgQ09SQkFf
TG9jYWxPYmplY3Rfb3V0CnsKcHVibGljOgogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoQ09SQkFf
TG9jYWxPYmplY3RfcHRyICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoQ09SQkFfTG9jYWxP
YmplY3RfdmFyICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAoY29uc3QgQ09SQkFfTG9jYWxP
YmplY3Rfb3V0ICYpOwogIENPUkJBX0xvY2FsT2JqZWN0X291dCAmb3BlcmF0b3I9IChjb25zdCBD
T1JCQV9Mb2NhbE9iamVjdF9vdXQgJik7CiAgQ09SQkFfTG9jYWxPYmplY3Rfb3V0ICZvcGVyYXRv
cj0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmKTsKICBDT1JCQV9Mb2NhbE9iamVjdF9v
dXQgJm9wZXJhdG9yPSAoQ09SQkFfTG9jYWxPYmplY3RfcHRyKTsKICBvcGVyYXRvciBDT1JCQV9M
b2NhbE9iamVjdF9wdHIgJigpOwogIENPUkJBX0xvY2FsT2JqZWN0X3B0ciAmcHRyICh2b2lkKTsK
ICBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENP
UkJBX0xvY2FsT2JqZWN0X3B0ciAmcHRyXzsKfTsKCgoKCgpjbGFzcyBUQU9fTG9jYWxfUmVmQ291
bnRlZF9PYmplY3QgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9Mb2NhbE9iamVjdAp7CnB1YmxpYzoK
CgogIHZpcnR1YWwgdm9pZCBfYWRkX3JlZiAodm9pZCk7CgoKICB2aXJ0dWFsIHZvaWQgX3JlbW92
ZV9yZWYgKHZvaWQpOwoKcHJvdGVjdGVkOgoKCgoKCiAgVEFPX0xvY2FsX1JlZkNvdW50ZWRfT2Jq
ZWN0ICh2b2lkKTsKCnByaXZhdGU6CgoKCgoKICBUQU9fTG9jYWxfUmVmQ291bnRlZF9PYmplY3Qg
KGNvbnN0IFRBT19Mb2NhbF9SZWZDb3VudGVkX09iamVjdCAmKTsKICBUQU9fTG9jYWxfUmVmQ291
bnRlZF9PYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IFRBT19Mb2NhbF9SZWZDb3VudGVkX09iamVj
dCAmKTsKCgp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Mb2NhbE9iamVjdC5pIiAxCgoKCgoKCmlubGluZSBDT1JCQV9Mb2NhbE9iamVj
dF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNhdGUgKENPUkJBX0xvY2FsT2JqZWN0X3B0
ciBvYmopCnsKICBpZiAob2JqKQogICAgb2JqLT5fYWRkX3JlZiAoKTsKICByZXR1cm4gb2JqOwp9
CgoKCmlubGluZSBDT1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6Ol9uaWwg
KHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJBX0xvY2FsT2JqZWN0X3B0cgpDT1JC
QV9Mb2NhbE9iamVjdDo6X25hcnJvdyAoQ09SQkFfT2JqZWN0X3B0ciBvYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmKQp7CiAgaWYgKG9iai0+X2lzX2xv
Y2FsICgpICE9IDApCiAgICByZXR1cm4KICAgICAgcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Mb2Nh
bE9iamVjdF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKCByZWludGVycHJldF9jYXN0
PHB0cl9hcml0aF90PiAoJkNPUkJBX0xvY2FsT2JqZWN0OjpfbmFycm93KSkpOwoKCgoKCiAgcmV0
dXJuIDA7Cn0KCmlubGluZSBDT1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3Q6
Ol91bmNoZWNrZWRfbmFycm93IChDT1JCQV9PYmplY3RfcHRyIG9iaiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmKQp7CiAgaWYgKG9iai0+
X2lzX2xvY2FsICgpICE9IDApCiAgICByZXR1cm4KICAgICAgcmVpbnRlcnByZXRfY2FzdDxDT1JC
QV9Mb2NhbE9iamVjdF9wdHI+IChvYmotPl90YW9fUXVlcnlJbnRlcmZhY2UgKCByZWludGVycHJl
dF9jYXN0PHB0cl9hcml0aF90PiAoJkNPUkJBX0xvY2FsT2JqZWN0OjpfbmFycm93KSkpOwoKCgoK
CiAgcmV0dXJuIDA7Cn0KCmlubGluZQpDT1JCQV9Mb2NhbE9iamVjdDo6Q09SQkFfTG9jYWxPYmpl
Y3QgKHZvaWQpCiAgOiBDT1JCQV9PYmplY3QgKDApCnsKfQoKaW5saW5lClRBT19Mb2NhbF9SZWZD
b3VudGVkX09iamVjdDo6VEFPX0xvY2FsX1JlZkNvdW50ZWRfT2JqZWN0ICh2b2lkKQoKewp9CgoK
CgoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6Q09SQkFfTG9jYWxPYmplY3RfdmFyICh2
b2lkKQogIDogcHRyXyAoQ09SQkFfTG9jYWxPYmplY3Q6Ol9uaWwgKCkpCnsKfQoKaW5saW5lCkNP
UkJBX0xvY2FsT2JqZWN0X3Zhcjo6Q09SQkFfTG9jYWxPYmplY3RfdmFyIChDT1JCQV9Mb2NhbE9i
amVjdF9wdHIgcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3RfdmFy
Ojp+Q09SQkFfTG9jYWxPYmplY3RfdmFyICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMt
PnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xvY2FsT2JqZWN0
X3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpD
T1JCQV9Mb2NhbE9iamVjdF92YXI6OkNPUkJBX0xvY2FsT2JqZWN0X3ZhciAoY29uc3QgQ09SQkFf
TG9jYWxPYmplY3RfdmFyICZwKQogIDogcHRyXyAoQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNh
dGUgKHAucHRyICgpKSkKewp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfdmFyICYKQ09SQkFf
TG9jYWxPYmplY3RfdmFyOjpvcGVyYXRvcj0gKENPUkJBX0xvY2FsT2JqZWN0X3B0ciBwKQp7CiAg
Q09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAq
dGhpczsKfQoKaW5saW5lIENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmCkNPUkJBX0xvY2FsT2JqZWN0
X3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF92YXIgJnApCnsKICBpZiAo
dGhpcyAhPSAmcCkKICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAg
ICB0aGlzLT5wdHJfID0gQ09SQkFfTG9jYWxPYmplY3Q6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsK
ICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpv
cGVyYXRvciBjb25zdCBDT1JCQV9Mb2NhbE9iamVjdF9wdHIgJigpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6b3BlcmF0b3IgQ09S
QkFfTG9jYWxPYmplY3RfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD
T1JCQV9Mb2NhbE9iamVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpvcGVyYXRvci0+ICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Mb2NhbE9i
amVjdF9wdHIKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYKQ09SQkFfTG9j
YWxPYmplY3RfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyICYKQ09SQkFfTG9jYWxPYmplY3RfdmFyOjpvdXQgKHZv
aWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJB
X0xvY2FsT2JqZWN0OjpfbmlsICgpOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S
QkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xvY2FsT2JqZWN0X3Zhcjo6X3JldG4gKHZvaWQpCnsK
CiAgQ09SQkFfTG9jYWxPYmplY3RfcHRyIHZhbCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9
IENPUkJBX0xvY2FsT2JqZWN0OjpfbmlsICgpOwogIHJldHVybiB2YWw7Cn0KCgoKCgppbmxpbmUK
Q09SQkFfTG9jYWxPYmplY3Rfb3V0OjpDT1JCQV9Mb2NhbE9iamVjdF9vdXQgKENPUkJBX0xvY2Fs
T2JqZWN0X3B0ciAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gQ09SQkFfTG9jYWxP
YmplY3Q6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9Mb2NhbE9iamVjdF9vdXQ6OkNPUkJBX0xv
Y2FsT2JqZWN0X291dCAoQ09SQkFfTG9jYWxPYmplY3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQg
KCkpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJB
X0xvY2FsT2JqZWN0OjpfbmlsICgpOwp9CgppbmxpbmUKQ09SQkFfTG9jYWxPYmplY3Rfb3V0OjpD
T1JCQV9Mb2NhbE9iamVjdF9vdXQgKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X291dCAmcCkKICA6
IHB0cl8gKHAucHRyXykKewp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3Rfb3V0ICYKQ09SQkFf
TG9jYWxPYmplY3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0xvY2FsT2JqZWN0X291dCAm
cCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09S
QkFfTG9jYWxPYmplY3Rfb3V0ICYKQ09SQkFfTG9jYWxPYmplY3Rfb3V0OjpvcGVyYXRvcj0gKGNv
bnN0IENPUkJBX0xvY2FsT2JqZWN0X3ZhciAmcCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9Mb2Nh
bE9iamVjdDo6X2R1cGxpY2F0ZSAocC5wdHIgKCkpOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IENPUkJBX0xvY2FsT2JqZWN0X291dCAmCkNPUkJBX0xvY2FsT2JqZWN0X291dDo6b3BlcmF0b3I9
IChDT1JCQV9Mb2NhbE9iamVjdF9wdHIgcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAq
dGhpczsKfQoKaW5saW5lCkNPUkJBX0xvY2FsT2JqZWN0X291dDo6b3BlcmF0b3IgQ09SQkFfTG9j
YWxPYmplY3RfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9M
b2NhbE9iamVjdF9wdHIgJgpDT1JCQV9Mb2NhbE9iamVjdF9vdXQ6OnB0ciAodm9pZCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfTG9jYWxPYmplY3RfcHRyCkNPUkJBX0xv
Y2FsT2JqZWN0X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CiMgMjg3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L0xvY2FsT2JqZWN0LmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAyOTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTG9jYWxPYmplY3QuaCIgMgojIDQ4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ByaW5jaXBh
bC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vUHJpbmNpcGFsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNpcGFsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNpcGFs
LmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vT2N0ZXRTZXFDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFm
d2QuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL09jdGV0U2VxQy5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVl
bmNlLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDEK
IyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N
YW5hZ2VkX1R5cGVzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3ByZS5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vTWFuYWdlZF9UeXBlcy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE5ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRf
VHlwZXMuaCIgMgojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL01hbmFnZWRfVHlwZXMuaCIKY2xhc3MgVEFPX1N0cmluZ19NYW5hZ2VyCnsKcHVi
bGljOgoKCiAgVEFPX1N0cmluZ19NYW5hZ2VyICh2b2lkKTsKCgogIFRBT19TdHJpbmdfTWFuYWdl
ciAoY29uc3QgVEFPX1N0cmluZ19NYW5hZ2VyICYpOwoKCiAgflRBT19TdHJpbmdfTWFuYWdlciAo
dm9pZCk7CgoKICBUQU9fU3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX1N0cmlu
Z19NYW5hZ2VyJik7CgoKICBUQU9fU3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgQ09S
QkE6OlN0cmluZ192YXImKTsKCgogIFRBT19TdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25z
dCBjaGFyICopOwoKCgogIFRBT19TdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjaGFyICopOwoK
CiAgb3BlcmF0b3IgY29uc3QgY2hhciooKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmluICh2b2lk
KSBjb25zdDsKCgogIGNoYXIgKiZpbm91dCAodm9pZCk7CgoKICBjaGFyIComb3V0ICh2b2lkKTsK
CgogIGNoYXIgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIGNoYXIgKnB0cl87Cgp9OwojIDEw
OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NYW5h
Z2VkX1R5cGVzLmgiCmNsYXNzIFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgog
IGZyaWVuZCBjbGFzcyBUQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZTsKCgoKCgoKCiAgVEFP
X1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2Vy
ICYpOwoKCiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKGNoYXIgKipidWZmZXIsIENPUkJB
OjpCb29sZWFuIHJlbGVhc2UpOwoKCiAgflRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICh2b2lk
KTsKCgogIFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19T
ZXFFbGVtX1N0cmluZ19NYW5hZ2VyJik7CgoKICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciAm
b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6U3RyaW5nX3ZhciYpOwoKCiAgVEFPX1NlcUVsZW1fU3Ry
aW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoY29uc3QgY2hhciAqKTsKCgoKICBUQU9fU2VxRWxlbV9T
dHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjaGFyICopOwoKCiAgb3BlcmF0b3IgY29uc3QgY2hh
ciooKSBjb25zdDsKCgogIGNvbnN0IGNoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIGNoYXIgKiZp
bm91dCAodm9pZCk7CgoKICBjaGFyIComb3V0ICh2b2lkKTsKCgogIGNoYXIgKl9yZXRuICh2b2lk
KTsKCnByaXZhdGU6CgogIGNoYXIgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87
CgoKCgoKCiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKfTsKIyAxODcgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWFuYWdlZF9U
eXBlcy5oIgpjbGFzcyBUQU9fV1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgoKCiAgVEFPX1dTdHJp
bmdfTWFuYWdlciAodm9pZCk7CgoKICBUQU9fV1N0cmluZ19NYW5hZ2VyIChjb25zdCBUQU9fV1N0
cmluZ19NYW5hZ2VyICYpOwoKCiAgflRBT19XU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFP
X1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25zdCBUQU9fV1N0cmluZ19NYW5hZ2VyJik7
CgoKICBUQU9fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpXU3RyaW5n
X3ZhciYpOwoKCiAgVEFPX1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQTo6
V0NoYXIgKik7CgoKCiAgVEFPX1dTdHJpbmdfTWFuYWdlciAmb3BlcmF0b3I9IChDT1JCQTo6V0No
YXIgKik7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6V0NoYXIqKCkgY29uc3Q7CgoKICBjb25z
dCBDT1JCQTo6V0NoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIENPUkJBOjpXQ2hhciAqJmlub3V0
ICh2b2lkKTsKCgogIENPUkJBOjpXQ2hhciAqJm91dCAodm9pZCk7CgoKICBDT1JCQTo6V0NoYXIg
Kl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpXQ2hhciAqcHRyXzsKCn07CiMgMjU5
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFn
ZWRfVHlwZXMuaCIKY2xhc3MgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyCnsKcHVibGljOgog
IGZyaWVuZCBjbGFzcyBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U7CgoKCgoKCgogIFRB
T19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciAoQ09SQkE6OldDaGFyICoqYnVmZmVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CgoKICBUQU9f
U2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl
ciAmKTsKCgogIH5UQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKHZvaWQpOwoKCiAgVEFPX1Nl
cUVsZW1fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJp
bmdfTWFuYWdlciYpOwoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICZvcGVyYXRvcj0g
KGNvbnN0IENPUkJBOjpXU3RyaW5nX3ZhciYpOwoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5h
Z2VyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpXQ2hhciAqKTsKCgoKICBUQU9fU2VxRWxlbV9X
U3RyaW5nX01hbmFnZXIgJm9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICopOwoKCiAgb3BlcmF0b3Ig
Y29uc3QgQ09SQkE6OldDaGFyKigpIGNvbnN0OwoKCiAgY29uc3QgQ09SQkE6OldDaGFyICppbiAo
dm9pZCkgY29uc3Q7CgoKICBDT1JCQTo6V0NoYXIgKiZpbm91dCAodm9pZCk7CgoKICBDT1JCQTo6
V0NoYXIgKiZvdXQgKHZvaWQpOwoKCiAgQ09SQkE6OldDaGFyICpfcmV0biAodm9pZCk7Cgpwcml2
YXRlOgoKICBDT1JCQTo6V0NoYXIgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87
CgoKCgoKCiAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICh2b2lkKTsKCn07CgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRf
VHlwZXMuaSIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL01hbmFnZWRfVHlwZXMuaSIKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6VEFP
X1N0cmluZ19NYW5hZ2VyICh2b2lkKQogIDogcHRyXyAoQ09SQkE6OnN0cmluZ19kdXAgKCIiKSkK
ewp9CgoKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6VEFPX1N0cmluZ19NYW5hZ2VyIChjb25z
dCBUQU9fU3RyaW5nX01hbmFnZXIgJnJocykKICA6IHB0cl8gKENPUkJBOjpzdHJpbmdfZHVwIChy
aHMucHRyXykpCnsKfQoKCmlubGluZQpUQU9fU3RyaW5nX01hbmFnZXI6On5UQU9fU3RyaW5nX01h
bmFnZXIgKHZvaWQpCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8pOwp9CgoKaW5s
aW5lIFRBT19TdHJpbmdfTWFuYWdlciYKVEFPX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNv
bnN0IFRBT19TdHJpbmdfTWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJl
dHVybiAqdGhpczsKCiAgQ09SQkE6OnN0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5w
dHJfID0gQ09SQkE6OnN0cmluZ19kdXAgKHJocy5wdHJfKTsKICByZXR1cm4gKnRoaXM7Cn0KCgpp
bmxpbmUgVEFPX1N0cmluZ19NYW5hZ2VyICYKVEFPX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0g
KGNvbnN0IGNoYXIgKiBwKQp7CiAgQ09SQkE6OnN0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0
aGlzLT5wdHJfID0gQ09SQkE6OnN0cmluZ19kdXAgKHApOwogIHJldHVybiAqdGhpczsKfQoKCmlu
bGluZSBUQU9fU3RyaW5nX01hbmFnZXIgJgpUQU9fU3RyaW5nX01hbmFnZXI6Om9wZXJhdG9yPSAo
Y2hhciAqIHApCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0
cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19TdHJpbmdfTWFuYWdlcjo6b3Bl
cmF0b3IgY29uc3QgY2hhciogKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIGNvbnN0IGNoYXIgKgpUQU9fU3RyaW5nX01hbmFnZXI6OmluICh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComClRBT19TdHJpbmdfTWFuYWdl
cjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNoYXIgKiYK
VEFPX1N0cmluZ19NYW5hZ2VyOjpvdXQgKHZvaWQpCnsKICBDT1JCQTo6c3RyaW5nX2ZyZWUgKHRo
aXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgY2hhciAqClRBT19TdHJpbmdfTWFuYWdlcjo6X3JldG4gKHZvaWQpCnsKICBjaGFyICp0ZW1w
ID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGVtcDsKfQoKCgoKaW5s
aW5lClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjoKVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFn
ZXIgKGNvbnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZyaHMpCiAgOiBwdHJfIChyaHMu
cHRyXyksCiAgICAgcmVsZWFzZV8gKHJocy5yZWxlYXNlXykKewp9CgppbmxpbmUKVEFPX1NlcUVs
ZW1fU3RyaW5nX01hbmFnZXI6OlRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyIChjaGFyICoqYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBwdHJfIChidWZmZXIpLAogICAgIHJlbGVh
c2VfIChyZWxlYXNlKQp7Cn0KCmlubGluZQpUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlcjo6flRB
T19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICh2b2lkKQp7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1f
U3RyaW5nX01hbmFnZXImClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNv
bnN0IFRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyICZyaHMpCnsKICBpZiAodGhpcyA9PSAmcmhz
KQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICBDT1JCQTo6c3Ry
aW5nX2ZyZWUgKCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IENPUkJBOjpzdHJpbmdfZHVw
ICgqcmhzLnB0cl8pOwogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBUQU9fU2VxRWxlbV9TdHJp
bmdfTWFuYWdlciAmClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNvbnN0
IGNoYXIgKnApCnsKICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICBDT1JCQTo6c3RyaW5nX2ZyZWUg
KCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IENPUkJBOjpzdHJpbmdfZHVwIChwKTsKICBy
ZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgJgpUQU9f
U2VxRWxlbV9TdHJpbmdfTWFuYWdlcjo6b3BlcmF0b3I9IChjaGFyICpwKQp7CiAgaWYgKHRoaXMt
PnJlbGVhc2VfKQogICAgQ09SQkE6OnN0cmluZ19mcmVlICgqdGhpcy0+cHRyXyk7CiAgKnRoaXMt
PnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19TZXFFbGVtX1N0cmluZ19N
YW5hZ2VyOjpvcGVyYXRvciBjb25zdCBjaGFyKiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhp
cy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IGNoYXIgKgpUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl
cjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFy
IComClRBT19TZXFFbGVtX1N0cmluZ19NYW5hZ2VyOjppbm91dCAodm9pZCkKewogIHJldHVybiAq
dGhpcy0+cHRyXzsKfQoKaW5saW5lIGNoYXIgKiYKVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXI6
Om91dCAodm9pZCkKewogIENPUkJBOjpzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8pOwogICp0aGlz
LT5wdHJfID0gMDsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyICoKVEFPX1Nl
cUVsZW1fU3RyaW5nX01hbmFnZXI6Ol9yZXRuICh2b2lkKQp7CiAgY2hhciAqdGVtcCA9ICp0aGlz
LT5wdHJfOwogICp0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGVtcDsKfQoKCgoKaW5saW5lClRB
T19XU3RyaW5nX01hbmFnZXI6OlRBT19XU3RyaW5nX01hbmFnZXIgKHZvaWQpCiAgOiBwdHJfICgw
KQp7Cn0KCgppbmxpbmUKVEFPX1dTdHJpbmdfTWFuYWdlcjo6VEFPX1dTdHJpbmdfTWFuYWdlciAo
Y29uc3QgVEFPX1dTdHJpbmdfTWFuYWdlciAmcmhzKQogIDogcHRyXyAoQ09SQkE6OndzdHJpbmdf
ZHVwIChyaHMucHRyXykpCnsKfQoKCmlubGluZQpUQU9fV1N0cmluZ19NYW5hZ2VyOjp+VEFPX1dT
dHJpbmdfTWFuYWdlciAodm9pZCkKewogIENPUkJBOjp3c3RyaW5nX2ZyZWUgKHRoaXMtPnB0cl8p
Owp9CgoKaW5saW5lIFRBT19XU3RyaW5nX01hbmFnZXImClRBT19XU3RyaW5nX01hbmFnZXI6Om9w
ZXJhdG9yPSAoY29uc3QgVEFPX1dTdHJpbmdfTWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0g
JnJocykKICAgIHJldHVybiAqdGhpczsKCiAgQ09SQkE6OndzdHJpbmdfZnJlZSAodGhpcy0+cHRy
Xyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBOjp3c3RyaW5nX2R1cCAocmhzLnB0cl8pOwogIHJldHVy
biAqdGhpczsKfQoKCmlubGluZSBUQU9fV1N0cmluZ19NYW5hZ2VyICYKVEFPX1dTdHJpbmdfTWFu
YWdlcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6V0NoYXIgKiBwKQp7CiAgQ09SQkE6OndzdHJp
bmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBOjp3c3RyaW5nX2R1cCAo
cCk7CiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFRBT19XU3RyaW5nX01hbmFnZXIgJgpUQU9f
V1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqIHApCnsKICBDT1JCQTo6
d3N0cmluZ19mcmVlICh0aGlzLT5wdHJfKTsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRo
aXM7Cn0KCmlubGluZQpUQU9fV1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvciBjb25zdCBDT1JCQTo6
V0NoYXIqICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjb25z
dCBDT1JCQTo6V0NoYXIgKgpUQU9fV1N0cmluZ19NYW5hZ2VyOjppbiAodm9pZCkgY29uc3QKewog
IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6OldDaGFyIComClRBT19XU3RyaW5n
X01hbmFnZXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD
T1JCQTo6V0NoYXIgKiYKVEFPX1dTdHJpbmdfTWFuYWdlcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6
OndzdHJpbmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKgpUQU9fV1N0cmluZ19NYW5hZ2VyOjpf
cmV0biAodm9pZCkKewogIENPUkJBOjpXQ2hhciAqdGVtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IDA7CiAgcmV0dXJuIHRlbXA7Cn0KCgoKCmlubGluZQpUQU9fU2VxRWxlbV9XU3RyaW5n
X01hbmFnZXI6OgpUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKGNvbnN0IFRBT19TZXFFbGVt
X1dTdHJpbmdfTWFuYWdlciAmcmhzKQogIDogcHRyXyAocmhzLnB0cl8pLAogICAgIHJlbGVhc2Vf
IChyaHMucmVsZWFzZV8pCnsKfQoKaW5saW5lClRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6
CiAgICBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgKENPUkJBOjpXQ2hhciAqKmJ1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK
ICA6IHB0cl8gKGJ1ZmZlciksCiAgICAgcmVsZWFzZV8gKHJlbGVhc2UpCnsKfQoKaW5saW5lClRB
T19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6flRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciAo
dm9pZCkKewp9CgoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciYKVEFPX1NlcUVs
ZW1fV1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXFFbGVtX1dTdHJpbmdf
TWFuYWdlciAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsKCiAg
aWYgKHRoaXMtPnJlbGVhc2VfKQogICAgQ09SQkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8p
OwogICp0aGlzLT5wdHJfID0gQ09SQkE6OndzdHJpbmdfZHVwICgqcmhzLnB0cl8pOwogIHJldHVy
biAqdGhpczsKfQoKCmlubGluZSBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFnZXIgJgpUQU9fU2Vx
RWxlbV9XU3RyaW5nX01hbmFnZXI6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkE6OldDaGFyICpwKQp7
CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgQ09SQkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0
cl8pOwogICp0aGlzLT5wdHJfID0gQ09SQkE6OndzdHJpbmdfZHVwIChwKTsKICByZXR1cm4gKnRo
aXM7Cn0KCgppbmxpbmUgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5hZ2VyICYKVEFPX1NlcUVsZW1f
V1N0cmluZ19NYW5hZ2VyOjpvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqcCkKewogIGlmICh0aGlz
LT5yZWxlYXNlXykKICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKCp0aGlzLT5wdHJfKTsKICAqdGhp
cy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKVEFPX1NlcUVsZW1fV1N0cmlu
Z19NYW5hZ2VyOjpvcGVyYXRvciBjb25zdCBDT1JCQTo6V0NoYXIqICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6OldDaGFyICoKVEFPX1Nl
cUVsZW1fV1N0cmluZ19NYW5hZ2VyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lIENPUkJBOjpXQ2hhciAqJgpUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFn
ZXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6
OldDaGFyIComClRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlcjo6b3V0ICh2b2lkKQp7CiAgQ09S
QkE6OndzdHJpbmdfZnJlZSAoKnRoaXMtPnB0cl8pOwogICp0aGlzLT5wdHJfID0gMDsKICByZXR1
cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKgpUQU9fU2VxRWxlbV9XU3Ry
aW5nX01hbmFnZXI6Ol9yZXRuICh2b2lkKQp7CiAgQ09SQkE6OldDaGFyICp0ZW1wID0gKnRoaXMt
PnB0cl87CiAgKnRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0ZW1wOwp9CiMgMzI1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01hbmFnZWRfVHlwZXMu
aCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L3Bvc3QuaCIgMQojIDMyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDIKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIiAyCgpjbGFzcyBDT1JCQV9P
YmplY3Q7CmNsYXNzIENPUkJBX0Vudmlyb25tZW50OwojIDM4ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNsYXNzIFRBT19CYXNl
X1NlcXVlbmNlCnsKcHVibGljOgoKCiAgZnJpZW5kIGNsYXNzIFRBT19NYXJzaGFsX1NlcXVlbmNl
OwoKCiAgdmlydHVhbCB+VEFPX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKCiAgQ09SQkE6OlVMb25n
IG1heGltdW0gKHZvaWQpIGNvbnN0OwojIDU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0
ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpID0gMDsKCgogIHZpcnR1YWwgdm9pZCBfZGVh
bGxvY2F0ZV9idWZmZXIgKHZvaWQpID0gMDsKCgoKCgoKCiAgdmlydHVhbCB2b2lkIF9zaHJpbmtf
YnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKCgoKICB2aXJ0dWFsIHZvaWQgX2Rvd25j
YXN0ICh2b2lkICp0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0
ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgdmlydHVhbCBDT1JCQV9PYmplY3Qg
Kl91cGNhc3QgKHZvaWQgKnNyYykgY29uc3Q7Cgpwcm90ZWN0ZWQ6CgogIFRBT19CYXNlX1NlcXVl
bmNlICh2b2lkKTsKCgogIFRBT19CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwK
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlID0gMCk7CgoKICBUQU9fQmFzZV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0s
CiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcik7CgoKCiAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSAodm9pZCkgY29uc3Q7CgpwdWJsaWM6CgoKCgogIFRBT19CYXNlX1NlcXVlbmNlIChj
b25zdCBUQU9fQmFzZV9TZXF1ZW5jZSAmcmhzKTsKICBUQU9fQmFzZV9TZXF1ZW5jZSAmb3BlcmF0
b3I9IChjb25zdCBUQU9fQmFzZV9TZXF1ZW5jZSAmcmhzKTsKCgoKCnByb3RlY3RlZDoKCgogIENP
UkJBOjpVTG9uZyBtYXhpbXVtXzsKCgogIENPUkJBOjpVTG9uZyBsZW5ndGhfOwoKCgogIHZvaWQg
KmJ1ZmZlcl87CgoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87Cn07CiMgMTQyICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNs
YXNzIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQmFzZV9TZXF1ZW5j
ZQp7CnB1YmxpYzoKIyAxNTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIKICB2b2lkIGxlbmd0aCAoQ09SQkE6OlVMb25nIGxlbmd0
aCk7CgoKCgoKCiAgQ09SQkE6OlVMb25nIGxlbmd0aCAodm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFs
IH5UQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKcHJvdGVjdGVkOgoKICBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX1VuYm91bmRlZF9CYXNlX1Nl
cXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
b2lkICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlID0gMCk7CgoKICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpV
TG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYnVmZmVy
KTsKfTsKIyAxOTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vU2VxdWVuY2UuaCIKY2xhc3MgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSA6IHB1Ymxp
YyBUQU9fQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgogIHZvaWQgbGVuZ3RoIChDT1JCQTo6VUxv
bmcgbGVuZ3RoKTsKCgoKCgoKICBDT1JCQTo6VUxvbmcgbGVuZ3RoICh2b2lkKSBjb25zdDsKCgog
IHZpcnR1YWwgflRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHZvaWQpOwoKcHJvdGVjdGVkOgoK
ICBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX0Jhc2Vf
U2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJl
bGVhc2UgPSAwKTsKCgogIFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt
YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmJ1ZmZlcik7Cn07CiMg
MjM2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl
cXVlbmNlLmgiCmNsYXNzIFRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIDogcHVibGljIFRB
T19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CgoKCgoKCgpwdWJsaWM6CiMgMjYwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAg
VEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKHZvaWQpOwojIDI3MCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIFRBT19V
bmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiMgMjg0ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNl
LmgiCiAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZGF0YSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0wKTsKIyAzMDAgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2Uu
aCIKICBUQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZShjb25zdCBUQU9fVW5ib3VuZGVkX1N0
cmluZ19TZXF1ZW5jZSYpOwoKCgogIH5UQU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZSAodm9p
ZCk7CiMgMzI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1NlcXVlbmNlLmgiCiAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJm9wZXJhdG9y
PSAoY29uc3QgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJik7CgoKICBUQU9fU2VxRWxl
bV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMg
MzQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl
cXVlbmNlLmgiCiAgc3RhdGljIGNoYXIqICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKIyAzNTAg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu
Y2UuaCIKICBzdGF0aWMgdm9pZCBmcmVlYnVmIChjaGFyICoqKTsKCgogIGNoYXIgKipnZXRfYnVm
ZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICBjb25zdCBjaGFyICoqZ2V0X2J1ZmZl
ciAodm9pZCkgY29uc3Q7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6
OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7
CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsK
fTsKIyAzNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vU2VxdWVuY2UuaCIKY2xhc3MgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlIDogcHVi
bGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CgoKCgoKCgpwdWJsaWM6CiMgMzk3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNl
LmgiCiAgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlICh2b2lkKTsKIyA0MDcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2UuaCIK
ICBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsK
IyA0MjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
U2VxdWVuY2UuaCIKICBUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9u
ZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25n
IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciAq
KmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlPTApOwojIDQzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIFRBT19VbmJvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAo
Y29uc3QgVEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlJik7CgoKCiAgflRBT19VbmJvdW5k
ZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCk7CiMgNDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgVEFPX1VuYm91bmRlZF9X
U3RyaW5nX1NlcXVlbmNlICZvcGVyYXRvcj0gKGNvbnN0IFRBT19VbmJvdW5kZWRfV1N0cmluZ19T
ZXF1ZW5jZSAmKTsKCgogIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChD
T1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMgNDc4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCiAgc3RhdGljIENPUkJBOjpXQ2hh
ciogKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpOwojIDQ4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgogIHN0YXRpYyB2b2lkIGZy
ZWVidWYgKENPUkJBOjpXQ2hhciAqKik7CgoKICBDT1JCQTo6V0NoYXIgKipnZXRfYnVmZmVyIChD
T1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICBjb25zdCBDT1JCQTo6V0NoYXIgKipnZXRfYnVm
ZmVyICh2b2lkKSBjb25zdDsKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JC
QTo6VUxvbmcgbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lk
KTsKICB2aXJ0dWFsIHZvaWQgX3Nocmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBuZXdfbGVuZ3Ro
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9sZF9sZW5ndGgp
Owp9OwoKCgpjbGFzcyBBQ0VfTWVzc2FnZV9CbG9jazsKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3Mg
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZTsKCgoKCgp0ZW1wbGF0ZTw+CiMgNTIyICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiCmNsYXNz
IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiA6IHB1YmxpYyBUQU9fVW5ib3Vu
ZGVkX0Jhc2VfU2VxdWVuY2UKewpwdWJsaWM6CgogIGZyaWVuZCBjbGFzcyBUQU9fTWFyc2hhbF9T
ZXF1ZW5jZTsKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpOwogIFRBT19VbmJvdW5k
ZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXgpOwogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2Ug
KENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25n
IGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRhdGEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwogIHZp
cnR1YWwgflRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpOwoKCgogIHN0YXRpYyB2b2lkIF90
YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgoKCgoKCiAgVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICYpOwogIFRBT19V
bmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiYgb3BlcmF0b3I9IChjb25zdCBUQU9fVW5i
b3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJik7CgoKCgoKCiAgQ09SQkE6Ok9jdGV0ICZv
cGVyYXRvcltdIChDT1JCQTo6VUxvbmcpOwogIGNvbnN0IENPUkJBOjpPY3RldCAmb3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nKSBjb25zdDsKCgoKCgogIHN0YXRpYyBDT1JCQTo6T2N0ZXQgKmFsbG9j
YnVmIChDT1JCQTo6VUxvbmcpOwoKCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6Ok9jdGV0
ICopOwoKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVu
Z3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKCgogIENPUkJB
OjpPY3RldCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgY29uc3Qg
Q09SQkE6Ok9jdGV0ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKCgoKCiAgdm9pZCByZXBsYWNl
IChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwK
ICAgICAgICAgICAgICAgIENPUkJBOjpPY3RldCAqZGF0YSwKICAgICAgICAgICAgICAgIENPUkJB
OjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKCgoKCgoKCiAgQUNFX01lc3NhZ2VfQmxvY2sqIG1iICh2
b2lkKSBjb25zdDsKCgoKICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbGVu
Z3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBt
Yik7CgoKCiAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLCBjb25zdCBBQ0VfTWVz
c2FnZV9CbG9jayogbWIpOwojIDYxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5oIgpwcml2YXRlOgogIEFDRV9NZXNzYWdlX0Jsb2Nr
KiBtYl87Cgp9OwoKCgoKICAgICAgICAgICBpbnQgb3BlcmF0b3I9PSAoY29uc3QgVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICZsLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJnIpOwoKICAgICAg
ICAgICBpbnQgb3BlcmF0b3IhPSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6
T2N0ZXQ+ICZsLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQU9fVW5ib3VuZGVk
X1NlcXVlbmNlPENPUkJBOjpPY3RldD4gJnIpOwoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmkiIDEKCgoKCgppbmxpbmUK
VEFPX0Jhc2VfU2VxdWVuY2U6OlRBT19CYXNlX1NlcXVlbmNlICh2b2lkKQogIDogbWF4aW11bV8g
KDApLAogICAgbGVuZ3RoXyAoMCksCiAgICBidWZmZXJfICgwKSwKICAgIHJlbGVhc2VfICgwKQp7
Cn0KCmlubGluZQpUQU9fQmFzZV9TZXF1ZW5jZTo6VEFPX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpV
TG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UpCiAgOiBtYXhpbXVtXyAobWF4aW11bSksCiAgICBsZW5ndGhfIChsZW5n
dGgpLAogICAgYnVmZmVyXyAoYnVmZmVyKSwKICAgIHJlbGVhc2VfIChyZWxlYXNlKQp7Cn0KCmlu
bGluZQpUQU9fQmFzZV9TZXF1ZW5jZTo6VEFPX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt
YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEp
CiAgOiBtYXhpbXVtXyAobWF4aW11bSksCiAgICBsZW5ndGhfICgwKSwKICAgIGJ1ZmZlcl8gKGRh
dGEpLAogICAgcmVsZWFzZV8gKDEpCnsKfQoKaW5saW5lClRBT19CYXNlX1NlcXVlbmNlOjpUQU9f
QmFzZV9TZXF1ZW5jZSAoY29uc3QgVEFPX0Jhc2VfU2VxdWVuY2UgJnJocykKICA6IG1heGltdW1f
IChyaHMubWF4aW11bV8pLAogICAgbGVuZ3RoXyAocmhzLmxlbmd0aF8pLAogICAgYnVmZmVyXyAo
MCksCiAgICByZWxlYXNlXyAoMSkKewp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX0Jhc2Vf
U2VxdWVuY2U6OnJlbGVhc2UgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cmVsZWFzZV87
Cn0KCmlubGluZSBUQU9fQmFzZV9TZXF1ZW5jZSAmClRBT19CYXNlX1NlcXVlbmNlOjpvcGVyYXRv
cj0gKGNvbnN0IFRBT19CYXNlX1NlcXVlbmNlICZyaHMpCnsKICB0aGlzLT5tYXhpbXVtXyA9IHJo
cy5tYXhpbXVtXzsKICB0aGlzLT5sZW5ndGhfID0gcmhzLmxlbmd0aF87CiAgdGhpcy0+cmVsZWFz
ZV8gPSAxOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpUQU9fQmFzZV9T
ZXF1ZW5jZTo6bWF4aW11bSAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5tYXhpbXVtXzsK
fQoKCgppbmxpbmUKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpUQU9fVW5ib3VuZGVkX0Jh
c2VfU2VxdWVuY2UgKHZvaWQpCnsKfQoKaW5saW5lClRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j
ZTo6ClRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19CYXNlX1NlcXVlbmNlIChtYXhp
bXVtLCBsZW5ndGgsIGJ1ZmZlciwgcmVsZWFzZSkKewp9CgppbmxpbmUKVEFPX1VuYm91bmRlZF9C
YXNlX1NlcXVlbmNlOjoKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcg
bWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIpCiAgOiBU
QU9fQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgYnVmZmVyKQp7Cn0KCmlubGluZSBDT1JCQTo6VUxv
bmcKVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpsZW5ndGggKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gdGhpcy0+bGVuZ3RoXzsKfQoKaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9CYXNlX1Nl
cXVlbmNlOjpsZW5ndGggKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAobGVuZ3RoID4gdGhp
cy0+bWF4aW11bV8pCiAgICB7CiAgICAgIHRoaXMtPl9hbGxvY2F0ZV9idWZmZXIgKGxlbmd0aCk7
CiAgICAgIHRoaXMtPm1heGltdW1fID0gbGVuZ3RoOwogICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7
CiAgICB9CiAgZWxzZSBpZiAobGVuZ3RoIDwgdGhpcy0+bGVuZ3RoXykKICAgIHsKICAgICAgdGhp
cy0+X3Nocmlua19idWZmZXIgKGxlbmd0aCwgdGhpcy0+bGVuZ3RoXyk7CiAgICB9CiAgdGhpcy0+
bGVuZ3RoXyA9IGxlbmd0aDsKfQoKCgppbmxpbmUKVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6
VEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAodm9pZCkKewp9CgppbmxpbmUKVEFPX0JvdW5kZWRf
QmFzZV9TZXF1ZW5jZTo6ClRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBt
YXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBidWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fQmFzZV9TZXF1ZW5jZSAo
bWF4aW11bSwgbGVuZ3RoLCBidWZmZXIsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19Cb3VuZGVk
X0Jhc2VfU2VxdWVuY2U6OgpUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcg
bWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogYnVmZmVyKQogIDogVEFP
X0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGJ1ZmZlcikKewp9CgppbmxpbmUgQ09SQkE6OlVMb25n
ClRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2U6Omxlbmd0aCAodm9pZCkgY29uc3QKewogIHJldHVy
biB0aGlzLT5sZW5ndGhfOwp9CgppbmxpbmUgdm9pZApUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNl
OjpsZW5ndGggKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKICBpZiAodGhpcy0+YnVmZmVyXyA9PSAw
KQogICAgewogICAgICB0aGlzLT5fYWxsb2NhdGVfYnVmZmVyICh0aGlzLT5tYXhpbXVtXyk7CiAg
ICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgIH0KCiAgaWYgKGxlbmd0aCA+IHRoaXMtPm1heGlt
dW1fKQogICAgewogICAgICByZXR1cm47CiAgICB9CiAgZWxzZSBpZiAobGVuZ3RoIDwgdGhpcy0+
bGVuZ3RoXykKICAgIHsKICAgICAgdGhpcy0+X3Nocmlua19idWZmZXIgKGxlbmd0aCwgdGhpcy0+
bGVuZ3RoXyk7CiAgICB9CgogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7Cn0KCgoKCmlubGluZQpU
QU9fVW5ib3VuZGVkX1N0cmluZ19TZXF1ZW5jZTo6VEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVu
Y2UgKHZvaWQpCnsKfQoKaW5saW5lClRBT19VbmJvdW5kZWRfU3RyaW5nX1NlcXVlbmNlOjoKVEFP
X1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIqICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2Vx
dWVuY2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19V
bmJvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTo6VEFPX1VuYm91bmRlZF9XU3RyaW5nX1NlcXVlbmNl
ICh2b2lkKQp7Cn0KCmlubGluZQpUQU9fVW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U6OgpUQU9f
VW5ib3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciogKnZhbHVlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRf
QmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9CgoKCgpp
bmxpbmUgQ09SQkE6Ok9jdGV0ICoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+
OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpCnsKICByZXR1cm4gbmV3IENPUkJBOjpPY3Rl
dFtzaXplXTsKfQoKCmlubGluZSB2b2lkClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j
dGV0Pjo6ZnJlZWJ1ZiAoQ09SQkE6Ok9jdGV0ICpidWZmZXIpCnsKICBkZWxldGUgW10gYnVmZmVy
Owp9CgoKaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6VEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZSAodm9pZCkKCiAgOiBtYl8gKDApCgp7Cn0KCgppbmxpbmUKVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlIChD
T1JCQTo6VUxvbmcgbWF4aW11bSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4
aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZTxDT1JCQTo6T2N0ZXQ+OjphbGxvY2J1ZiAobWF4aW11bSkpCgogICwgbWJfICgwKQoKewp9
CgoKaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6VEFPX1VuYm91
bmRlZF9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpPY3Rl
dCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j
ZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQoKICAsIG1iXyAoMCkKCnsKfQoKCmlu
bGluZSBjb25zdCBDT1JCQTo6T2N0ZXQgKgpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpP
Y3RldD46OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBDT1JCQTo6T2N0ZXQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwp9CgoKCgppbmxpbmUgQ09S
QkE6Ok9jdGV0ICoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpnZXRfYnVm
ZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBDT1JCQTo6T2N0ZXQgKnJlc3VsdCA9IDA7
CiAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDAp
CiAgICAgICAgewoKICAgICAgICAgIHJlc3VsdCA9IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09S
QkE6Ok9jdGV0Pjo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgICAgdGhpcy0+YnVm
ZmVyXyA9IHJlc3VsdDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB9CiAgICB9
CgogIGVsc2UgaWYgKHRoaXMtPm1iXyAhPSAwKQogICAgewojIDI5MCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIgogICAgICByZXN1
bHQgPSBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD46OmFsbG9jYnVmICh0aGlz
LT5sZW5ndGhfKTsKICAgICAgQUNFX09TOjptZW1jcHkgKHJlc3VsdCwgdGhpcy0+YnVmZmVyXywg
dGhpcy0+bGVuZ3RoXyk7CiAgICB9CiAgZWxzZSBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAg
IHsKCgogICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlz
LT5idWZmZXJfKTsKICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICB0aGlzLT5sZW5ndGhf
ID0gMDsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsK
ICAgIH0KIyAzMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vU2VxdWVuY2UuaSIKICByZXR1cm4gcmVzdWx0Owp9CgoKaW5saW5lIENPUkJBOjpPY3Rl
dCAmClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6b3BlcmF0b3JbXSAoQ09S
QkE6OlVMb25nIGkpCnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19h
Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB
Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIiwgMzI5LCAtMSwgX19h
Y2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNl
X19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJU
OiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwg
dGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09SQkE6Ok9jdGV0KiB0bXAg
PSByZWludGVycHJldF9jYXN0PENPUkJBOjpPY3RldCo+ICh0aGlzLT5idWZmZXJfKTsKICByZXR1
cm4gdG1wW2ldOwp9CgoKaW5saW5lIGNvbnN0IENPUkJBOjpPY3RldCAmClRBT19VbmJvdW5kZWRf
U2VxdWVuY2U8Q09SQkE6Ok9jdGV0Pjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0
CnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBB
Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6
aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5pIiwgMzM4LCAtMSwgX19hY2VfZXJyb3IsIGFj
ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs
bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs
aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11
bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09SQkE6Ok9jdGV0ICogY29uc3QgdG1wID0gcmVp
bnRlcnByZXRfY2FzdDxDT1JCQTo6T2N0ZXQqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRt
cFtpXTsKfQoKCgppbmxpbmUgQUNFX01lc3NhZ2VfQmxvY2sqClRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8Q09SQkE6Ok9jdGV0Pjo6bWIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+bWJfOwp9
CgoKaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+OjpyZXBs
YWNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYikKewogIHRoaXMtPl9k
ZWFsbG9jYXRlX2J1ZmZlciAoKTsKICB0aGlzLT5tYl8gPSBBQ0VfTWVzc2FnZV9CbG9jazo6ZHVw
bGljYXRlIChtYik7CiAgdGhpcy0+YnVmZmVyXyA9IHRoaXMtPm1iXy0+cmRfcHRyICgpOwogIHRo
aXMtPm1heGltdW1fID0gbGVuZ3RoOwogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgdGhpcy0+
cmVsZWFzZV8gPSAwOwp9CgoKCgppbmxpbmUgdm9pZApUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENP
UkJBOjpPY3RldD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRh
dGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
OkJvb2xlYW4gcmVsZWFzZSkKewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRoaXMtPmxlbmd0
aF8gPSBsZW5ndGg7CgoKICBpZiAodGhpcy0+bWJfICE9IDApCiAgICB7CiAgICAgIEFDRV9NZXNz
YWdlX0Jsb2NrOjpyZWxlYXNlICh0aGlzLT5tYl8pOwogICAgICB0aGlzLT5tYl8gPSAwOwogICAg
fQogIGVsc2UKCiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog
ICAgewogICAgICBDT1JCQTo6T2N0ZXQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6Ok9j
dGV0Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJB
OjpPY3RldD46OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAg
dGhpcy0+cmVsZWFzZV8gPSByZWxlYXNlOwp9CiMgNjI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDIKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIiAx
CiMgMTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
U2VxdWVuY2VfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAxOSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgi
IDIKIyAyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9TZXF1ZW5jZV9ULmgiCnRlbXBsYXRlIDxjbGFzcyBUPgpjbGFzcyBUQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgoK
ICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2UgKENPUkJBOjpVTG9uZyBtYXgpOwoKCgoKCgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKENP
UkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKCgogIFRBT19VbmJvdW5kZWRf
U2VxdWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD4gJik7CgoKICBUQU9fVW5i
b3VuZGVkX1NlcXVlbmNlPFQ+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8VD4gJik7CgoKICB+VEFPX1VuYm91bmRlZF9TZXF1ZW5jZSAodm9pZCk7CgoKCgogIFQgJm9w
ZXJhdG9yW10gKENPUkJBOjpVTG9uZyk7CgoKICBjb25zdCBUICZvcGVyYXRvcltdIChDT1JCQTo6
VUxvbmcpIGNvbnN0OwoKCgoKICBzdGF0aWMgVCAqYWxsb2NidWYgKENPUkJBOjpVTG9uZyk7CgoK
ICBzdGF0aWMgdm9pZCBmcmVlYnVmIChUICopOwoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9i
dWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9i
dWZmZXIgKHZvaWQpOwojIDEwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xl
YW4gb3JwaGFuID0gMCk7CgoKCgoKCgogIGNvbnN0IFQgKmdldF9idWZmZXIgKHZvaWQpIGNvbnN0
OwoKCgoKCgogIHZvaWQgcmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICAgICAgICAg
IENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwp9OwojIDEzNyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCnRlbXBs
YXRlIDxjbGFzcyBULCBzaXplX3QgTUFYPgpjbGFzcyBUQU9fQm91bmRlZF9TZXF1ZW5jZSA6IHB1
YmxpYyBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCiAgVEFPX0JvdW5kZWRf
U2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX0JvdW5kZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MCk7CgoKICBUQU9fQm91bmRlZF9TZXF1ZW5j
ZSAoY29uc3QgVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCxNQVg+ICYpOwoKCiAgVEFPX0JvdW5kZWRf
U2VxdWVuY2U8VCxNQVg+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQs
TUFYPiAmKTsKCgogIH5UQU9fQm91bmRlZF9TZXF1ZW5jZSAodm9pZCk7CgoKCiAgVCAmb3BlcmF0
b3JbXSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZykgY29uc3Q7CgoKCgogIHN0YXRpYyBUICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKCgogIHN0
YXRpYyB2b2lkIGZyZWVidWYgKFQgKik7CgoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZm
ZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwoKCiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1
ZmZlciAodm9pZCk7CiMgMjEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh
biBvcnBoYW4gPSAwKTsKCgoKCgoKCiAgY29uc3QgVCAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7
CgoKCgoKCiAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAg
Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7Cn07CgoKCnRlbXBsYXRlPGNsYXNzIFQs
Y2xhc3MgVF92YXI+IGNsYXNzIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlOwp0ZW1wbGF0
ZTxjbGFzcyBULGNsYXNzIFRfdmFyPiBjbGFzcyBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5j
ZTsKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGNsYXNzIFRBT19C
b3VuZGVkX09iamVjdF9TZXF1ZW5jZTsKdGVtcGxhdGU8c2l6ZV90IE1BWD4gY2xhc3MgVEFPX0Jv
dW5kZWRfU3RyaW5nX1NlcXVlbmNlOwojIDI2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCnRlbXBsYXRlPGNsYXNzIFQsIGNs
YXNzIFRfdmFyPgpjbGFzcyBUQU9fT2JqZWN0X01hbmFnZXIKewogIGZyaWVuZCBjbGFzcyBUQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjsKcHVibGljOgojIDI4MyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgi
CiAgVEFPX09iamVjdF9NYW5hZ2VyIChjb25zdCBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4g
JnJocyk7CgoKCgoKCiAgVEFPX09iamVjdF9NYW5hZ2VyIChUICoqLCBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlKTsKCgogIH5UQU9fT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKCgoKCgoKICBUQU9fT2Jq
ZWN0X01hbmFnZXI8VCxUX3Zhcj4gJm9wZXJhdG9yPSAoY29uc3QgVEFPX09iamVjdF9NYW5hZ2Vy
PFQsVF92YXI+ICZyaHMpOwoKCiAgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZvcGVyYXRv
cj0gKFQgKik7CgoKICBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJm9wZXJhdG9yPSAoY29u
c3QgVF92YXIgJik7CgoKICBUICogb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRv
ciBjb25zdCBUICooKSBjb25zdDsKCgogIG9wZXJhdG9yIFQgKiYoKTsKCgoKICBvcGVyYXRvciBj
b25zdCBUX3ZhcigpIGNvbnN0OwoKCiAgVCAqaW4gKHZvaWQpIGNvbnN0OwoKCiAgVCAqJmlub3V0
ICh2b2lkKTsKCgogIFQgKiZvdXQgKHZvaWQpOwoKCiAgVCAqX3JldG4gKHZvaWQpOwoKcHJpdmF0
ZToKCgogIFQgKipwdHJfOwoKCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZV87Cn07CgoKCgoKCgp0
ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgVEFPX1BzZXVkb19PYmplY3RfTWFu
YWdlcgp7CiAgZnJpZW5kIGNsYXNzIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92
YXI+OwpwdWJsaWM6CiMgMzY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyIChj
b25zdCBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZyaHMpOwoKCgoKCgogIFRB
T19Qc2V1ZG9fT2JqZWN0X01hbmFnZXIgKFQgKiosIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwoK
CiAgflRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXIgKHZvaWQpOwoKCgoKCgoKICBUQU9fUHNldWRv
X09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19Qc2V1ZG9fT2Jq
ZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocyk7CgoKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy
PFQsVF92YXI+ICZvcGVyYXRvcj0gKFQgKik7CgoKICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy
PFQsVF92YXI+ICZvcGVyYXRvcj0gKGNvbnN0IFRfdmFyICYpOwoKCiAgVCAqIG9wZXJhdG9yLT4g
KHZvaWQpIGNvbnN0OwoKCiAgb3BlcmF0b3IgY29uc3QgVCAqKCkgY29uc3Q7CgoKICBvcGVyYXRv
ciBUIComKCk7CgoKICBUICppbiAodm9pZCkgY29uc3Q7CgoKICBUIComaW5vdXQgKHZvaWQpOwoK
CiAgVCAqJm91dCAodm9pZCk7CgoKICBUICpfcmV0biAodm9pZCk7Cgpwcml2YXRlOgoKCiAgVCAq
KnB0cl87CgoKICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlXzsKfTsKIyA0MzMgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgp0ZW1w
bGF0ZTxjbGFzcyBULGNsYXNzIFRfdmFyPgpjbGFzcyBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1
ZW5jZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKewoKCgoKCgoKcHVibGlj
OgojIDQ1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9TZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKHZvaWQpOwoj
IDQ2OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9T
ZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKENPUkJBOjpVTG9u
ZyBtYXgpOwojIDQ4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKENP
UkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUKiAqZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFz
ZT0wKTsKIyA0OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlKGNvbnN0
IFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+ICYpOwoKCgogIH5UQU9fVW5i
b3VuZGVkX09iamVjdF9TZXF1ZW5jZSAodm9pZCk7CiMgNTIyICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fVW5ib3Vu
ZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPiAmb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3Vu
ZGVkX09iamVjdF9TZXF1ZW5jZSA8VCxUX3Zhcj4gJik7CgoKICBUQU9fT2JqZWN0X01hbmFnZXI8
VCxUX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwojIDUzOCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9U
LmgiCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKTsKIyA1NDcgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgog
IHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKiopOwoKCgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRl
X2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRl
X2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxv
bmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9u
ZyBvbGRfbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICh2b2lkKiB0YXJnZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKSk7CiAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZvaWQqIHNyYykgY29u
c3Q7Cn07CiMgNTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVf
dCBNQVg+CmNsYXNzIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91
bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgojIDU4NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAo
Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQqICp2
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVh
c2U9MCk7CgoKICBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKGNvbnN0IFRBT19Cb3VuZGVk
X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyLE1BWD4gJik7CgoKICB+VEFPX0JvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAmb3BlcmF0
b3I9IChjb25zdCBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+ICYpOwoK
CiAgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+IG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz
bG90KSBjb25zdDsKCgogIHN0YXRpYyBUICoqYWxsb2NidWYgKENPUkJBOjpVTG9uZyBsZW5ndGgp
OwoKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKipidWZmZXIpOwoKCgoKICB2aXJ0dWFsIHZv
aWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lk
IF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVy
IChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICh2b2lk
KiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZv
aWQqIHNyYykgY29uc3Q7Cn07CiMgNjQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBU
X3Zhcj4KY2xhc3MgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgOiBwdWJsaWMgVEFPX1Vu
Ym91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCgogIFRBT19VbmJvdW5kZWRfUHNldWRv
X1NlcXVlbmNlICh2b2lkKTsKCgogIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JC
QTo6VUxvbmcgbWF4KTsKCgogIFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JCQTo6
VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVM
b25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogKmRhdGEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MCk7
CgoKICBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZShjb25zdCBUQU9fVW5ib3VuZGVkX1Bz
ZXVkb19TZXF1ZW5jZTxULFRfdmFyPiAmKTsKCgogIH5UQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1
ZW5jZSAodm9pZCk7CgoKCgoKCiAgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zh
cj4gJm9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgPFQsVF92
YXI+ICYpOwoKCiAgVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiBvcGVyYXRvcltd
IChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CgoKCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAoQ09S
QkE6OlVMb25nKTsKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKiopOwoKCiAgdmlydHVhbCB2
b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogIHZpcnR1YWwgdm9p
ZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZl
ciAoQ09SQkE6OlVMb25nIG5ld19sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6VUxvbmcgb2xkX2xlbmd0aCk7Cn07CiMgNjk3ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8Y2xh
c3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+CmNsYXNzIFRBT19Cb3VuZGVkX1BzZXVkb19T
ZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlCnsKcHVibGljOgoKCgog
IFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9Qc2V1
ZG9fU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiByZWxlYXNlPTApOwoKCiAgVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChjb25z
dCBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3ZhcixNQVg+ICYpOwoKCiAgflRBT19C
b3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2Vx
dWVuY2UgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92
YXIsTUFYPiAmKTsKCgogIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gb3BlcmF0
b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwoKCiAgc3RhdGljIFQgKiphbGxvY2J1ZiAo
Q09SQkE6OlVMb25nIGxlbmd0aCk7CgoKCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoVCAqKmJ1ZmZl
cik7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0
aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2
b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmV3X2xlbmd0aCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbGRfbGVuZ3RoKTsKfTsKIyA3NTEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2Vf
VC5oIgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KY2xhc3MgVEFPX1VuYm91bmRlZF9B
cnJheV9TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKewpwdWJs
aWM6CgoKCiAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fVW5i
b3VuZGVkX0FycmF5X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4KTsKCgogIFRBT19VbmJvdW5k
ZWRfQXJyYXlfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6Qm9vbGVhbiByZWxlYXNlPTApOwoKCiAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZShj
b25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyPiAmKTsKCgogIH5UQU9f
VW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKTsKCgoKCgoKICBUQU9fVW5ib3VuZGVkX0Fy
cmF5X1NlcXVlbmNlPFQsIFRfdmFyPiAmb3BlcmF0b3I9ICgKICAgICAgY29uc3QgVEFPX1VuYm91
bmRlZF9BcnJheV9TZXF1ZW5jZSA8VCwgVF92YXI+ICYKICAgICk7CgoKCiAgVCAmb3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZykg
Y29uc3Q7CgoKCiAgc3RhdGljIFQgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpOwoKCiAgc3RhdGlj
IHZvaWQgZnJlZWJ1ZiAoVCAqKTsKCgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAo
Q09SQkE6OlVMb25nIGxlbmd0aCk7CgoKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVy
ICh2b2lkKTsKIyA4MjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFQgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9y
cGhhbiA9IDApOwoKCgoKCgoKICBjb25zdCBUICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKCgoK
CgoKICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICBDT1JC
QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgVCAqZGF0YSwKICAgICAgICAgICAgICAg
IENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKfTsKIyA4NTggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgp0ZW1wbGF0ZTxj
bGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4KY2xhc3MgVEFPX0JvdW5kZWRfQXJyYXlf
U2VxdWVuY2UgOiBwdWJsaWMgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZQp7CnB1YmxpYzoKCgoK
ICBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fQm91bmRlZF9BcnJh
eV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29s
ZWFuIHJlbGVhc2U9MCk7CgoKICBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZSAoY29uc3QgVEFP
X0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD4gJik7CgoKICB+VEFPX0JvdW5k
ZWRfQXJyYXlfU2VxdWVuY2UgKHZvaWQpOwoKCiAgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2Ug
Jm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1B
WD4gJik7CgoKCiAgVCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nKTsKCgogIGNvbnN0IFQgJm9w
ZXJhdG9yW10gKENPUkJBOjpVTG9uZykgY29uc3Q7CgoKICBzdGF0aWMgVCAqYWxsb2NidWYgKENP
UkJBOjpVTG9uZyBsZW5ndGgpOwoKCgogIHN0YXRpYyB2b2lkIGZyZWVidWYgKFQgKmJ1ZmZlcik7
CgoKCiAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgp
OwoKCiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiMgOTI1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1Qu
aCIKICBUICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKCgoKCgoKCiAg
Y29uc3QgVCAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CgoKCgoKCiAgdm9pZCByZXBsYWNlIChD
T1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAg
ICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl
YXNlID0gMCk7Cn07CiMgOTU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8c2l6ZV90IE1BWD4KY2xhc3MgVEFP
X0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIDogcHVibGljIFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVu
Y2UKewpwdWJsaWM6CiMgOTcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2Ug
KHZvaWQpOwojIDk4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JC
QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogKnZh
bHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFz
ZSA9IDApOwojIDk5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChjb25z
dCBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPiAmKTsKIyAxMDA2ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKICBU
QU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2UgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0JvdW5kZWRf
U3RyaW5nX1NlcXVlbmNlPE1BWD4gJik7CgoKCgoKCiAgflRBT19Cb3VuZGVkX1N0cmluZ19TZXF1
ZW5jZSAodm9pZCk7CgoKICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChD
T1JCQTo6VUxvbmcgc2xvdCkgY29uc3Q7CiMgMTAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIGNoYXIgKiph
bGxvY2J1ZiAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiMgMTA0MCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIHZv
aWQgZnJlZWJ1ZiAoY2hhciAqKmJ1ZmZlcik7CgoKICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1
ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1
ZmZlciAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcg
bmV3X2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBv
bGRfbGVuZ3RoKTsKfTsKIyAxMDYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIKdGVtcGxhdGU8c2l6ZV90IE1BWD4KY2xhc3Mg
VEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSA6IHB1YmxpYyBUQU9fQm91bmRlZF9CYXNlX1Nl
cXVlbmNlCnsKcHVibGljOgojIDEwNzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2Vx
dWVuY2UgKHZvaWQpOwojIDEwODkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVu
Y2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q09SQkE6OldDaGFyKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwojIDExMDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgogIFRBT19Cb3VuZGVkX1dT
dHJpbmdfU2VxdWVuY2UgKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAm
KTsKIyAxMTA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1NlcXVlbmNlX1QuaCIKICBUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlICZvcGVyYXRv
cj0gKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAmKTsKCgoKCgoKICB+
VEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCk7CgoKICBUQU9fU2VxRWxlbV9XU3Ry
aW5nX01hbmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0OwojIDExMzMg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu
Y2VfVC5oIgogIHN0YXRpYyBDT1JCQTo6V0NoYXIgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIGxl
bmd0aCk7CiMgMTE0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9TZXF1ZW5jZV9ULmgiCiAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OldDaGFy
ICoqYnVmZmVyKTsKCgogIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxv
bmcgbGVuZ3RoKTsKICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKICB2
aXJ0dWFsIHZvaWQgX3Nocmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBuZXdfbGVuZ3RoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIG9sZF9sZW5ndGgpOwp9OwoK
CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L1NlcXVlbmNlX1QuaSIgMQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQp7CiAg
cmV0dXJuIG5ldyBUW3NpemVdOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6ZnJlZWJ1ZiAoVCAqYnVmZmVyKQp7CiAgZGVsZXRlIFtd
IGJ1ZmZlcjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpUQU9fVW5ib3VuZGVkX1NlcXVl
bmNlPFQ+OjpUQU9fVW5ib3VuZGVkX1NlcXVlbmNlICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6VEFPX1VuYm91bmRlZF9TZXF1
ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVu
Y2UgKG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19VbmJvdW5k
ZWRfU2VxdWVuY2U8VD46OmFsbG9jYnVmIChtYXhpbXVtKSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OlRBT19VbmJvdW5kZWRfU2VxdWVu
Y2UgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl
YXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIGRh
dGEsIHJlbGVhc2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZTxUPjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAg
VCAqcmVzdWx0ID0gMDsKICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+
YnVmZmVyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5sZW5ndGhfID4gMCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIHJlc3VsdCA9IFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8VD46OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICAgICAgICB0aGlzLT5idWZm
ZXJfID0gcmVzdWx0OwogICAgICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHJlc3VsdCA9CiAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgICAg
fQogICAgfQogIGVsc2UKICAgIHsKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4g
KHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICAg
IHsKCgogICAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgICAgdGhpcy0+bGVuZ3Ro
XyA9IDA7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICAgIHRoaXMtPnJlbGVh
c2VfID0gMDsKICAgICAgICB9CiAgICB9CgogIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBUPiBpbmxpbmUgY29uc3QgVCAqClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OmdldF9i
dWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+
ICh0aGlzLT5idWZmZXJfKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClRBT19V
bmJvdW5kZWRfU2VxdWVuY2U8VD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVt
XyA9IG1heDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYm
IHRoaXMtPnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6
ZnJlZWJ1ZiAodG1wKTsKICAgIH0KICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICB0aGlzLT5yZWxl
YXNlXyA9IHJlbGVhc2U7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5s
aW5lIFQgKgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjphbGxvY2J1ZiAoQ09SQkE6OlVM
b25nKQp7CiAgcmV0dXJuIG5ldyBUW01BWF07Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3Qg
TUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpmcmVlYnVmIChU
ICpidWZmZXIpCnsKICBkZWxldGUgW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6
ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OlRBT19Cb3VuZGVk
X1NlcXVlbmNlICh2b2lkKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBNQVg7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBULCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6
VEFPX0JvdW5kZWRfU2VxdWVuY2UgKENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICpkYXRhLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSkKICA6IFRBT19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCBkYXRh
LCByZWxlYXNlKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBzaXplX3QgTUFYPiBpbmxpbmUgVCAq
ClRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFu
IG9ycGhhbikKewogIFQgKnJlc3VsdCA9IDA7CiAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKCiAg
ICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAgICAgICAgewogICAgICAgICAgcmVzdWx0ID0g
VEFPX0JvdW5kZWRfU2VxdWVuY2U8VCxNQVg+OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwog
ICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2Vf
ID0gMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQog
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAg
fQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAg
ICAgewoKCiAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7CiAgICAgICAgICB0aGlzLT5sZW5n
dGhfID0gMDsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgICAgdGhpcy0+cmVs
ZWFzZV8gPSAwOwogICAgICAgIH0KICAgIH0KICByZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5saW5lIGNvbnN0IFQgKgpUQU9fQm91bmRlZF9TZXF1ZW5j
ZTxULCBNQVg+OjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVCAqPiAodGhpcy0+YnVmZmVyXyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBz
aXplX3QgTUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpyZXBs
YWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUICpkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgdGhpcy0+
bGVuZ3RoXyA9IGxlbmd0aDsKICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9
PSAxKQogICAgewogICAgICBUKiB0bXAgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgICAgIFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmZyZWVidWYgKHRtcCk7
CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+cmVsZWFzZV8gPSByZWxlYXNl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1BWD4gaW5saW5lIFQgJgpUQU9fQm91bmRl
ZF9TZXF1ZW5jZTxULCBNQVg+OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKewogIGRvIHsg
aWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFz
dF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAo
KTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDE5OCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl
c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp
KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh
c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEp
OyB9IH0gd2hpbGUgKDApOwogIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5i
dWZmZXJfKTsKICByZXR1cm4gdG1wW2ldOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6ZV90IE1B
WD4gaW5saW5lIGNvbnN0IFQgJgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+OjpvcGVyYXRv
cltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11
bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19N
c2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1Qu
aSIsIDIwNiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNn
X29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VS
Uk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAn
JXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDApOwogIGNv
bnN0IFQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCo+ICh0aGlzLT5idWZmZXJfKTsK
ICByZXR1cm4gdG1wW2ldOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBp
bmxpbmUKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+Ojp+VEFPX09iamVjdF9NYW5hZ2VyICh2
b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19PYmpl
Y3RfTWFuYWdlcjxULFRfdmFyPjo6VEFPX09iamVjdF9NYW5hZ2VyIChjb25zdCBUQU9fT2JqZWN0
X01hbmFnZXI8VCxUX3Zhcj4gJnJocykKICA6IHB0cl8gKHJocy5wdHJfKSwKICAgIHJlbGVhc2Vf
IChyaHMucmVsZWFzZV8pCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxp
bmUKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjpUQU9fT2JqZWN0X01hbmFnZXIoVCoqIGJ1
ZmZlciwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IHB0cl8gKGJ1ZmZlciksCiAgICByZWxl
YXNlXyAocmVsZWFzZSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGlu
ZSBUICoKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvci0+ICh2b2lkKSBjb25z
dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92
YXI+IGlubGluZQpUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0IFRf
dmFyICgpIGNvbnN0CnsKICByZXR1cm4gVF92YXI6OmR1cGxpY2F0ZSAoKnRoaXMtPnB0cl8pOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fT2JqZWN0X01hbmFn
ZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0IFQqICgpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19PYmpl
Y3RfTWFuYWdlcjxULFRfdmFyPjo6b3BlcmF0b3IgVCogJigpCnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKgpUQU9fT2Jq
ZWN0X01hbmFnZXI8VCxUX3Zhcj46OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUIComClRBT19P
YmplY3RfTWFuYWdlcjxULFRfdmFyPjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fUHNl
dWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+Ojp+VEFPX1BzZXVkb19PYmplY3RfTWFuYWdlciAo
dm9pZCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fUHNl
dWRvX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjoKICAgIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFn
ZXIgKGNvbnN0IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocykKICA6IHB0
cl8gKHJocy5wdHJfKSwKICAgIHJlbGVhc2VfIChyaHMucmVsZWFzZV8pCnsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxU
LFRfdmFyPjo6CiAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyKFQqKiBidWZmZXIsIENPUkJB
OjpCb29sZWFuIHJlbGVhc2UpCiAgOiBwdHJfIChidWZmZXIpLAogICAgcmVsZWFzZV8gKHJlbGVh
c2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUgVCAqClRBT19Q
c2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g
aW5saW5lClRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yIGNvbnN0
IFQqICgpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46
Om9wZXJhdG9yIFQqICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUICoKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxU
LFRfdmFyPjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCnRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKiYKVEFPX1BzZXVkb19PYmplY3Rf
TWFuYWdlcjxULFRfdmFyPjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIFQgKiYKVEFPX1BzZXVkb19P
YmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbGVhc2UgKCp0
aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IFQ6Ol9uaWwgKCk7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUICoKVEFPX1Bz
ZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6X3JldG4gKHZvaWQpCnsKICBUICp0ZW1wID0g
KnRoaXMtPnB0cl87CiAgKnRoaXMtPnB0cl8gPSBUOjpfbmlsICgpOwogIHJldHVybiB0ZW1wOwp9
CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lClRBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j
ZSAodm9pZCkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUKiAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5n
dGgsIHZhbHVlLCByZWxlYXNlKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g
aW5saW5lIFRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPgpUQU9fVW5ib3VuZGVkX09iamVjdF9T
ZXF1ZW5jZTxULFRfdmFyPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpIGNvbnN0CnsK
ICBkbyB7IGlmKCEoc2xvdCA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBB
Q0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6
aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmkiLCAzNjQsIC0xLCBfX2FjZV9lcnJvciwg
YWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19j
YWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4s
IGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgInNsb3QgPCB0aGlzLT5t
YXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBUICoqIGNvbnN0IHRtcCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJldHVybiBUQU9fT2JqZWN0X01hbmFn
ZXI8VCxUX3Zhcj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRl
PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfT2Jq
ZWN0X1NlcXVlbmNlPFQsVF92YXIsTUFYPjo6flRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAo
dm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfT2JqZWN0X1Nl
cXVlbmNlPFQsVF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoQ09SQkE6
OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICoqdmFsdWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRB
T19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBUQU9f
T2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4KVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRf
dmFyLE1BWD46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBzbG90KSBjb25zdAp7CiAgZG8geyBp
ZighKHNsb3QgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps
YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl
ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgMzkxLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+
cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sg
KCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVs
IGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJzbG90IDwgdGhpcy0+bWF4aW11bV8i
LCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgVCAqKmNvbnN0IHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJldHVybiBUQU9fT2JqZWN0X01hbmFnZXI8VCxUX3Zh
cj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgVF92YXI+IGlubGluZQpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRf
dmFyPjo6VEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCnsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVu
Y2U8VCxUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAoQ09SQkE6OlVMb25n
IG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVu
Z3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVCogKnZhbHVlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJv
dW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBUQU9fUHNldWRvX09iamVj
dF9NYW5hZ2VyPFQsVF92YXI+ClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+
OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3QKewogIGRvIHsgaWYoIShzbG90
IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJv
ciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNl
X19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1NlcXVlbmNlX1QuaSIsIDQxOSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQg
KCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNl
X19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRp
b24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAic2xvdCA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9
IH0gd2hpbGUgKDApOwogIFQgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAo
dGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zh
cj4gKHRtcCArIHNsb3QsIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRlPGNsYXNzIFQs
IGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVl
bmNlPFQsVF92YXIsTUFYPjo6flRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAodm9pZCkKewog
IHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQs
VF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIGxl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUICoqdmFsdWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19Cb3VuZGVk
X0Jhc2VfU2VxdWVuY2UgKE1BWCwgbGVuZ3RoLCB2YWx1ZSwgcmVsZWFzZSkKewp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBUQU9fUHNldWRvX09i
amVjdF9NYW5hZ2VyPFQsVF92YXI+ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3Zh
cixNQVg+OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29uc3QKewogIGRvIHsgaWYo
IShzbG90IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFz
dF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAo
KTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDQ0NiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl
c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp
KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh
c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAic2xvdCA8IHRoaXMtPm1heGltdW1fIiwg
LTEpOyB9IH0gd2hpbGUgKDApOwogIFQgKipjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PFQg
Kio+ICh0aGlzLT5idWZmZXJfKTsKCiAgcmV0dXJuIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8
VCxUX3Zhcj4gKHRtcCArIHNsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRoaXMtPnJlbGVhc2VfKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBUX3Zhcj4gaW5saW5lIHZvaWQKVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh
cj46OmZyZWVidWYgKFQgKmJ1ZmZlcikKewogIGlmIChidWZmZXIgPT0gMCkKICAgIHJldHVybjsK
CiAgZGVsZXRlIFtdIGJ1ZmZlcjsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4g
aW5saW5lClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpUQU9fVW5ib3Vu
ZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKQp7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBU
X3Zhcj4gaW5saW5lClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjoKVEFP
X1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjphbGxvY2J1
ZiAobWF4aW11bSkpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUK
VEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX0Fy
cmF5X1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVCAqdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFu
IHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0
aCwgdmFsdWUsIHJlbGVhc2UpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBp
bmxpbmUgVCAmClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpvcGVyYXRv
cltdIChDT1JCQTo6VUxvbmcgaSkKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7
IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFj
ZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaSIsIDQ5
MywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJl
YW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAi
QUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVh
XG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDApOwoKCgoKICByZXR1
cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8VCo+ICh0aGlzLT5idWZmZXJfKSlbaV07Cgp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IGlubGluZSBjb25zdCBUICYKVEFPX1VuYm91bmRlZF9B
cnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25z
dAp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0g
QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6
Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgNTA1LCAtMSwgX19hY2VfZXJyb3Is
IGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2df
Y2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVO
LCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4
aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CgoKCgogIHJldHVybiAocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUKj4gKHRoaXMtPmJ1ZmZlcl8pKVtpXTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBULCBj
bGFzcyBUX3Zhcj4gaW5saW5lIFQgKgpUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRf
dmFyPjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAgVCAqcmVzdWx0ID0g
MDsKICBpZiAob3JwaGFuID09IDApCiAgICB7CgoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0g
MCkKICAgICAgICB7CiAgICAgICAgICBpZiAodGhpcy0+bGVuZ3RoXyA+IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICAgICAgVEFPX1VuYm91bmRlZF9B
cnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OmFsbG9jYnVmICgKICAgICAgICAgICAgICAgICAgICB0
aGlzLT5sZW5ndGhfCiAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgdGhpcy0+YnVm
ZmVyXyA9IHJlc3VsdDsKICAgICAgICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICByZXN1bHQgPQog
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICAg
IH0KICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAg
ICAgIHsKCgogICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMtPmJ1
ZmZlcl8pOwoKICAgICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICAgIHRoaXMtPmxl
bmd0aF8gPSAwOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgICB0aGlzLT5y
ZWxlYXNlXyA9IDA7CiAgICAgICAgfQogICAgfQogIHJldHVybiByZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gaW5saW5lIGNvbnN0IFQgKgpUQU9fVW5ib3VuZGVkX0Fy
cmF5X1NlcXVlbmNlPFQsIFRfdmFyPjo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKewogIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKfQoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBpbmxpbmUgdm9pZApUQU9fVW5ib3VuZGVkX0FycmF5
X1NlcXVlbmNlPFQsIFRfdmFyPjo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxl
bmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRo
aXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgaWYgKHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFz
ZV8gPT0gMSkKICAgIHsKICAgICAgVCAqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMt
PmJ1ZmZlcl8pOwoKICAgICAgVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46
OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+cmVs
ZWFzZV8gPSByZWxlYXNlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBz
aXplX3QgTUFYPiBpbmxpbmUgdm9pZApUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh
ciwgTUFYPjo6ZnJlZWJ1ZiAoVCAqYnVmZmVyKQp7CiAgaWYgKGJ1ZmZlciA9PSAwKQogICAgcmV0
dXJuOwoKICBkZWxldGUgW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92
YXIsIHNpemVfdCBNQVg+IGlubGluZQpUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh
ciwgTUFYPjo6ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlICh2b2lkKQogIDogVEFPX0JvdW5k
ZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLCAwLCBhbGxvY2J1ZiAoTUFYKSwgMSkKewp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZQpUQU9fQm91bmRlZF9B
cnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNl
IChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVCAqZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg
OiBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChNQVgsIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkK
ewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IGlubGluZSBU
ICYKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD46Om9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBpKQp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5pIiwgNjE1LCAt
MSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAo
KSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0Vf
QVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIs
ICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CgoKCgogIHJldHVybiAo
cmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMtPmJ1ZmZlcl8pKVtpXTsKCn0KCnRlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4gaW5saW5lIGNvbnN0IFQgJgpUQU9fQm91
bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGkpIGNvbnN0CnsKICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19h
Y2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBB
Q0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmkiLCA2MjcsIC0xLCBf
X2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBh
Y2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NF
UlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkg
PCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKCgoKCiAgcmV0dXJuIChyZWlu
dGVycHJldF9jYXN0PGNvbnN0IFQqPiAodGhpcy0+YnVmZmVyXykpW2ldOwoKfQoKdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiBpbmxpbmUgVCAqClRBT19Cb3VuZGVk
X0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh
biBvcnBoYW4pCnsKICBUICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCgog
ICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHJlc3VsdCA9
CiAgICAgICAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+Ojph
bGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3Vs
dDsKICAgICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICByZXN1bHQgPQogICAgICAgICAgICByZWludGVycHJldF9jYXN0PFQq
PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYg
KHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAgICAgewoKCiAgICAgICAgICByZXN1bHQgPSByZWlu
dGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgICB0aGlzLT5tYXhpbXVt
XyA9IDA7CiAgICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICAgIHRoaXMtPmJ1ZmZl
cl8gPSAwOwogICAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICAgIH0KICAgIH0KICBy
ZXR1cm4gcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBN
QVg+IGlubGluZSBjb25zdCBUICoKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIs
IE1BWD46OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBUICo+ICh0aGlzLT5idWZmZXJfKTsKCn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFz
cyBUX3Zhciwgc2l6ZV90IE1BWD4gaW5saW5lIHZvaWQKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVu
Y2U8VCwgVF92YXIsIE1BWD46OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBs
ZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVtXyA9IG1h
eDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYmIHRoaXMt
PnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIFQqIHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+
ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRf
dmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwogICAgfQogIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwog
IHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+IGlu
bGluZQpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6flRBT19Cb3VuZGVkX1N0cmlu
Z19TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1ZmZlciAoKTsKfQoKdGVt
cGxhdGU8c2l6ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+
OjoKVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip2YWx1ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIDogVEFPX0JvdW5kZWRfQmFzZV9T
ZXF1ZW5jZSAoTUFYLCBsZW5ndGgsIHZhbHVlLCByZWxlYXNlKQp7Cn0KCgoKCgp0ZW1wbGF0ZTxz
aXplX3QgTUFYPiBpbmxpbmUKVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojp+VEFP
X0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1
ZmZlciAoKTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gaW5saW5lClRBT19Cb3VuZGVkX1dTdHJp
bmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKENPUkJBOjpV
TG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpXQ2hhciAq
KnZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl
YXNlKQogIDogVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLCBsZW5ndGgsIHZhbHVlLCBy
ZWxlYXNlKQp7Cn0KIyAxMTU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcXVlbmNlX1QuaCIgMgojIDExNjQgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAi
IDEKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vU2VxdWVuY2VfVC5oIiAxCiMgNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmNwcCIgMgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW52aXJvbm1lbnQuaCIgMQojIDgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVu
Y2VfVC5jcHAiIDIKCgoKCgppbmxpbmUgY29uc3QgY2hhciogZ2V0X3Jjc2lkX3Rhb19TZXF1ZW5j
ZV9UIChjb25zdCBjaGFyKikgeyByZXR1cm4gIlNlcXVlbmNlX1QuY3BwLHYgMS40NSAyMDAxLzA0
LzI0IDEzOjQ0OjQzIHBhcnNvbnMgRXhwIiA7IH0gc3RhdGljIGNvbnN0IGNoYXIqIHJjc2lkX3Rh
b19TZXF1ZW5jZV9UID0gZ2V0X3Jjc2lkX3Rhb19TZXF1ZW5jZV9UICggcmNzaWRfdGFvX1NlcXVl
bmNlX1QgKSA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6
ClRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD4g
JnJocykKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJocy5i
dWZmZXJfICE9IDApCiAgICB7CiAgICAgIFQgKnRtcDEgPSBUQU9fVW5ib3VuZGVkX1NlcXVlbmNl
PFQ+OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICBUICogY29uc3QgdG1wMiA9CiAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxUICo+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENP
UkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgICB7CiAgICAg
ICAgICB0bXAxW2ldID0gdG1wMltpXTsKICAgICAgICB9CgogICAgICB0aGlzLT5idWZmZXJfID0g
dG1wMTsKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPiAmClRBT19VbmJv
dW5kZWRfU2VxdWVuY2U8VD46Om9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZTxUPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsKCiAgaWYg
KHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4
aW11bV8pCiAgICAgICAgewoKICAgICAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAq
PiAodGhpcy0+YnVmZmVyXyk7CgogICAgICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxUPjo6
ZnJlZWJ1ZiAodG1wKTsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9f
VW5ib3VuZGVkX1NlcXVlbmNlPFQ+OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9
CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiAocmhzLm1heGltdW1fID09IDApCiAgICAgICAg
ewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAgIFRBT19VbmJvdW5kZWRf
U2VxdWVuY2U8VD46OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICAgIH0KICAgIH0KCiAg
VEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIFQgKnRtcDEg
PSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFQgKiBjb25zdCB0bXAy
ID0gcmVpbnRlcnByZXRfY2FzdDxUICo+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVM
b25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgdG1wMVtpXSA9IHRtcDJbaV07
CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4KVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZTxUPjo6flRBT19VbmJvdW5kZWRfU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxv
Y2F0ZV9idWZmZXIgKCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQKVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZTxUPjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewogIFQq
IHRtcCA9IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46OmFsbG9jYnVmIChsZW5ndGgpOwoKICBp
ZiAodGhpcy0+YnVmZmVyXyAhPSAwKQogICAgewogICAgICBUICpvbGQgPSByZWludGVycHJldF9j
YXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw
OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHRtcFtpXSA9IG9sZFtpXTsKCiAgICAg
IGlmICh0aGlzLT5yZWxlYXNlXykKICAgICAgICBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPFQ+Ojpm
cmVlYnVmIChvbGQpOwogICAgfQoKICB0aGlzLT5idWZmZXJfID0gdG1wOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBUPiB2b2lkClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46Ol9kZWFsbG9jYXRlX2J1ZmZl
ciAodm9pZCkKewogIGlmICh0aGlzLT5yZWxlYXNlXyA9PSAwKQogICAgcmV0dXJuOwoKICBUICp0
bXAgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZTxUPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gVCAmClRBT19VbmJvdW5kZWRfU2VxdWVuY2U8VD46Om9wZXJh
dG9yW10gKENPUkJBOjpVTG9uZyBpKQp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykp
IHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAq
YWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAi
LCAxMjUsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v
c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP
UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz
Jy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBUKiB0
bXAgPSByZWludGVycHJldF9jYXN0PFQqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtp
XTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY29uc3QgVCAmClRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8VD46Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAp7CiAgZG8geyBpZighKGkg
PCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y
ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf
X18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vU2VxdWVuY2VfVC5jcHAiLCAxMzUsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0
ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFj
ZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0
aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9
IHdoaWxlICgwKTsKICBUICogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKj4gKHRoaXMt
PmJ1ZmZlcl8pOwogIHJldHVybiB0bXBbaV07Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgc2l6
ZV90IE1BWD4KVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6ClRBT19Cb3VuZGVkX1NlcXVl
bmNlIChjb25zdCBUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+ICZyaHMpCiAgOiBUQU9fQm91
bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsK
ICAgICAgVCAqdG1wMSA9IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmFsbG9jYnVmIChN
QVgpOwoKICAgICAgVCAqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCAq
PiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlz
LT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CiAg
ICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewog
ICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIHNpemVf
dCBNQVg+IFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD4gJgpUQU9fQm91bmRlZF9TZXF1ZW5j
ZTxULCBNQVg+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+
ICZyaHMpCnsKICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhp
cy0+cmVsZWFzZV8pCiAgICB7CgoKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmIChyaHMubWF4
aW11bV8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0KICAgICAg
ICAgICAgVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6YWxsb2NidWYgKHJocy5tYXhpbXVt
Xyk7CiAgICAgICAgfQogICAgfQoKICBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRv
cj0gKHJocyk7CgogIFQqIHRtcDEgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZl
cl8pOwogIFQqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFQgKj4gKHJocy5idWZmZXJf
KTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAg
ICB0bXAxW2ldID0gdG1wMltpXTsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBU
LCBzaXplX3QgTUFYPgpUQU9fQm91bmRlZF9TZXF1ZW5jZTxULCBNQVg+Ojp+VEFPX0JvdW5kZWRf
U2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxvY2F0ZV9idWZmZXIgKCk7Cn0KCnRlbXBs
YXRlPGNsYXNzIFQsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFY
Pjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nKQp7CgoKICB0aGlzLT5idWZmZXJfID0g
VEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6YWxsb2NidWYgKE1BWCk7Cn0KCnRlbXBsYXRl
PGNsYXNzIFQsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU2VxdWVuY2U8VCwgTUFYPjo6
X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2VfID09IDApCiAg
ICByZXR1cm47CgogIFQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqPiAodGhpcy0+YnVmZmVy
Xyk7CgogIFRBT19Cb3VuZGVkX1NlcXVlbmNlPFQsIE1BWD46OmZyZWVidWYgKHRtcCk7CiAgdGhp
cy0+YnVmZmVyXyA9IDA7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFRB
T19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiYKVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+OjoK
ICAgIG9wZXJhdG9yPSAoY29uc3QgVEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICZyaHMpCnsK
ICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoKICBpZiAodGhpcy0+cmVsZWFz
ZV8pCiAgICB7CiAgICAgIFRfdmFyOjpyZWxlYXNlICgqdGhpcy0+cHRyXyk7CiAgICAgICp0aGlz
LT5wdHJfID0gVF92YXI6OmR1cGxpY2F0ZSAoKnJocy5wdHJfKTsKICAgIH0KICBlbHNlCiAgICAq
dGhpcy0+cHRyXyA9ICpyaHMucHRyXzsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVF92YXI+VEFPX09iamVjdF9NYW5hZ2VyPFQsVF92YXI+ICYKVEFPX09iamVj
dF9NYW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvcj0oVCogcCkKewogIGlmICh0aGlzLT5yZWxlYXNl
XykKICAgIHsKCgoKCiAgICAgIFRfdmFyOjpyZWxlYXNlICgqdGhpcy0+cHRyXyk7CiAgICAgICp0
aGlzLT5wdHJfID0gcDsKICAgIH0KICBlbHNlCiAgICAqdGhpcy0+cHRyXyA9IHA7CgogIHJldHVy
biAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPlRBT19PYmplY3RfTWFu
YWdlcjxULFRfdmFyPiAmClRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3BlcmF0b3I9KGNv
bnN0IFRfdmFyICZwKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewoKCgoKICAgICAgVF92
YXI6OnJlbGVhc2UgKCp0aGlzLT5wdHJfKTsKICAgICAgKnRoaXMtPnB0cl8gPSBUX3Zhcjo6ZHVw
bGljYXRlIChwLmluICgpKTsKICAgIH0KICBlbHNlCiAgICAqdGhpcy0+cHRyXyA9IHAuaW4gKCk7
CgogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBUICom
ClRBT19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6b3V0ICh2b2lkKQp7CiAgVF92YXI6OnJlbGVh
c2UgKCp0aGlzLT5wdHJfKTsKICAqdGhpcy0+cHRyXyA9IFRfdmFyOjpuaWwgKCk7CiAgcmV0dXJu
ICp0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFQgKgpUQU9f
T2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Ol9yZXRuICh2b2lkKQp7CiAgVCAqdGVtcCA9ICp0aGlz
LT5wdHJfOwogICp0aGlzLT5wdHJfID0gVF92YXI6Om5pbCAoKTsKICByZXR1cm4gdGVtcDsKfQoK
CgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVEFPX1BzZXVkb19PYmplY3RfTWFu
YWdlcjxULFRfdmFyPiYKVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPjo6CiAgICBv
cGVyYXRvcj0gKGNvbnN0IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJnJocykK
ewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxl
YXNlXykKICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKCp0aGlzLT5wdHJfKTsKICAgICAgKnRo
aXMtPnB0cl8gPSBUOjpfZHVwbGljYXRlICgqcmhzLnB0cl8pOwogICAgfQogIGVsc2UKICAgICp0
aGlzLT5wdHJfID0gKnJocy5wdHJfOwoKICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBULCBjbGFzcyBUX3Zhcj4gVEFPX1BzZXVkb19PYmplY3RfTWFuYWdlcjxULFRfdmFyPiAmClRB
T19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj46Om9wZXJhdG9yPShUKiBwKQp7CiAgaWYg
KHRoaXMtPnJlbGVhc2VfKQogICAgewoKCgoKICAgICAgQ09SQkE6OnJlbGVhc2UgKCp0aGlzLT5w
dHJfKTsKICAgICAgKnRoaXMtPnB0cl8gPSBwOwogICAgfQogIGVsc2UKICAgICp0aGlzLT5wdHJf
ID0gcDsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+
IFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8VCxUX3Zhcj4gJgpUQU9fUHNldWRvX09iamVjdF9N
YW5hZ2VyPFQsVF92YXI+OjpvcGVyYXRvcj0oY29uc3QgVF92YXIgJnApCnsKICBpZiAodGhpcy0+
cmVsZWFzZV8pCiAgICB7CgoKCgogICAgICBDT1JCQTo6cmVsZWFzZSAoKnRoaXMtPnB0cl8pOwog
ICAgICAqdGhpcy0+cHRyXyA9IFQ6Ol9kdXBsaWNhdGUgKHAuaW4gKCkpOwogICAgfQogIGVsc2UK
ICAgICp0aGlzLT5wdHJfID0gcC5pbiAoKTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4KVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8
VCxUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoQ09SQkE6OlVMb25nIG1h
eGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQs
VF92YXI+OjphbGxvY2J1ZiAobWF4aW11bSkpCnsKfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNz
IFRfdmFyPgpUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19VbmJv
dW5kZWRfT2JqZWN0X1NlcXVlbmNlIChjb25zdCBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j
ZTxULFRfdmFyPiAmcmhzKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsK
ICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqKnRtcDEgPQogICAgICAgIFRB
T19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAodGhpcy0+bWF4
aW11bV8pOwogICAgICBUICoqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
VCAqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwg
cmhzLmxlbmd0aF87ICsraSkKICAgICAgICB7CiAgICAgICAgICB0bXAxW2ldID0gVF92YXI6OmR1
cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7
CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVt
cGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+ClRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNl
PFQsVF92YXI+Ojp+VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlz
LT5fZGVhbGxvY2F0ZV9idWZmZXIgKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92
YXI+VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3Zhcj4mClRBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3VuZGVk
X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAg
IHJldHVybiAqdGhpczsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBUICoqdG1w
ID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CgoKICAgICAgZm9yIChD
T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAg
ICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBbaV0gPSBUX3Zhcjo6
bmlsICgpOwogICAgICAgIH0KICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGltdW1f
KQogICAgICAgIHsKICAgICAgICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92
YXI+OjpmcmVlYnVmICh0bXApOwogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAg
IFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhzLm1h
eGltdW1fKTsKICAgICAgICB9CiAgICB9CiAgZWxzZQogICAgewogICAgICBpZiAocmhzLm1heGlt
dW1fID09IDApCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAg
ICAgIFRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhz
Lm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j
ZTo6b3BlcmF0b3I9IChyaHMpOwoKICBUICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4g
KHRoaXMtPmJ1ZmZlcl8pOwogIFQgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAq
Kj4gKHJocy5idWZmZXJfKTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCByaHMubGVu
Z3RoXzsgKytpKQogICAgdG1wMVtpXSA9IFRfdmFyOjpkdXBsaWNhdGUgKHRtcDJbaV0pOwoKICBy
ZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVCAqKgpUQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKENPUkJBOjpVTG9u
ZyBuZWxlbXMpCnsKICBUICoqYnVmID0gMDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVCpbbmVs
ZW1zXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7
IGkgPCBuZWxlbXM7IGkrKykKICAgIGJ1ZltpXSA9IFRfdmFyOjpuaWwgKCk7CgogIHJldHVybiBi
dWY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVk
X09iamVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAoVCAqKmJ1ZmZlcikKewogIGlmIChi
dWZmZXIgPT0gMCkKICAgIHJldHVybjsKIyA0ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAiCiAgZGVsZXRlW10gYnVmZmVy
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX09i
amVjdF9TZXF1ZW5jZTxULFRfdmFyPjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxl
bmd0aCkKewogIFQgKip0bXAgPSBUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULFRfdmFy
Pjo6YWxsb2NidWYgKGxlbmd0aCk7CgogIGlmICh0aGlzLT5idWZmZXJfICE9IDApCiAgICB7CiAg
ICAgIFQgKipvbGQgPSByZWludGVycHJldF9jYXN0PFQqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAg
ICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKCgoKCgog
ICAgICAgIGlmICghdGhpcy0+cmVsZWFzZV8pCiAgICAgICAgICB0bXBbaV0gPSBUX3Zhcjo6ZHVw
bGljYXRlIChvbGRbaV0pOwogICAgICAgIGVsc2UKICAgICAgICAgIHRtcFtpXSA9IG9sZFtpXTsK
CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXykKICAgICAgICBkZWxldGVbXSBvbGQ7CiAgICB9CiAg
dGhpcy0+YnVmZmVyXyA9IHRtcDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IHZv
aWQKVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3Zhcj46Ol9kZWFsbG9jYXRlX2J1
ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5idWZmZXJfID09IDAgfHwgdGhpcy0+cmVsZWFzZV8g
PT0gMCkKICAgIHJldHVybjsKICBUICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUKio+ICh0aGlz
LT5idWZmZXJfKTsKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87
ICsraSkKICAgIHsKICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgIHRtcFtpXSA9
IFRfdmFyOjpuaWwgKCk7CiAgICB9CiAgVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxU
X3Zhcj46OmZyZWVidWYgKHRtcCk7CiAgdGhpcy0+YnVmZmVyXyA9IDA7Cn0KCnRlbXBsYXRlPGNs
YXNzIFQsIGNsYXNzIFRfdmFyPiB2b2lkClRBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQs
VF92YXI+Ojpfc2hyaW5rX2J1ZmZlciAoQ09SQkE6OlVMb25nIG5sLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIFQg
Kip0bXAgPSBzdGF0aWNfY2FzdDxUKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgZm9yIChDT1JCQTo6
VUxvbmcgaSA9IG5sOyBpIDwgb2w7ICsraSkKICAgIHsKICAgICAgVF92YXI6OnJlbGVhc2UgKHRt
cFtpXSk7CiAgICAgIHRtcFtpXSA9IFRfdmFyOjpuaWwgKCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZTxU
LFRfdmFyPjo6X2Rvd25jYXN0ICh2b2lkKiB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX09iamVjdCogc3JjLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIFQgKip0bXAgPSBzdGF0aWNf
Y2FzdDxUKio+ICh0YXJnZXQpOwoKICAqdG1wID0gVF92YXI6Om5hcnJvdyAoc3JjLCBfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgICAgICAgICAgOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVF92YXI+IENPUkJBX09iamVjdCoKVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx
dWVuY2U8VCxUX3Zhcj46Ol91cGNhc3QgKHZvaWQqIHNyYykgY29uc3QKewogIHJldHVybiBUX3Zh
cjo6dXBjYXN0IChzcmMpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBz
aXplX3QgTUFYPgpUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6ClRB
T19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAodm9pZCkKICA6IFRBT19Cb3VuZGVkX0Jhc2VfU2Vx
dWVuY2UgKE1BWCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fQm91bmRlZF9P
YmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYgKE1BWCkpCnsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPgpUQU9fQm91bmRlZF9PYmplY3Rf
U2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6ClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZSAoY29u
c3QgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1BWD4gJnJocykKICA6IFRB
T19Cb3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQog
ICAgewogICAgICBUICoqdG1wMSA9CiAgICAgICAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNl
PFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChNQVgpOwoKICAgICAgVCAqKiBjb25zdCB0bXAyID0K
ICAgICAgICByZWludGVycHJldF9jYXN0PFQqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAo
Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87IGkrKykKICAgICAgICB7CiAgICAg
ICAgICB0bXAxW2ldID0gVF92YXI6OmR1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAg
ICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5i
dWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXpl
X3QgTUFYPiBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPiYKVEFPX0Jv
dW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFP
X0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92YXIsIE1BWD4gJnJocykKewogIGlmICh0aGlz
ID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsK
ICAgICAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoK
ICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAg
ICAgICAgewogICAgICAgICAgVF92YXI6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBb
aV0gPSBUX3Zhcjo6bmlsICgpOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAg
aWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8g
PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZl
cl8gPQogICAgICAgICAgICBUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+
OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19Cb3VuZGVk
X0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgVCAqKnRtcDEgPSByZWludGVycHJl
dF9jYXN0PFQgKio+ICh0aGlzLT5idWZmZXJfKTsKICBUICoqIGNvbnN0IHRtcDIgPSByZWludGVy
cHJldF9jYXN0PFQgKio+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGk9MDsg
aSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICB7CiAgICAgIHRtcDFbaV0gPSBUX3Zhcjo6ZHVwbGlj
YXRlICh0bXAyW2ldKTsKICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFQgKioKVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVl
bmNlPFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcpCnsKICBUICoqYnVmID0g
MDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVCpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs
b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgw
KTsKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIHsKICAgICAg
YnVmW2ldID0gVF92YXI6Om5pbCAoKTsKICAgIH0KCiAgcmV0dXJuIGJ1ZjsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX09iamVj
dF9TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpmcmVlYnVmIChUICoqYnVmZmVyKQp7CgoKCiAgZm9y
IChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZl
cltpXSAhPSBUX3Zhcjo6bmlsICgpKQogICAgICAgIHsKICAgICAgICAgIFRfdmFyOjpyZWxlYXNl
IChidWZmZXJbaV0pOwogICAgICAgICAgYnVmZmVyW2ldID0gVF92YXI6Om5pbCAoKTsKICAgICAg
ICB9CiAgICB9CgogIGRlbGV0ZVtdIGJ1ZmZlcjsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3Mg
VF92YXIsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRf
dmFyLE1BWD46Ol9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpCnsKCgogIHRo
aXMtPmJ1ZmZlcl8gPQogICAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsIFRfdmFyLE1B
WD46OmFsbG9jYnVmIChsZW5ndGgpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwg
c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9PYmplY3RfU2VxdWVuY2U8VCxUX3ZhcixNQVg+
OjpfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+cmVsZWFzZV8gPT0gMCkK
ICAgIHsKICAgICAgcmV0dXJuOwogICAgfQoKICBUICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxU
ICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgVEFPX0JvdW5kZWRfT2JqZWN0X1NlcXVlbmNlPFQsVF92
YXIsTUFYPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsKfQoKdGVtcGxhdGU8
Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlPFQsVF92YXIsIE1BWD46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmws
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OlVMb25nIG9sKQp7CiAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4g
KHRoaXMtPmJ1ZmZlcl8pOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytp
KQogICAgewogICAgICBUX3Zhcjo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVF92
YXI6Om5pbCAoKTsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXpl
X3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX09iamVjdF9TZXF1ZW5jZTxULCBUX3ZhcixNQVg+Ojpf
ZG93bmNhc3QgKHZvaWQqIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ09SQkFfT2JqZWN0KiBzcmMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVCAqKnRtcCA9IHN0YXRpY19jYXN0
PFQqKj4gKHRhcmdldCk7CgogICp0bXAgPSBUX3Zhcjo6bmFycm93IChzcmMsIF9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKICAgICAgICAgICA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
LCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4gQ09SQkFfT2JqZWN0KgpUQU9fQm91bmRlZF9PYmpl
Y3RfU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X3VwY2FzdCAodm9pZCogc3JjKSBjb25zdAp7CiAg
cmV0dXJuIFRfdmFyOjp1cGNhc3QgKHNyYyk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQsIGNs
YXNzIFRfdmFyPgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ClRBT19V
bmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlIChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICA6IFRBT19V
bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46OmFsbG9jYnVm
IChtYXhpbXVtKSkKewp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+ClRBT19VbmJv
dW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+OjoKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2Vx
dWVuY2UgKGNvbnN0IFRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+ICZyaHMp
CiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKewogIGlmIChyaHMuYnVmZmVy
XyAhPSAwKQogICAgewogICAgICBUICoqdG1wMSA9CiAgICAgICAgVEFPX1VuYm91bmRlZF9Qc2V1
ZG9fU2VxdWVuY2U8VCxUX3Zhcj46OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CgogICAgICBU
ICoqIGNvbnN0IHRtcDIgPQogICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHJocy5idWZm
ZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsr
aSkKICAgICAgICB7CiAgICAgICAgICB0bXAxW2ldID0gVDo6X2R1cGxpY2F0ZSAodG1wMltpXSk7
CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAg
ewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xh
c3MgVF92YXI+ClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+Ojp+VEFPX1Vu
Ym91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCnsKICB0aGlzLT5fZGVhbGxvY2F0ZV9idWZm
ZXIgKCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFRBT19VbmJvdW5kZWRf
UHNldWRvX1NlcXVlbmNlPFQsVF92YXI+JgpUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxU
LFRfdmFyPjo6Cm9wZXJhdG9yPSAoY29uc3QgVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8
VCxUX3Zhcj4gJnJocykKewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7Cgog
IGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgVCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw
OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjpyZWxl
YXNlICh0bXBbaV0pOwogICAgICAgICAgdG1wW2ldID0gVDo6X25pbCAoKTsKICAgICAgICB9CiAg
ICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgICB7CiAgICAgICAg
ICBUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsK
ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX1BzZXVk
b19TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAgfQog
ICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsK
ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX1Bz
ZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAg
fQogICAgfQoKICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsK
CiAgVCAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PFQgKio+ICh0aGlzLT5idWZmZXJfKTsKICBU
ICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFQgKio+IChyaHMuYnVmZmVyXyk7Cgog
IGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgIHRtcDFb
aV0gPSBUOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IFQgKioKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVu
Y2U8VCxUX3Zhcj46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKQp7CiAgVCAqKmJ1ZiA9
IDA7CgogIGRvIHsgdHJ5IHsgYnVmID0gbmV3IFQqW25lbGVtc107IH0gY2F0Y2ggKHN0ZDo6YmFk
X2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGls
ZSAoMCk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICBi
dWZbaV0gPSBUOjpfbmlsICgpOwoKICByZXR1cm4gYnVmOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
Y2xhc3MgVF92YXI+IHZvaWQKVEFPX1VuYm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46
OmZyZWVidWYgKFQgKipidWZmZXIpCnsKICBpZiAoYnVmZmVyID09IDApCiAgICByZXR1cm47CiMg
ODU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl
cXVlbmNlX1QuY3BwIgogIGRlbGV0ZSBbXSBidWZmZXI7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNs
YXNzIFRfdmFyPiB2b2lkClRBT19VbmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+Ojpf
YWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKQp7CiAgVCAqKnRtcCA9IFRBT19V
bmJvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAobGVuZ3RoKTsKCiAg
aWYgKHRoaXMtPmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqKm9sZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VCoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw
OyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQoKCgoKCiAgICAgICAgaWYgKCF0aGlzLT5yZWxlYXNl
XykKICAgICAgICAgIHRtcFtpXSA9IFQ6Ol9kdXBsaWNhdGUgKG9sZFtpXSk7CiAgICAgICAgZWxz
ZQogICAgICAgICAgdG1wW2ldID0gb2xkW2ldOwoKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfKQog
ICAgICAgIGRlbGV0ZVtdIG9sZDsKICAgIH0KICB0aGlzLT5idWZmZXJfID0gdG1wOwp9Cgp0ZW1w
bGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX1BzZXVkb19TZXF1
ZW5jZTxULFRfdmFyPjo6X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPmJ1
ZmZlcl8gPT0gMCB8fCB0aGlzLT5yZWxlYXNlXyA9PSAwKQogICAgcmV0dXJuOwogIFQgKip0bXAg
PSByZWludGVycHJldF9jYXN0PFQqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIGZvciAoQ09SQkE6OlVM
b25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgewogICAgICBDT1JCQTo6cmVs
ZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVDo6X25pbCAoKTsKICAgIH0KICBUQU9fVW5i
b3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5i
dWZmZXJfID0gMDsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXI+IHZvaWQKVEFPX1Vu
Ym91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3Zhcj46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6
VUxvbmcgbmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkE6OlVMb25nIG9sKQp7CiAgVCAqKnRtcCA9IHN0YXRpY19jYXN0PFQqKj4g
KHRoaXMtPmJ1ZmZlcl8pOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytp
KQogICAgewogICAgICBDT1JCQTo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgdG1wW2ldID0gVDo6
X25pbCAoKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6
ZV90IE1BWD4KVEFPX0JvdW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46OgpUQU9f
Qm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKHZvaWQpCiAgOiBUQU9fQm91bmRlZF9CYXNlX1NlcXVl
bmNlIChNQVgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0JvdW5kZWRfUHNl
dWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46OmFsbG9jYnVmIChNQVgpKQp7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4KVEFPX0JvdW5kZWRfUHNldWRvX1Nl
cXVlbmNlPFQsIFRfdmFyLE1BWD46OgpUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2UgKGNvbnN0
IFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+ICZyaHMpCiAgOiBUQU9f
Qm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAg
IHsKICAgICAgVCAqKnRtcDEgPQogICAgICAgIFRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxU
LCBUX3ZhcixNQVg+OjphbGxvY2J1ZiAoTUFYKTsKCiAgICAgIFQgKiogY29uc3QgdG1wMiA9CiAg
ICAgICByZWludGVycHJldF9jYXN0PFQqKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09S
QkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87IGkrKykKICAgICAgICB7CiAgICAgICAg
ICB0bXAxW2ldID0gVDo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhp
cy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJf
ID0gMDsKICAgIH0KfQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFY
PiBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPiYKVEFPX0JvdW5kZWRf
UHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFPX0JvdW5k
ZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLE1BWD4gJnJocykKewogIGlmICh0aGlzID09ICZy
aHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAg
VCAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKICAgICAg
Zm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAg
ewogICAgICAgICAgQ09SQkE6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgICB0bXBbaV0gPSBU
OjpfbmlsICgpOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5t
YXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAg
ICAgICAgICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCxUX3ZhcixNQVg+OjphbGxvY2J1
ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAgICB9CgogIFRBT19Cb3VuZGVkX0Jhc2VfU2Vx
dWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgVCAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PFQg
Kio+ICh0aGlzLT5idWZmZXJfKTsKICBUICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0
PFQgKio+IChyaHMuYnVmZmVyXyk7CiAgZm9yIChDT1JCQTo6VUxvbmcgaT0wOyBpIDwgcmhzLmxl
bmd0aF87ICsraSkKICAgIHRtcDFbaV0gPSBUOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICByZXR1
cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1BWD4g
VCAqKgpUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYg
KENPUkJBOjpVTG9uZykKewogIFQgKipidWYgPSAwOwoKICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBU
KltNQVhdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0g
MDsgaSA8IE1BWDsgaSsrKQogICAgYnVmW2ldID0gVDo6X25pbCAoKTsKCiAgcmV0dXJuIGJ1ZjsK
fQoKdGVtcGxhdGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lkClRBT19C
b3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpmcmVlYnVmIChUICoqYnVmZmVy
KQp7CgoKCiAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIGlmIChi
dWZmZXJbaV0gIT0gVDo6X25pbCAoKSkKICAgICAgewogICAgICAgIENPUkJBOjpyZWxlYXNlIChi
dWZmZXJbaV0pOwogICAgICAgIGJ1ZmZlcltpXSA9IFQ6Ol9uaWwgKCk7CiAgICAgIH0KCiAgZGVs
ZXRlW10gYnVmZmVyOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90IE1B
WD4gdm9pZApUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X2FsbG9j
YXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewoKCiAgdGhpcy0+YnVmZmVyXyA9CiAg
ICBUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6YWxsb2NidWYgKGxl
bmd0aCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPiB2b2lk
ClRBT19Cb3VuZGVkX1BzZXVkb19TZXF1ZW5jZTxULCBUX3ZhcixNQVg+OjpfZGVhbGxvY2F0ZV9i
dWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+cmVsZWFzZV8gPT0gMCkKICAgIHJldHVybjsKICBU
ICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgVEFPX0Jv
dW5kZWRfUHNldWRvX1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwogIHRo
aXMtPmJ1ZmZlcl8gPSAwOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBUX3Zhciwgc2l6ZV90
IE1BWD4gdm9pZApUQU9fQm91bmRlZF9Qc2V1ZG9fU2VxdWVuY2U8VCwgVF92YXIsTUFYPjo6X3No
cmlua19idWZmZXIgKENPUkJBOjpVTG9uZyBubCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgb2wpCnsKICBUICoq
dG1wID0gcmVpbnRlcnByZXRfY2FzdDxUICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIGZvciAoQ09S
QkE6OlVMb25nIGkgPSBubDsgaSA8IG9sOyArK2kpCiAgICB7CiAgICAgIENPUkJBOjpyZWxlYXNl
ICh0bXBbaV0pOwogICAgICB0bXBbaV0gPSBUOjpfbmlsICgpOwogICAgfQp9CgoKCgoKdGVtcGxh
dGUgPGNsYXNzIFQsIGNsYXNzIFRfdmFyPiBUICoKVEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5j
ZTxULCBUX3Zhcj46OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKQp7CiAgVCAqYnVmID0g
MDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgVFtuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9h
bGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUg
KDApOwoKCgogIHJldHVybiBidWY7Cn0KCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4K
VEFPX1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OgpUQU9fVW5ib3VuZGVkX0Fy
cmF5X1NlcXVlbmNlIChjb25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFy
PiAmcmhzKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhz
LmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgVCAqdG1wMSA9CiAgICAgICAgVEFPX1VuYm91bmRl
ZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj46OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CgoK
CgogICAgICBjb25zdCBUICp0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBUICo+IChyaHMu
YnVmZmVyXyk7CgoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0
aF87ICsraSkKICAgICAgICB7CiAgICAgICAgICBUX3Zhcjo6Y29weSAodG1wMVtpXSwgdG1wMltp
XSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgZWxzZQog
ICAgewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KfQoKdGVtcGxhdGU8Y2xhc3MgVCwg
Y2xhc3MgVF92YXI+ClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+Ojp+VEFP
X1VuYm91bmRlZF9BcnJheV9TZXF1ZW5jZSAodm9pZCkKewogIHRoaXMtPl9kZWFsbG9jYXRlX2J1
ZmZlciAoKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBULCBjbGFzcyBUX3Zhcj4gVEFPX1VuYm91bmRl
ZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zhcj4mClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8
VCwgVF92YXI+OjoKb3BlcmF0b3I9IChjb25zdCBUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNl
PFQsIFRfdmFyPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsK
CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy
aHMubWF4aW11bV8pCiAgICAgICAgewoKCgoKICAgICAgICAgIFQgKnRtcCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8VCAqPiAodGhpcy0+YnVmZmVyXyk7CgoKCiAgICAgICAgICBUQU9fVW5ib3VuZGVkX0Fy
cmF5X1NlcXVlbmNlPFQsIFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKCiAgICAgICAgICBpZiAocmhz
Lm1heGltdW1fID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0aGlzLT5idWZmZXJf
ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgdGhpcy0+YnVmZmVyXyA9CiAgICAgICAgICAgICAgICBUQU9fVW5ib3VuZGVkX0FycmF5
X1NlcXVlbmNlPFQsIFRfdmFyPjo6YWxsb2NidWYgKAogICAgICAgICAgICAgICAgICAgIHJocy5t
YXhpbXVtXwogICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
fQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJocy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAg
ICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQogICAgICAgICAgICBUQU9fVW5ib3VuZGVkX0FycmF5
X1NlcXVlbmNlPFQsVF92YXI+OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgICB9CiAg
ICB9CgogIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICBm
b3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICB7CgoKCgog
ICAgICBUX3Zhcjo6Y29weSAocmVpbnRlcnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKVtp
XSwKCiAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0IFQgKj4gKHJocy5i
dWZmZXJfKVtpXSk7CgoKICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBU
LCBjbGFzcyBUX3Zhcj4gdm9pZApUQU9fVW5ib3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFy
Pjo6X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCkKewogIFQgKnRtcCA9IFRB
T19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjphbGxvY2J1ZiAobGVuZ3RoKTsK
CiAgaWYgKHRoaXMtPmJ1ZmZlcl8gIT0gMCkKICAgIHsKCgoKICAgICAgVCAqb2xkID0gcmVpbnRl
cnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKTsKCgoKICAgICAgZm9yIChDT1JCQTo6VUxv
bmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgVF92
YXI6OmNvcHkgKHRtcFtpXSwgb2xkW2ldKTsKICAgICAgICB9CgogICAgICBpZiAodGhpcy0+cmVs
ZWFzZV8pCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIG9sZDsKICAgICAgICB9CiAgICB9
CgogIHRoaXMtPmJ1ZmZlcl8gPSB0bXA7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFy
PiB2b2lkClRBT19VbmJvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXI+OjpfZGVhbGxvY2F0
ZV9idWZmZXIgKHZvaWQpCnsKICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwIHx8IHRoaXMtPnJlbGVh
c2VfID09IDApCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KCgoKCiAgVCAqdG1wID0gcmVpbnRl
cnByZXRfY2FzdDxUICo+ICh0aGlzLT5idWZmZXJfKTsKCgoKICBUQU9fVW5ib3VuZGVkX0FycmF5
X1NlcXVlbmNlPFQsIFRfdmFyPjo6ZnJlZWJ1ZiAodG1wKTsKCiAgdGhpcy0+YnVmZmVyXyA9IDA7
Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFQgKgpU
QU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6YWxsb2NidWYgKENPUkJB
OjpVTG9uZykKewogIFQgKmJ1ZiA9IDA7CgogIGRvIHsgdHJ5IHsgYnVmID0gbmV3IFRbTUFYXTsg
fSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyBy
ZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCgoKICByZXR1cm4gYnVmOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNl
PFQsIFRfdmFyLCBNQVg+OjoKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2UgKGNvbnN0IFRBT19C
b3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+ICZyaHMpCiAgOiBUQU9fQm91bmRl
ZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAg
ICAgVCAqdG1wMSA9CiAgICAgICAgVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIs
IE1BWD46OmFsbG9jYnVmIChNQVgpOwoKCgoKICAgICAgY29uc3QgVCAqdG1wMiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgVCAqPiAocmhzLmJ1ZmZlcl8pOwoKCgogICAgICBmb3IgKENPUkJBOjpV
TG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyBpKyspCiAgICAgICAgewogICAgICAgICAgVF92
YXI6OmNvcHkgKHRtcDFbaV0sIHRtcDJbaV0pOwogICAgICAgIH0KCiAgICAgIHRoaXMtPmJ1ZmZl
cl8gPSB0bXAxOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg
ICB9Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3QgTUFYPgpUQU9fQm91
bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3ZhciwgTUFYPjo6flRBT19Cb3VuZGVkX0FycmF5X1Nl
cXVlbmNlICh2b2lkKQp7CiAgdGhpcy0+X2RlYWxsb2NhdGVfYnVmZmVyICgpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IFRBT19Cb3VuZGVkX0FycmF5X1Nl
cXVlbmNlPFQsIFRfdmFyLCBNQVg+JgpUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBUX3Zh
ciwgTUFYPjo6b3BlcmF0b3I9Cihjb25zdCBUQU9fQm91bmRlZF9BcnJheV9TZXF1ZW5jZTxULCBU
X3ZhciwgTUFYPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhpczsK
CiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewoKCiAgICB9CiAgZWxzZQogICAgewogICAgICBp
ZiAocmhzLm1heGltdW1fID09IDApCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVyXyA9
IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdGhpcy0+YnVmZmVy
XyA9CiAgICAgICAgICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsVF92YXIsTUFYPjo6
YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgICAgfQogICAgfQoKICBUQU9fQm91bmRlZF9C
YXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAw
OyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgIHsKCgoKCiAgICAgIFRfdmFyOjpjb3B5IChyZWlu
dGVycHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pW2ldLAoKICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVCAqPiAocmhzLmJ1ZmZlcl8pW2ldKTsKCgogICAgfQoK
ICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFRfdmFyLCBzaXplX3Qg
TUFYPiB2b2lkClRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpfYWxs
b2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKQp7CgoKICB0aGlzLT5idWZmZXJfID0K
ICAgIFRBT19Cb3VuZGVkX0FycmF5X1NlcXVlbmNlPFQsIFRfdmFyLCBNQVg+OjphbGxvY2J1ZiAo
bGVuZ3RoKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgVF92YXIsIHNpemVfdCBNQVg+IHZv
aWQKVEFPX0JvdW5kZWRfQXJyYXlfU2VxdWVuY2U8VCwgVF92YXIsIE1BWD46Ol9kZWFsbG9jYXRl
X2J1ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5idWZmZXJfID09IDAgfHwgdGhpcy0+cmVsZWFz
ZV8gPT0gMCkKICAgIHsKICAgICAgcmV0dXJuOwogICAgfQoKCgoKICBUICp0bXAgPSByZWludGVy
cHJldF9jYXN0PFQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKCgogIFRBT19Cb3VuZGVkX0FycmF5X1Nl
cXVlbmNlPFQsIFRfdmFyLCBNQVg+OjpmcmVlYnVmICh0bXApOwoKICB0aGlzLT5idWZmZXJfID0g
MDsKfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5j
ZTxNQVg+OjoKVEFPX0JvdW5kZWRfU3RyaW5nX1NlcXVlbmNlICh2b2lkKQogIDogVEFPX0JvdW5k
ZWRfQmFzZV9TZXF1ZW5jZSAoTUFYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB
T19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZihNQVgpKQp7Cn0KCnRlbXBs
YXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjoKVEFPX0Jv
dW5kZWRfU3RyaW5nX1NlcXVlbmNlIChjb25zdCBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8
TUFYPiAmcmhzKQogIDogVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJo
cy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIGNoYXIgKip0bXAxID0KICAgICAgICBUQU9fQm91
bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKCiAg
ICAgIGNoYXIgKiogY29uc3QgdG1wMiA9CiAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyICoq
PiAocmhzLmJ1ZmZlcl8pOwoKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGk9MDsgaSA8IHJocy5s
ZW5ndGhfOyBpKyspCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IENPUkJBOjpzdHJpbmdf
ZHVwICh0bXAyW2ldKTsKICAgICAgICB9CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAg
IH0KICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQp9Cgp0ZW1wbGF0
ZTxzaXplX3QgTUFYPiBUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPiYKVEFPX0JvdW5k
ZWRfU3RyaW5nX1NlcXVlbmNlPE1BWD46Om9wZXJhdG9yPQooY29uc3QgVEFPX0JvdW5kZWRfU3Ry
aW5nX1NlcXVlbmNlPE1BWD4gJnJocykKewogIGlmICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4g
KnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgY2hhciAqKnRtcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JC
QTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAg
ICAgQ09SQkE6OnN0cmluZ19mcmVlICh0bXBbaV0pOwogICAgICAgICAgdG1wW2ldID0gMDsKICAg
ICAgICB9CgoKICAgIH0KICBlbHNlCiAgICB7CiAgICAgIGlmIChyaHMubWF4aW11bV8gPT0gMCkK
ICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICB0aGlzLT5idWZmZXJfID0KICAgICAgICAgICAgVEFPX0Jv
dW5kZWRfU3RyaW5nX1NlcXVlbmNlPE1BWD46OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAg
ICAgIH0KICAgIH0KCiAgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMp
OwoKICBjaGFyICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHRoaXMtPmJ1ZmZl
cl8pOwogIGNoYXIgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqKj4gKHJo
cy5idWZmZXJfKTsKCgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87
IGkrKykKICAgIHRtcDFbaV0gPSBDT1JCQTo6c3RyaW5nX2R1cCAodG1wMltpXSk7CiAgcmV0dXJu
ICp0aGlzOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl
cgpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIHNsb3QpIGNvbnN0CnsKICBkbyB7IGlmKCEoc2xvdCA8IHRoaXMtPm1heGltdW1fKSkgeyBp
bnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2Vf
X18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmNwcCIsIDE0
MjYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3Ry
ZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwg
IkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4l
YVxuIiwgInNsb3QgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBjaGFy
ICoqY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyICoqPiAodGhpcy0+YnVmZmVyXyk7
CgogIHJldHVybiBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciAodG1wICsgc2xvdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnJlbGVhc2VfKTsKfQoKdGVtcGxh
dGU8c2l6ZV90IE1BWD4gY2hhciAqKgpUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVuY2U8TUFYPjo6
YWxsb2NidWYgKENPUkJBOjpVTG9uZykKewogIGNoYXIgKipidWYgPSAwOwoKICBkbyB7IHRyeSB7
IGJ1ZiA9IG5ldyBjaGFyICpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChD
T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIGJ1ZltpXSA9IDA7CgogIHJldHVy
biBidWY7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfU3RyaW5nX1Nl
cXVlbmNlPE1BWD46OmZyZWVidWYgKGNoYXIqICpidWZmZXIpCnsKCgoKCiAgZm9yIChDT1JCQTo6
VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAw
KQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjpzdHJpbmdfZnJlZSAoYnVmZmVyW2ldKTsKICAg
ICAgICAgIGJ1ZmZlcltpXSA9IDA7CiAgICAgICAgfQogICAgfQoKICBkZWxldGUgW10gYnVmZmVy
Owp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiB2b2lkClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5j
ZTxNQVg+OjpfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgKQp7CgoKICB0aGlzLT5idWZm
ZXJfID0KICAgIFRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAoTUFY
KTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9TdHJpbmdfU2VxdWVu
Y2U8TUFYPjo6X2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbGVhc2Vf
ID09IDApCiAgICByZXR1cm47CiAgY2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAq
Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojpm
cmVlYnVmICh0bXApOwogIHRoaXMtPmJ1ZmZlcl8gPSAwOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFY
PiB2b2lkClRBT19Cb3VuZGVkX1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojpfc2hyaW5rX2J1ZmZlciAo
Q09SQkE6OlVMb25nIG5sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIGNoYXIgKip0bXAgPSByZWludGVycHJldF9j
YXN0PGNoYXIgKio+ICh0aGlzLT5idWZmZXJfKTsKCgogIGZvciAoQ09SQkE6OlVMb25nIGkgPSBu
bDsgaSA8IG9sOyArK2kpCiAgICB7CiAgICAgIENPUkJBOjpzdHJpbmdfZnJlZSAodG1wW2ldKTsK
ICAgICAgdG1wW2ldID0gMDsKICAgIH0KfQoKCgoKCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19C
b3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVu
Y2UgKHZvaWQpCiAgOiBUQU9fQm91bmRlZF9CYXNlX1NlcXVlbmNlIChNQVgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+Ojph
bGxvY2J1ZihNQVgpKQp7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+ClRBT19Cb3VuZGVkX1dTdHJp
bmdfU2VxdWVuY2U8TUFYPjo6ClRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2UgKGNvbnN0IFRB
T19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiAmcmhzKQogIDogVEFPX0JvdW5kZWRfQmFz
ZV9TZXF1ZW5jZSAocmhzKQp7CiAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIENP
UkJBOjpXQ2hhciAqKnRtcDEgPQogICAgICAgIFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8
TUFYPjo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKCiAgICAgIENPUkJBOjpXQ2hhciAqKiBj
b25zdCB0bXAyID0KICAgICAgICByZWludGVycHJldF9jYXN0PENPUkJBOjpXQ2hhciAqKj4gKHJo
cy5idWZmZXJfKTsKCgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpPTA7IGkgPCByaHMubGVuZ3Ro
XzsgaSsrKQogICAgICAgIHsKICAgICAgICAgIHRtcDFbaV0gPSBDT1JCQTo6d3N0cmluZ19kdXAg
KHRtcDJbaV0pOwogICAgICAgIH0KCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogICAgfQog
IGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9Cn0KCnRlbXBsYXRlPHNp
emVfdCBNQVg+IFRBT19Cb3VuZGVkX1dTdHJpbmdfU2VxdWVuY2U8TUFYPiYKVEFPX0JvdW5kZWRf
V1N0cmluZ19TZXF1ZW5jZTxNQVg+OjpvcGVyYXRvcj0KKGNvbnN0IFRBT19Cb3VuZGVkX1dTdHJp
bmdfU2VxdWVuY2U8TUFYPiAmcmhzKQp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAq
dGhpczsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBDT1JCQTo6V0NoYXIgKip0
bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpXQ2hhciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwoK
CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog
ICAgICAgIHsKICAgICAgICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKHRtcFtpXSk7CiAgICAgICAg
ICB0bXBbaV0gPSAwOwogICAgICAgIH0KCgogICAgfQogIGVsc2UKICAgIHsKICAgICAgaWYgKHJo
cy5tYXhpbXVtXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHRoaXMtPmJ1ZmZlcl8gPQog
ICAgICAgICAgICBUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlPE1BWD46OmFsbG9jYnVmIChy
aHMubWF4aW11bV8pOwogICAgICAgIH0KICAgIH0KCiAgVEFPX0JvdW5kZWRfQmFzZV9TZXF1ZW5j
ZTo6b3BlcmF0b3I9IChyaHMpOwoKICBDT1JCQTo6V0NoYXIgKip0bXAxID0gcmVpbnRlcnByZXRf
Y2FzdDxDT1JCQTo6V0NoYXIgKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgQ09SQkE6OldDaGFyICoq
IGNvbnN0IHRtcDIgPQogICAgcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6V0NoYXIgKio+IChyaHMu
YnVmZmVyXyk7CgoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyBp
KyspCiAgICB0bXAxW2ldID0gQ09SQkE6OndzdHJpbmdfZHVwICh0bXAyW2ldKTsKICByZXR1cm4g
KnRoaXM7Cn0KCnRlbXBsYXRlPHNpemVfdCBNQVg+IFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl
cgpUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNlPE1BWD46Om9wZXJhdG9yW10gKENPUkJBOjpV
TG9uZyBzbG90KSBjb25zdAp7CiAgZG8geyBpZighKHNsb3QgPCB0aGlzLT5tYXhpbXVtXykpIHsg
aW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNl
X19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VxdWVuY2VfVC5jcHAiLCAx
NTg2LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0
cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1Is
ICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycu
JWFcbiIsICJzbG90IDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgQ09S
QkE6OldDaGFyICoqY29uc3QgdG1wID0KICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OldDaGFy
ICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIHJldHVybiBUQU9fU2VxRWxlbV9XU3RyaW5nX01hbmFn
ZXIgKHRtcCArIHNsb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhp
cy0+cmVsZWFzZV8pOwp9Cgp0ZW1wbGF0ZTxzaXplX3QgTUFYPiBDT1JCQTo6V0NoYXIgKioKVEFP
X0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nKQp7
CiAgQ09SQkE6OldDaGFyICoqYnVmID0gMDsKCiAgZG8geyB0cnkgeyBidWYgPSBuZXcgQ09SQkE6
OldDaGFyICpbTUFYXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKCiAgZm9yIChDT1JCQTo6VUxv
bmcgaSA9IDA7IGkgPCBNQVg7IGkrKykKICAgIGJ1ZltpXSA9IDA7CgogIHJldHVybiBidWY7Cn0K
CnRlbXBsYXRlPHNpemVfdCBNQVg+IHZvaWQKVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxN
QVg+OjpmcmVlYnVmIChDT1JCQTo6V0NoYXIqICpidWZmZXIpCnsKCgoKCiAgZm9yIChDT1JCQTo6
VUxvbmcgaSA9IDA7IGkgPCBNQVg7ICsraSkKICAgIHsKICAgICAgaWYgKGJ1ZmZlcltpXSAhPSAw
KQogICAgICAgIHsKICAgICAgICAgIENPUkJBOjp3c3RyaW5nX2ZyZWUgKGJ1ZmZlcltpXSk7CiAg
ICAgICAgICBidWZmZXJbaV0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgZGVsZXRlIFtdIGJ1ZmZl
cjsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVl
bmNlPE1BWD46Ol9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyApCnsKCgogIHRoaXMtPmJ1
ZmZlcl8gPQogICAgVEFPX0JvdW5kZWRfV1N0cmluZ19TZXF1ZW5jZTxNQVg+OjphbGxvY2J1ZiAo
TUFYKTsKfQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1Nl
cXVlbmNlPE1BWD46Ol9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCkKewogIGlmICh0aGlzLT5yZWxl
YXNlXyA9PSAwKQogICAgcmV0dXJuOwogIENPUkJBOjpXQ2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Q09SQkE6OldDaGFyICoqPiAodGhpcy0+YnVmZmVyXyk7CgogIFRBT19Cb3VuZGVkX1dT
dHJpbmdfU2VxdWVuY2U8TUFYPjo6ZnJlZWJ1ZiAodG1wKTsKICB0aGlzLT5idWZmZXJfID0gMDsK
fQoKdGVtcGxhdGU8c2l6ZV90IE1BWD4gdm9pZApUQU9fQm91bmRlZF9XU3RyaW5nX1NlcXVlbmNl
PE1BWD46Ol9zaHJpbmtfYnVmZmVyIChDT1JCQTo6VUxvbmcgbmwsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBvbCkKewogIENP
UkJBOjpXQ2hhciAqKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OldDaGFyICoqPiAodGhp
cy0+YnVmZmVyXyk7CgoKICBmb3IgKENPUkJBOjpVTG9uZyBpID0gbmw7IGkgPCBvbDsgKytpKQog
ICAgewogICAgICBDT1JCQTo6d3N0cmluZ19mcmVlICh0bXBbaV0pOwogICAgICB0bXBbaV0gPSAw
OwogICAgfQp9CiMgMTE2NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiIDIKCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMTE3MiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZV9ULmgiIDIKIyA2
MzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2Vx
dWVuY2UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvcG9zdC5oIiAxCiMgNjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaCIgMgojIDYwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0U2VxQy5oIgog
IGNsYXNzIENPUkJBX09jdGV0U2VxOwogIGNsYXNzIENPUkJBX09jdGV0U2VxX3ZhcjsKCgoKCgog
IGNsYXNzIENPUkJBX09jdGV0U2VxIDogcHVibGljCgogICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZTxDT1JCQTo6T2N0ZXQ+CgoKCiAgewogIHB1YmxpYzoKICAgIENPUkJBX09jdGV0U2VxICh2b2lk
KTsKICAgIENPUkJBX09jdGV0U2VxIChDT1JCQTo6VUxvbmcgbWF4KTsKICAgIENPUkJBX09jdGV0
U2VxICgKICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwK
ICAgICAgQ09SQkE6Ok9jdGV0ICpidWZmZXIsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug
PSAwCiAgICApOwogICAgQ09SQkFfT2N0ZXRTZXEgKGNvbnN0IENPUkJBX09jdGV0U2VxICYpOwog
ICAgfkNPUkJBX09jdGV0U2VxICh2b2lkKTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3Ry
dWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBDT1JCQV9PY3RldFNlcV92YXIgX3Zhcl90eXBl
OwoKCgoKICAgIENPUkJBX09jdGV0U2VxICgKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog
ICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYgogICAgICApCiAgICAgIDogVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChsZW5ndGgsIG1iKSB7fQoKCiAgfTsKIyAx
MTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0
ZXRTZXFDLmgiCiAgY2xhc3MgQ09SQkFfT2N0ZXRTZXFfdmFyCiAgewogIHB1YmxpYzoKICAgIENP
UkJBX09jdGV0U2VxX3ZhciAodm9pZCk7CiAgICBDT1JCQV9PY3RldFNlcV92YXIgKENPUkJBX09j
dGV0U2VxICopOwogICAgQ09SQkFfT2N0ZXRTZXFfdmFyIChjb25zdCBDT1JCQV9PY3RldFNlcV92
YXIgJik7CiAgICBDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IENPUkJBX09jdGV0U2VxICYpOwog
ICAgfkNPUkJBX09jdGV0U2VxX3ZhciAodm9pZCk7CgogICAgQ09SQkFfT2N0ZXRTZXFfdmFyICZv
cGVyYXRvcj0gKENPUkJBX09jdGV0U2VxICopOwogICAgQ09SQkFfT2N0ZXRTZXFfdmFyICZvcGVy
YXRvcj0gKGNvbnN0IENPUkJBX09jdGV0U2VxX3ZhciAmKTsKICAgIENPUkJBX09jdGV0U2VxX3Zh
ciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PY3RldFNlcSAmKTsKICAgIENPUkJBX09jdGV0U2Vx
ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICpvcGVyYXRvci0+
ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDT1JCQV9PY3RldFNlcSAmKCkgY29u
c3Q7CiAgICBvcGVyYXRvciBDT1JCQV9PY3RldFNlcSAmKCk7CiAgICBvcGVyYXRvciBDT1JCQV9P
Y3RldFNlcSAmKCkgY29uc3Q7CgogICAgQ09SQkE6Ok9jdGV0ICYgb3BlcmF0b3JbXSAoQ09SQkE6
OlVMb25nIGluZGV4KTsKICAgIGNvbnN0IENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJB
OjpVTG9uZyBpbmRleCkgY29uc3Q7CgoKICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICZpbiAodm9p
ZCkgY29uc3Q7CiAgICBDT1JCQV9PY3RldFNlcSAmaW5vdXQgKHZvaWQpOwogICAgQ09SQkFfT2N0
ZXRTZXEgKiZvdXQgKHZvaWQpOwogICAgQ09SQkFfT2N0ZXRTZXEgKl9yZXRuICh2b2lkKTsKICAg
IENPUkJBX09jdGV0U2VxICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgQ09SQkFf
T2N0ZXRTZXEgKnB0cl87CiAgfTsKIyAxNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiCiAgY2xhc3MgQ09SQkFfT2N0ZXRTZXFf
b3V0CiAgewogIHB1YmxpYzoKICAgIENPUkJBX09jdGV0U2VxX291dCAoQ09SQkFfT2N0ZXRTZXEg
KiYpOwogICAgQ09SQkFfT2N0ZXRTZXFfb3V0IChDT1JCQV9PY3RldFNlcV92YXIgJik7CiAgICBD
T1JCQV9PY3RldFNlcV9vdXQgKGNvbnN0IENPUkJBX09jdGV0U2VxX291dCAmKTsKICAgIENPUkJB
X09jdGV0U2VxX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9PY3RldFNlcV9vdXQgJik7CiAg
ICBDT1JCQV9PY3RldFNlcV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfT2N0ZXRTZXEgKik7CiAgICBv
cGVyYXRvciBDT1JCQV9PY3RldFNlcSAqJigpOwogICAgQ09SQkFfT2N0ZXRTZXEgKiZwdHIgKHZv
aWQpOwogICAgQ09SQkFfT2N0ZXRTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgQ09SQkE6Ok9j
dGV0ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIENP
UkJBX09jdGV0U2VxIComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT2N0
ZXRTZXFfdmFyICYpOwogIH07CgoKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S
QkE6OkFueSAmLCBjb25zdCBDT1JCQV9PY3RldFNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJh
dG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX09jdGV0U2VxKik7CiAgICAgICAgICAgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgQ09SQkFfT2N0ZXRTZXEg
KiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIGNvbnN0IENPUkJBX09jdGV0U2VxIComKTsKIyAyMDMgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PY3RldFNlcUMuaSIg
MQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L09jdGV0U2VxQy5pIgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpDT1JCQV9PY3RldFNlcV92
YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX09jdGV0U2VxX3Zhcjo6Q09S
QkFfT2N0ZXRTZXFfdmFyIChDT1JCQV9PY3RldFNlcSAqcCkKICA6IHB0cl8gKHApCnt9Cgppbmxp
bmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IDo6Q09SQkFf
T2N0ZXRTZXFfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRy
XyA9IG5ldyA6OkNPUkJBX09jdGV0U2VxICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs
b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7
CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFy
OjpDT1JCQV9PY3RldFNlcV92YXIgKGNvbnN0IDo6Q09SQkFfT2N0ZXRTZXEgJnApCnsKICBkbyB7
IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JCQV9PY3RldFNlcSAocCk7IH0gY2F0Y2ggKHN0
ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0g
d2hpbGUgKDApOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjp+Q09SQkFfT2N0ZXRTZXFf
dmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9PY3RldFNl
cV92YXIgJgpDT1JCQV9PY3RldFNlcV92YXI6Om9wZXJhdG9yPSAoQ09SQkFfT2N0ZXRTZXEgKnAp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSA6OkNPUkJBX09jdGV0U2VxX3ZhciAmCkNPUkJBX09jdGV0U2VxX3Zhcjo6b3Bl
cmF0b3I9IChjb25zdCA6OkNPUkJBX09jdGV0U2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw
KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9PY3RldFNlcSAqZGVlcF9jb3B5ID0KICAgICAg
ICAgICAgbmV3IENPUkJBX09jdGV0U2VxICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9j
b3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBDT1JCQV9PY3RldFNlcSAqdG1w
ID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAg
ICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxp
bmUgOjpDT1JCQV9PY3RldFNlcV92YXIgJgpDT1JCQV9PY3RldFNlcV92YXI6Om9wZXJhdG9yPSAo
Y29uc3QgOjpDT1JCQV9PY3RldFNlcSAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsK
ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6
Q09SQkFfT2N0ZXRTZXEgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0
U2VxX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX3Zhcjo6b3BlcmF0b3It
PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFf
dmFyOjpvcGVyYXRvciBjb25zdCA6OkNPUkJBX09jdGV0U2VxICYoKSBjb25zdAp7CiAgcmV0dXJu
ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfdmFyOjpvcGVyYXRvciA6OkNP
UkJBX09jdGV0U2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFf
T2N0ZXRTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJBX09jdGV0U2VxICYoKSBjb25zdAp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKQ09SQkFfT2N0ZXRTZXFf
dmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRy
Xy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6Ok9jdGV0ICYKQ09S
QkFfT2N0ZXRTZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNvbnN0CnsK
ICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBDT1JCQTo6T2N0ZXQgJj4gKHRoaXMtPnB0cl8tPm9w
ZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkNPUkJBX09jdGV0U2VxICYKQ09S
QkFfT2N0ZXRTZXFfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK
fQoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXEgJgpDT1JCQV9PY3RldFNlcV92YXI6Omlub3V0ICh2
b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXEg
KiYKQ09SQkFfT2N0ZXRTZXFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK
ICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFf
T2N0ZXRTZXEgKgpDT1JCQV9PY3RldFNlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9P
Y3RldFNlcSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1w
Owp9CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX3Zhcjo6cHRyICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfT2N0
ZXRTZXFfb3V0OjpDT1JCQV9PY3RldFNlcV9vdXQgKENPUkJBX09jdGV0U2VxIComcCkKICA6IHB0
cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09jdGV0U2VxX291dDo6
Q09SQkFfT2N0ZXRTZXFfb3V0IChDT1JCQV9PY3RldFNlcV92YXIgJnApCiAgOiBwdHJfIChwLm91
dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK
Q09SQkFfT2N0ZXRTZXFfb3V0OjpDT1JCQV9PY3RldFNlcV9vdXQgKGNvbnN0IDo6Q09SQkFfT2N0
ZXRTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9PY3RldFNlcV9vdXQmPiAo
cCkucHRyXykKe30KCmlubGluZSA6OkNPUkJBX09jdGV0U2VxX291dCAmCkNPUkJBX09jdGV0U2Vx
X291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX09jdGV0U2VxX291dCAmcCkKewogIHRoaXMt
PnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX09jdGV0U2VxX291dCY+IChwKS5wdHJfOwogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIDo6Q09SQkFfT2N0ZXRTZXFfb3V0ICYKQ09SQkFfT2N0ZXRTZXFf
b3V0OjpvcGVyYXRvcj0gKENPUkJBX09jdGV0U2VxICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAg
cmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT2N0ZXRTZXFfb3V0OjpvcGVyYXRvciA6OkNP
UkJBX09jdGV0U2VxIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JC
QV9PY3RldFNlcSAqJgpDT1JCQV9PY3RldFNlcV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9PY3RldFNlcSAqCkNPUkJBX09jdGV0U2VxX291
dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S
QkE6Ok9jdGV0ICYKQ09SQkFfT2N0ZXRTZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg
aW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMjU2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0
U2VxQy5pIgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwK
ICAgIGNvbnN0IENPUkJBX09jdGV0U2VxICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgQ09SQkFfT2N0ZXRTZXEgJgogICk7CiMgMjA0ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09jdGV0U2Vx
Qy5oIiAyCiMgMjE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL09jdGV0U2VxQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAyMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiIDIKIyAyOCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9QcmluY2lwYWwuaCIgMgojIDM3
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ByaW5j
aXBhbC5oIgpjbGFzcyBDT1JCQV9QcmluY2lwYWwKewpwdWJsaWM6CgoKCiAgQ09SQkE6Ok9jdGV0
U2VxIGlkOwoKCgoKICBzdGF0aWMgQ09SQkFfUHJpbmNpcGFsKiBfZHVwbGljYXRlIChDT1JCQV9Q
cmluY2lwYWwqKTsKICBzdGF0aWMgQ09SQkFfUHJpbmNpcGFsKiBfbmlsICh2b2lkKTsKCgogIENP
UkJBOjpVTG9uZyBfaW5jcl9yZWZjbnQgKHZvaWQpOwogIENPUkJBOjpVTG9uZyBfZGVjcl9yZWZj
bnQgKHZvaWQpOwoKICBDT1JCQV9QcmluY2lwYWwgKHZvaWQpOwoKCiAgdHlwZWRlZiBDT1JCQV9Q
cmluY2lwYWxfcHRyIF9wdHJfdHlwZTsKICB0eXBlZGVmIENPUkJBX1ByaW5jaXBhbF92YXIgX3Zh
cl90eXBlOwoKCgpwcml2YXRlOgogIH5DT1JCQV9QcmluY2lwYWwgKHZvaWQpOwoKCiAgQ09SQkFf
UHJpbmNpcGFsICZvcGVyYXRvciA9IChjb25zdCBDT1JCQTo6UHJpbmNpcGFsX3B0ciAmKTsKICBD
T1JCQV9QcmluY2lwYWwgKGNvbnN0IENPUkJBOjpQcmluY2lwYWxfcHRyICYpOwoKcHJpdmF0ZToK
CiAgQ09SQkE6OlVMb25nIHJlZmNvdW50XzsKCgoKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIHJlZmNv
dW50X211dGV4XzsKCgoKCiAgZnJpZW5kIGNsYXNzIGV2ZXJ5b25lX25lZWRzX2FfZnJpZW5kOwoK
fTsKIyA5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9QcmluY2lwYWwuaCIKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX3Zhcgp7CnB1YmxpYzoKICBDT1JC
QV9QcmluY2lwYWxfdmFyICh2b2lkKTsKICBDT1JCQV9QcmluY2lwYWxfdmFyIChDT1JCQV9Qcmlu
Y2lwYWxfcHRyKTsKICBDT1JCQV9QcmluY2lwYWxfdmFyIChjb25zdCBDT1JCQV9QcmluY2lwYWxf
dmFyICYpOwogIH5DT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKTsKCiAgQ09SQkFfUHJpbmNpcGFs
X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyKTsKICBDT1JCQV9QcmluY2lwYWxf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1ByaW5jaXBhbF92YXIgJik7CiAgQ09SQkFfUHJp
bmNpcGFsX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCgogIG9wZXJhdG9yIGNvbnN0IENP
UkJBX1ByaW5jaXBhbF9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1ByaW5jaXBhbF9w
dHIgJigpOwogIENPUkJBX1ByaW5jaXBhbF9wdHIgaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1By
aW5jaXBhbF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9QcmluY2lwYWxfcHRyICZvdXQgKHZv
aWQpOwogIENPUkJBX1ByaW5jaXBhbF9wdHIgX3JldG4gKHZvaWQpOwogIENPUkJBX1ByaW5jaXBh
bF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgQ09SQkFfUHJpbmNpcGFsX3B0ciBw
dHJfOwp9OwojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9QcmluY2lwYWwuaCIKY2xhc3MgQ09SQkFfUHJpbmNpcGFsX291dAp7CnB1YmxpYzoK
ICBDT1JCQV9QcmluY2lwYWxfb3V0IChDT1JCQV9QcmluY2lwYWxfcHRyICYpOwogIENPUkJBX1By
aW5jaXBhbF9vdXQgKENPUkJBX1ByaW5jaXBhbF92YXIgJik7CiAgQ09SQkFfUHJpbmNpcGFsX291
dCAoQ09SQkFfUHJpbmNpcGFsX291dCAmKTsKICBDT1JCQV9QcmluY2lwYWxfb3V0ICZvcGVyYXRv
cj0gKENPUkJBX1ByaW5jaXBhbF9vdXQgJik7CiAgQ09SQkFfUHJpbmNpcGFsX291dCAmb3BlcmF0
b3I9IChjb25zdCBDT1JCQV9QcmluY2lwYWxfdmFyICYpOwogIENPUkJBX1ByaW5jaXBhbF9vdXQg
Jm9wZXJhdG9yPSAoQ09SQkFfUHJpbmNpcGFsX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUHJpbmNp
cGFsX3B0ciAmKCk7CiAgQ09SQkFfUHJpbmNpcGFsX3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9Q
cmluY2lwYWxfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9QcmluY2lw
YWxfcHRyICZwdHJfOwp9OwoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcjw8IChU
QU9fT3V0cHV0Q0RSJiwgQ09SQkFfUHJpbmNpcGFsKik7CgogICAgICAgICAgIENPUkJBOjpCb29s
ZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiYsIENPUkJBX1ByaW5jaXBhbComKTsKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUHJpbmNp
cGFsLmkiIDEKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09SQkE6OmlzX25pbCAoQ09SQkE6OlBy
aW5jaXBhbF9wdHIgcHJpbmNpcGFsKQp7CiAgcmV0dXJuIChDT1JCQTo6Qm9vbGVhbikgKHByaW5j
aXBhbCA9PSAwKTsKfQoKaW5saW5lIENPUkJBOjpVTG9uZwpDT1JCQV9QcmluY2lwYWw6Ol9kZWNy
X3JlZmNudCAodm9pZCkKewogIHsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRoaXMt
PnJlZmNvdW50XyAhPSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAgZGVs
ZXRlIHRoaXM7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZWxlYXNlIChDT1JC
QTo6UHJpbmNpcGFsX3B0ciBwcmluY2lwYWwpCnsKICBpZiAocHJpbmNpcGFsKQogICAgcHJpbmNp
cGFsLT5fZGVjcl9yZWZjbnQgKCk7Cn0KCmlubGluZSBDT1JCQTo6VUxvbmcKQ09SQkFfUHJpbmNp
cGFsOjpfaW5jcl9yZWZjbnQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cmVmY291bnRfKys7Cn0K
CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsKgpDT1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKENP
UkJBX1ByaW5jaXBhbCogeCkKewogIGlmICh4ICE9IDApCiAgICB4LT5faW5jcl9yZWZjbnQgKCk7
CiAgcmV0dXJuIHg7Cn0KCgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsKgpDT1JCQV9QcmluY2lwYWw6
Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKCgoKCmlubGluZQpDT1JCQV9QcmluY2lwYWxf
dmFyOjpDT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKQogIDogcHRyXyAoQ09SQkFfUHJpbmNpcGFs
OjpfbmlsICgpKQp7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfdmFyOjpDT1JCQV9QcmluY2lw
YWxfdmFyIChDT1JCQV9QcmluY2lwYWxfcHRyIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkNP
UkJBX1ByaW5jaXBhbF92YXI6On5DT1JCQV9QcmluY2lwYWxfdmFyICh2b2lkKQp7CiAgQ09SQkE6
OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3B0cgpDT1JC
QV9QcmluY2lwYWxfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lCkNPUkJBX1ByaW5jaXBhbF92YXI6OkNPUkJBX1ByaW5jaXBhbF92YXIgKGNvbnN0
IENPUkJBX1ByaW5jaXBhbF92YXIgJnApCiAgOiBwdHJfIChDT1JCQV9QcmluY2lwYWw6Ol9kdXBs
aWNhdGUgKHAucHRyICgpKSkKe30KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfdmFyICYKQ09SQkFf
UHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyIHApCnsKICBDT1JC
QTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3ZhciAmCkNPUkJBX1ByaW5jaXBhbF92YXI6Om9w
ZXJhdG9yPSAoY29uc3QgQ09SQkFfUHJpbmNpcGFsX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw
KQogIHsKICAgIENPUkJBOjpyZWxlYXNlICh0aGlzLT5wdHJfKTsKICAgIHRoaXMtPnB0cl8gPSBD
T1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICB9CiAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfUHJp
bmNpcGFsX3B0ciAmKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09S
QkFfUHJpbmNpcGFsX3Zhcjo6b3BlcmF0b3IgQ09SQkFfUHJpbmNpcGFsX3B0ciAmKCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX3B0cgpDT1JCQV9Qcmlu
Y2lwYWxfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfcHRyCkNPUkJBX1ByaW5jaXBhbF92YXI6OmluICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9QcmluY2lw
YWxfcHRyICYKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1ByaW5jaXBhbF9wdHIgJgpDT1JCQV9QcmluY2lwYWxf
dmFyOjpvdXQgKHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+
cHRyXyA9IENPUkJBX1ByaW5jaXBhbDo6X25pbCAoKTsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIENPUkJBX1ByaW5jaXBhbF9wdHIKQ09SQkFfUHJpbmNpcGFsX3Zhcjo6X3JldG4gKHZv
aWQpCnsKCiAgQ09SQkFfUHJpbmNpcGFsX3B0ciB2YWwgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSBDT1JCQV9QcmluY2lwYWw6Ol9uaWwgKCk7CiAgcmV0dXJuIHZhbDsKfQoKCgoKCmlubGlu
ZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpDT1JCQV9QcmluY2lwYWxfb3V0IChDT1JCQV9QcmluY2lw
YWxfcHRyICZwKQogICAgICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9Qcmlu
Y2lwYWw6Ol9uaWwgKCk7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpDT1JCQV9Qcmlu
Y2lwYWxfb3V0IChDT1JCQV9QcmluY2lwYWxfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsK
ICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBX1ByaW5j
aXBhbDo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX1ByaW5jaXBhbF9vdXQ6OkNPUkJBX1ByaW5j
aXBhbF9vdXQgKENPUkJBX1ByaW5jaXBhbF9vdXQgJnApCiAgOiBwdHJfIChwLnB0cl8pCnt9Cgpp
bmxpbmUgQ09SQkFfUHJpbmNpcGFsX291dCAmCkNPUkJBX1ByaW5jaXBhbF9vdXQ6Om9wZXJhdG9y
PSAoQ09SQkFfUHJpbmNpcGFsX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfUHJpbmNpcGFsX291dCAmCkNPUkJBX1ByaW5jaXBh
bF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUHJpbmNpcGFsX3ZhciAmcCkKewogIHRoaXMt
PnB0cl8gPSBDT1JCQV9QcmluY2lwYWw6Ol9kdXBsaWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfb3V0ICYKQ09SQkFfUHJpbmNpcGFsX291
dDo6b3BlcmF0b3I9IChDT1JCQV9QcmluY2lwYWxfcHRyIHApCnsKICB0aGlzLT5wdHJfID0gcDsK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9QcmluY2lwYWxfb3V0OjpvcGVyYXRvciBD
T1JCQV9QcmluY2lwYWxfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBD
T1JCQV9QcmluY2lwYWxfcHRyICYKQ09SQkFfUHJpbmNpcGFsX291dDo6cHRyICh2b2lkKQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9QcmluY2lwYWxfcHRyCkNPUkJBX1By
aW5jaXBhbF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoj
IDE1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
cmluY2lwYWwuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9QcmluY2lwYWwuaCIgMgojIDQ5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09SQi5oIiAxCiMgMTkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgi
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5o
IiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vT1JCLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRXhjZXB0aW9uLmgiIDEKIyAyOCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIg
MgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
U2VydmljZXMuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcnZpY2VzLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIgMgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAy
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2
aWNlcy5oIiAyCiMgMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vU2VydmljZXMuaCIKc3RydWN0IENPUkJBX1NlcnZpY2VEZXRhaWwKewogIHN0YXRp
YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgQ09SQkE6OlNlcnZpY2VEZXRh
aWxUeXBlIHNlcnZpY2VfZGV0YWlsX3R5cGU7CiMgNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9P
Y3RldCA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4KICB7CiAg
ICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgX3Rhb19zZXFfT2N0
ZXQgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpPY3RldCAqYnVmZmVy
LAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0wCiAgICAgICAg
ICAgICAgICAgICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFfT2N0
ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CgoKICAgICAgX3Rhb19zZXFfT2N0
ZXQgKAogICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEFDRV9NZXNzYWdlX0Jsb2NrKiBtYgogICAgICAgICAgICAgICAg
ICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChs
ZW5ndGgsIG1iKSB7fQoKICAgIH07CgogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19f
dGFvX3NlcV9PY3RldDsKIyA3OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcgogICAg
ewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldF92YXIgKHZvaWQpOwogICAgICBfdGFv
X3NlcV9PY3RldF92YXIgKF90YW9fc2VxX09jdGV0ICopOwogICAgICBfdGFvX3NlcV9PY3RldF92
YXIgKGNvbnN0IF90YW9fc2VxX09jdGV0X3ZhciAmKTsKICAgICAgfl90YW9fc2VxX09jdGV0X3Zh
ciAodm9pZCk7CgogICAgICBfdGFvX3NlcV9PY3RldF92YXIgJm9wZXJhdG9yPSAoX3Rhb19zZXFf
T2N0ZXQgKik7CiAgICAgIF90YW9fc2VxX09jdGV0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBfdGFv
X3NlcV9PY3RldF92YXIgJik7CiAgICAgIF90YW9fc2VxX09jdGV0ICpvcGVyYXRvci0+ICh2b2lk
KTsKICAgICAgY29uc3QgX3Rhb19zZXFfT2N0ZXQgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK
ICAgICAgb3BlcmF0b3IgY29uc3QgX3Rhb19zZXFfT2N0ZXQgJigpIGNvbnN0OwogICAgICBvcGVy
YXRvciBfdGFvX3NlcV9PY3RldCAmKCk7CiAgICAgIG9wZXJhdG9yIF90YW9fc2VxX09jdGV0ICYo
KSBjb25zdDsKICAgICAgQ09SQkE6Ok9jdGV0ICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xv
dCk7CgogICAgICBjb25zdCBfdGFvX3NlcV9PY3RldCAmaW4gKHZvaWQpIGNvbnN0OwogICAgICBf
dGFvX3NlcV9PY3RldCAmaW5vdXQgKHZvaWQpOwogICAgICBfdGFvX3NlcV9PY3RldCAqJm91dCAo
dm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0ICpfcmV0biAodm9pZCk7CiAgICAgIF90YW9fc2Vx
X09jdGV0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX09j
dGV0ICpwdHJfOwogICAgfTsKCgoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldF9vdXQKICAg
IHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfT2N0ZXRfb3V0IChfdGFvX3NlcV9PY3RldCAq
Jik7CiAgICAgIF90YW9fc2VxX09jdGV0X291dCAoX3Rhb19zZXFfT2N0ZXRfdmFyICYpOwogICAg
ICBfdGFvX3NlcV9PY3RldF9vdXQgKGNvbnN0IF90YW9fc2VxX09jdGV0X291dCAmKTsKICAgICAg
X3Rhb19zZXFfT2N0ZXRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IF90YW9fc2VxX09jdGV0X291dCAm
KTsKICAgICAgX3Rhb19zZXFfT2N0ZXRfb3V0ICZvcGVyYXRvcj0gKF90YW9fc2VxX09jdGV0ICop
OwogICAgICBvcGVyYXRvciBfdGFvX3NlcV9PY3RldCAqJigpOwogICAgICBfdGFvX3NlcV9PY3Rl
dCAqJnB0ciAodm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0ICpvcGVyYXRvci0+ICh2b2lkKTsK
ICAgICAgQ09SQkE6Ok9jdGV0ICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCk7CgogICAg
cHJpdmF0ZToKICAgICAgX3Rhb19zZXFfT2N0ZXQgKiZwdHJfOwoKICAgICAgdm9pZCBvcGVyYXRv
cj0gKGNvbnN0IF90YW9fc2VxX09jdGV0X3ZhciAmKTsKICAgIH07CgoKCgogICAgX3Rhb19zZXFf
T2N0ZXQgc2VydmljZV9kZXRhaWw7Cn07CgpjbGFzcyBDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcgp7
CiBwdWJsaWM6CiAgQ09SQkFfU2VydmljZURldGFpbF92YXIgKHZvaWQpOwogIENPUkJBX1NlcnZp
Y2VEZXRhaWxfdmFyIChDT1JCQV9TZXJ2aWNlRGV0YWlsICopOwogIENPUkJBX1NlcnZpY2VEZXRh
aWxfdmFyIChjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmKTsKICB+Q09SQkFfU2Vydmlj
ZURldGFpbF92YXIgKHZvaWQpOwoKICBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmb3BlcmF0b3I9
IChDT1JCQV9TZXJ2aWNlRGV0YWlsICopOwogIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICZvcGVy
YXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYpOwogIENPUkJBX1NlcnZpY2VE
ZXRhaWwgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWwgKm9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfU2VydmljZURl
dGFpbCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfU2VydmljZURldGFpbCAmKCk7CiAgb3Bl
cmF0b3IgQ09SQkFfU2VydmljZURldGFpbCAmKCkgY29uc3Q7CiAgY29uc3QgQ09SQkFfU2Vydmlj
ZURldGFpbCAmaW4gKHZvaWQpIGNvbnN0OwogIENPUkJBX1NlcnZpY2VEZXRhaWwgJmlub3V0ICh2
b2lkKTsKICBDT1JCQV9TZXJ2aWNlRGV0YWlsIComb3V0ICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNl
RGV0YWlsICpfcmV0biAodm9pZCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqcHRyICh2b2lkKSBj
b25zdDsKCiBwcml2YXRlOgogIENPUkJBX1NlcnZpY2VEZXRhaWwgKnB0cl87Cn07CgpjbGFzcyBD
T1JCQV9TZXJ2aWNlRGV0YWlsX291dAp7CiBwdWJsaWM6CiAgQ09SQkFfU2VydmljZURldGFpbF9v
dXQgKENPUkJBX1NlcnZpY2VEZXRhaWwgKiYpOwogIENPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IChD
T1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dCAoY29u
c3QgQ09SQkFfU2VydmljZURldGFpbF9vdXQgJik7CiAgQ09SQkFfU2VydmljZURldGFpbF9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZURldGFpbF9vdXQgJik7CiAgQ09SQkFfU2Vy
dmljZURldGFpbF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfU2VydmljZURldGFpbCAqKTsKICBvcGVy
YXRvciBDT1JCQV9TZXJ2aWNlRGV0YWlsIComKCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqJnB0
ciAodm9pZCk7CiAgQ09SQkFfU2VydmljZURldGFpbCAqb3BlcmF0b3ItPiAodm9pZCk7CgogcHJp
dmF0ZToKCiAgQ09SQkFfU2VydmljZURldGFpbCAqJnB0cl87CiAgdm9pZCBvcGVyYXRvcj0gKGNv
bnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYpOwp9OwoKc3RydWN0IENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbgp7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK
CgoKCgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9T
ZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKTsK
ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190
YW9fc2VxX1NlcnZpY2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgICAgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp
Y2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyAqZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAg
ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9f
c2VxX1NlcnZpY2VPcHRpb24gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICYgcmhzKTsKICAgICAgX1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1Nl
cnZpY2VPcHRpb24gJm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S
QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gJnJocyk7CiAgICAg
IHZpcnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKTsKCgogICAgICBDT1JCQTo6VUxvbmcgJm9w
ZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgICAgY29uc3QgQ09SQkE6OlVMb25nICZvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgQ09SQkE6OlVMb25n
ICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpOwogICAgICBzdGF0aWMgdm9pZCBmcmVlYnVm
IChDT1JCQTo6VUxvbmcgKmJ1ZmZlcik7CiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVm
ZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRl
X2J1ZmZlciAodm9pZCk7CgoKICAgICAgQ09SQkE6OlVMb25nICpnZXRfYnVmZmVyIChDT1JCQTo6
Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgQ09SQkE6OlVMb25nICpnZXRfYnVmZmVy
ICh2b2lkKSBjb25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg
Q09SQkE6OlVMb25nICpkYXRhLAogICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJl
bGVhc2UpOwogICAgfTsKIyAyMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u
IDogcHVibGljCgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uCgoKCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90
YW9fc2VxX1NlcnZpY2VPcHRpb24gKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u
IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpVTG9uZyAqYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoY29uc3QgX3Rhb19zZXFfU2Vydmlj
ZU9wdGlvbiAmKTsKICAgICAgfl90YW9fc2VxX1NlcnZpY2VPcHRpb24gKHZvaWQpOwogICAgfTsK
ICB0eXBlZGVmIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gKl90YW9fc2VxX1NlcnZpY2VPcHRpb25f
cHRyOwogIHN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19fdGFvX3NlcV9TZXJ2aWNlT3B0
aW9uOwojIDI3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyCiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKTsKICAg
ICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgKF90YW9fc2VxX1NlcnZpY2VPcHRpb24gKik7
CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyIChjb25zdCBfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uX3ZhciAmKTsKICAgICAgfl90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKTsK
ICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJm9wZXJhdG9yPSAoX3Rhb19zZXFfU2Vy
dmljZU9wdGlvbiAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJm9wZXJhdG9y
PSAoY29uc3QgX3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXIgJik7CiAgICAgIF90YW9fc2VxX1Nl
cnZpY2VPcHRpb24gKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgICBjb25zdCBfdGFvX3NlcV9TZXJ2
aWNlT3B0aW9uICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICAgIG9wZXJhdG9yIGNvbnN0
IF90YW9fc2VxX1NlcnZpY2VPcHRpb24gJigpIGNvbnN0OwogICAgICBvcGVyYXRvciBfdGFvX3Nl
cV9TZXJ2aWNlT3B0aW9uICYoKTsKICAgICAgb3BlcmF0b3IgX3Rhb19zZXFfU2VydmljZU9wdGlv
biAmKCkgY29uc3Q7CiAgICAgIENPUkJBOjpTZXJ2aWNlT3B0aW9uICZvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgc2xvdCk7CgogICAgICBjb25zdCBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICZpbiAo
dm9pZCkgY29uc3Q7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gJmlub3V0ICh2b2lkKTsK
ICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJm91dCAodm9pZCk7CiAgICAgIF90YW9fc2Vx
X1NlcnZpY2VPcHRpb24gKl9yZXRuICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlv
biAqcHRyICh2b2lkKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgICBfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uICpwdHJfOwogICAgfTsKIyAzMDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIKICBjbGFzcyBfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uX291dAogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9u
X291dCAoX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJik7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VP
cHRpb25fb3V0IChfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3ZhciAmKTsKICAgICAgX3Rhb19zZXFf
U2VydmljZU9wdGlvbl9vdXQgKGNvbnN0IF90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0ICYpOwog
ICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dCAmb3BlcmF0b3I9IChjb25zdCBfdGFvX3Nl
cV9TZXJ2aWNlT3B0aW9uX291dCAmKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQg
Jm9wZXJhdG9yPSAoX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqKTsKICAgICAgb3BlcmF0b3IgX3Rh
b19zZXFfU2VydmljZU9wdGlvbiAqJigpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICom
cHRyICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZU9wdGlvbiAqb3BlcmF0b3ItPiAodm9p
ZCk7CiAgICAgIENPUkJBOjpTZXJ2aWNlT3B0aW9uICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg
c2xvdCk7CiAgICBwcml2YXRlOgogICAgICBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIComcHRyXzsK
CiAgICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3ZhciAm
KTsKICAgIH07CgoKCgogIF90YW9fc2VxX1NlcnZpY2VPcHRpb24gc2VydmljZV9vcHRpb25zOwoK
CgoKCgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9T
ZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICh2b2lkKTsK
ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190
YW9fc2VxX1NlcnZpY2VEZXRhaWwgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgICAgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp
Y2VEZXRhaWwgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX1NlcnZpY2VEZXRh
aWwgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g
MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAmIHJocyk7CiAg
ICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICZyaHMp
OwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAodm9pZCk7CgogICAgICBDT1JCQV9TZXJ2
aWNlRGV0YWlsICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IENPUkJB
X1NlcnZpY2VEZXRhaWwgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCiAgICAg
IHN0YXRpYyBDT1JCQV9TZXJ2aWNlRGV0YWlsICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUp
OwogICAgICBzdGF0aWMgdm9pZCBmcmVlYnVmIChDT1JCQV9TZXJ2aWNlRGV0YWlsICpidWZmZXIp
OwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0
aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAg
IENPUkJBX1NlcnZpY2VEZXRhaWwgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbiA9
IDApOwogICAgICBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICpnZXRfYnVmZmVyICh2b2lkKSBj
b25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgQ09SQkFfU2Vy
dmljZURldGFpbCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxl
YXNlKTsKICAgIH07CiMgMzc1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcnZpY2VzLmgiCiAgY2xhc3MgX3Rhb19zZXFfU2VydmljZURldGFpbCA6
IHB1YmxpYwoKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b25fX3Rhb19zZXFfU2VydmljZURldGFpbAoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsICh2b2lkKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbCAo
Q09SQkE6OlVMb25nIG1heCk7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICpidWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICApOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBfdGFvX3NlcV9T
ZXJ2aWNlRGV0YWlsICYpOwogICAgICB+X3Rhb19zZXFfU2VydmljZURldGFpbCAodm9pZCk7CiAg
ICB9OwogIHR5cGVkZWYgX3Rhb19zZXFfU2VydmljZURldGFpbCAqX3Rhb19zZXFfU2VydmljZURl
dGFpbF9wdHI7CiAgc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX190YW9fc2VxX1NlcnZp
Y2VEZXRhaWw7CiMgNDA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1NlcnZpY2VzLmgiCiAgY2xhc3MgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIK
ICAgIHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZvaWQp
OwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3ZhciAoX3Rhb19zZXFfU2VydmljZURldGFp
bCAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKGNvbnN0IF90YW9fc2VxX1Nl
cnZpY2VEZXRhaWxfdmFyICYpOwogICAgICB+X3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZv
aWQpOwoKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJm9wZXJhdG9yPSAoX3Rhb19z
ZXFfU2VydmljZURldGFpbCAqKTsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJm9w
ZXJhdG9yPSAoY29uc3QgX3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgJik7CiAgICAgIF90YW9f
c2VxX1NlcnZpY2VEZXRhaWwgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgICBjb25zdCBfdGFvX3Nl
cV9TZXJ2aWNlRGV0YWlsICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICAgIG9wZXJhdG9y
IGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgJigpIGNvbnN0OwogICAgICBvcGVyYXRvciBf
dGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYoKTsKICAgICAgb3BlcmF0b3IgX3Rhb19zZXFfU2Vydmlj
ZURldGFpbCAmKCkgY29uc3Q7CiAgICAgIENPUkJBX1NlcnZpY2VEZXRhaWwgJm9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBzbG90KTsKCiAgICAgIGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWwg
JmluICh2b2lkKSBjb25zdDsKICAgICAgX3Rhb19zZXFfU2VydmljZURldGFpbCAmaW5vdXQgKHZv
aWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComb3V0ICh2b2lkKTsKICAgICAgX3Rh
b19zZXFfU2VydmljZURldGFpbCAqX3JldG4gKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNl
RGV0YWlsICpwdHIgKHZvaWQpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX1Nl
cnZpY2VEZXRhaWwgKnB0cl87CiAgICB9OwojIDQ0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIgogIGNsYXNzIF90YW9fc2VxX1Nl
cnZpY2VEZXRhaWxfb3V0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VE
ZXRhaWxfb3V0IChfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComKTsKICAgICAgX3Rhb19zZXFfU2Vy
dmljZURldGFpbF9vdXQgKF90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICYpOwogICAgICBfdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsX291dCAoY29uc3QgX3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQg
Jik7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IF90
YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICYpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWls
X291dCAmb3BlcmF0b3I9IChfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICopOwogICAgICBvcGVyYXRv
ciBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComKCk7CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRh
aWwgKiZwdHIgKHZvaWQpOwogICAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICpvcGVyYXRvci0+
ICh2b2lkKTsKICAgICAgQ09SQkFfU2VydmljZURldGFpbCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIHNsb3QpOwoKICAgIHByaXZhdGU6CiAgICAgIF90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKiZw
dHJfOwoKICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF90YW9fc2VxX1NlcnZpY2VEZXRhaWxf
dmFyICYpOwogICAgfTsKCgoKCiAgICBfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIHNlcnZpY2VfZGV0
YWlsczsKfTsKCgpjbGFzcyBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyCnsKIHB1YmxpYzoK
ICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb25fdmFyIChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKik7CiAgQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uX3ZhciAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAmKTsK
ICB+Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAodm9pZCk7CgogIENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbl92YXIgJm9wZXJhdG9yPSAoQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICopOwog
IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2Vy
dmljZUluZm9ybWF0aW9uX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKm9wZXJh
dG9yLT4gKHZvaWQpOwogIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqb3BlcmF0b3It
PiAodm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b24gJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAmKCk7CiAg
b3BlcmF0b3IgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uICYoKSBjb25zdDsKICBjb25zdCBDT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb24gJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb24gJmlub3V0ICh2b2lkKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKiZvdXQg
KHZvaWQpOwogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqX3JldG4gKHZvaWQpOwogIENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbiAqcHRyICh2b2lkKSBjb25zdDsKCiBwcml2YXRlOgogIENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbiAqcHRyXzsKfTsKCmNsYXNzIENPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9vdXQKewogcHVibGljOgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbiAqJik7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dCAo
Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b25fb3V0IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICYpOwogIENPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZUluZm9y
bWF0aW9uX291dCAmKTsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICZvcGVyYXRvcj0g
KENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqKTsKCiAgb3BlcmF0b3IgQ09SQkFfU2VydmljZUlu
Zm9ybWF0aW9uIComKCk7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uIComcHRyICh2b2lkKTsK
ICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKm9wZXJhdG9yLT4gKHZvaWQpOwoKIHByaXZhdGU6
CgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqJnB0cl87CiAgdm9pZCBvcGVyYXRvcj0gKGNv
bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgJik7Cn07CgoKdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQTo6U2VydmljZURldGFpbCAmKTsKdm9pZCBvcGVy
YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6U2VydmljZURldGFpbCopOwpDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBDT1JCQTo6U2VydmljZURldGFp
bCAqJik7CnZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uICYpOwp2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbiopOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKiYpOwoKQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICYp
OwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfU2Vydmlj
ZURldGFpbCAmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBj
b25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9f
c2VxX09jdGV0ICYpOwoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAm
LCBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gJik7CkNPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj4gKFRBT19JbnB1dENEUiAmLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gJik7CkNPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJiwgY29uc3QgQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICYpOwpDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv
X3NlcV9TZXJ2aWNlT3B0aW9uICYpOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0
cHV0Q0RSICYsIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj
ZURldGFpbCAmKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsIENP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAmKTsKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2Vydmlj
ZXMuaSIgMQojIDE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1NlcnZpY2VzLmkiCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcjo6Q09SQkFf
U2VydmljZURldGFpbF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1Nl
cnZpY2VEZXRhaWxfdmFyOjpDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAoIENPUkJBX1NlcnZpY2VE
ZXRhaWwgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX3Zh
cjo6Q09SQkFfU2VydmljZURldGFpbF92YXIgKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFy
ICZwKQp7CiAgaWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZURl
dGFpbCgqcC5wdHJfKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCiBDT1JC
QV9TZXJ2aWNlRGV0YWlsX3Zhcjo6fkNPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICh2b2lkKQp7CiAg
ZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmCiBD
T1JCQV9TZXJ2aWNlRGV0YWlsX3Zhcjo6b3BlcmF0b3I9ICggQ09SQkFfU2VydmljZURldGFpbCAq
cCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhp
czsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICYKIENPUkJBX1NlcnZpY2VEZXRh
aWxfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAg
aWYgKHRoaXMgIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJf
ID0gbmV3IENPUkJBX1NlcnZpY2VEZXRhaWwgKCpwLnB0cl8pOwogIH0KICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICoKIENPUkJBX1NlcnZpY2VEZXRh
aWxfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K
CmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsICoKIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyOjpv
cGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFf
U2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VEZXRhaWwgJigp
IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFfU2VydmljZURl
dGFpbF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VEZXRhaWwgJigpCnsKICByZXR1cm4gKnRo
aXMtPnB0cl87Cn0KCmlubGluZQogQ09SQkFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIENP
UkJBX1NlcnZpY2VEZXRhaWwgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu
bGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsICYKIENPUkJBX1NlcnZpY2VEZXRhaWxfdmFy
OjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB
X1NlcnZpY2VEZXRhaWwgJgogQ09SQkFfU2VydmljZURldGFpbF92YXI6Omlub3V0ICh2b2lkKQp7
CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKiYK
IENPUkJBX1NlcnZpY2VEZXRhaWxfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy
XzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB
X1NlcnZpY2VEZXRhaWwgKgogQ09SQkFfU2VydmljZURldGFpbF92YXI6Ol9yZXRuICh2b2lkKQp7
CiAgIENPUkJBX1NlcnZpY2VEZXRhaWwgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9
IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgogQ09SQkFf
U2VydmljZURldGFpbF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgoKCgoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6Q09SQkFfU2VydmljZURl
dGFpbF9vdXQgKCBDT1JCQV9TZXJ2aWNlRGV0YWlsIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlz
LT5wdHJfID0gMDsKfQoKaW5saW5lCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6Q09SQkFfU2Vy
dmljZURldGFpbF9vdXQgKCBDT1JCQV9TZXJ2aWNlRGV0YWlsX3ZhciAmcCkKICA6IHB0cl8gKHAu
b3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu
ZQogQ09SQkFfU2VydmljZURldGFpbF9vdXQ6OkNPUkJBX1NlcnZpY2VEZXRhaWxfb3V0IChjb25z
dCBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFf
U2VydmljZURldGFpbF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0
YWlsX291dCAmCiBDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JC
QV9TZXJ2aWNlRGV0YWlsX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJB
X1NlcnZpY2VEZXRhaWxfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
Q09SQkFfU2VydmljZURldGFpbF9vdXQgJgpDT1JCQV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0
b3I9IChDT1JCQV9TZXJ2aWNlRGV0YWlsICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJu
ICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZURldGFpbF9vdXQ6Om9wZXJhdG9yIENPUkJB
X1NlcnZpY2VEZXRhaWwgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JC
QV9TZXJ2aWNlRGV0YWlsIComCkNPUkJBX1NlcnZpY2VEZXRhaWxfb3V0OjpwdHIgKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgpDT1JC
QV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CiMgMTg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1NlcnZpY2VzLmkiCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9P
Y3RldF92YXI6Ol90YW9fc2VxX09jdGV0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp
bmUKQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpfdGFvX3NlcV9PY3Rl
dF92YXIgKENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICpwKQogIDogcHRyXyAo
cCkKe30KCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Ol90
YW9fc2VxX09jdGV0X3ZhciAoY29uc3QgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0
ZXRfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2Vy
dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQoKnAucHRyXyk7CiAgZWxzZQogICAgdGhpcy0+cHRy
XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6
On5fdGFvX3NlcV9PY3RldF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3ZhciAmCkNPUkJBX1NlcnZp
Y2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlRGV0
YWlsOjpfdGFvX3NlcV9PY3RldCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90
YW9fc2VxX09jdGV0X3ZhciAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zh
cjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92
YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICB7CiAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAg
IHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKCpw
LnB0cl8pOwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNl
RGV0YWlsOjpfdGFvX3NlcV9PY3RldCAqCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j
dGV0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKgpDT1JCQV9TZXJ2
aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j
dGV0X3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0
ZXQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9TZXJ2
aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VEZXRh
aWw6Ol90YW9fc2VxX09jdGV0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK
Q09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpvcGVyYXRvciBDT1JCQV9T
ZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lIENPUkJBOjpPY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9f
c2VxX09jdGV0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4g
dGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2
aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2Vx
X09jdGV0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu
bGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAmCkNPUkJBX1NlcnZpY2VE
ZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKiYK
Q09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICoKQ09SQkFfU2Vy
dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfdmFyOjpfcmV0biAodm9pZCkKewogIENPUkJBX1Nl
cnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFv
X3NlcV9PY3RldCAqCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X3Zhcjo6cHRy
ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFf
U2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0OjpfdGFvX3NlcV9PY3RldF9vdXQgKENP
UkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0IComcCkKICA6IHB0cl8gKHApCnsKICB0
aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09j
dGV0X291dDo6X3Rhb19zZXFfT2N0ZXRfb3V0IChDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3Nl
cV9PY3RldF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19z
ZXFfT2N0ZXRfb3V0OjpfdGFvX3NlcV9PY3RldF9vdXQgKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRh
aWw6Ol90YW9fc2VxX09jdGV0X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFfU2Vy
dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgQ09S
QkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXRfb3V0ICYKQ09SQkFfU2VydmljZURldGFp
bDo6X3Rhb19zZXFfT2N0ZXRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1NlcnZpY2VEZXRh
aWw6Ol90YW9fc2VxX09jdGV0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENP
UkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291dCY+IChwKS5wdHJfOwogIHJldHVy
biAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291
dCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0X291dDo6b3BlcmF0b3I9IChD
T1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldCAqcCkKewogIHRoaXMtPnB0cl8gPSBw
OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2Vx
X09jdGV0X291dDo6b3BlcmF0b3IgQ09SQkFfU2VydmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQg
KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlRGV0YWls
OjpfdGFvX3NlcV9PY3RldCAqJgpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3NlcV9PY3RldF9v
dXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfU2Vy
dmljZURldGFpbDo6X3Rhb19zZXFfT2N0ZXQgKgpDT1JCQV9TZXJ2aWNlRGV0YWlsOjpfdGFvX3Nl
cV9PY3RldF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIENPUkJBOjpPY3RldCAmCkNPUkJBX1NlcnZpY2VEZXRhaWw6Ol90YW9fc2VxX09jdGV0
X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4gdGhpcy0+cHRy
Xy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KIyAzNzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU2VydmljZXMuaSIKaW5saW5lCkNPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbl92YXI6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXIgKHZvaWQpCiAgOiBw
dHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OkNPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl92YXIgKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqcCkKICA6IHB0
cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6Q09SQkFfU2Vy
dmljZUluZm9ybWF0aW9uX3ZhciAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3ZhciAm
cCkKewogIGlmIChwLnB0cl8pCiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbigqcC5wdHJfKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6On5DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFy
ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6b3BlcmF0b3I9IChD
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz
LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3Jt
YXRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6b3BlcmF0b3I9IChjb25z
dCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAg
ewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1NlcnZp
Y2VJbmZvcm1hdGlvbiAoKnAucHRyXyk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNv
bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92
YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92
YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbiAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbiAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbiAmKCkgY29u
c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbiAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OmluICh2b2lkKSBjb25z
dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9ybWF0
aW9uICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1
cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uIComCkNP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5w
dHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S
QkFfU2VydmljZUluZm9ybWF0aW9uICoKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX3Zhcjo6X3Jl
dG4gKHZvaWQpCnsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb24gKnRtcCA9IHRoaXMtPnB0cl87
CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl92YXI6OnB0ciAodm9pZCkgY29u
c3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbl9vdXQ6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbiAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu
ZQpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25f
b3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6OkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgKGNv
bnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0
PENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dDo6
b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0ICZwKQp7CiAgdGhp
cy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX291dCY+IChwKS5w
dHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9v
dXQgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpvcGVyYXRvcj0gKENPUkJBX1NlcnZp
Y2VJbmZvcm1hdGlvbiAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6Om9wZXJhdG9yIENPUkJBX1NlcnZp
Y2VJbmZvcm1hdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbiAqJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fb3V0OjpwdHIg
KHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQp
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDU0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgogIGlubGluZSBDT1JCQTo6VUxv
bmcgKgogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
Q09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246OmFsbG9jYnVm
IChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgcmV0dXJuIG5ldyBDT1JCQTo6VUxvbmdbc2l6
ZV07CiAgfQoKICBpbmxpbmUgdm9pZCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5i
b3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uOjpmcmVlYnVmIChDT1JCQTo6VUxvbmcgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtd
IGJ1ZmZlcjsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZp
Y2VPcHRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uICh2b2lkKQogIHsKICB9CgogIGlubGluZQogIENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uIChDT1JC
QTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhp
bXVtLCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjphbGxvY2J1ZiAo
bWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf
U2VydmljZU9wdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9y
bWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAg
Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgIENPUkJBOjpVTG9uZyAqZGF0YSwKICAgIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0s
IGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNl
SW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZU9wdGlvbiAoY29uc3QgQ09SQkE6
OlNlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vydmlj
ZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb24gJnJocykKCiAgICA6IFRBT19VbmJv
dW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9IENP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2Vy
dmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRpb246OmFsbG9jYnVmICh0aGlzLT5t
YXhpbXVtXyk7CiAgICBDT1JCQTo6VUxvbmcgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2Fz
dDxDT1JCQTo6VUxvbmcgKj4gKHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBp
ID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07Cgog
ICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgfQoKICBpbmxpbmUgQ09SQkFfU2VydmljZUluZm9y
bWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25f
X3Rhb19zZXFfU2VydmljZU9wdGlvbiAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2Vy
dmljZU9wdGlvbjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQTo6U2VydmljZUluZm9ybWF0aW9uOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf
U2VydmljZU9wdGlvbiAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1
cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+
bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgQ09SQkE6OlVMb25nICp0
bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAg
ICAgICAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZU9wdGlvbjo6ZnJlZWJ1ZiAo
dG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf
U2VydmljZU9wdGlvbjo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAg
IGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1Nl
cnZpY2VPcHRpb246OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRf
QmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENP
UkJBOjpVTG9uZyAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAq
PiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+
bGVuZ3RoXzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7
CiAgfQoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u
OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19z
ZXFfU2VydmljZU9wdGlvbjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsKICAgIGRv
IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA2MjcsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5y
ZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAo
KSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwg
YXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0x
KTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpVTG9uZyogdG1wID0gcmVpbnRlcnByZXRfY2Fz
dDxDT1JCQTo6VUxvbmcqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0K
CiAgaW5saW5lIGNvbnN0IENPUkJBOjpVTG9uZyAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u
OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19z
ZXFfU2VydmljZU9wdGlvbjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsK
ICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD
RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp
bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA2MzYsIC0xLCBfX2FjZV9lcnJvciwgYWNl
X19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxs
YmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxp
bmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVt
XyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpVTG9uZyAqIGNvbnN0IHRtcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0dXJu
IHRtcFtpXTsKICB9CgoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAqCiAgQ09SQkFfU2VydmljZUlu
Zm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b25fX3Rhb19zZXFfU2VydmljZU9wdGlvbjo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3Jw
aGFuKQogIHsKICAgIENPUkJBOjpVTG9uZyAqcmVzdWx0ID0gMDsKICAgIGlmIChvcnBoYW4gPT0g
MCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAgICAgIHsKICAgICAgICBy
ZXN1bHQgPSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjphbGxvY2J1
ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAg
ICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAg
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VUxvbmcqPiAodGhpcy0+YnVmZmVyXyk7
CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9
IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVM
b25nKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg
ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0
aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK
ICBpbmxpbmUgY29uc3QgQ09SQkE6OlVMb25nICoKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246
Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3Nl
cV9TZXJ2aWNlT3B0aW9uOjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PGNvbnN0IENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAg
fQoKICBpbmxpbmUgdm9pZAogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VPcHRp
b246OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICBD
T1JCQTo6VUxvbmcgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlz
LT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhp
cy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBDT1JCQTo6VUxv
bmcgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1ZmZlcl8p
OwogICAgICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlT3B0aW9uOjpmcmVlYnVm
ICh0bXApOwogICAgfQogICAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgICB0aGlzLT5yZWxlYXNl
XyA9IHJlbGVhc2U7CiAgfQojIDcxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0
aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92
YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFy
IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb24gKnApCiAg
OiBwdHJfIChwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFf
U2VydmljZU9wdGlvbl92YXI6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyIChjb25zdCBDT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQp7CiAg
aWYgKHAucHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZUluZm9ybWF0aW9u
OjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uKCpwLnB0cl8pOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g
PSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uX3Zhcjo6fl90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICh2b2lkKQp7CiAgZGVsZXRl
IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx
X1NlcnZpY2VPcHRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9T
ZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90
YW9fc2VxX1NlcnZpY2VPcHRpb24gKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5w
dHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9u
OjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2
aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQp7CiAgaWYgKHRo
aXMgIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3
IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAoKnAucHRy
Xyk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6
X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z
ZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj
ZU9wdGlvbl92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh
b19zZXFfU2VydmljZU9wdGlvbiAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK
aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92
YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9w
dGlvbiAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Om9wZXJhdG9yIENPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAmKCkgY29uc3QKewogIHJl
dHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpTZXJ2aWNlT3B0aW9uICYKQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX3Zhcjo6b3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nIHNsb3QpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAo
c2xvdCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx
X1NlcnZpY2VPcHRpb24gJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp
Y2VPcHRpb25fdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK
aW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAm
CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Omlu
b3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIENPUkJBX1NlcnZp
Y2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAqJgpDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxl
dGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbiAq
CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl92YXI6Ol9y
ZXRuICh2b2lkKQp7CiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7
Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRp
b24gKgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFy
OjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpD
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0OjpfdGFv
X3NlcV9TZXJ2aWNlT3B0aW9uX291dCAoQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3Nl
cV9TZXJ2aWNlT3B0aW9uIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoK
aW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9v
dXQ6Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246
Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1NlcnZp
Y2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Ol90YW9fc2VxX1NlcnZp
Y2VPcHRpb25fb3V0IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl
cnZpY2VPcHRpb25fb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb25fb3V0Jj4gKHApLnB0cl8pCnt9Cgppbmxp
bmUgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dCAm
CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Om9w
ZXJhdG9yPSAoY29uc3QgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl
T3B0aW9uX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQmPiAocCkucHRyXzsKICByZXR1
cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl
cnZpY2VPcHRpb25fb3V0ICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2
aWNlT3B0aW9uX291dDo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f
c2VxX1NlcnZpY2VPcHRpb24gKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZQpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRp
b25fb3V0OjpvcGVyYXRvciBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp
Y2VPcHRpb24gKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2
aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VPcHRpb24gKiYKQ09SQkFfU2VydmljZUlu
Zm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlT3B0aW9uX291dDo6cHRyICh2b2lkKQp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f
c2VxX1NlcnZpY2VPcHRpb24gKgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1Nl
cnZpY2VPcHRpb25fb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSBDT1JCQTo6U2VydmljZU9wdGlvbiAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZU9wdGlvbl9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz
bG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKHNsb3QpOwp9CiMgODk5ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2Vz
LmkiCiAgaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgKgogIENPUkJBOjpTZXJ2aWNlSW5mb3Jt
YXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9f
dGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpCgogIHsK
ICAgIHJldHVybiBuZXcgQ09SQkFfU2VydmljZURldGFpbFtzaXplXTsKICB9CgogIGlubGluZSB2
b2lkIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S
QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKENP
UkJBOjpTZXJ2aWNlRGV0YWlsICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAg
fQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFf
U2VydmljZURldGFpbCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9T
ZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAoQ09SQkE6OlVMb25nIG1h
eGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNl
SW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6YWxsb2NidWYgKG1heGltdW0pKQog
IHsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRh
aWw6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgIENPUkJBOjpVTG9u
ZyBsZW5ndGgsCiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICpkYXRhLAogICAgQ09SQkE6OkJvb2xl
YW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu
Z3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQogIENPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9u
X190YW9fc2VxX1NlcnZpY2VEZXRhaWw6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIChjb25zdCBDT1JCQTo6U2Vy
dmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbCAmcmhzKQoKICAgIDogVEFPX1VuYm91bmRl
ZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgQ09SQkFfU2VydmljZURldGFpbCAqdG1wMSA9
IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmFsbG9jYnVmICh0aGlz
LT5tYXhpbXVtXyk7CiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICogY29uc3QgdG1wMiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZv
ciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAx
W2ldID0gdG1wMltpXTsKCiAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICB9CgogIGlubGluZSBD
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYKICBDT1JCQV9TZXJ2aWNl
SW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBOjpTZXJ2
aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICZyaHMpCgogIHsKICAgIGlmICh0aGlzID09
ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgICB7
CiAgICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgewoKICAgICAg
ICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBX1NlcnZp
Y2VEZXRhaWwgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIENPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfU2VydmljZUluZm9ybWF0aW9uX190
YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVy
XyA9IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S
QkFfU2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmFsbG9jYnVmIChy
aHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8g
PSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbl9fdGFvX3NlcV9TZXJ2aWNlRGV0YWlsOjphbGxvY2J1ZiAocmhz
Lm1heGltdW1fKTsKCiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAo
cmhzKTsKCiAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAxID0gcmVpbnRlcnByZXRfY2FzdDxD
T1JCQV9TZXJ2aWNlRGV0YWlsICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJBX1NlcnZpY2VE
ZXRhaWwgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9TZXJ2aWNlRGV0YWls
ICo+IChyaHMuYnVmZmVyXyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlz
LT5sZW5ndGhfOyArK2kpCiAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgIHJldHVybiAqdGhp
czsKICB9CgoKICBpbmxpbmUgQ09SQkFfU2VydmljZURldGFpbCAmCiAgQ09SQkFfU2VydmljZUlu
Zm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgog
IHsKICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9
IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn
OjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2VzLmkiLCA5ODIsIC0xLCBfX2FjZV9lcnJvciwg
YWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19j
YWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4s
IGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhp
bXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBX1NlcnZpY2VEZXRhaWwqIHRtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCo+ICh0aGlzLT5idWZmZXJfKTsK
ICAgIHJldHVybiB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgQ09SQkFfU2VydmljZURldGFp
bCAmCiAgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D
T1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6b3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4
aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xv
Z19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcnZpY2Vz
LmkiLCA5OTEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1z
Z19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9F
UlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3Ig
JyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAg
IENPUkJBX1NlcnZpY2VEZXRhaWwgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJB
X1NlcnZpY2VEZXRhaWwqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0K
CgoKICBpbmxpbmUgQ09SQkFfU2VydmljZURldGFpbCAqCiAgQ09SQkFfU2VydmljZUluZm9ybWF0
aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rh
b19zZXFfU2VydmljZURldGFpbDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQog
IHsKICAgIENPUkJBX1NlcnZpY2VEZXRhaWwgKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09
IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAg
cmVzdWx0ID0gQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZV9DT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6YWxsb2Ni
dWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAg
ICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAg
IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfU2VydmljZURldGFpbCo+ICh0aGlzLT5i
dWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVs
ZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxD
T1JCQV9TZXJ2aWNlRGV0YWlsKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGlt
dW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJf
ID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVy
biByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3QgQ09SQkFfU2VydmljZURldGFpbCAqCiAgQ09S
QkFfU2VydmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2
aWNlSW5mb3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6Z2V0X2J1ZmZlciAodm9pZCkg
Y29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JCQV9TZXJ2aWNl
RGV0YWlsICo+ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgQ09SQkFfU2Vy
dmljZUluZm9ybWF0aW9uOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb25fX3Rhb19zZXFfU2VydmljZURldGFpbDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1h
eCwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIENPUkJBX1NlcnZpY2VEZXRhaWwgKmRhdGEsCiAg
Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAg
IHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5y
ZWxlYXNlXyA9PSAxKQogICAgewogICAgICBDT1JCQV9TZXJ2aWNlRGV0YWlsICp0bXAgPSByZWlu
dGVycHJldF9jYXN0PENPUkJBX1NlcnZpY2VEZXRhaWwqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAg
IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uX190YW9fc2VxX1NlcnZpY2VEZXRhaWw6OmZyZWVidWYgKHRtcCk7
CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVs
ZWFzZTsKICB9CiMgMTA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9TZXJ2aWNlcy5pIgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpf
dGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXIgKHZv
aWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh
b19zZXFfU2VydmljZURldGFpbF92YXI6Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyIChDT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWwgKnApCiAgOiBwdHJf
IChwKQp7fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj
ZURldGFpbF92YXI6Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyIChjb25zdCBDT1JCQV9TZXJ2
aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAgaWYgKHAu
cHRyXykKICAgIHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsKCpwLnB0cl8pOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9
CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWls
X3Zhcjo6fl90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt
PnB0cl87Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp
Y2VEZXRhaWxfdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNl
RGV0YWlsX3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2Vx
X1NlcnZpY2VEZXRhaWwgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g
cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90
YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICYKQ09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFv
X3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5m
b3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g
JnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICB0aGlzLT5wdHJfID0gbmV3IENPUkJB
X1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAoKnAucHRyXyk7CiAg
fQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rh
b19zZXFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z
ZXFfU2VydmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy
dmljZURldGFpbF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp
bF92YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFf
U2VydmljZURldGFpbCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l
CkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om9w
ZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAm
KCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1h
dGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJ
bmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAmKCkgY29uc3QKewogIHJldHVybiAq
dGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgJgpDT1JCQV9TZXJ2aWNl
SW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfdmFyOjpvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgc2xvdCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsK
fQoKaW5saW5lIGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vydmlj
ZURldGFpbCAmCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp
bF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg
Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICYKQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6aW5vdXQgKHZv
aWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgQ09SQkFfU2VydmljZUluZm9y
bWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsIComCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlz
LT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsICoKQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX3Zhcjo6X3JldG4gKHZv
aWQpCnsKICBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWwg
KnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5s
aW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqCkNP
UkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF92YXI6OnB0ciAo
dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX1Nl
cnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQ6Ol90YW9fc2VxX1Nl
cnZpY2VEZXRhaWxfb3V0IChDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZp
Y2VEZXRhaWwgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK
Q09SQkFfU2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6X3Rh
b19zZXFfU2VydmljZURldGFpbF9vdXQgKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19z
ZXFfU2VydmljZURldGFpbF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0
aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfU2VydmljZUluZm9y
bWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6X3Rhb19zZXFfU2VydmljZURldGFp
bF9vdXQgKGNvbnN0IENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl
dGFpbF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX1NlcnZpY2VJbmZvcm1hdGlv
bjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBDT1JC
QV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0ICYKQ09SQkFf
U2VydmljZUluZm9ybWF0aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dDo6b3BlcmF0b3I9
IChjb25zdCBDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxf
b3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfU2VydmljZUluZm9ybWF0
aW9uOjpfdGFvX3NlcV9TZXJ2aWNlRGV0YWlsX291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhp
czsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl
dGFpbF9vdXQgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9fc2VxX1NlcnZpY2VEZXRh
aWxfb3V0OjpvcGVyYXRvcj0gKENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy
dmljZURldGFpbCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbF9vdXQ6
Om9wZXJhdG9yIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFp
bCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZv
cm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURldGFpbCAqJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRp
b246Ol90YW9fc2VxX1NlcnZpY2VEZXRhaWxfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2Vy
dmljZURldGFpbCAqCkNPUkJBX1NlcnZpY2VJbmZvcm1hdGlvbjo6X3Rhb19zZXFfU2VydmljZURl
dGFpbF9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIENPUkJBX1NlcnZpY2VEZXRhaWwgJgpDT1JCQV9TZXJ2aWNlSW5mb3JtYXRpb246Ol90YW9f
c2VxX1NlcnZpY2VEZXRhaWxfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkKewog
IHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsKfQojIDUzNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXJ2aWNlcy5oIiAyCgoK
CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bv
c3QuaCIgMQojIDU0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9TZXJ2aWNlcy5oIiAyCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0cmluZy5oIiAxCiMgMjEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5n
LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By
ZS5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vQ09SQkFfU3RyaW5nLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiIDIKIyA0
MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JC
QV9TdHJpbmcuaCIKY2xhc3MgQ09SQkFfU3RyaW5nX3Zhcgp7CnB1YmxpYzoKCiAgQ09SQkFfU3Ry
aW5nX3ZhciAodm9pZCk7CgoKICBDT1JCQV9TdHJpbmdfdmFyIChjaGFyICpwKTsKCgogIENPUkJB
X1N0cmluZ192YXIgKGNvbnN0IGNoYXIgKnApOwoKCiAgQ09SQkFfU3RyaW5nX3ZhciAoY29uc3Qg
Q09SQkFfU3RyaW5nX3ZhciAmcyk7CgoKICB+Q09SQkFfU3RyaW5nX3ZhciAodm9pZCk7CgoKICBD
T1JCQV9TdHJpbmdfdmFyICZvcGVyYXRvcj0gKGNoYXIgKnApOwoKCiAgQ09SQkFfU3RyaW5nX3Zh
ciAmb3BlcmF0b3I9IChjb25zdCBjaGFyICpwKTsKCgogIENPUkJBX1N0cmluZ192YXIgJm9wZXJh
dG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nX3ZhciAmcyk7CgoKICBvcGVyYXRvciBjaGFyICooKTsK
CgogIG9wZXJhdG9yIGNvbnN0IGNoYXIgKigpIGNvbnN0OwoKCiAgY2hhciAmb3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIHNsb3QpOwoKCiAgY2hhciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xv
dCkgY29uc3Q7CgoKCgoKICBjb25zdCBjaGFyICppbiAodm9pZCkgY29uc3Q7CgoKICBjaGFyICom
aW5vdXQgKHZvaWQpOwoKCiAgY2hhciAqJm91dCAodm9pZCk7CgoKICBjaGFyICpfcmV0biAodm9p
ZCk7Cgpwcml2YXRlOgoKICBjaGFyICpwdHJfOwp9OwojIDEwOSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JCQV9TdHJpbmcuaCIKY2xhc3MgQ09S
QkFfU3RyaW5nX291dAp7CnB1YmxpYzoKCgoKICBDT1JCQV9TdHJpbmdfb3V0IChjaGFyIComcCk7
CgoKICBDT1JCQV9TdHJpbmdfb3V0IChDT1JCQV9TdHJpbmdfdmFyICZwKTsKCgogIENPUkJBX1N0
cmluZ19vdXQgKGNvbnN0IENPUkJBX1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfU3RyaW5nX291
dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9TdHJpbmdfb3V0ICZzKTsKCgogIENPUkJBX1N0cmlu
Z19vdXQgJm9wZXJhdG9yPSAoY2hhciAqcCk7CgoKICBDT1JCQV9TdHJpbmdfb3V0JiBvcGVyYXRv
cj0gKGNvbnN0IGNoYXIqIHApOwoKCiAgb3BlcmF0b3IgY2hhciAqJigpOwoKCiAgY2hhciAqJnB0
ciAodm9pZCk7Cgpwcml2YXRlOgoKICBjaGFyIComcHRyXzsKCgogIHZvaWQgb3BlcmF0b3I9IChj
b25zdCBDT1JCQV9TdHJpbmdfdmFyICYpOwp9OwojIDE1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DT1JCQV9TdHJpbmcuaCIKY2xhc3MgQ09SQkFf
V1N0cmluZ192YXIKewpwdWJsaWM6CgogIENPUkJBX1dTdHJpbmdfdmFyICh2b2lkKTsKCgogIENP
UkJBX1dTdHJpbmdfdmFyIChDT1JCQTo6V0NoYXIgKnApOwoKCiAgQ09SQkFfV1N0cmluZ192YXIg
KGNvbnN0IENPUkJBOjpXQ2hhciAqcCk7CgoKICBDT1JCQV9XU3RyaW5nX3ZhciAoY29uc3QgQ09S
QkFfV1N0cmluZ192YXIgJnMpOwoKCiAgfkNPUkJBX1dTdHJpbmdfdmFyICh2b2lkKTsKCgogIENP
UkJBX1dTdHJpbmdfdmFyICZvcGVyYXRvcj0gKENPUkJBOjpXQ2hhciAqcCk7CgoKICBDT1JCQV9X
U3RyaW5nX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQTo6V0NoYXIgKnApOwoKCiAgQ09SQkFf
V1N0cmluZ192YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ192YXIgJnMpOwoKCiAg
b3BlcmF0b3IgQ09SQkE6OldDaGFyICooKTsKCgogIG9wZXJhdG9yIGNvbnN0IENPUkJBOjpXQ2hh
ciAqKCkgY29uc3Q7CgoKICBDT1JCQTo6V0NoYXIgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBz
bG90KTsKCgogIENPUkJBOjpXQ2hhciBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkgY29u
c3Q7CgoKCgoKICBjb25zdCBDT1JCQTo6V0NoYXIgKmluICh2b2lkKSBjb25zdDsKCgogIENPUkJB
OjpXQ2hhciAqJmlub3V0ICh2b2lkKTsKCgogIENPUkJBOjpXQ2hhciAqJm91dCAodm9pZCk7CgoK
ICBDT1JCQTo6V0NoYXIgKl9yZXRuICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpXQ2hhciAq
cHRyXzsKfTsKIyAyMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiCmNsYXNzIENPUkJBX1dTdHJpbmdfb3V0CnsKcHVibGlj
OgoKCgogIENPUkJBX1dTdHJpbmdfb3V0IChDT1JCQTo6V0NoYXIgKiZwKTsKCgogIENPUkJBX1dT
dHJpbmdfb3V0IChDT1JCQV9XU3RyaW5nX3ZhciAmcCk7CgoKICBDT1JCQV9XU3RyaW5nX291dCAo
Y29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfV1N0cmluZ19vdXQgJm9wZXJh
dG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpOwoKCiAgQ09SQkFfV1N0cmluZ19vdXQg
Jm9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICpwKTsKCgogIG9wZXJhdG9yIENPUkJBOjpXQ2hhciAq
JigpOwoKCiAgQ09SQkE6OldDaGFyIComcHRyICh2b2lkKTsKCnByaXZhdGU6CgogIENPUkJBOjpX
Q2hhciAqJnB0cl87CgoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ192YXIg
Jik7Cn07CgoKCiAgICAgICAgICAgb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJiwgY29u
c3QgQ09SQkE6OlN0cmluZ192YXIgJik7CiAgICAgICAgICAgaXN0cmVhbSAmCm9wZXJhdG9yPj4g
KGlzdHJlYW0gJiwgQ09SQkE6OlN0cmluZ192YXIgJik7CiAgICAgICAgICAgb3N0cmVhbSAmCm9w
ZXJhdG9yPDwgKG9zdHJlYW0gJiwgQ09SQkE6OlN0cmluZ19vdXQgJik7CiAgICAgICAgICAgaXN0
cmVhbSAmCm9wZXJhdG9yPj4gKGlzdHJlYW0gJiwgQ09SQkE6OlN0cmluZ19vdXQgJik7CiAgICAg
ICAgICAgb3N0cmVhbSAmCm9wZXJhdG9yPDwgKG9zdHJlYW0gJiwgY29uc3QgQ09SQkE6OldTdHJp
bmdfdmFyICYpOwogICAgICAgICAgIGlzdHJlYW0gJgpvcGVyYXRvcj4+IChpc3RyZWFtICYsIENP
UkJBOjpXU3RyaW5nX3ZhciAmKTsKICAgICAgICAgICBvc3RyZWFtICYKb3BlcmF0b3I8PCAob3N0
cmVhbSAmLCBDT1JCQTo6V1N0cmluZ19vdXQgJik7CiAgICAgICAgICAgaXN0cmVhbSAmCm9wZXJh
dG9yPj4gKGlzdHJlYW0gJiwgQ09SQkE6OldTdHJpbmdfb3V0ICYpOwoKCgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0cmluZy5p
bmwiIDEKIyA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL0NPUkJBX1N0cmluZy5pbmwiCmlubGluZQpDT1JCQV9TdHJpbmdfdmFyOjpDT1JCQV9TdHJp
bmdfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKewp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX3Zhcjo6
Q09SQkFfU3RyaW5nX3ZhciAoY29uc3QgY2hhciAqcCkKICA6IHB0cl8gKENPUkJBOjpzdHJpbmdf
ZHVwIChwKSkKewp9CgppbmxpbmUgQ09SQkE6OkNoYXIgJgpDT1JCQV9TdHJpbmdfdmFyOjpvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkKewoKICByZXR1cm4gdGhpcy0+cHRyX1tzbG90XTsK
fQoKaW5saW5lIENPUkJBOjpDaGFyCkNPUkJBX1N0cmluZ192YXI6Om9wZXJhdG9yW10gKENPUkJB
OjpVTG9uZyBzbG90KSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5wdHJfW3Nsb3RdOwp9Cgppbmxp
bmUKQ09SQkFfU3RyaW5nX3Zhcjo6b3BlcmF0b3IgY2hhciAqKCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX3Zhcjo6b3BlcmF0b3IgY29uc3QgY2hhciAqKCkg
Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgY2hhciAqCkNPUkJB
X1N0cmluZ192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSBjaGFyIComCkNPUkJBX1N0cmluZ192YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComCkNPUkJBX1N0cmluZ192YXI6Om91dCAodm9pZCkK
ewogIENPUkJBOjpzdHJpbmdfZnJlZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IDA7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyICoKQ09SQkFfU3RyaW5nX3Zhcjo6X3Jl
dG4gKHZvaWQpCnsKICBjaGFyICp0ZW1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK
ICByZXR1cm4gdGVtcDsKfQoKCgoKCmlubGluZQpDT1JCQV9TdHJpbmdfb3V0OjpDT1JCQV9TdHJp
bmdfb3V0IChjaGFyIComcykKICA6IHB0cl8gKHMpCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s
aW5lCkNPUkJBX1N0cmluZ19vdXQ6OkNPUkJBX1N0cmluZ19vdXQgKENPUkJBX1N0cmluZ192YXIg
JnMpCiAgOiBwdHJfIChzLm91dCAoKSkKewp9CgppbmxpbmUKQ09SQkFfU3RyaW5nX291dDo6Q09S
QkFfU3RyaW5nX291dCAoY29uc3QgQ09SQkFfU3RyaW5nX291dCAmcykKICA6IHB0cl8gKHMucHRy
XykKewp9CgppbmxpbmUgQ09SQkFfU3RyaW5nX291dCAmCkNPUkJBX1N0cmluZ19vdXQ6Om9wZXJh
dG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nX291dCAmcykKewogIHRoaXMtPnB0cl8gPSBzLnB0cl87
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgQ09SQkFfU3RyaW5nX291dCAmCkNPUkJBX1N0cmlu
Z19vdXQ6Om9wZXJhdG9yPSAoY2hhciAqcykKewogIHRoaXMtPnB0cl8gPSBzOwogIHJldHVybiAq
dGhpczsKfQoKaW5saW5lIENPUkJBX1N0cmluZ19vdXQgJgpDT1JCQV9TdHJpbmdfb3V0OjpvcGVy
YXRvcj0gKGNvbnN0IGNoYXIgKnMpCnsKICB0aGlzLT5wdHJfID0gQ09SQkE6OnN0cmluZ19kdXAg
KHMpOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ19vdXQ6Om9wZXJhdG9y
IGNoYXIgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjaGFyIComCkNPUkJB
X1N0cmluZ19vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKCgpp
bmxpbmUKQ09SQkFfV1N0cmluZ192YXI6OkNPUkJBX1dTdHJpbmdfdmFyICh2b2lkKQogIDogcHRy
XyAoMCkKewp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ192YXI6OkNPUkJBX1dTdHJpbmdfdmFyIChj
b25zdCBDT1JCQTo6V0NoYXIgKnApCiAgOiBwdHJfIChDT1JCQTo6d3N0cmluZ19kdXAgKHApKQp7
Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgJgpDT1JCQV9XU3RyaW5nX3Zhcjo6b3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIHNsb3QpCnsKCiAgcmV0dXJuIHRoaXMtPnB0cl9bc2xvdF07Cn0KCmlubGlu
ZSBDT1JCQTo6V0NoYXIKQ09SQkFfV1N0cmluZ192YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBzbG90KSBjb25zdAp7CgogIHJldHVybiB0aGlzLT5wdHJfW3Nsb3RdOwp9CgppbmxpbmUKQ09S
QkFfV1N0cmluZ192YXI6Om9wZXJhdG9yIENPUkJBOjpXQ2hhciAqKCkKewogIHJldHVybiB0aGlz
LT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ192YXI6Om9wZXJhdG9yIGNvbnN0IENPUkJB
OjpXQ2hhciAqKCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3Qg
Q09SQkE6OldDaGFyICoKQ09SQkFfV1N0cmluZ192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6V0NoYXIgKiYKQ09SQkFfV1N0cmluZ192
YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6
V0NoYXIgKiYKQ09SQkFfV1N0cmluZ192YXI6Om91dCAodm9pZCkKewogIENPUkJBOjp3c3RyaW5n
X2ZyZWUgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgQ09SQkE6OldDaGFyICoKQ09SQkFfV1N0cmluZ192YXI6Ol9yZXRuICh2b2lk
KQp7CiAgQ09SQkE6OldDaGFyICp0ZW1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK
ICByZXR1cm4gdGVtcDsKfQoKCgoKCmlubGluZQpDT1JCQV9XU3RyaW5nX291dDo6Q09SQkFfV1N0
cmluZ19vdXQgKENPUkJBOjpXQ2hhciAqJnMpCiAgOiBwdHJfIChzKQp7CiAgdGhpcy0+cHRyXyA9
IDA7Cn0KCmlubGluZQpDT1JCQV9XU3RyaW5nX291dDo6Q09SQkFfV1N0cmluZ19vdXQgKENPUkJB
X1dTdHJpbmdfdmFyICZzKQogIDogcHRyXyAocy5vdXQgKCkpCnsKfQoKaW5saW5lCkNPUkJBX1dT
dHJpbmdfb3V0OjpDT1JCQV9XU3RyaW5nX291dCAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMp
CiAgOiBwdHJfIChzLnB0cl8pCnsKfQoKaW5saW5lIENPUkJBX1dTdHJpbmdfb3V0ICYKQ09SQkFf
V1N0cmluZ19vdXQ6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0cmluZ19vdXQgJnMpCnsKICB0
aGlzLT5wdHJfID0gcy5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX1dTdHJp
bmdfb3V0ICYKQ09SQkFfV1N0cmluZ19vdXQ6Om9wZXJhdG9yPSAoQ09SQkE6OldDaGFyICpzKQp7
CiAgdGhpcy0+cHRyXyA9IHM7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfV1N0cmlu
Z19vdXQ6Om9wZXJhdG9yIENPUkJBOjpXQ2hhciAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIENPUkJBOjpXQ2hhciAqJgpDT1JCQV9XU3RyaW5nX291dDo6cHRyICh2b2lkKQp7
CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAyNzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ09SQkFfU3RyaW5nLmgiIDIKCgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjgzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0NPUkJBX1N0
cmluZy5oIiAyCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vT1JCLmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgoK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RB
T19FeHBvcnQuaCIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIgMQojIDIwICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0VuY29kYWJsZS5oIgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIg
MQojIDIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L0VuY29kYWJsZS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRW5jb2RhYmxlLmgiIDIKIyAzNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIKY2xh
c3MgVEFPX0VuY29kYWJsZQp7CnB1YmxpYzoKCiAgdmlydHVhbCB+VEFPX0VuY29kYWJsZSAodm9p
ZCk7CgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfdGFvX2VuY29kZSAoVEFPX091dHB1dENE
UiAmb3V0X2NkcikgPSAwOwoKCgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX3Rhb19kZWNvZGUg
KFRBT19JbnB1dENEUiAmaW5fY2RyKSA9IDA7Cn07CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA1MiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FbmNvZGFibGUuaCIgMgojIDM0ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMu
aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vRXhjZXB0aW9uLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Vudmlyb25tZW50LmgiIDEKIyAzNiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Nl
cXVlbmNlLmgiIDEKIyAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgMzggIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9SZW1vdGVfT2JqZWN0X1By
b3h5X0ltcGwuaCIgMQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1JlbW90ZV9PYmplY3RfUHJveHlfSW1wbC5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1JlbW90ZV9PYmplY3Rf
UHJveHlfSW1wbC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDIK
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9P
YmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDIKIyAzMiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9SZW1vdGVf
T2JqZWN0X1Byb3h5X0ltcGwuaCIKY2xhc3MgVEFPX1JlbW90ZV9PYmplY3RfUHJveHlfSW1wbCA6
IHB1YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAp7CnB1YmxpYzoKCiAgVEFPX1Jl
bW90ZV9PYmplY3RfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwgflRBT19SZW1vdGVfT2Jq
ZWN0X1Byb3h5X0ltcGwgKHZvaWQpOwoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hIChj
b25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKmxvZ2ljYWxfdHlwZV9pZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSk7CgoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfbm9uX2V4aXN0ZW50IChj
b25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSk7CgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0X2ludGVyZmFj
ZSAoCiAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgQ09SQkFfRW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCn07Cgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0Lmgi
IDEKIyA1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMgojIDM5ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMQoj
IDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0N1
cnJlbnRDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0LmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5oIiAyCgoKCgoKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJh
ZndkLmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9DdXJyZW50Qy5oIiAyCiMgNjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIKY2xhc3MgQ09SQkFfQ3VycmVudDsKdHlw
ZWRlZiBDT1JCQV9DdXJyZW50ICpDT1JCQV9DdXJyZW50X3B0cjsKCgoKCgoKCmNsYXNzIENPUkJB
X0N1cnJlbnRfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9DdXJy
ZW50X3ZhciAodm9pZCk7CiAgQ09SQkFfQ3VycmVudF92YXIgKENPUkJBX0N1cnJlbnRfcHRyIHAp
IDogcHRyXyAocCkge30KICBDT1JCQV9DdXJyZW50X3ZhciAoY29uc3QgQ09SQkFfQ3VycmVudF92
YXIgJik7CiAgfkNPUkJBX0N1cnJlbnRfdmFyICh2b2lkKTsKCiAgQ09SQkFfQ3VycmVudF92YXIg
Jm9wZXJhdG9yPSAoQ09SQkFfQ3VycmVudF9wdHIpOwogIENPUkJBX0N1cnJlbnRfdmFyICZvcGVy
YXRvcj0gKGNvbnN0IENPUkJBX0N1cnJlbnRfdmFyICYpOwogIENPUkJBX0N1cnJlbnRfcHRyIG9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9DdXJyZW50X3B0
ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfQ3VycmVudF9wdHIgJigpOwoKICBDT1JCQV9D
dXJyZW50X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFfQ3VycmVudF9wdHIgJmlub3V0ICh2
b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0
ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfQ3VycmVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoK
ICBzdGF0aWMgQ09SQkFfQ3VycmVudF9wdHIgZHVwbGljYXRlIChDT1JCQV9DdXJyZW50X3B0cik7
CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfQ3VycmVudF9wdHIpOwogIHN0YXRpYyBDT1JC
QV9DdXJyZW50X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0ciBuYXJy
b3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JC
QTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQV9DdXJyZW50X3B0
ciBwdHJfOwoKICBDT1JCQV9DdXJyZW50X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog
IENPUkJBX0N1cnJlbnRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK
fTsKIyAxMTMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vQ3VycmVudEMuaCIKY2xhc3MgQ09SQkFfQ3VycmVudF9vdXQKewpwdWJsaWM6CiAgQ09SQkFf
Q3VycmVudF9vdXQgKENPUkJBX0N1cnJlbnRfcHRyICYpOwogIENPUkJBX0N1cnJlbnRfb3V0IChD
T1JCQV9DdXJyZW50X3ZhciAmKTsKICBDT1JCQV9DdXJyZW50X291dCAoY29uc3QgQ09SQkFfQ3Vy
cmVudF9vdXQgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFf
Q3VycmVudF9vdXQgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09S
QkFfQ3VycmVudF92YXIgJik7CiAgQ09SQkFfQ3VycmVudF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFf
Q3VycmVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0N1cnJlbnRfcHRyICYoKTsKICBDT1JCQV9D
dXJyZW50X3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9DdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2
b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfQ3VycmVudF9wdHIgJnB0cl87Cn07CiMgMTM3ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0N1cnJlbnRDLmgi
CmNsYXNzIENPUkJBX0N1cnJlbnQgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKewpwdWJs
aWM6CgogIHR5cGVkZWYgQ09SQkFfQ3VycmVudF9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYgQ09S
QkFfQ3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0ciBf
ZHVwbGljYXRlIChDT1JCQV9DdXJyZW50X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50
X3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9DdXJyZW50X3B0
ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFfQ3Vy
cmVudF9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JCQV9DdXJyZW50X3B0
cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9p
ZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfQ3VycmVudCAodm9pZCk7CgogIHZp
cnR1YWwgfkNPUkJBX0N1cnJlbnQgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX0N1cnJlbnQgKGNv
bnN0IENPUkJBX0N1cnJlbnQgJik7CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0N1cnJl
bnQgJik7Cn07CiMgMTg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL0N1cnJlbnRDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5pIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaSIKaW5saW5lIENPUkJB
X0N1cnJlbnRfcHRyCnRhb19DT1JCQV9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBDT1JCQV9DdXJy
ZW50X3B0ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX0N1cnJlbnQ6Ol9kdXBsaWNhdGUgKHApOwp9
CgppbmxpbmUgdm9pZAp0YW9fQ09SQkFfQ3VycmVudF9yZWxlYXNlICgKICAgIENPUkJBX0N1cnJl
bnRfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBDT1JCQV9DdXJy
ZW50X3B0cgp0YW9fQ09SQkFfQ3VycmVudF9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBD
T1JCQV9DdXJyZW50OjpfbmlsICgpOwp9CgppbmxpbmUgQ09SQkFfQ3VycmVudF9wdHIKdGFvX0NP
UkJBX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4g
Q09SQkFfQ3VycmVudDo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX0NPUkJBX0N1cnJlbnRfdXBjYXN0ICgK
ICAgIHZvaWQgKnNyYwogICkKewogIENPUkJBX0N1cnJlbnQgKip0bXAgPQogICAgc3RhdGljX2Nh
c3Q8Q09SQkFfQ3VycmVudCAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxODcgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIg
MgojIDE5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9DdXJyZW50Qy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wb3N0LmgiIDEKIyAxOTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMgojIDQwICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIgMgojIDY3ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xh
c3MgQ09SQkFfUG9saWN5RXJyb3IgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KewpwdWJs
aWM6CiAgICBDT1JCQTo6UG9saWN5RXJyb3JDb2RlIHJlYXNvbjsKCiAgICBDT1JCQV9Qb2xpY3lF
cnJvciAodm9pZCk7CgoKICAgIENPUkJBX1BvbGljeUVycm9yIChjb25zdCBDT1JCQV9Qb2xpY3lF
cnJvciAmKTsKCgogICAgfkNPUkJBX1BvbGljeUVycm9yICh2b2lkKTsKCgogICAgc3RhdGljIHZv
aWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIENPUkJBX1BvbGljeUVycm9yICZv
cGVyYXRvcj0gKGNvbnN0IENPUkJBX1BvbGljeUVycm9yICYpOwoKICAgIHZpcnR1YWwgdm9pZCBf
cmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFP
X091dHB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7
CgogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBDT1JCQV9Q
b2xpY3lFcnJvciAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKICAgIENPUkJBX1Bv
bGljeUVycm9yICgKICAgICAgICBDT1JCQTo6UG9saWN5RXJyb3JDb2RlIF90YW9fcmVhc29uCiAg
ICAgICk7CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAg
dmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwojIDEx
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xp
Y3lDLmgiCiAgY2xhc3MgQ09SQkFfSW52YWxpZFBvbGljaWVzIDogcHVibGljIENPUkJBOjpVc2Vy
RXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCgoKCgoKICAgICAgY2xhc3MgX1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCA6IHB1YmxpYyBU
QU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgICAgewogICAgICBwdWJsaWM6CgoKICAgICAg
ICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFf
VVNob3J0ICh2b2lkKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh
bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICAg
ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2Vx
X1VTaG9ydCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVu
Z3RoLAogICAgICAgICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwKICAgICAgICAgIENPUkJBOjpCb29s
ZWFuIHJlbGVhc2UgPSAwKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9J
bnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0ICZyaHMpOwogICAgICAg
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9V
U2hvcnQgJm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52
YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCAmcmhzKTsKICAgICAgICB2aXJ0dWFsIH5fVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0
ICh2b2lkKTsKCiAgICAgICAgQ09SQkE6OlVTaG9ydCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n
IGkpOwogICAgICAgIGNvbnN0IENPUkJBOjpVU2hvcnQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpKSBjb25zdDsKCiAgICAgICAgc3RhdGljIENPUkJBOjpVU2hvcnQgKmFsbG9jYnVmIChDT1JC
QTo6VUxvbmcgc2l6ZSk7CiAgICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OlVTaG9y
dCAqYnVmZmVyKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6
OlVMb25nIGxlbmd0aCk7CiAgICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAo
dm9pZCk7CgoKICAgICAgICBDT1JCQTo6VVNob3J0ICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVh
biBvcnBoYW4gPSAwKTsKICAgICAgICBjb25zdCBDT1JCQTo6VVNob3J0ICpnZXRfYnVmZmVyICh2
b2lkKSBjb25zdDsKICAgICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAg
ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwK
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwogICAgICB9OwojIDE2NCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiAg
ICBjbGFzcyBfdGFvX3NlcV9VU2hvcnQ7CiAgICBjbGFzcyBfdGFvX3NlcV9VU2hvcnRfdmFyOwoK
CgoKCiAgICBjbGFzcyBfdGFvX3NlcV9VU2hvcnQgOiBwdWJsaWMKCiAgICAgIF9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQKCgoKICAg
IHsKICAgIHB1YmxpYzoKICAgICAgX3Rhb19zZXFfVVNob3J0ICh2b2lkKTsKICAgICAgX3Rhb19z
ZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfVVNob3J0ICgKICAg
ICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg
ICAgQ09SQkE6OlVTaG9ydCAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug
PSAwCiAgICAgICk7CiAgICAgIF90YW9fc2VxX1VTaG9ydCAoY29uc3QgX3Rhb19zZXFfVVNob3J0
ICYpOwogICAgICB+X3Rhb19zZXFfVVNob3J0ICh2b2lkKTsKICAgICAgc3RhdGljIHZvaWQgX3Rh
b19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYgX3Rhb19zZXFfVVNob3J0
X3ZhciBfdmFyX3R5cGU7CgoKICAgIH07CgoKCgogICAgdHlwZWRlZiBfdGFvX3NlcV9VU2hvcnQg
X2luZGljZXNfc2VxOwoKCiAgICAgICAgICBfdGFvX3NlcV9VU2hvcnQgaW5kaWNlczsKCiAgICBD
T1JCQV9JbnZhbGlkUG9saWNpZXMgKHZvaWQpOwoKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMg
KGNvbnN0IENPUkJBX0ludmFsaWRQb2xpY2llcyAmKTsKCgogICAgfkNPUkJBX0ludmFsaWRQb2xp
Y2llcyAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq
KTsKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfSW52
YWxpZFBvbGljaWVzICYpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZp
cnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIF90
YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBDT1JCQV9JbnZhbGlkUG9saWNpZXMgKl9kb3du
Y2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCiAgICBDT1JCQV9JbnZhbGlkUG9saWNpZXMgKAog
ICAgICAgIGNvbnN0IF90YW9fc2VxX1VTaG9ydCAmIF90YW9faW5kaWNlcwogICAgICApOwoKCiAg
ICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgfTsKCgoKCgoKCiAgY2xhc3Mg
Q09SQkFfUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAg
Q09SQkFfUG9saWN5X3ZhciAodm9pZCk7CiAgICBDT1JCQV9Qb2xpY3lfdmFyIChDT1JCQV9Qb2xp
Y3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIENPUkJBX1BvbGljeV92YXIgKGNvbnN0IENPUkJB
X1BvbGljeV92YXIgJik7CiAgICB+Q09SQkFfUG9saWN5X3ZhciAodm9pZCk7CgogICAgQ09SQkFf
UG9saWN5X3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Qb2xpY3lfcHRyKTsKICAgIENPUkJBX1BvbGlj
eV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5X3ZhciAmKTsKICAgIENPUkJBX1Bv
bGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09S
QkFfUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lfcHRyICYo
KTsKCiAgICBDT1JCQV9Qb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIENPUkJBX1BvbGlj
eV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIENPUkJBX1BvbGljeV9wdHIgJm91dCAodm9pZCk7CiAg
ICBDT1JCQV9Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIENPUkJBX1BvbGljeV9wdHIgcHRy
ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIGR1cGxpY2F0ZSAo
Q09SQkFfUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChDT1JCQV9Qb2xpY3lf
cHRyKTsKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg
Q09SQkFfUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25t
ZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHBy
aXZhdGU6CiAgICBDT1JCQV9Qb2xpY3lfcHRyIHB0cl87CgogICAgQ09SQkFfUG9saWN5X3ZhciAo
Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ09SQkFfUG9saWN5X3ZhciAmb3BlcmF0b3I9
IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAyOTAgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgogIGNsYXNzIENPUkJB
X1BvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgQ09SQkFfUG9saWN5X291dCAoQ09SQkFfUG9s
aWN5X3B0ciAmKTsKICAgIENPUkJBX1BvbGljeV9vdXQgKENPUkJBX1BvbGljeV92YXIgJik7CiAg
ICBDT1JCQV9Qb2xpY3lfb3V0IChjb25zdCBDT1JCQV9Qb2xpY3lfb3V0ICYpOwogICAgQ09SQkFf
UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lfb3V0ICYpOwogICAgQ09S
QkFfUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lfdmFyICYpOwogICAg
Q09SQkFfUG9saWN5X291dCAmb3BlcmF0b3I9IChDT1JCQV9Qb2xpY3lfcHRyKTsKICAgIG9wZXJh
dG9yIENPUkJBX1BvbGljeV9wdHIgJigpOwogICAgQ09SQkFfUG9saWN5X3B0ciAmcHRyICh2b2lk
KTsKICAgIENPUkJBX1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAg
ICBDT1JCQV9Qb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMzE1ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKICBjbGFzcyBDT1JCQV9U
QU9fUG9saWN5X1Byb3h5X0ltcGw7CiAgY2xhc3MgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVfUHJv
eHlfSW1wbDsKICBjbGFzcyBDT1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlcjsKICBjbGFzcyBD
T1JCQV9UQU9fUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXI7CgpjbGFzcyBDT1JCQV9Qb2xpY3kK
ICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19F
bmNvZGFibGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgQ09SQkFfUG9saWN5X3B0ciBfcHRy
X3R5cGU7CiAgICB0eXBlZGVmIENPUkJBX1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3Rh
dGljIENPUkJBX1BvbGljeV9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfUG9saWN5X3B0ciBvYmopOwog
ICAgc3RhdGljIENPUkJBX1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApOwogICAgc3RhdGljIENPUkJBX1BvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg
ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQV9Qb2xpY3lfcHRyIF9uaWwgKHZv
aWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKENPUkJBX1BvbGljeV9wdHIpMDsKICAgICAgfQoK
ICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFs
IENPUkJBOjpQb2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKTsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgY29weSAoCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29s
ZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZpcnR1YWwgdm9p
ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj
b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICAgIHZp
cnR1YWwgQ09SQkE6OkJvb2xlYW4gX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIgJik7CiAgICB2
aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJik7CgoKICAg
IHZpcnR1YWwgVEFPX0NhY2hlZF9Qb2xpY3lfVHlwZSBfdGFvX2NhY2hlZF90eXBlICh2b2lkKSBj
b25zdDsKCgogICAgdmlydHVhbCBUQU9fUG9saWN5X1Njb3BlIF90YW9fc2NvcGUgKHZvaWQpIGNv
bnN0OwoKICBwcml2YXRlOgogICAgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9Ccm9rZXIgKnRoZV9D
T1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIENPUkJBX1Bv
bGljeSAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgdmlydHVh
bCB2b2lkIENPUkJBX1BvbGljeV9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoK
ICAgICAgQ09SQkFfUG9saWN5ICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENP
UkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1Nl
cnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICAgICk7CgogICAgICBmcmllbmQgY2xhc3MgQ09S
QkFfVEFPX1BvbGljeV9SZW1vdGVfUHJveHlfSW1wbDsKICAgICAgZnJpZW5kIGNsYXNzIENPUkJB
X1RBT19Qb2xpY3lfVGhydVBPQV9Qcm94eV9JbXBsOwogICAgICBmcmllbmQgY2xhc3MgQ09SQkFf
VEFPX1BvbGljeV9EaXJlY3RfUHJveHlfSW1wbDsKCiAgICB2aXJ0dWFsIH5DT1JCQV9Qb2xpY3kg
KHZvaWQpOwogIHByaXZhdGU6CiAgICBDT1JCQV9Qb2xpY3kgKGNvbnN0IENPUkJBX1BvbGljeSAm
KTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3kgJik7CiAgfTsKIyA0Mjgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5
Qy5oIgogIGNsYXNzIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1wbCA6IHB1YmxpYyB2aXJ0dWFs
IFRBT19PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5DT1JCQV9U
QU9fUG9saWN5X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgICAgICB2aXJ0dWFsIENPUkJBOjpQ
b2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9j
YXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGNvcHkgKAog
ICAgICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg
ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp
cnR1YWwgdm9pZCBkZXN0cm95ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9jYXRl
ZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKSA9IDA7CgoKCnByb3RlY3RlZDoKICAgIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1w
bCAodm9pZCk7CgogIH07CiMgNDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3MgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVf
UHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9JbXBs
LAogIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKewpwdWJsaWM6
CiAgQ09SQkFfVEFPX1BvbGljeV9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwg
fkNPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICB2aXJ0dWFs
IENPUkJBOjpQb2xpY3lUeXBlIHBvbGljeV90eXBlICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg
X2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKQogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uICk7CgoKCnZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgY29weSAoCiAgICAgIENP
UkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkKICAgIHRocm93
ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgp2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAg
ICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkKICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgp9OwojIDUyMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNz
IENPUkJBX1RBT19Qb2xpY3lfUHJveHlfQnJva2VyCnsKcHVibGljOgogIHZpcnR1YWwgfkNPUkJB
X1RBT19Qb2xpY3lfUHJveHlfQnJva2VyICh2b2lkKTsKICB2aXJ0dWFsIENPUkJBX1RBT19Qb2xp
Y3lfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgIENPUkJBX1BvbGljeSAqb2JqZWN0LAog
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp
ID0gMDsKCnByb3RlY3RlZDoKICBDT1JCQV9UQU9fUG9saWN5X1Byb3h5X0Jyb2tlciAodm9pZCk7
Cgp9OwojIDU0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tl
ciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfQnJva2VyCnsKcHVibGlj
OgogIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1
YWwgfkNPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1
YWwgQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgQ09SQkFf
UG9saWN5ICpvYmplY3QsCiAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZQogICk7Cgpwcml2YXRlOgogIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1By
b3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKCgoKcHVibGljOgogIHN0YXRpYyBDT1JCQV9U
QU9fUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRoZV9DT1JCQV9UQU9fUG9saWN5X1JlbW90
ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwp9OwojIDU4MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiAgY2xhc3MgX1RBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgOiBwdWJsaWMgVEFPX1VuYm91bmRl
ZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQpOwogICAgX1RBT19VbmJvdW5kZWRfT2Jq
ZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAg
IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0IChDT1JCQTo6
VUxvbmcgbWF4aW11bSwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkFfUG9s
aWN5KiAqdmFsdWUsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAgIF9UQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0KGNvbnN0IF9UQU9fVW5i
b3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0ICZyaHMpOwogICAgdmlydHVh
bCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQp
OwogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgJm9w
ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGlj
eUxpc3QgJnJocyk7CiAgICBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkE6OlBvbGljeSxDT1JCQTo6
UG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgIHN0
YXRpYyBDT1JCQV9Qb2xpY3kgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcyk7CiAgICBz
dGF0aWMgdm9pZCBmcmVlYnVmIChDT1JCQV9Qb2xpY3kgKipidWZmZXIpOwoKICAgIHZpcnR1YWwg
dm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgIHZpcnR1YWwg
dm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgQ09SQkFfUG9saWN5KiAqZ2V0X2J1
ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICBjb25zdCBDT1JCQV9Qb2xpY3kq
ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZl
ciAoQ09SQkE6OlVMb25nIG5sLCBDT1JCQTo6VUxvbmcgb2wpOwogICAgdmlydHVhbCB2b2lkIF9k
b3duY2FzdCAoCiAgICAgICAgdm9pZCogdGFyZ2V0LAogICAgICAgIENPUkJBX09iamVjdCAqc3Jj
LAogICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICB2
aXJ0dWFsIENPUkJBX09iamVjdCogX3VwY2FzdCAodm9pZCAqc3JjKSBjb25zdDsKCiAgfTsKIyA2
MjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9s
aWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lMaXN0IDogcHVibGljCgogIF9UQU9fVW5ib3VuZGVk
X09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0CgoKCnsKcHVibGljOgogIENPUkJBX1Bv
bGljeUxpc3QgKHZvaWQpOwogIENPUkJBX1BvbGljeUxpc3QgKENPUkJBOjpVTG9uZyBtYXgpOwog
IENPUkJBX1BvbGljeUxpc3QgKAogICAgQ09SQkE6OlVMb25nIG1heCwKICAgIENPUkJBOjpVTG9u
ZyBsZW5ndGgsCiAgICBDT1JCQV9Qb2xpY3lfcHRyICpidWZmZXIsCiAgICBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlID0gMAogICk7CiAgQ09SQkFfUG9saWN5TGlzdCAoY29uc3QgQ09SQkFfUG9saWN5
TGlzdCAmKTsKICB+Q09SQkFfUG9saWN5TGlzdCAodm9pZCk7CiAgc3RhdGljIHZvaWQgX3Rhb19h
bnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lMaXN0X3ZhciBf
dmFyX3R5cGU7CgoKfTsKIyA2NjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lMaXN0X3Zhcgp7CnB1
YmxpYzoKICBDT1JCQV9Qb2xpY3lMaXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdF92
YXIgKENPUkJBX1BvbGljeUxpc3QgKik7CiAgQ09SQkFfUG9saWN5TGlzdF92YXIgKGNvbnN0IENP
UkJBX1BvbGljeUxpc3RfdmFyICYpOwogIH5DT1JCQV9Qb2xpY3lMaXN0X3ZhciAodm9pZCk7Cgog
IENPUkJBX1BvbGljeUxpc3RfdmFyICZvcGVyYXRvcj0gKENPUkJBX1BvbGljeUxpc3QgKik7CiAg
Q09SQkFfUG9saWN5TGlzdF92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5TGlzdF92
YXIgJik7CiAgQ09SQkFfUG9saWN5TGlzdCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgY29uc3QgQ09S
QkFfUG9saWN5TGlzdCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogIG9wZXJhdG9yIGNvbnN0
IENPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUxpc3Qg
JigpOwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9yIENP
UkJBX1BvbGljeUxpc3QgKiYoKTsKCiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX1BvbGljeSwg
Q09SQkFfUG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogIGNv
bnN0IENPUkJBX1BvbGljeUxpc3QgJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Qb2xpY3lMaXN0
ICZpbm91dCAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdCAqJm91dCAodm9pZCk7CiAgQ09SQkFf
UG9saWN5TGlzdCAqX3JldG4gKHZvaWQpOwogIENPUkJBX1BvbGljeUxpc3QgKnB0ciAodm9pZCkg
Y29uc3Q7Cgpwcml2YXRlOgogIENPUkJBX1BvbGljeUxpc3QgKnB0cl87Cn07CiMgNjk5ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIK
Y2xhc3MgQ09SQkFfUG9saWN5TGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5TGlzdF9v
dXQgKENPUkJBX1BvbGljeUxpc3QgKiYpOwogIENPUkJBX1BvbGljeUxpc3Rfb3V0IChDT1JCQV9Q
b2xpY3lMaXN0X3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lMaXN0X291dCAoY29uc3QgQ09SQkFfUG9s
aWN5TGlzdF9vdXQgJik7CiAgQ09SQkFfUG9saWN5TGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
Q09SQkFfUG9saWN5TGlzdF9vdXQgJik7CiAgQ09SQkFfUG9saWN5TGlzdF9vdXQgJm9wZXJhdG9y
PSAoQ09SQkFfUG9saWN5TGlzdCAqKTsKICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lMaXN0IComKCk7
CiAgQ09SQkFfUG9saWN5TGlzdCAqJnB0ciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TGlzdCAqb3Bl
cmF0b3ItPiAodm9pZCk7CiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX1BvbGljeSwgQ09SQkFf
UG9saWN5X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAg
Q09SQkFfUG9saWN5TGlzdCAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Q
b2xpY3lMaXN0X3ZhciAmKTsKfTsKIyA3MjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgogIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1Nl
cXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf
UG9saWN5VHlwZVNlcSAodm9pZCk7CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Q
b2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAg
Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkE6OlVMb25nICpkYXRhLAogICAgICBDT1JC
QTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC
QV9Qb2xpY3lUeXBlU2VxIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xp
Y3lUeXBlU2VxICZyaHMpOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5
VHlwZVNlcSAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Q
b2xpY3lUeXBlU2VxICZyaHMpOwogICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
Q09SQkFfUG9saWN5VHlwZVNlcSAodm9pZCk7CgogICAgQ09SQkE6OlVMb25nICZvcGVyYXRvcltd
IChDT1JCQTo6VUxvbmcgaSk7CiAgICBjb25zdCBDT1JCQTo6VUxvbmcgJm9wZXJhdG9yW10gKENP
UkJBOjpVTG9uZyBpKSBjb25zdDsKCiAgICBzdGF0aWMgQ09SQkE6OlVMb25nICphbGxvY2J1ZiAo
Q09SQkE6OlVMb25nIHNpemUpOwogICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoQ09SQkE6OlVMb25n
ICpidWZmZXIpOwogICAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9u
ZyBsZW5ndGgpOwogICAgdmlydHVhbCB2b2lkIF9kZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CgoK
ICAgIENPUkJBOjpVTG9uZyAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7
CiAgICBjb25zdCBDT1JCQTo6VUxvbmcgKmdldF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgdm9p
ZCByZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog
ICAgICBDT1JCQTo6VUxvbmcgKmRhdGEsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwog
IH07CiMgNzY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvbGljeUMuaCIKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcTsKY2xhc3MgQ09SQkFfUG9s
aWN5VHlwZVNlcV92YXI7CgoKCgoKY2xhc3MgQ09SQkFfUG9saWN5VHlwZVNlcSA6IHB1YmxpYwoK
ICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxCgoKCnsKcHVibGlj
OgogIENPUkJBX1BvbGljeVR5cGVTZXEgKHZvaWQpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKENP
UkJBOjpVTG9uZyBtYXgpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKAogICAgQ09SQkE6OlVMb25n
IG1heCwKICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICBDT1JCQTo6VUxvbmcgKmJ1ZmZlciwK
ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAgKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2Vx
IChjb25zdCBDT1JCQV9Qb2xpY3lUeXBlU2VxICYpOwogIH5DT1JCQV9Qb2xpY3lUeXBlU2VxICh2
b2lkKTsKICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgoKICB0eXBl
ZGVmIENPUkJBX1BvbGljeVR5cGVTZXFfdmFyIF92YXJfdHlwZTsKCgp9OwojIDgxMCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNs
YXNzIENPUkJBX1BvbGljeVR5cGVTZXFfdmFyCnsKcHVibGljOgogIENPUkJBX1BvbGljeVR5cGVT
ZXFfdmFyICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoQ09SQkFfUG9saWN5VHlw
ZVNlcSAqKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoY29uc3QgQ09SQkFfUG9saWN5VHlw
ZVNlcV92YXIgJik7CiAgQ09SQkFfUG9saWN5VHlwZVNlcV92YXIgKGNvbnN0IENPUkJBX1BvbGlj
eVR5cGVTZXEgJik7CiAgfkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKTsKCiAgQ09SQkFf
UG9saWN5VHlwZVNlcV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5VHlwZVNlcSAqKTsKICBD
T1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lUeXBl
U2VxX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBD
T1JCQV9Qb2xpY3lUeXBlU2VxICYpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKm9wZXJhdG9yLT4g
KHZvaWQpOwogIGNvbnN0IENPUkJBX1BvbGljeVR5cGVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpIGNv
bnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Qb2xpY3lUeXBlU2VxICYoKSBjb25zdDsKICBv
cGVyYXRvciBDT1JCQV9Qb2xpY3lUeXBlU2VxICYoKTsKICBvcGVyYXRvciBDT1JCQV9Qb2xpY3lU
eXBlU2VxICYoKSBjb25zdDsKCiAgQ09SQkE6OlBvbGljeVR5cGUgJiBvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgaW5kZXgpOwogIGNvbnN0IENPUkJBOjpQb2xpY3lUeXBlICYgb3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogIGNvbnN0IENPUkJBX1BvbGljeVR5cGVTZXEg
JmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxICZpbm91dCAodm9pZCk7CiAg
Q09SQkFfUG9saWN5VHlwZVNlcSAqJm91dCAodm9pZCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAq
X3JldG4gKHZvaWQpOwogIENPUkJBX1BvbGljeVR5cGVTZXEgKnB0ciAodm9pZCkgY29uc3Q7Cgpw
cml2YXRlOgogIENPUkJBX1BvbGljeVR5cGVTZXEgKnB0cl87Cn07CiMgODUwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3Mg
Q09SQkFfUG9saWN5VHlwZVNlcV9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5VHlwZVNlcV9v
dXQgKENPUkJBX1BvbGljeVR5cGVTZXEgKiYpOwogIENPUkJBX1BvbGljeVR5cGVTZXFfb3V0IChD
T1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lUeXBlU2VxX291dCAoY29u
c3QgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQgJik7CiAgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQgJik7CiAgQ09SQkFfUG9s
aWN5VHlwZVNlcV9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5VHlwZVNlcSAqKTsKICBvcGVy
YXRvciBDT1JCQV9Qb2xpY3lUeXBlU2VxIComKCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAqJnB0
ciAodm9pZCk7CiAgQ09SQkFfUG9saWN5VHlwZVNlcSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgQ09S
QkE6OlBvbGljeVR5cGUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKcHJpdmF0
ZToKICBDT1JCQV9Qb2xpY3lUeXBlU2VxIComcHRyXzsKCiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0
IENPUkJBX1BvbGljeVR5cGVTZXFfdmFyICYpOwp9OwojIDg3NiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1Bv
bGljeU1hbmFnZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9Q
b2xpY3lNYW5hZ2VyX3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgKENPUkJB
X1BvbGljeU1hbmFnZXJfcHRyIHApIDogcHRyXyAocCkge30KICBDT1JCQV9Qb2xpY3lNYW5hZ2Vy
X3ZhciAoY29uc3QgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgJik7CiAgfkNPUkJBX1BvbGljeU1h
bmFnZXJfdmFyICh2b2lkKTsKCiAgQ09SQkFfUG9saWN5TWFuYWdlcl92YXIgJm9wZXJhdG9yPSAo
Q09SQkFfUG9saWN5TWFuYWdlcl9wdHIpOwogIENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICZvcGVy
YXRvcj0gKGNvbnN0IENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICYpOwogIENPUkJBX1BvbGljeU1h
bmFnZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JC
QV9Qb2xpY3lNYW5hZ2VyX3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5TWFu
YWdlcl9wdHIgJigpOwoKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBpbiAodm9pZCkgY29uc3Q7
CiAgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBfcmV0biAo
dm9pZCk7CiAgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICBz
dGF0aWMgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lNYW5h
Z2VyX3B0cik7CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIp
OwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBD
T1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVu
dmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoK
cHJpdmF0ZToKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBwdHJfOwoKICBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGljeU1hbmFn
ZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyA5MTkgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5o
IgpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dAp7CnB1YmxpYzoKICBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX291dCAoQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIgJik7CiAgQ09SQkFfUG9saWN5TWFu
YWdlcl9vdXQgKENPUkJBX1BvbGljeU1hbmFnZXJfdmFyICYpOwogIENPUkJBX1BvbGljeU1hbmFn
ZXJfb3V0IChjb25zdCBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmKTsKICBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmKTsK
ICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lNYW5hZ2VyX291dCAmb3BlcmF0b3I9IChDT1JC
QV9Qb2xpY3lNYW5hZ2VyX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5TWFuYWdlcl9wdHIg
JigpOwogIENPUkJBX1BvbGljeU1hbmFnZXJfcHRyICZwdHIgKHZvaWQpOwogIENPUkJBX1BvbGlj
eU1hbmFnZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xpY3lN
YW5hZ2VyX3B0ciAmcHRyXzsKfTsKIyA5NDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5oIgpjbGFzcyBDT1JCQV9Qb2xpY3lNYW5hZ2Vy
IDogcHVibGljIHZpcnR1YWwgQ09SQkE6Ok9iamVjdAp7CnB1YmxpYzoKCiAgdHlwZWRlZiBDT1JC
QV9Qb2xpY3lNYW5hZ2VyX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9Qb2xpY3lNYW5h
Z2VyX3ZhciBfdmFyX3R5cGU7CgoKCiAgc3RhdGljIENPUkJBX1BvbGljeU1hbmFnZXJfcHRyIF9k
dXBsaWNhdGUgKENPUkJBX1BvbGljeU1hbmFnZXJfcHRyIG9iaik7CiAgc3RhdGljIENPUkJBX1Bv
bGljeU1hbmFnZXJfcHRyIF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJB
X1BvbGljeU1hbmFnZXJfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwog
IHN0YXRpYyBDT1JCQV9Qb2xpY3lNYW5hZ2VyX3B0ciBfbmlsICh2b2lkKQogICAgewogICAgICBy
ZXR1cm4gKENPUkJBX1BvbGljeU1hbmFnZXJfcHRyKTA7CiAgICB9CgogIHZpcnR1YWwgQ09SQkE6
OlBvbGljeUxpc3QgKiBnZXRfcG9saWN5X292ZXJyaWRlcyAoCiAgICAgIGNvbnN0IENPUkJBOjpQ
b2xpY3lUeXBlU2VxICYgdHMsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F
bnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICkKICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICB2aXJ0
dWFsIHZvaWQgc2V0X3BvbGljeV9vdmVycmlkZXMgKAogICAgICBjb25zdCBDT1JCQTo6UG9saWN5
TGlzdCAmIHBvbGljaWVzLAogICAgICBDT1JCQTo6U2V0T3ZlcnJpZGVUeXBlIHNldF9hZGQsCiAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93ICggQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbiwgQ09SQkE6OkludmFsaWRQb2xpY2llcyApID0gMDsKCgoKCiAg
dmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAg
dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0
OwoKcHJvdGVjdGVkOgogIENPUkJBX1BvbGljeU1hbmFnZXIgKCk7CgogIHZpcnR1YWwgfkNPUkJB
X1BvbGljeU1hbmFnZXIgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX1BvbGljeU1hbmFnZXIgKGNv
bnN0IENPUkJBX1BvbGljeU1hbmFnZXIgJik7CiAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJB
X1BvbGljeU1hbmFnZXIgJik7Cn07CiMgMTAwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1BvbGljeUN1cnJl
bnRfdmFyIDogcHVibGljIFRBT19CYXNlX3Zhcgp7CnB1YmxpYzoKICBDT1JCQV9Qb2xpY3lDdXJy
ZW50X3ZhciAodm9pZCk7CiAgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgKENPUkJBX1BvbGljeUN1
cnJlbnRfcHRyIHApIDogcHRyXyAocCkge30KICBDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciAoY29u
c3QgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgJik7CiAgfkNPUkJBX1BvbGljeUN1cnJlbnRfdmFy
ICh2b2lkKTsKCiAgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9s
aWN5Q3VycmVudF9wdHIpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICZvcGVyYXRvcj0gKGNv
bnN0IENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICYpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfcHRy
IG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Qb2xpY3lD
dXJyZW50X3B0ciAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfUG9saWN5Q3VycmVudF9wdHIg
JigpOwoKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFf
UG9saWN5Q3VycmVudF9wdHIgJmlub3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0
ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfcmV0biAodm9pZCk7CiAg
Q09SQkFfUG9saWN5Q3VycmVudF9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICBzdGF0aWMgQ09S
QkFfUG9saWN5Q3VycmVudF9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lDdXJyZW50X3B0cik7
CiAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ09SQkFfUG9saWN5Q3VycmVudF9wdHIpOwogIHN0YXRp
YyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9Qb2xp
Y3lDdXJyZW50X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50
ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToK
ICBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBwdHJfOwoKICBDT1JCQV9Qb2xpY3lDdXJyZW50X3Zh
ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyAxMDUxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaCIKY2xhc3Mg
Q09SQkFfUG9saWN5Q3VycmVudF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9saWN5Q3VycmVudF9v
dXQgKENPUkJBX1BvbGljeUN1cnJlbnRfcHRyICYpOwogIENPUkJBX1BvbGljeUN1cnJlbnRfb3V0
IChDT1JCQV9Qb2xpY3lDdXJyZW50X3ZhciAmKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50X291dCAo
Y29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJik7CiAgQ09SQkFfUG9saWN5Q3VycmVudF9v
dXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJik7CiAgQ09SQkFf
UG9saWN5Q3VycmVudF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudF92
YXIgJik7CiAgQ09SQkFfUG9saWN5Q3VycmVudF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfUG9saWN5
Q3VycmVudF9wdHIpOwogIG9wZXJhdG9yIENPUkJBX1BvbGljeUN1cnJlbnRfcHRyICYoKTsKICBD
T1JCQV9Qb2xpY3lDdXJyZW50X3B0ciAmcHRyICh2b2lkKTsKICBDT1JCQV9Qb2xpY3lDdXJyZW50
X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFfUG9saWN5Q3VycmVudF9w
dHIgJnB0cl87Cn07CiMgMTA3NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCmNsYXNzIENPUkJBX1BvbGljeUN1cnJlbnQ6IHB1Ymxp
YyB2aXJ0dWFsIENPUkJBX1BvbGljeU1hbmFnZXIsIHB1YmxpYyB2aXJ0dWFsIENPUkJBX0N1cnJl
bnQKewpwdWJsaWM6CgogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudF9wdHIgX3B0cl90eXBl
OwogIHR5cGVkZWYgQ09SQkFfUG9saWN5Q3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRp
YyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfZHVwbGljYXRlIChDT1JCQV9Qb2xpY3lDdXJyZW50
X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfbmFycm93ICgKICAg
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9Qb2xpY3lDdXJyZW50X3B0ciBfdW5jaGVja2Vk
X25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFfUG9saWN5Q3VycmVudF9w
dHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JCQV9Qb2xpY3lDdXJyZW50X3B0
cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9p
ZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfUG9saWN5Q3VycmVudCAoKTsKCiAg
dmlydHVhbCB+Q09SQkFfUG9saWN5Q3VycmVudCAodm9pZCk7CnByaXZhdGU6CiAgQ09SQkFfUG9s
aWN5Q3VycmVudCAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudCAmKTsKICB2b2lkIG9wZXJhdG9y
PSAoY29uc3QgQ09SQkFfUG9saWN5Q3VycmVudCAmKTsKfTsKCgoKCgoKCmV4dGVybgpDT1JCQV9U
QU9fUG9saWN5X1Byb3h5X0Jyb2tlciAqCigqQ09SQkFfQ09SQkFfVEFPX1BvbGljeV9Qcm94eV9C
cm9rZXJfRmFjdG9yeV9mdW5jdGlvbl9wb2ludGVyKSAoCiAgICBDT1JCQTo6T2JqZWN0X3B0ciBv
YmoKICApOwoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0
IENPUkJBOjpQb2xpY3lFcnJvciAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIENPUkJBOjpQb2xpY3lFcnJvciopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBOjpQb2xpY3lFcnJvciAqJik7
CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg
JiwgY29uc3QgQ09SQkE6OlBvbGljeUVycm9yIComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y
PDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXMgJik7CiAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6SW52YWxpZFBvbGlj
aWVzKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJB
OjpBbnkgJiwgQ09SQkE6OkludmFsaWRQb2xpY2llcyAqJik7CiAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkE6OkludmFs
aWRQb2xpY2llcyAqJik7CgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg
JiwgQ09SQkE6OlBvbGljeV9wdHIpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBOjpQb2xpY3kgKiYpOwogICAgICAgICAgIHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkE6OlBvbGljeUxpc3QgJik7
CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQTo6UG9saWN5
TGlzdCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC
QTo6QW55ICYsIENPUkJBOjpQb2xpY3lMaXN0IComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQTo6UG9saWN5TGlz
dCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBD
T1JCQTo6UG9saWN5VHlwZVNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIENPUkJBOjpQb2xpY3lUeXBlU2VxKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgQ09SQkE6OlBvbGljeVR5cGVTZXEg
KiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIGNvbnN0IENPUkJBOjpQb2xpY3lUeXBlU2VxIComKTsKICAgICAgICAgICB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBOjpTZXRPdmVycmlkZVR5cGUpOwogICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJB
OjpTZXRPdmVycmlkZVR5cGUgJik7CiMgMTIwOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiIDEKIyAzNyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiCiAg
aW5saW5lIENPUkJBOjpVU2hvcnQgKgogIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol9UQU9fVW5i
b3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6OmFs
bG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgQ09SQkE6OlVTaG9ydCAqcmV0dmFs
ID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3IENPUkJBOjpVU2hvcnRbc2l6ZV07IH0g
Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0
dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAgICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZv
aWQgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf
SW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6ZnJlZWJ1ZiAoQ09SQkE6OlVTaG9ydCAq
YnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgQ09SQkE6
OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBv
bGljaWVzX190YW9fc2VxX1VTaG9ydDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52
YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBD
T1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh
bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC
QV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkK
ICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjphbGxvY2J1
ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VT
aG9ydDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9f
c2VxX1VTaG9ydCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogICAgQ09SQkE6OlVTaG9ydCAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg
OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVs
ZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0Ojpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNo
b3J0IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNf
X3Rhb19zZXFfVVNob3J0ICZyaHMpCgogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2Ug
KHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgQ09SQkE6OlVT
aG9ydCAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2ll
c19fdGFvX3NlcV9VU2hvcnQ6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENPUkJB
OjpVU2hvcnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VVNob3J0ICo+
IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMt
Pmxlbmd0aF87ICsraSkKICAgICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICAgIHRoaXMtPmJ1
ZmZlcl8gPSB0bXAxOwogICAgfQogICAgZWxzZQogICAgewogICAgICB0aGlzLT5idWZmZXJfID0g
MDsKICAgIH0KICB9CgogIGlubGluZSBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0ICYKICBD
T1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZh
bGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQgJnJocykK
CiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0aGlzOwoKICAgIGlmICh0
aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGlt
dW1fKQogICAgICB7CgogICAgICAgIENPUkJBOjpVU2hvcnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q09SQkE6OlVTaG9ydCAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6ZnJlZWJ1
ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
Q09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6YWxsb2NidWYgKHJocy5tYXhp
bXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6
OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5j
ZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVU2hvcnQgKnRtcDEgPSByZWludGVycHJl
dF9jYXN0PENPUkJBOjpVU2hvcnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgQ09SQkE6OlVTaG9y
dCAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQgKj4gKHJocy5i
dWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87
ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgcmV0dXJuICp0aGlzOwogIH0KCgog
IGlubGluZSBDT1JCQTo6VVNob3J0ICYKICBDT1JCQTo6SW52YWxpZFBvbGljaWVzOjpfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9JbnZhbGlkUG9saWNpZXNfX3Rhb19zZXFfVVNob3J0Ojpv
cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAgZG8geyBpZighKGkgPCB0aGlzLT5t
YXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf
TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAo
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5
Qy5pIiwgMTI5LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5t
c2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1f
RVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9y
ICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAg
ICBDT1JCQTo6VVNob3J0KiB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQqPiAo
dGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IENP
UkJBOjpVU2hvcnQgJgogIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0NPUkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6Om9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBpKSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGlt
dW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2df
TXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmki
LCAxMzgsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v
c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP
UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz
Jy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENP
UkJBOjpVU2hvcnQgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVU2hvcnQq
PiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCgoKICBpbmxpbmUgQ09S
QkE6OlVTaG9ydCAqCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6Z2V0X2J1ZmZlciAo
Q09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIENPUkJBOjpVU2hvcnQgKnJlc3VsdCA9IDA7
CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAw
KQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFf
SW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8p
OwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgICAgdGhpcy0+cmVsZWFzZV8g
PSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Q09SQkE6OlVTaG9ydCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQog
ICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAg
ICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VVNob3J0Kj4gKHRoaXMtPmJ1
ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhf
ID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9
IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3Qg
Q09SQkE6OlVTaG9ydCAqCiAgQ09SQkE6OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfQ09SQkFfSW52YWxpZFBvbGljaWVzX190YW9fc2VxX1VTaG9ydDo6Z2V0X2J1ZmZl
ciAodm9pZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JC
QTo6VVNob3J0ICo+ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgQ09SQkE6
OkludmFsaWRQb2xpY2llczo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfSW52YWxpZFBv
bGljaWVzX190YW9fc2VxX1VTaG9ydDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBDT1JC
QTo6VUxvbmcgbGVuZ3RoLAogIENPUkJBOjpVU2hvcnQgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8g
PSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog
ICAgewogICAgICBDT1JCQTo6VVNob3J0ICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpV
U2hvcnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NP
UkJBX0ludmFsaWRQb2xpY2llc19fdGFvX3NlcV9VU2hvcnQ6OmZyZWVidWYgKHRtcCk7CiAgICB9
CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsK
ICB9CiMgMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvbGljeUMuaSIKaW5saW5lCkNPUkJBX1BvbGljeTo6Q09SQkFfUG9saWN5ICgKICAgIFRB
T19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBU
QU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9i
anJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+Q09SQkFfUG9saWN5X3Nl
dHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgMjMwICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaSIKICBpbmxpbmUg
Q09SQkE6OlBvbGljeSAqKgogIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Q
b2xpY3lMaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcykKICB7CiAgICBDT1JCQTo6
UG9saWN5ICoqYnVmID0gMDsKCiAgICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBDT1JCQTo6UG9saWN5
KltuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICAgIGZvciAoQ09SQkE6OlVMb25n
IGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICAgIHsKICAgICAgICBidWZbaV0gPSBDT1JCQTo6
UG9saWN5OjpfbmlsICgpOwogICAgICB9CgogICAgcmV0dXJuIGJ1ZjsKICB9CgogIGlubGluZSB2
b2lkCiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmZy
ZWVidWYgKENPUkJBOjpQb2xpY3kgKipidWZmZXIpCiAgewogICAgaWYgKGJ1ZmZlciA9PSAwKQog
ICAgICByZXR1cm47CiAgICBkZWxldGVbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBfVEFPX1Vu
Ym91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6X1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3QgKHZvaWQpCiAgewogIH0KCiAgaW5saW5l
CiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6Ol9UQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0IChDT1JCQTo6VUxvbmcg
bWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFP
X1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6YWxsb2NidWYgKG1h
eGltdW0pKQogIHsKICB9CgogIGlubGluZQogIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j
ZV9DT1JCQV9Qb2xpY3lMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFf
UG9saWN5TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogICAgQ09SQkE6OlBvbGljeSogKnZhbHVlLAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK
ICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCB2YWx1ZSwg
cmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu
Y2VfQ09SQkFfUG9saWN5TGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB
X1BvbGljeUxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1Bv
bGljeUxpc3QgJnJocykKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAg
ewogICAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7CiAgICAgIENPUkJBOjpQb2xpY3kgKip0
bXAxID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmFs
bG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENPUkJBOjpQb2xpY3kgKiogY29uc3QgdG1w
MiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSAqKj4gKHJocy5idWZmZXJfKTsKCiAg
ICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgICAg
ICB7CiAgICAgICAgICB0bXAxW2ldID0gQ09SQkE6OlBvbGljeTo6X2R1cGxpY2F0ZSAodG1wMltp
XSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNl
CiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAgaW5saW5lIF9UQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0ICYKICBfVEFPX1VuYm91
bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6b3BlcmF0b3I9IChjb25zdCBf
VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdCAmcmhzKQogIHsK
ICAgIGlmICh0aGlzID09ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAodGhpcy0+
cmVsZWFzZV8pCiAgICB7CiAgICAgIENPUkJBOjpQb2xpY3kgKip0bXAgPSByZWludGVycHJldF9j
YXN0PENPUkJBOjpQb2xpY3kgKio+ICh0aGlzLT5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6
OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB7CiAgICAgICAgQ09S
QkE6OnJlbGVhc2UgKHRtcFtpXSk7CiAgICAgICAgdG1wW2ldID0gQ09SQkE6OlBvbGljeTo6X25p
bCAoKTsKICAgICAgfQogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAg
ICAgIHsKICAgICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5
TGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11
bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1Vu
Ym91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfUG9saWN5TGlzdDo6YWxsb2NidWYgKHJocy5t
YXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJo
cyk7CgogICAgQ09SQkE6OlBvbGljeSAqKnRtcDEgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpQ
b2xpY3kgKio+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJBOjpQb2xpY3kgKiogY29uc3QgdG1w
MiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSAqKj4gKHJocy5idWZmZXJfKTsKCiAg
ICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICAgIHsK
ICAgICAgICB0bXAxW2ldID0gQ09SQkE6OlBvbGljeTo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAg
ICAgIH0KCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgVEFPX09iamVjdF9NYW5hZ2Vy
PENPUkJBOjpQb2xpY3ksQ09SQkE6OlBvbGljeV92YXI+CiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl
eCkgY29uc3QKCiAgewogICAgZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11bV8pKSB7IGlu
dCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9f
XyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGljeUMuaSIsIDMzNiwgLTEs
IF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCks
IGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FT
U0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAi
aW5kZXggPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBOjpQ
b2xpY3kgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6UG9saWN5ICoqPiAo
dGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBOjpQb2xp
Y3ksQ09SQkE6OlBvbGljeV92YXI+ICh0bXAgKyBpbmRleCwgdGhpcy0+cmVsZWFzZV8pOwogIH0K
CiAgaW5saW5lIENPUkJBOjpQb2xpY3kqICoKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu
Y2VfQ09SQkFfUG9saWN5TGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQog
IHsKICAgIENPUkJBOjpQb2xpY3kgKipyZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAwKQog
ICAgewoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJlc3Vs
dCA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lMaXN0OjphbGxv
Y2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAg
ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAg
ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlBvbGljeSoqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVh
c2VfICE9IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09S
QkE6OlBvbGljeSoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAw
OwogICAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog
ICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3Vs
dDsKICB9CgogIGlubGluZSBjb25zdCBDT1JCQTo6UG9saWN5KiAqCiAgX1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX0NPUkJBX1BvbGljeUxpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0
CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09SQkE6OlBvbGljeSAqKj4g
KHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAzOTQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF92
YXI6OkNPUkJBX1BvbGljeUxpc3RfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpD
T1JCQV9Qb2xpY3lMaXN0X3Zhcjo6Q09SQkFfUG9saWN5TGlzdF92YXIgKENPUkJBX1BvbGljeUxp
c3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkNPUkJBX1BvbGljeUxpc3RfdmFyOjpDT1JC
QV9Qb2xpY3lMaXN0X3ZhciAoY29uc3QgOjpDT1JCQV9Qb2xpY3lMaXN0X3ZhciAmcCkKewogIGlm
IChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JCQV9Qb2xpY3lM
aXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRy
XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6fkNPUkJBX1BvbGljeUxpc3Rf
dmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Qb2xpY3lM
aXN0X3ZhciAmCkNPUkJBX1BvbGljeUxpc3RfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1BvbGljeUxp
c3QgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3RfdmFyICYKQ09SQkFfUG9saWN5TGlz
dF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Qb2xpY3lMaXN0X3ZhciAmcCkKewogIGlm
ICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAg
ICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9Qb2xpY3lMaXN0ICpkZWVw
X2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfUG9saWN5TGlzdCAoKnAucHRyXyk7CgogICAg
ICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgQ09S
QkFfUG9saWN5TGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9
IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAg
ICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1
cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OkNPUkJBX1BvbGljeUxpc3QgKgpDT1JCQV9Qb2xp
Y3lMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lMaXN0ICoKQ09SQkFfUG9saWN5TGlzdF92YXI6Om9w
ZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1Bv
bGljeUxpc3RfdmFyOjpvcGVyYXRvciBjb25zdCA6OkNPUkJBX1BvbGljeUxpc3QgJigpIGNvbnN0
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6
b3BlcmF0b3IgOjpDT1JCQV9Qb2xpY3lMaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9
CgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF92YXI6Om9wZXJhdG9yIDo6Q09SQkFfUG9saWN5TGlz
dCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpDT1JCQV9Qb2xp
Y3lMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Qb2xpY3lMaXN0IComKCkKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBOjpQb2xpY3ksIENP
UkJBOjpQb2xpY3lfdmFyPgpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6
OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsK
fQoKaW5saW5lIGNvbnN0IDo6Q09SQkFfUG9saWN5TGlzdCAmCkNPUkJBX1BvbGljeUxpc3RfdmFy
OjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09S
QkFfUG9saWN5TGlzdCAmCkNPUkJBX1BvbGljeUxpc3RfdmFyOjppbm91dCAodm9pZCkKewogIHJl
dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKiYKQ09SQkFf
UG9saWN5TGlzdF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt
PnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lM
aXN0ICoKQ09SQkFfUG9saWN5TGlzdF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9Qb2xp
Y3lMaXN0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7
Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKgpDT1JCQV9Qb2xpY3lMaXN0X3Zhcjo6cHRy
ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFf
UG9saWN5TGlzdF9vdXQ6OkNPUkJBX1BvbGljeUxpc3Rfb3V0IChDT1JCQV9Qb2xpY3lMaXN0ICom
cCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1BvbGlj
eUxpc3Rfb3V0OjpDT1JCQV9Qb2xpY3lMaXN0X291dCAoQ09SQkFfUG9saWN5TGlzdF92YXIgJnAp
CiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g
PSAwOwp9CgppbmxpbmUKQ09SQkFfUG9saWN5TGlzdF9vdXQ6OkNPUkJBX1BvbGljeUxpc3Rfb3V0
IChjb25zdCA6OkNPUkJBX1BvbGljeUxpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxD
T1JCQV9Qb2xpY3lMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfUG9saWN5
TGlzdF9vdXQgJgpDT1JCQV9Qb2xpY3lMaXN0X291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJB
X1BvbGljeUxpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfUG9s
aWN5TGlzdF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkNPUkJB
X1BvbGljeUxpc3Rfb3V0ICYKQ09SQkFfUG9saWN5TGlzdF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFf
UG9saWN5TGlzdCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lCkNPUkJBX1BvbGljeUxpc3Rfb3V0OjpvcGVyYXRvciA6OkNPUkJBX1BvbGljeUxpc3QgKiYo
KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeUxpc3QgKiYK
Q09SQkFfUG9saWN5TGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lMaXN0ICoKQ09SQkFfUG9saWN5TGlzdF9vdXQ6Om9wZXJh
dG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3Rf
TWFuYWdlcjxDT1JCQTo6UG9saWN5LCBDT1JCQTo6UG9saWN5X3Zhcj4KQ09SQkFfUG9saWN5TGlz
dF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlzLT5w
dHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyA2MDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgogIGlubGluZSBDT1JCQTo6VUxv
bmcgKgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmFsbG9j
YnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgQ09SQkE6OlVMb25nICpyZXR2YWwgPSAw
OwogICAgZG8geyB0cnkgeyByZXR2YWwgPSBuZXcgQ09SQkE6OlVMb25nW3NpemVdOyB9IGNhdGNo
IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAw
OyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIF9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmZyZWVidWYgKENPUkJB
OjpVTG9uZyAqYnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10gYnVmZmVyOwogIH0KCiAgaW5saW5l
CiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6X1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcSAodm9pZCkKICB7CiAgfQoKICBpbmxp
bmUKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxOjpfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxIChDT1JCQTo6VUxvbmcgbWF4aW11
bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9DT1JCQV9Qb2xpY3lUeXBlU2VxOjphbGxvY2J1ZiAobWF4aW11bSkpCiAg
ewogIH0KCiAgaW5saW5lCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlw
ZVNlcTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcSAoQ09SQkE6
OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgQ09SQkE6OlVMb25n
ICpkYXRhLAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFz
ZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlu
bGluZQogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6Ol9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgKGNvbnN0IF9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXEgJnJocykKCiAgICA6IFRBT19VbmJvdW5k
ZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAg
ewogICAgICBDT1JCQTo6VUxvbmcgKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC
QV9Qb2xpY3lUeXBlU2VxOjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgICBDT1JCQTo6
VUxvbmcgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VUxvbmcgKj4gKHJo
cy5idWZmZXJfKTsKCiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVu
Z3RoXzsgKytpKQogICAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVy
XyA9IHRtcDE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwog
ICAgfQogIH0KCiAgaW5saW5lIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5
cGVTZXEgJgogIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6Om9w
ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNl
cSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7Cgog
ICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy
aHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgQ09SQkE6OlVMb25nICp0bXAgPSByZWludGVy
cHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6ZnJlZWJ1ZiAodG1wKTsKICAg
ICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5
VHlwZVNlcTo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UK
ICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0NPUkJBX1BvbGlj
eVR5cGVTZXE6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFz
ZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIENPUkJBOjpVTG9uZyAqdG1wMSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIENPUkJB
OjpVTG9uZyAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyAqPiAo
cmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVu
Z3RoXzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKCiAgaW5saW5lIENPUkJBOjpVTG9uZyAmCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09S
QkFfUG9saWN5VHlwZVNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsKICAgIGRv
IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1BvbGljeUMuaSIsIDY5NywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJl
c3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgp
KTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBh
c3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEp
OyB9IH0gd2hpbGUgKDApOwogICAgQ09SQkE6OlVMb25nKiB0bXAgPSByZWludGVycHJldF9jYXN0
PENPUkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBbaV07CiAgfQoK
ICBpbmxpbmUgY29uc3QgQ09SQkE6OlVMb25nICYKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9D
T1JCQV9Qb2xpY3lUeXBlU2VxOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAg
ewogICAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0g
QUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6
Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIiwgNzA2LCAtMSwgX19hY2VfZXJyb3IsIGFj
ZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2Fs
bGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBs
aW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11
bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBDT1JCQTo6VUxvbmcgKiBjb25zdCB0bXAgPSBy
ZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy
biB0bXBbaV07CiAgfQoKCgogIGlubGluZSBDT1JCQTo6VUxvbmcgKgogIF9UQU9fVW5ib3VuZGVk
X1NlcXVlbmNlX0NPUkJBX1BvbGljeVR5cGVTZXE6OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFu
IG9ycGhhbikKICB7CiAgICBDT1JCQTo6VUxvbmcgKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFu
ID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAg
ICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6
YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7
CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewog
ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlVMb25nKj4gKHRoaXMtPmJ1
ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxl
YXNlXyAhPSAwKQogICAgICB7CgoKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PENP
UkJBOjpVTG9uZyo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7
CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg
ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0
OwogIH0KCiAgaW5saW5lIGNvbnN0IENPUkJBOjpVTG9uZyAqCiAgX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfQ09SQkFfUG9saWN5VHlwZVNlcTo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKICB7CiAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBDT1JCQTo6VUxvbmcgKj4gKHRoaXMtPmJ1
ZmZlcl8pOwogIH0KCiAgaW5saW5lIHZvaWQKICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9DT1JC
QV9Qb2xpY3lUeXBlU2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LAogIENPUkJBOjpVTG9u
ZyBsZW5ndGgsCiAgQ09SQkE6OlVMb25nICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2Up
CiAgewogICAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgICB0aGlzLT5sZW5ndGhfID0gbGVuZ3Ro
OwogICAgaWYgKHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICAgIHsKICAg
ICAgQ09SQkE6OlVMb25nICp0bXAgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpVTG9uZyo+ICh0
aGlzLT5idWZmZXJfKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfQ09SQkFfUG9saWN5
VHlwZVNlcTo6ZnJlZWJ1ZiAodG1wKTsKICAgIH0KICAgIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwog
ICAgdGhpcy0+cmVsZWFzZV8gPSByZWxlYXNlOwogIH0KIyA3ODIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5Qy5pIgppbmxpbmUKQ09SQkFf
UG9saWN5VHlwZVNlcV92YXI6OkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKQogIDogcHRy
XyAoMCkKe30KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6Q09SQkFfUG9saWN5VHlw
ZVNlcV92YXIgKENPUkJBX1BvbGljeVR5cGVTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5l
CkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAoY29uc3Qg
Q09SQkFfUG9saWN5VHlwZVNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkg
eyB0aGlzLT5wdHJfID0gbmV3IENPUkJBX1BvbGljeVR5cGVTZXEgKCpwLnB0cl8pOyB9IGNhdGNo
IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg
fSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpDT1JC
QV9Qb2xpY3lUeXBlU2VxX3Zhcjo6Q09SQkFfUG9saWN5VHlwZVNlcV92YXIgKGNvbnN0IENPUkJB
X1BvbGljeVR5cGVTZXEgJnApCnsKICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpDT1JC
QV9Qb2xpY3lUeXBlU2VxIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7Cn0KCmlubGluZQpDT1JC
QV9Qb2xpY3lUeXBlU2VxX3Zhcjo6fkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICh2b2lkKQp7CiAg
ZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmCkNP
UkJBX1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1BvbGljeVR5cGVTZXEgKnAp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSA6OkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyICYKQ09SQkFfUG9saWN5VHlwZVNl
cV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3ZhciAmcCkKewog
IGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewog
ICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBDT1JCQV9Qb2xpY3lUeXBlU2Vx
ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfUG9saWN5VHlwZVNlcSAoKnAucHRy
Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgQ09SQkFfUG9saWN5VHlwZVNlcSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAg
IGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsK
ICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgOjpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zh
ciAmCkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkE6OlBv
bGljeVR5cGVTZXEgJnApCnsKICBpZiAodGhpcy0+cHRyXyAhPSAmcCkKICB7CiAgICBkZWxldGUg
dGhpcy0+cHRyXzsKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBOjpQb2xp
Y3lUeXBlU2VxIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAq
dGhpczsKfQoKaW5saW5lIGNvbnN0IDo6Q09SQkE6OlBvbGljeVR5cGVTZXEgKgpDT1JCQV9Qb2xp
Y3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlwZVNlcSAqCkNPUkJBX1BvbGljeVR5cGVT
ZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu
ZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQTo6UG9saWN5
VHlwZVNlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB
X1BvbGljeVR5cGVTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxICYoKQp7
CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfUG9saWN5VHlwZVNlcV92YXI6
Om9wZXJhdG9yIDo6Q09SQkE6OlBvbGljeVR5cGVTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRo
aXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6UG9saWN5VHlwZSAmCkNPUkJBX1BvbGljeVR5cGVT
ZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+
cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6OlBvbGljeVR5
cGUgJgpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGlu
ZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgQ09SQkE6OlBvbGljeVR5cGUg
Jj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkNP
UkJBOjpQb2xpY3lUeXBlU2VxICYKQ09SQkFfUG9saWN5VHlwZVNlcV92YXI6OmluICh2b2lkKSBj
b25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlw
ZVNlcSAmCkNPUkJBX1BvbGljeVR5cGVTZXFfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAq
dGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxIComCkNPUkJBX1Bv
bGljeVR5cGVTZXFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz
LT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkE6OlBvbGlj
eVR5cGVTZXEgKgpDT1JCQV9Qb2xpY3lUeXBlU2VxX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OkNP
UkJBOjpQb2xpY3lUeXBlU2VxICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwog
IHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNPUkJBOjpQb2xpY3lUeXBlU2VxICoKQ09SQkFfUG9s
aWN5VHlwZVNlcV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgoKCgoKaW5saW5lCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpDT1JCQV9Qb2xpY3lUeXBlU2Vx
X291dCAoQ09SQkFfUG9saWN5VHlwZVNlcSAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRy
XyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dDo6Q09SQkFfUG9saWN5VHlw
ZVNlcV9vdXQgKENPUkJBX1BvbGljeVR5cGVTZXFfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJB
X1BvbGljeVR5cGVTZXFfb3V0OjpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dCAoY29uc3QgOjpDT1JC
QV9Qb2xpY3lUeXBlU2VxX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8Q09SQkFfUG9saWN5
VHlwZVNlcV9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OkNPUkJBX1BvbGljeVR5cGVTZXFf
b3V0ICYKQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9Q
b2xpY3lUeXBlU2VxX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX1Bv
bGljeVR5cGVTZXFfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpD
T1JCQV9Qb2xpY3lUeXBlU2VxX291dCAmCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpvcGVyYXRv
cj0gKENPUkJBX1BvbGljeVR5cGVTZXEgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZQpDT1JCQV9Qb2xpY3lUeXBlU2VxX291dDo6b3BlcmF0b3IgOjpDT1JC
QTo6UG9saWN5VHlwZVNlcSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6
Q09SQkE6OlBvbGljeVR5cGVTZXEgKiYKQ09SQkFfUG9saWN5VHlwZVNlcV9vdXQ6OnB0ciAodm9p
ZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQTo6UG9saWN5VHlwZVNl
cSAqCkNPUkJBX1BvbGljeVR5cGVTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6UG9saWN5VHlwZSAmCkNPUkJBX1BvbGljeVR5
cGVTZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhp
cy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMTAyNSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmkiCmlubGluZSBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBDT1JCQTo6UG9s
aWN5RXJyb3IgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRl
Ll9pZCAoKSkKICB7CgogICAgaWYgKAogICAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5yZWFz
b24pCiAgICApCiAgICAgIHJldHVybiAxOwogICAgZWxzZQogICAgICByZXR1cm4gMDsKICB9CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU
QU9fSW5wdXRDRFIgJnN0cm0sQ09SQkE6OlBvbGljeUVycm9yICZfdGFvX2FnZ3JlZ2F0ZSkKewoK
ICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5yZWFzb24pCiAgKQogICAgcmV0dXJu
IDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8
ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXM6
Ol90YW9fc2VxX1VTaG9ydCAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBU
QU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpJbnZhbGlkUG9saWNpZXM6Ol90YW9fc2VxX1VTaG9y
dCAmCiAgKTsKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRD
RFIgJnN0cm0sIGNvbnN0IENPUkJBOjpJbnZhbGlkUG9saWNpZXMgJl90YW9fYWdncmVnYXRlKQp7
CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLl9pZCAoKSkKICB7CgogICAgaWYgKAogICAg
ICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5pbmRpY2VzKQogICAgKQogICAgICByZXR1cm4gMTsK
ICAgIGVsc2UKICAgICAgcmV0dXJuIDA7CiAgfQogIGVsc2UKICAgIHJldHVybiAwOwp9Cgppbmxp
bmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLENPUkJBOjpJ
bnZhbGlkUG9saWNpZXMgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmICgKICAgIChzdHJtID4+IF90
YW9fYWdncmVnYXRlLmluZGljZXMpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJu
IDA7Cn0KCiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0
cHV0Q0RSICYsCiAgICBjb25zdCBDT1JCQTo6UG9saWN5X3B0cgogICk7CgogICAgICAgICAgIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBDT1JCQTo6
UG9saWN5X3B0ciAmCiAgKTsKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRB
T19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX1BvbGljeUxpc3QgJgogICk7CkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBDT1JCQV9Qb2xpY3lM
aXN0ICYKICApOwoKCgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0
cHV0Q0RSICYsCiAgICBjb25zdCBDT1JCQTo6UG9saWN5VHlwZVNlcSAmCiAgKTsKQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpQb2xpY3lU
eXBlU2VxICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091
dHB1dENEUiAmc3RybSwgY29uc3QgQ09SQkE6OlNldE92ZXJyaWRlVHlwZSAmX3Rhb19lbnVtdmFs
KQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICByZXR1cm4gc3Ry
bSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9f
SW5wdXRDRFIgJnN0cm0sIENPUkJBOjpTZXRPdmVycmlkZVR5cGUgJl90YW9fZW51bXZhbCkKewog
IENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0
ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAg
ICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxDT1JCQTo6U2V0T3ZlcnJpZGVUeXBlPiAoX3Rh
b190ZW1wKTsKICAgIH0KCiAgcmV0dXJuIF90YW9fcmVzdWx0Owp9CiMgMTIxMCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAx
MjIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
bGljeUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcG9zdC5oIiAxCiMgMTIyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIgMgoKdHlwZWRlZiBlbnVtCnsKICBUQU9f
U0VSVklDRUlEX05BTUVTRVJWSUNFLAogIFRBT19TRVJWSUNFSURfVFJBRElOR1NFUlZJQ0UsCiAg
VEFPX1NFUlZJQ0VJRF9JTVBMUkVQT1NFUlZJQ0UsCiAgVEFPX1NFUlZJQ0VJRF9JTlRFUkZBQ0VS
RVBPU0VSVklDRQp9IFRBT19TZXJ2aWNlX0lEOwoKCmNsYXNzIFRBT19NUHJvZmlsZTsKc3RydWN0
IFRBT19EaXNwYXRjaF9Db250ZXh0OwpjbGFzcyBUQU9fQ2xpZW50X1N0cmF0ZWd5X0ZhY3Rvcnk7
CmNsYXNzIFRBT19TZXJ2ZXJfU3RyYXRlZ3lfRmFjdG9yeTsKY2xhc3MgVEFPX0lucHV0Q0RSOwpj
bGFzcyBUQU9fT3V0cHV0Q0RSOwpjbGFzcyBUQU9fU3R1YjsKCmNsYXNzIFRBT19BY2NlcHRvcl9G
aWx0ZXI7CgoKY2xhc3MgVEFPX1ZhbHVlRmFjdG9yeV9NYXA7CiMgNzEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiCmNsYXNzIENPUkJBX09S
Qgp7CnB1YmxpYzoKCgogIGZyaWVuZCBjbGFzcyBUQU9fT1JCX0NvcmU7CiAgZnJpZW5kIFRBT19P
UkJfQ29yZSAqVEFPX09SQl9Db3JlX2luc3RhbmNlICh2b2lkKTsKCiAgY2xhc3MgSW52YWxpZE5h
bWUgOiBwdWJsaWMgQ09SQkFfVXNlckV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBJbnZhbGlk
TmFtZSAodm9pZCk7CiAgICBJbnZhbGlkTmFtZSAoY29uc3QgSW52YWxpZE5hbWUgJik7CiAgICB+
SW52YWxpZE5hbWUgKHZvaWQpOwogICAgSW52YWxpZE5hbWUgJm9wZXJhdG9yPSAoY29uc3QgSW52
YWxpZE5hbWUgJik7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVh
bCB2b2lkIF90YW9fZW5jb2RlIChUQU9fT3V0cHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKSBjb25zdDsKICAgIHZpcnR1YWwgdm9p
ZCBfdGFvX2RlY29kZSAoVEFPX0lucHV0Q0RSICZjZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKCgogICAgc3RhdGljIEludmFsaWROYW1lKiBf
ZG93bmNhc3QgKENPUkJBX0V4Y2VwdGlvbiAqZXgpOwogICAgc3RhdGljIENPUkJBOjpFeGNlcHRp
b24gKl9hbGxvYyAodm9pZCk7CiAgfTsKICBzdGF0aWMgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
SW52YWxpZE5hbWU7CgogIHR5cGVkZWYgY2hhciAqT2JqZWN0SWQ7CiAgdHlwZWRlZiBDT1JCQTo6
U3RyaW5nX3ZhciBPYmplY3RJZF92YXI7CiAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX291dCBPYmpl
Y3RJZF9vdXQ7CiAgc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09iamVjdElkOwoKICB0
eXBlZGVmIENPUkJBX09SQl9PYmplY3RJZExpc3QgT2JqZWN0SWRMaXN0OwogIHR5cGVkZWYgQ09S
QkFfT1JCX09iamVjdElkTGlzdF92YXIgT2JqZWN0SWRMaXN0X3ZhcjsKICB0eXBlZGVmIENPUkJB
X09SQl9PYmplY3RJZExpc3Rfb3V0IE9iamVjdElkTGlzdF9vdXQ7CiAgdHlwZWRlZiBDT1JCQV9P
UkJfT2JqZWN0SWRMaXN0ICpPYmplY3RJZExpc3RfcHRyOwogIHN0YXRpYyBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90Y19PYmplY3RJZExpc3Q7CgoKCiAgc3RhdGljIENPUkJBOjpPUkJfcHRyIF9kdXBs
aWNhdGUgKENPUkJBOjpPUkJfcHRyIG9yYik7CgoKCiAgc3RhdGljIENPUkJBOjpPUkJfcHRyIF9u
aWwgKHZvaWQpOwoKCgoKCgogIENPUkJBOjpPYmplY3RfcHRyIHN0cmluZ190b19vYmplY3QgKGNv
bnN0IGNoYXIgKnN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpKTsKIyAxMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vT1JCLmgiCiAgY2hhciAqIG9iamVjdF90b19zdHJpbmcgKENPUkJBOjpPYmplY3RfcHRy
IG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKICBDT1JCQTo6VmFsdWVGYWN0b3J5
X3B0ciByZWdpc3Rlcl92YWx1ZV9mYWN0b3J5ICgKICAgICAgICAgY29uc3QgY2hhciAqcmVwb3Np
dG9yeV9pZCwKICAgICAgICAgQ09SQkE6OlZhbHVlRmFjdG9yeV9wdHIgZmFjdG9yeSwKICAgICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkgKTsKICB2b2lkIHVucmVnaXN0
ZXJfdmFsdWVfZmFjdG9yeSAoY29uc3QgY2hhciAqIHJlcG9zaXRvcnlfaWQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpICk7CiAgQ09SQkE6OlZhbHVlRmFjdG9yeV9wdHIgbG9v
a3VwX3ZhbHVlX2ZhY3RvcnkgKAogICAgICAgICBjb25zdCBjaGFyICpyZXBvc2l0b3J5X2lkLAog
ICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSApOwoKCgoKCgoKICB0
eXBlZGVmIENPUkJBX09SQl9SZXF1ZXN0U2VxIFJlcXVlc3RTZXE7CiAgdHlwZWRlZiBDT1JCQV9P
UkJfUmVxdWVzdFNlcV92YXIgUmVxdWVzdFNlcV92YXI7CiAgdHlwZWRlZiBDT1JCQV9PUkJfUmVx
dWVzdFNlcV9vdXQgUmVxdWVzdFNlcV9vdXQ7CgogIHZvaWQgY3JlYXRlX2xpc3QgKENPUkJBOjpM
b25nIGNvdW50LAogICAgICAgICAgICAgICAgICAgIENPUkJBOjpOVkxpc3RfcHRyICZuZXdfbGlz
dCwKICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpKTsKCiAgdm9pZCBjcmVhdGVfbmFtZWRfdmFsdWUgKENPUkJBOjpOYW1lZFZh
bHVlX3B0ciAmbm12YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCiAgdm9pZCBjcmVhdGVf
ZXhjZXB0aW9uX2xpc3QgKENPUkJBOjpFeGNlcHRpb25MaXN0X3B0ciAmZXhjbGlzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKICB2b2lkIGNyZWF0ZV9lbnZpcm9ubWVudCAoQ09S
QkE6OkVudmlyb25tZW50X3B0ciAmbmV3X2VudiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCgog
IHZvaWQgY3JlYXRlX2NvbnRleHRfbGlzdCAoQ09SQkE6OkNvbnRleHRMaXN0X3B0ciAmY3R4dGxp
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgZ2V0X2RlZmF1bHRfY29udGV4dCAo
Q09SQkE6OkNvbnRleHRfcHRyICZjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIENPUkJB
OjpCb29sZWFuIGdldF9zZXJ2aWNlX2luZm9ybWF0aW9uIChDT1JCQTo6U2VydmljZVR5cGUgc2Vy
dmljZV90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QTo6U2VydmljZUluZm9ybWF0aW9uX291dCBzZXJ2aWNlX2luZm9ybWF0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgc2VuZF9t
dWx0aXBsZV9yZXF1ZXN0c19vbmV3YXkgKGNvbnN0IENPUkJBX09SQl9SZXF1ZXN0U2VxICZyZXEg
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIHZvaWQgc2Vu
ZF9tdWx0aXBsZV9yZXF1ZXN0c19kZWZlcnJlZCAoY29uc3QgQ09SQkFfT1JCX1JlcXVlc3RTZXEg
JnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCiAg
dm9pZCBnZXRfbmV4dF9yZXNwb25zZSAoQ09SQkFfUmVxdWVzdF9wdHIgJnJlcSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkpOwoKICBDT1JCQTo6Qm9vbGVhbiBwb2xsX25leHRfcmVzcG9uc2UgKENPUkJBX0Vu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK
ICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9zdHJ1Y3RfdGMgKAogICAgICBjb25zdCBjaGFy
ICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgY29uc3QgQ09SQkE6OlN0cnVjdE1l
bWJlclNlcSAmbWVtYmVycywKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBDT1JCQTo6VHlwZUNv
ZGVfcHRyIGNyZWF0ZV91bmlvbl90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25z
dCBjaGFyICpuYW1lLAogICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIGRpc2NyaW1pbmF0b3JfdHlw
ZSwKICAgICAgY29uc3QgQ09SQkE6OlVuaW9uTWVtYmVyU2VxICZtZW1iZXJzLAogICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2VudW1fdGMgKAogICAg
ICBjb25zdCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgY29uc3QgQ09S
QkE6OkVudW1NZW1iZXJTZXEgJm1lbWJlcnMsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkKICAgICkKICAgIHRocm93IChDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09S
QkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfYWxpYXNfdGMgKAogICAgICBjb25zdCBjaGFyICppZCwK
ICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBvcmlnaW5h
bF90eXBlLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0
aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3Jl
YXRlX2V4Y2VwdGlvbl90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25zdCBjaGFy
ICpuYW1lLAogICAgICBjb25zdCBDT1JCQTo6U3RydWN0TWVtYmVyU2VxICZtZW1iZXJzLAogICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2ludGVyZmFj
ZV90YyAoCiAgICAgIGNvbnN0IGNoYXIgKmlkLAogICAgICBjb25zdCBjaGFyICpuYW1lLAogICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX3N0cmluZ190
YyAoCiAgICAgIENPUkJBOjpVTG9uZyBib3VuZCwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBD
T1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV93c3RyaW5nX3RjICgKICAgICAgQ09SQkE6OlVMb25n
IGJvdW5kLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApCiAgICB0
aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgogIENPUkJBOjpUeXBlQ29kZV9wdHIgY3Jl
YXRlX2ZpeGVkX3RjICgKICAgICAgQ09SQkE6OlVTaG9ydCBkaWdpdHMsCiAgICAgIENPUkJBOjpV
U2hvcnQgc2NhbGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkK
ICAgIHRocm93IChDT1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0
ciBjcmVhdGVfc2VxdWVuY2VfdGMgKAogICAgICBDT1JCQTo6VUxvbmcgYm91bmQsCiAgICAgIENP
UkJBOjpUeXBlQ29kZV9wdHIgZWxlbWVudF90eXBlLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7Cgog
IENPUkJBOjpUeXBlQ29kZV9wdHIgY3JlYXRlX2FycmF5X3RjICgKICAgICAgQ09SQkE6OlVMb25n
IGxlbmd0aCwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBlbGVtZW50X3R5cGUsCiAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93IChDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfdmFsdWVfdGMgKAog
ICAgICBjb25zdCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6
OlZhbHVlTW9kaWZpZXIgdHlwZV9tb2RpZmllciwKICAgICAgQ09SQkE6OlR5cGVDb2RlX3B0ciBj
b25jcmV0ZV9iYXNlLAogICAgICBjb25zdCBDT1JCQTo6VmFsdWVNZW1iZXJTZXEgJm1lbWJlcnMs
CiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93IChD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uKTsKCiAgQ09SQkE6OlR5cGVDb2RlX3B0ciBjcmVhdGVfdmFs
dWVfYm94X3RjICgKICAgICAgY29uc3QgY2hhciAqaWQsCiAgICAgIGNvbnN0IGNoYXIgKm5hbWUs
CiAgICAgIENPUkJBOjpUeXBlQ29kZV9wdHIgYm94ZWRfdHlwZSwKICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24pOwoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9uYXRpdmVfdGMgKAogICAgICBjb25z
dCBjaGFyICppZCwKICAgICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24p
OwoKICBDT1JCQTo6VHlwZUNvZGVfcHRyIGNyZWF0ZV9yZWN1cnNpdmVfdGMgKAogICAgICBjb25z
dCBjaGFyICppZCwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKQog
ICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKICBDT1JCQTo6VHlwZUNvZGVfcHRy
IGNyZWF0ZV9hYnN0cmFjdF9pbnRlcmZhY2VfdGMgKAogICAgICBjb25zdCBjaGFyICppZCwKICAg
ICAgY29uc3QgY2hhciAqbmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAo
KQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwoKCiAgQ09SQkE6OlR5
cGVDb2RlX3B0ciBjcmVhdGVfbG9jYWxfaW50ZXJmYWNlX3RjICgKICAgICAgY29uc3QgY2hhciAq
aWQsCiAgICAgIGNvbnN0IGNoYXIgKmFtZSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24pOwojIDM2OSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIK
ICB2b2lkIHJ1biAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgoKICB2b2lkIHJ1biAo
QUNFX1RpbWVfVmFsdWUgJnR2LAogICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7
CgoKCgoKCgogIHZvaWQgcnVuIChBQ0VfVGltZV9WYWx1ZSAqdHYsCiAgICAgICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpKTsKCgoKICBDT1JCQTo6Qm9vbGVhbiB3b3JrX3BlbmRpbmcgKENP
UkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoK
CiAgQ09SQkE6OkJvb2xlYW4gd29ya19wZW5kaW5nIChBQ0VfVGltZV9WYWx1ZSAmdHYsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F
bnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCgoKCgogIHZvaWQgcGVyZm9ybV93b3JrIChDT1JC
QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICB2b2lkIHBlcmZvcm1f
d29yayAoQUNFX1RpbWVfVmFsdWUgJiwKICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAg
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdm9pZCBwZXJmb3JtX3dvcmsgKEFD
RV9UaW1lX1ZhbHVlICosCiAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwojIDQyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaCIKICB2b2lkIHNodXRkb3duIChDT1JCQTo6
Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9uID0gMCwKICAgICAgICAgICAgICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKSk7CiMgNDM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL09SQi5oIgogIHZvaWQgZGVzdHJveSAoQ09SQkFfRW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKSk7CgogIENPUkJBX09iamVjdF9wdHIgcmVzb2x2ZV9pbml0aWFsX3JlZmVyZW5jZXMg
KGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKIyA0NTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiCiAgQ09SQkFfT2JqZWN0X3B0ciByZXNvbHZl
X2luaXRpYWxfcmVmZXJlbmNlcyAoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAqdGltZW91dCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp
OwoKCgogIENPUkJBX09SQl9PYmplY3RJZExpc3RfcHRyIGxpc3RfaW5pdGlhbF9zZXJ2aWNlcyAo
CiAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgogIENPUkJBOjpQb2xpY3lf
cHRyIGNyZWF0ZV9wb2xpY3kgKENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ09SQkE6OkFueSYgdmFsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKCgogIENPUkJBX09iamVjdF9wdHIgcmVz
b2x2ZV9yb290X3BvYSAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUpOwoKCiAgVEFPX1N0dWIgKmNyZWF0ZV9zdHViX29iamVjdCAoY29uc3QgVEFPX09i
amVjdEtleSAma2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnR5cGVfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OlBvbGljeUxp
c3QgKnBvbGljeV9saXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19BY2Nl
cHRvcl9GaWx0ZXIgKmFjY2VwdG9yX2ZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7
CgoKCiAgc3RhdGljIHZvaWQgaW5pdF9vcmJfZ2xvYmFscyAoQ09SQkFfRW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKCiAgc3RhdGljIHZvaWQg
X3Rhb191bmV4cGVjdGVkX2V4Y2VwdGlvbiAodm9pZCk7CgoKICBDT1JCQTo6VUxvbmcgX2luY3Jf
cmVmY250ICh2b2lkKTsKICBDT1JCQTo6VUxvbmcgX2RlY3JfcmVmY250ICh2b2lkKTsKCgoKICB2
b2lkIF91c2Vfb21nX2lvcl9mb3JtYXQgKENPUkJBOjpCb29sZWFuIGlvcik7CiAgQ09SQkE6OkJv
b2xlYW4gX3VzZV9vbWdfaW9yX2Zvcm1hdCAodm9pZCk7CgoKCiAgdm9pZCBfb3B0aW1pemVfY29s
bG9jYXRpb25fb2JqZWN0cyAoQ09SQkE6OkJvb2xlYW4gb3B0KTsKICBDT1JCQTo6Qm9vbGVhbiBf
b3B0aW1pemVfY29sbG9jYXRpb25fb2JqZWN0cyAodm9pZCkgY29uc3Q7CgoKICBUQU9fT1JCX0Nv
cmUgKm9yYl9jb3JlICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgY29uc3QgQUNFX0NTdHJpbmcgJl90
YW9fZnRfY2xpZW50X2lkICh2b2lkKTsKICB2b2lkIF90YW9fZnRfY2xpZW50X2lkIChjb25zdCBj
aGFyICppZCk7CgoKICB0eXBlZGVmIENPUkJBX09SQl9wdHIgX3B0cl90eXBlOwogIHR5cGVkZWYg
Q09SQkFfT1JCX3ZhciBfdmFyX3R5cGU7CgoKCnByb3RlY3RlZDoKCiAgQ09SQkFfT1JCIChUQU9f
T1JCX0NvcmUgKm9yYl9jb3JlKTsKICB+Q09SQkFfT1JCICh2b2lkKTsKCgogIENPUkJBX09iamVj
dF9wdHIgcmVzb2x2ZV9wb2FfY3VycmVudCAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCiAgQ09SQkFfT2JqZWN0X3B0ciByZXNvbHZlX3BvbGlj
eV9tYW5hZ2VyIChDT1JCQTo6RW52aXJvbm1lbnQmKTsKCgogIENPUkJBX09iamVjdF9wdHIgcmVz
b2x2ZV9wb2xpY3lfY3VycmVudCAoQ09SQkE6OkVudmlyb25tZW50Jik7Cgpwcml2YXRlOgoKCiAg
Q09SQkFfT2JqZWN0X3B0ciByZXNvbHZlX3NlcnZpY2UgKE1DQVNUX1NFUlZJQ0VJRCBzZXJ2aWNl
X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ0VfVGltZV9WYWx1ZSAq
dGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmly
b25tZW50JiBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgaW50IG11bHRpY2Fz
dF9xdWVyeSAoY2hhciogJmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpz
ZXJ2aWNlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgdV9zaG9ydCBwb3J0LAogICAgICAg
ICAgICAgICAgICAgICAgIEFDRV9UaW1lX1ZhbHVlICp0aW1lb3V0KTsKCgoKCgogIENPUkJBX09i
amVjdF9wdHIgbXVsdGljYXN0X3RvX3NlcnZpY2UgKGNvbnN0IGNoYXIgKnNlcnZpY2VfbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X3Nob3J0IHBvcnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUNFX1RpbWVfVmFsdWUgKnRp
bWVvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50JiBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIENPUkJBOjpP
YmplY3RfcHRyIGlvcl9zdHJpbmdfdG9fb2JqZWN0IChjb25zdCBjaGFyKiBpb3IsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICBDT1JCQTo6T2JqZWN0X3B0ciB1cmxf
aW9yX3N0cmluZ190b19vYmplY3QgKGNvbnN0IGNoYXIqIGlvciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICB2b2lkIGNoZWNrX3NodXRkb3duIChDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKcHJpdmF0ZToK
CiAgQUNFX01UX1NZTkNIOjpNVVRFWCBsb2NrXzsKCgoKICB1X2ludCByZWZjb3VudF87CgoKICBz
dGF0aWMgaW50IG9yYl9pbml0X2NvdW50XzsKCgoKICBUQU9fT1JCX0NvcmUgKm9yYl9jb3JlXzsK
CgoKICBUQU9fVmFsdWVGYWN0b3J5X01hcCAqdmFsdWV0eXBlX2ZhY3RvcnlfbWFwXzsKCgoKICBD
T1JCQTo6Qm9vbGVhbiB1c2Vfb21nX2lvcl9mb3JtYXRfOwoKCiAgQ09SQkFfT1JCIChjb25zdCBD
T1JCQV9PUkIgJik7CiAgQ09SQkFfT1JCICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQiAmKTsK
fTsKCmNsYXNzIENPUkJBX09SQl92YXIKewpwdWJsaWM6CiAgQ09SQkFfT1JCX3ZhciAodm9pZCk7
CiAgQ09SQkFfT1JCX3ZhciAoQ09SQkE6Ok9SQl9wdHIpOwogIENPUkJBX09SQl92YXIgKGNvbnN0
IENPUkJBX09SQl92YXIgJik7CiAgfkNPUkJBX09SQl92YXIgKHZvaWQpOwoKICBDT1JCQV9PUkJf
dmFyICZvcGVyYXRvcj0gKENPUkJBOjpPUkJfcHRyKTsKICBDT1JCQV9PUkJfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IENPUkJBX09SQl92YXIgJik7CiAgQ09SQkE6Ok9SQl9wdHIgb3BlcmF0b3ItPiAo
dm9pZCkgY29uc3Q7CgoKICBvcGVyYXRvciBjb25zdCBDT1JCQTo6T1JCX3B0ciAmKCkgY29uc3Q7
CiAgb3BlcmF0b3IgQ09SQkE6Ok9SQl9wdHIgJigpOwogIENPUkJBOjpPUkJfcHRyIGluICh2b2lk
KSBjb25zdDsKICBDT1JCQTo6T1JCX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBOjpPUkJfcHRy
ICZvdXQgKHZvaWQpOwogIENPUkJBOjpPUkJfcHRyIF9yZXRuICh2b2lkKTsKICBDT1JCQTo6T1JC
X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQTo6T1JCX3B0ciBwdHJfOwp9
OwoKY2xhc3MgQ09SQkFfT1JCX291dAp7CnB1YmxpYzoKICBDT1JCQV9PUkJfb3V0IChDT1JCQTo6
T1JCX3B0ciAmKTsKICBDT1JCQV9PUkJfb3V0IChDT1JCQV9PUkJfdmFyICYpOwogIENPUkJBX09S
Ql9vdXQgKGNvbnN0IENPUkJBX09SQl9vdXQgJik7CiAgQ09SQkFfT1JCX291dCAmb3BlcmF0b3I9
IChDT1JCQV9PUkJfb3V0ICYpOwogIENPUkJBX09SQl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09S
QkFfT1JCX3ZhciAmKTsKICBDT1JCQV9PUkJfb3V0ICZvcGVyYXRvcj0gKENPUkJBOjpPUkJfcHRy
KTsKICBvcGVyYXRvciBDT1JCQTo6T1JCX3B0ciAmKCk7CiAgQ09SQkE6Ok9SQl9wdHIgJnB0ciAo
dm9pZCk7CiAgQ09SQkE6Ok9SQl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7Cgpwcml2YXRlOgogIENP
UkJBOjpPUkJfcHRyICZwdHJfOwp9OwoKICAgICAgICAgICB2b2lkCm9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIGNvbnN0IENPUkJBOjpPUkI6OkludmFsaWROYW1lICYpOwogICAgICAgICAgIHZv
aWQKb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgQ09SQkE6Ok9SQjo6SW52YWxpZE5hbWUqKTsK
ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm
LCBDT1JCQTo6T1JCOjpJbnZhbGlkTmFtZSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4K
b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQTo6T1JCOjpJbnZhbGlkTmFt
ZSAmKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbgpvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg
JiwgQ09SQkE6Ok9SQjo6SW52YWxpZE5hbWUgJik7CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PUkIuaSIgMQojIDEwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09SQi5pIgppbmxpbmUgQ09S
QkE6OlVMb25nCkNPUkJBX09SQjo6X2luY3JfcmVmY250ICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBB
Q0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKGxvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9
PSAwKSByZXR1cm4gMDs7CiAgcmV0dXJuICsrdGhpcy0+cmVmY291bnRfOwp9CgppbmxpbmUgQ09S
QkE6OlVMb25nCkNPUkJBX09SQjo6X2RlY3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1
YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gbW9uICh0aGlzLT5sb2NrXyk7IGlmIChtb24ubG9j
a2VkICgpID09IDApIHJldHVybiAwOzsKICAgIHRoaXMtPnJlZmNvdW50Xy0tOwogICAgaWYgKHRo
aXMtPnJlZmNvdW50XyAhPSAwKQogICAgICByZXR1cm4gdGhpcy0+cmVmY291bnRfOwogIH0KCiAg
ZGVsZXRlIHRoaXM7CiAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9P
UkI6Ol9kdXBsaWNhdGUgKENPUkJBOjpPUkJfcHRyIG9iaikKewogIGlmIChvYmopCiAgICBvYmot
Pl9pbmNyX3JlZmNudCAoKTsKICByZXR1cm4gb2JqOwp9CgoKCmlubGluZSBDT1JCQTo6T1JCX3B0
cgpDT1JCQV9PUkI6Ol9uaWwgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKaW5saW5lIHZvaWQKQ09S
QkFfT1JCOjpfdXNlX29tZ19pb3JfZm9ybWF0IChDT1JCQTo6Qm9vbGVhbiBpb3IpCnsKICB0aGlz
LT51c2Vfb21nX2lvcl9mb3JtYXRfID0gaW9yOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KQ09S
QkFfT1JCOjpfdXNlX29tZ19pb3JfZm9ybWF0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnVzZV9v
bWdfaW9yX2Zvcm1hdF87Cn0KCmlubGluZSBUQU9fT1JCX0NvcmUgKgpDT1JCQV9PUkI6Om9yYl9j
b3JlICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPm9yYl9jb3JlXzsKfQoKCgoKCmlubGlu
ZSBDT1JCQTo6Qm9vbGVhbgpDT1JCQTo6aXNfbmlsIChDT1JCQTo6T1JCX3B0ciBvYmopCnsKICBy
ZXR1cm4gb2JqID09IENPUkJBX09SQjo6X25pbCAoKTsKfQoKaW5saW5lIHZvaWQKQ09SQkE6OnJl
bGVhc2UgKENPUkJBOjpPUkJfcHRyIG9iaikKewogIGlmICghQ09SQkE6OmlzX25pbCAob2JqKSkK
ICAgIG9iai0+X2RlY3JfcmVmY250ICgpOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl92YXI6OkNP
UkJBX09SQl92YXIgKHZvaWQpCiAgOiBwdHJfIChDT1JCQV9PUkI6Ol9uaWwgKCkpCnsKfQoKaW5s
aW5lCkNPUkJBX09SQl92YXI6OkNPUkJBX09SQl92YXIgKENPUkJBOjpPUkJfcHRyIHApCiAgOiBw
dHJfIChwKQp7Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfdmFyOjpwdHIgKHZv
aWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX09SQl92YXI6
OkNPUkJBX09SQl92YXIgKGNvbnN0IENPUkJBX09SQl92YXIgJnApCiAgOiBwdHJfIChDT1JCQV9P
UkI6Ol9kdXBsaWNhdGUgKHAucHRyICgpKSkKewp9CgppbmxpbmUKQ09SQkFfT1JCX3Zhcjo6fkNP
UkJBX09SQl92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7Cn0KCmlu
bGluZSBDT1JCQV9PUkJfdmFyICYKQ09SQkFfT1JCX3Zhcjo6b3BlcmF0b3I9IChDT1JCQTo6T1JC
X3B0ciBwKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSBw
OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIENPUkJBX09SQl92YXIgJgpDT1JCQV9PUkJfdmFy
OjpvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQl92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkK
ICAgIHsKICAgICAgQ09SQkE6OnJlbGVhc2UgKHRoaXMtPnB0cl8pOwogICAgICB0aGlzLT5wdHJf
ID0gQ09SQkFfT1JCOjpfZHVwbGljYXRlIChwLnB0ciAoKSk7CiAgICB9CiAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUKQ09SQkFfT1JCX3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkE6Ok9SQl9wdHIg
JigpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX09SQl92YXI6
Om9wZXJhdG9yIENPUkJBOjpPUkJfcHRyICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25z
dAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9P
UkJfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
Q09SQkE6Ok9SQl9wdHIgJgpDT1JCQV9PUkJfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9SQl9wdHIgJgpDT1JCQV9PUkJfdmFyOjpvdXQg
KHZvaWQpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRyXyk7CiAgdGhpcy0+cHRyXyA9IENP
UkJBX09SQjo6X25pbCAoKTsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpP
UkJfcHRyCkNPUkJBX09SQl92YXI6Ol9yZXRuICh2b2lkKQp7CgogIENPUkJBOjpPUkJfcHRyIHZh
bCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IENPUkJBX09SQjo6X25pbCAoKTsKICByZXR1
cm4gdmFsOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl9vdXQ6OkNPUkJBX09SQl9vdXQgKENPUkJB
OjpPUkJfcHRyICZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9PUkI6Ol9u
aWwgKCk7Cn0KCmlubGluZQpDT1JCQV9PUkJfb3V0OjpDT1JCQV9PUkJfb3V0IChDT1JCQV9PUkJf
dmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBDT1JCQTo6cmVsZWFzZSAodGhpcy0+cHRy
Xyk7CiAgdGhpcy0+cHRyXyA9IENPUkJBX09SQjo6X25pbCAoKTsKfQoKaW5saW5lCkNPUkJBX09S
Ql9vdXQ6OkNPUkJBX09SQl9vdXQgKGNvbnN0IENPUkJBX09SQl9vdXQgJnApCiAgOiBwdHJfIChw
LnB0cl8pCnt9CgppbmxpbmUgQ09SQkFfT1JCX291dCAmCkNPUkJBX09SQl9vdXQ6Om9wZXJhdG9y
PSAoQ09SQkFfT1JCX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBwLnB0cl87CiAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgQ09SQkFfT1JCX291dCAmCkNPUkJBX09SQl9vdXQ6Om9wZXJhdG9yPSAo
Y29uc3QgQ09SQkFfT1JCX3ZhciAmcCkKewogIHRoaXMtPnB0cl8gPSBDT1JCQV9PUkI6Ol9kdXBs
aWNhdGUgKHAucHRyICgpKTsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBDT1JCQV9PUkJfb3V0
ICYKQ09SQkFfT1JCX291dDo6b3BlcmF0b3I9IChDT1JCQTo6T1JCX3B0ciBwKQp7CiAgdGhpcy0+
cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT1JCX291dDo6b3BlcmF0
b3IgQ09SQkE6Ok9SQl9wdHIgJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENP
UkJBOjpPUkJfcHRyICYKQ09SQkFfT1JCX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSBDT1JCQTo6T1JCX3B0cgpDT1JCQV9PUkJfb3V0OjpvcGVyYXRvci0+
ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyA2NTggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2NjEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT1JCLmgiIDIK
IyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9j
b3JiYS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vQ3VycmVudEMuaCIgMQojIDUyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIgMQojIDEyICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEK
IyAxMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C
b3VuZHNDLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9FeGNlcHRpb24uaCIgMQojIDE2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0Mu
aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vQ0RSLmgiIDEKIyAxNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Cb3VuZHNDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIiAyCiMgNDQgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQm91bmRzQy5oIgogIGNs
YXNzIENPUkJBX0JvdW5kcyA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogIHsKICBwdWJs
aWM6CgogICAgQ09SQkFfQm91bmRzICh2b2lkKTsKICAgIENPUkJBX0JvdW5kcyAoY29uc3QgQ09S
QkFfQm91bmRzICYpOwogICAgfkNPUkJBX0JvdW5kcyAodm9pZCk7CiAgICBDT1JCQV9Cb3VuZHMg
Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQm91bmRzICYpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX3Jh
aXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIg
JmNkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYp
IGNvbnN0OwogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlIChUQU9fSW5wdXRDRFIgJmNkciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICAg
IHN0YXRpYyBDT1JCQV9Cb3VuZHMgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKICAg
IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgc3RhdGljIENP
UkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogIH07CgoKCgp2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIGNvbnN0IENPUkJBOjpCb3VuZHMgJik7CnZvaWQgb3BlcmF0b3I8PD0gKENPUkJB
OjpBbnkgJiwgQ09SQkE6OkJvdW5kcyopOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u
c3QgQ09SQkE6OkFueSAmLCBDT1JCQTo6Qm91bmRzIComKTsKIyA4NSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Cb3VuZHNDLmgiCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Cb3VuZHNDLmkiIDEK
IyAxNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C
b3VuZHNDLmkiCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RS
ICZzdHJtLCBjb25zdCBDT1JCQTo6Qm91bmRzICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3Ry
bSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1
cm4gMDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAm
LCBDT1JCQTo6Qm91bmRzICYpCnsKICByZXR1cm4gMTsKfQojIDg2ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0JvdW5kc0MuaCIgMgoKCgoKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK
IyA5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9C
b3VuZHNDLmgiIDIKIyA1MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9WYWx1ZUJhc2UuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFzZS5oIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFz
ZS5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9PUy5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vVmFsdWVCYXNlLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI1ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlQmFzZS5oIiAyCiMg
MzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFs
dWVCYXNlLmgiCmNsYXNzIENPUkJBX1ZhbHVlQmFzZQp7CgpwdWJsaWM6CgoKICB2aXJ0dWFsIHZv
aWQgX2FkZF9yZWYgKHZvaWQpID0gMDsKICB2aXJ0dWFsIHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQp
ID0gMDsKICB2aXJ0dWFsIENPUkJBOjpVTG9uZyBfcmVmY291bnRfdmFsdWUgKHZvaWQpID0gMDsK
CgogIHN0YXRpYyBDT1JCQTo6VmFsdWVCYXNlKiBfZG93bmNhc3QgKENPUkJBOjpWYWx1ZUJhc2Uq
KTsKCgogIHZpcnR1YWwgY29uc3QgY2hhciogX3Rhb19vYnZfcmVwb3NpdG9yeV9pZCAoKSBjb25z
dCA9IDA7CgoKCgoKICBzdGF0aWMgQ09SQkE6OkJvb2xlYW4gX3Rhb19tYXJzaGFsIChUQU9fT3V0
cHV0Q0RSICZzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
X1ZhbHVlQmFzZSAqX3RoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHJfYXJp
dGhfdCBmb3JtYWxfdHlwZV9pZCA9IDApOwoKCiAgc3RhdGljIENPUkJBOjpCb29sZWFuIF90YW9f
dW5tYXJzaGFsIChUQU9fSW5wdXRDRFIgJnN0cm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQV9WYWx1ZUJhc2UgKiZfdGhpcyk7CgoKCgoKCgogIHN0YXRpYyBD
T1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbF9wcmUgKFRBT19JbnB1dENEUiAmc3RybSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9WYWx1ZUZhY3Rv
cnlfcHRyICYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09S
QkFfVmFsdWVCYXNlIComLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIgKiBjb25zdCByZXBvX2lkKTsKICBDT1JCQTo6Qm9vbGVhbiBfdGFvX3Vu
bWFyc2hhbF9wb3N0IChUQU9fSW5wdXRDRFIgJnN0cm0pOwoKCnB1YmxpYzoKICB2aXJ0dWFsIHZv
aWQgKl90YW9fb2J2X25hcnJvdyAocHRyX2FyaXRoX3QpID0gMDsKCgogIHZpcnR1YWwgQ09SQkE6
OkJvb2xlYW4gX3Rhb19tYXJzaGFsX3YgKFRBT19PdXRwdXRDRFIgJikgPSAwOwoKCiAgdmlydHVh
bCBDT1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbF92IChUQU9fSW5wdXRDRFIgJikgPSAwOwoK
cHJvdGVjdGVkOgogIENPUkJBX1ZhbHVlQmFzZSAodm9pZCk7CiAgQ09SQkFfVmFsdWVCYXNlIChj
b25zdCBDT1JCQV9WYWx1ZUJhc2UmKTsKICB2aXJ0dWFsIH5DT1JCQV9WYWx1ZUJhc2UgKCk7Cgpw
cml2YXRlOgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9WYWx1ZUJhc2UgJik7Cn07CiMg
MTAyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Zh
bHVlQmFzZS5oIgpjbGFzcyBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgOiBwdWJsaWMg
dmlydHVhbCBDT1JCQV9WYWx1ZUJhc2UKewoKcHVibGljOgogIHZpcnR1YWwgdm9pZCBfYWRkX3Jl
ZiAodm9pZCk7CiAgdmlydHVhbCB2b2lkIF9yZW1vdmVfcmVmICh2b2lkKTsKICB2aXJ0dWFsIENP
UkJBOjpVTG9uZyBfcmVmY291bnRfdmFsdWUgKHZvaWQpOwoKCgogIHZvaWQgX3Rhb19hZGRfcmVm
ICh2b2lkKTsKICB2b2lkIF90YW9fcmVtb3ZlX3JlZiAodm9pZCk7CiAgQ09SQkE6OlVMb25nIF90
YW9fcmVmY291bnRfdmFsdWUgKHZvaWQpOwoKcHJvdGVjdGVkOgogIENPUkJBX0RlZmF1bHRWYWx1
ZVJlZkNvdW50QmFzZSAodm9pZCk7CiAgQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlIChj
b25zdCBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UmKTsKICB2aXJ0dWFsIH5DT1JCQV9E
ZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgKCk7Cgpwcml2YXRlOgogIHZvaWQgb3BlcmF0b3I9IChj
b25zdCBDT1JCQV9EZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgJik7Cgpwcml2YXRlOgogIENPUkJB
OjpVTG9uZyBfdGFvX3JlZmVyZW5jZV9jb3VudF87CiAgQUNFX01UX1NZTkNIOjpNVVRFWCBfdGFv
X3JlZmVyZW5jZV9jb3VudF9sb2NrXzsKfTsKIyAxMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiCmNsYXNzIFRBT19PQlZfR0lP
UF9GbGFncwp7CnB1YmxpYzoKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFZhbHVlX3RhZ19i
YXNlOwogIHN0YXRpYyBjb25zdCBDT1JCQTo6VUxvbmcgVmFsdWVfdGFnX3NpZ2JpdHM7CiAgc3Rh
dGljIGNvbnN0IENPUkJBOjpVTG9uZyBDb2RlYmFzZV91cmw7CiAgc3RhdGljIGNvbnN0IENPUkJB
OjpVTG9uZyBUeXBlX2luZm9fc2lnYml0czsKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFR5
cGVfaW5mb19ub25lOwogIHN0YXRpYyBjb25zdCBDT1JCQTo6VUxvbmcgVHlwZV9pbmZvX3Npbmds
ZTsKICBzdGF0aWMgY29uc3QgQ09SQkE6OlVMb25nIFR5cGVfaW5mb19saXN0OwoKICBzdGF0aWMg
Q09SQkE6OkJvb2xlYW4gaXNfbnVsbF9yZWYgKENPUkJBOjpVTG9uZyk7CiAgc3RhdGljIENPUkJB
OjpCb29sZWFuIGlzX3ZhbHVlX3RhZyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gaGFzX2NvZGViYXNlX3VybCAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gaGFzX25vX3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gaGFzX3NpbmdsZV90eXBlX2luZm8gKENPUkJBOjpVTG9uZyk7CiAgc3RhdGljIENPUkJB
OjpCb29sZWFuIGhhc19saXN0X3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09S
QkE6OkJvb2xlYW4gaXNfY2h1bmtlZCAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gaXNfaW5kaXJlY3Rpb25fdGFnIChDT1JCQTo6VUxvbmcpOwogIHN0YXRpYyBDT1JCQTo6
Qm9vbGVhbiBpc19pbmRpcmVjdGlvbiAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJv
b2xlYW4gaXNfYmxvY2tfc2l6ZSAoQ09SQkE6OlVMb25nKTsKICBzdGF0aWMgQ09SQkE6OkJvb2xl
YW4gaXNfZW5kX3RhZyAoQ09SQkE6OlVMb25nKTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmkiIDEKCgoKCgppbmxp
bmUgdm9pZApDT1JCQTo6YWRkX3JlZiAoQ09SQkE6OlZhbHVlQmFzZSAqdmFsKQp7CiAgaWYgKHZh
bCkKICAgIHZhbC0+X2FkZF9yZWYgKCk7Cn0KCmlubGluZSB2b2lkCkNPUkJBOjpyZW1vdmVfcmVm
IChDT1JCQTo6VmFsdWVCYXNlICp2YWwpCnsKICBpZiAodmFsKQogICAgdmFsLT5fcmVtb3ZlX3Jl
ZiAoKTsKfQoKCgoKaW5saW5lCkNPUkJBX1ZhbHVlQmFzZTo6Q09SQkFfVmFsdWVCYXNlICh2b2lk
KQp7Cn0KCgoKCgppbmxpbmUKQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlOjpDT1JCQV9E
ZWZhdWx0VmFsdWVSZWZDb3VudEJhc2UgKHZvaWQpCiAgICA6IF90YW9fcmVmZXJlbmNlX2NvdW50
XyAoMSkKewp9CgoKaW5saW5lIHZvaWQKQ09SQkFfRGVmYXVsdFZhbHVlUmVmQ291bnRCYXNlOjpf
dGFvX2FkZF9yZWYgKHZvaWQpCnsKICBBQ0VfR3VhcmQ8IEFDRV9NVF9TWU5DSDo6TVVURVggPiBn
dWFyZCAodGhpcy0+X3Rhb19yZWZlcmVuY2VfY291bnRfbG9ja18pOyBpZiAoZ3VhcmQubG9ja2Vk
ICgpID09IDApIHJldHVybjs7CiAgKytfdGFvX3JlZmVyZW5jZV9jb3VudF87Cn0KCmlubGluZSB2
b2lkCkNPUkJBX0RlZmF1bHRWYWx1ZVJlZkNvdW50QmFzZTo6X3Rhb19yZW1vdmVfcmVmICh2b2lk
KQp7CiAgewogICAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1VVEVYID4gZ3VhcmQgKHRoaXMt
Pl90YW9fcmVmZXJlbmNlX2NvdW50X2xvY2tfKTsgaWYgKGd1YXJkLmxvY2tlZCAoKSA9PSAwKSBy
ZXR1cm47OwogICAgLS0gdGhpcy0+X3Rhb19yZWZlcmVuY2VfY291bnRfOwogICAgaWYgKHRoaXMt
Pl90YW9fcmVmZXJlbmNlX2NvdW50XyAhPSAwKQogICAgICByZXR1cm47CiAgfQoKCgogIGRlbGV0
ZSB0aGlzOwp9CgppbmxpbmUgQ09SQkE6OlVMb25nCkNPUkJBX0RlZmF1bHRWYWx1ZVJlZkNvdW50
QmFzZTo6X3Rhb19yZWZjb3VudF92YWx1ZSAodm9pZCkKewogIEFDRV9HdWFyZDwgQUNFX01UX1NZ
TkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5fdGFvX3JlZmVyZW5jZV9jb3VudF9sb2NrXyk7IGlm
IChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJuIDA7OwogIHJldHVybiBfdGFvX3JlZmVyZW5j
ZV9jb3VudF87Cn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdz
Ojppc19udWxsX3JlZiAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAodGFnID09IDApOwp9
CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdzOjppc192YWx1ZV90YWcg
KENPUkJBOjpVTG9uZyB0YWcpCnsKICByZXR1cm4gKCh0YWcgJiBWYWx1ZV90YWdfc2lnYml0cykg
PT0gMHg3RkZGRkYwMEwpOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0Zs
YWdzOjogaGFzX2NvZGViYXNlX3VybChDT1JCQTo6VUxvbmcgdGFnKQp7CiAgcmV0dXJuIChDT1JC
QTo6Qm9vbGVhbikgKHRhZyAmIENvZGViYXNlX3VybCk7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVh
bgpUQU9fT0JWX0dJT1BfRmxhZ3M6Omhhc19ub190eXBlX2luZm8gKENPUkJBOjpVTG9uZyB0YWcp
CnsKICByZXR1cm4gKCh0YWcgJiBUeXBlX2luZm9fc2lnYml0cykgPT0gVHlwZV9pbmZvX25vbmUp
Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KVEFPX09CVl9HSU9QX0ZsYWdzOjpoYXNfc2luZ2xl
X3R5cGVfaW5mbyAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAoKHRhZyAmIFR5cGVfaW5m
b19zaWdiaXRzKSA9PSBUeXBlX2luZm9fc2luZ2xlKTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
ClRBT19PQlZfR0lPUF9GbGFnczo6aGFzX2xpc3RfdHlwZV9pbmZvIChDT1JCQTo6VUxvbmcgdGFn
KQp7CiAgcmV0dXJuICgodGFnICYgVHlwZV9pbmZvX3NpZ2JpdHMpID09IFR5cGVfaW5mb19saXN0
KTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6IGlzX2NodW5r
ZWQgKENPUkJBOjpVTG9uZyB0YWcpCnsKICByZXR1cm4gKENPUkJBOjpCb29sZWFuKSAodGFnICYg
OCk7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbgpUQU9fT0JWX0dJT1BfRmxhZ3M6OmlzX2luZGly
ZWN0aW9uX3RhZyAoQ09SQkE6OlVMb25nIHRhZykKewogIHJldHVybiAodGFnID09IDB4RkZGRkZG
RkZMKTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6aXNfaW5k
aXJlY3Rpb24gKENPUkJBOjpVTG9uZyB2YWx1ZSkKewogIHJldHVybiAoMHg4MDAwMDAwMEwgPCB2
YWx1ZSAmJiB2YWx1ZSA8PSAoMHhGRkZGRkZGRkwgLSA0KSk7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbgpUQU9fT0JWX0dJT1BfRmxhZ3M6OmlzX2Jsb2NrX3NpemUgKENPUkJBOjpVTG9uZyB2YWx1
ZSkKewogIHJldHVybiAoIDAgPCB2YWx1ZSAmJiB2YWx1ZSA8IDB4N2ZmZmZmMDBMKTsKfQoKaW5s
aW5lIENPUkJBOjpCb29sZWFuClRBT19PQlZfR0lPUF9GbGFnczo6aXNfZW5kX3RhZyAoQ09SQkE6
OlVMb25nIHRhZykKewogIHJldHVybiAoMHg4MDAwMDAwMEwgPCB0YWcgJiYgdGFnIDw9IDB4RkZG
RkZGRkZMKTsKfQojIDE2NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9WYWx1ZUJhc2UuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxNjggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiIDIKIyA1NCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAy
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9W
YWx1ZUZhY3RvcnkuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFm
d2QuaCIgMQojIDE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVGYWN0b3J5LmgiCmNsYXNzIENPUkJBX1ZhbHVl
RmFjdG9yeUJhc2UKewoKCgoKCnB1YmxpYzoKICBDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlICgpOwog
IHZpcnR1YWwgfkNPUkJBX1ZhbHVlRmFjdG9yeUJhc2UgKCk7CgoKICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHRhb19yZXBvc2l0b3J5X2lkICgpID0gMDsKCgogIHZvaWQgX2FkZF9yZWYgKHZvaWQpOwog
IHZvaWQgX3JlbW92ZV9yZWYgKHZvaWQpOwoKCgoKICB2aXJ0dWFsIENPUkJBX1ZhbHVlQmFzZSog
Y3JlYXRlX2Zvcl91bm1hcnNoYWwgKHZvaWQpID0gMDsKCnByaXZhdGU6CiAgQ09SQkE6OlVMb25n
IF90YW9fcmVmZXJlbmNlX2NvdW50XzsKICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIF90YW9fcmVmZXJl
bmNlX2NvdW50X2xvY2tfOwp9OwojIDkyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVGYWN0b3J5LmkiIDEKCgppbmxp
bmUKQ09SQkFfVmFsdWVGYWN0b3J5QmFzZTo6Q09SQkFfVmFsdWVGYWN0b3J5QmFzZSAoKQogIDog
X3Rhb19yZWZlcmVuY2VfY291bnRfICgxKQp7Cn0KCmlubGluZSB2b2lkCkNPUkJBX1ZhbHVlRmFj
dG9yeUJhc2U6Ol9hZGRfcmVmICh2b2lkKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTVRfU1lOQ0g6Ok1V
VEVYID4gZ3VhcmQgKHRoaXMtPl90YW9fcmVmZXJlbmNlX2NvdW50X2xvY2tfKTsgaWYgKGd1YXJk
LmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwogICsrX3Rhb19yZWZlcmVuY2VfY291bnRfOwp9Cgpp
bmxpbmUgdm9pZApDT1JCQV9WYWx1ZUZhY3RvcnlCYXNlOjpfcmVtb3ZlX3JlZiAodm9pZCkKewog
IHsKICAgIEFDRV9HdWFyZDwgQUNFX01UX1NZTkNIOjpNVVRFWCA+IGd1YXJkICh0aGlzLT5fdGFv
X3JlZmVyZW5jZV9jb3VudF9sb2NrXyk7IGlmIChndWFyZC5sb2NrZWQgKCkgPT0gMCkgcmV0dXJu
OzsKICAgIC0tIHRoaXMtPl90YW9fcmVmZXJlbmNlX2NvdW50XzsKICAgIGlmICh0aGlzLT5fdGFv
X3JlZmVyZW5jZV9jb3VudF8gIT0gMCkKICAgICAgcmV0dXJuOwogIH0KICBkZWxldGUgdGhpczsK
fQojIDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L1ZhbHVlRmFjdG9yeS5oIiAyCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAyCiMgNTUgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9saWN5
Qy5oIiAxCiMgNTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vY29yYmEuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vU2VydmljZXMuaCIgMQojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIgMQojIDI1ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMu
aCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJl
LmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Eb21haW5DLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIiAyCgoKCgoKCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgi
IDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Eb21haW5DLmgiIDIKIyA2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcjsKICB0
eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXIgKkNPUkJBX0RvbWFpbk1hbmFnZXJfcHRyOwoKCgoK
CgoKICBjbGFzcyBDT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIK
ICB7CiAgcHVibGljOgogICAgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgKHZvaWQpOwogICAgQ09S
QkFfRG9tYWluTWFuYWdlcl92YXIgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIHApIDogcHRyXyAo
cCkge30KICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfdmFyIChjb25zdCBDT1JCQV9Eb21haW5NYW5h
Z2VyX3ZhciAmKTsKICAgIH5DT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciAodm9pZCk7CgogICAgQ09S
QkFfRG9tYWluTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIp
OwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRG9t
YWluTWFuYWdlcl92YXIgJik7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBvcGVyYXRvci0+
ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0
ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciAmKCk7Cgog
ICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgQ09SQkFfRG9t
YWluTWFuYWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy
ICZvdXQgKHZvaWQpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX3JldG4gKHZvaWQpOwog
ICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRp
YyBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKENPUkJBX0RvbWFpbk1hbmFnZXJf
cHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyKTsK
ICAgIHN0YXRpYyBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGlj
IENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6
RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAq
KTsKCiAgcHJpdmF0ZToKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIHB0cl87CgogICAgQ09S
QkFfRG9tYWluTWFuYWdlcl92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIENPUkJB
X0RvbWFpbk1hbmFnZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK
ICB9OwojIDExNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQKICB7CiAgcHVi
bGljOgogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy
ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKENPUkJBX0RvbWFpbk1hbmFnZXJfdmFy
ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFn
ZXJfb3V0ICYpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
Q09SQkFfRG9tYWluTWFuYWdlcl9vdXQgJik7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX291dCAm
b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyX3ZhciAmKTsKICAgIENPUkJBX0Rv
bWFpbk1hbmFnZXJfb3V0ICZvcGVyYXRvcj0gKENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyKTsKICAg
IG9wZXJhdG9yIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICYoKTsKICAgIENPUkJBX0RvbWFpbk1h
bmFnZXJfcHRyICZwdHIgKHZvaWQpOwogICAgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgb3BlcmF0
b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyX3B0ciAmcHRy
XzsKICB9OwojIDE0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9Eb21haW5DLmgiCiAgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1Byb3h5
X0ltcGw7CiAgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9JbXBs
OwogIGNsYXNzIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3Mg
X1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9Ccm9rZXI7CgogIGNsYXNzIENP
UkJBX0RvbWFpbk1hbmFnZXIgOiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6T2JqZWN0CiAgewogIHB1
YmxpYzoKCiAgICB0eXBlZGVmIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIF9wdHJfdHlwZTsKICAg
IHR5cGVkZWYgQ09SQkFfRG9tYWluTWFuYWdlcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGlj
IENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyIF9kdXBsaWNhdGUgKENPUkJBX0RvbWFpbk1hbmFnZXJf
cHRyIG9iaik7CiAgICBzdGF0aWMgQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX25hcnJvdyAoCiAg
ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRy
IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMg
Q09SQkFfRG9tYWluTWFuYWdlcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVy
biAoQ09SQkFfRG9tYWluTWFuYWdlcl9wdHIpMDsKICAgICAgfQoKICAgIHN0YXRpYyB2b2lkIF90
YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRy
IGdldF9kb21haW5fcG9saWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSBwb2xpY3lfdHlw
ZSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgQ09SQkE6
OkJvb2xlYW4gX2lzX2EgKAogICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICp0eXBlX2lkLAogICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgdmlydHVh
bCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0
dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgog
IHByaXZhdGU6CiAgICBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2VyICp0aGVf
VEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2VyXzsKCiAgcHJvdGVjdGVkOgogICAg
Q09SQkFfRG9tYWluTWFuYWdlciAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6
CgoKICAgICAgdmlydHVhbCB2b2lkIENPUkJBX0RvbWFpbk1hbmFnZXJfc2V0dXBfY29sbG9jYXRp
b24gKGludCBjb2xsb2NhdGVkKTsKCiAgICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKAogICAgICAg
IFRBT19TdHViICpvYmpyZWYsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gX3Rhb19jb2xsb2NhdGVk
ID0gMCwKICAgICAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQgPSAwCiAgICAg
ICAgKTsKCiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3Rl
X1Byb3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJf
VGhydVBPQV9Qcm94eV9JbXBsOwogICAgICBmcmllbmQgY2xhc3MgX1RBT19DT1JCQV9Eb21haW5N
YW5hZ2VyX0RpcmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgfkNPUkJBX0RvbWFpbk1hbmFn
ZXIgKHZvaWQpOwogIHByaXZhdGU6CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyIChjb25zdCBDT1JC
QV9Eb21haW5NYW5hZ2VyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0RvbWFp
bk1hbmFnZXIgJik7CiAgfTsKIyAyMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgogIGNsYXNzIF9UQU9fQ09SQkFfRG9tYWluTWFu
YWdlcl9Qcm94eV9JbXBsIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAg
ewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9J
bXBsICh2b2lkKSB7IH0KCiAgICAgICAgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBnZXRfZG9t
YWluX3BvbGljeSAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgX2NvbGxvY2F0ZWRfdGFvX3Rh
cmdldF8sCiAgICAgICAgQ09SQkE6OlBvbGljeVR5cGUgcG9saWN5X3R5cGUsCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkK
ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgpwcm90ZWN0ZWQ6
CiAgICBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfSW1wbCAodm9pZCk7CgogIH07CiMg
MjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Rv
bWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9JbXBs
IDoKICBwdWJsaWMgdmlydHVhbCBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfSW1wbCwK
ICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsCnsKcHVibGljOgog
IF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCk7CgogIHZp
cnR1YWwgfl9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCAodm9pZCkg
eyB9CgogIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgZ2V0X2RvbWFpbl9wb2xpY3kgKAogICAg
ICBDT1JCQTo6T2JqZWN0X3B0ciBfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgQ09SQkE6
OlBvbGljeVR5cGUgcG9saWN5X3R5cGUsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKQogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uICk7CgoKCn07CiMgMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Eb21haW5NYW5h
Z2VyX1Byb3h5X0Jyb2tlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0RvbWFpbk1h
bmFnZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICB2aXJ0dWFsIF9UQU9fQ09SQkFfRG9tYWluTWFu
YWdlcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgQ09SQkFfRG9tYWluTWFuYWdlciAq
b2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkgPSAwOwoKcHJvdGVjdGVkOgog
IF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKfTsKIyAzMTMg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWlu
Qy5oIgpjbGFzcyBfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciA6
IHB1YmxpYyB2aXJ0dWFsIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9Qcm94eV9Ccm9rZXIKewpw
dWJsaWM6CiAgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZv
aWQpOwoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVtb3RlX1Byb3h5X0Jy
b2tlciAodm9pZCk7CgogIHZpcnR1YWwgX1RBT19DT1JCQV9Eb21haW5NYW5hZ2VyX1Byb3h5X0lt
cGwgJnNlbGVjdF9wcm94eSAoCiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyICpvYmplY3QsCiAgICBD
T1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cgpw
cml2YXRlOgogIF9UQU9fQ09SQkFfRG9tYWluTWFuYWdlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1v
dGVfcHJveHlfaW1wbF87CgoKCgpwdWJsaWM6CiAgc3RhdGljIF9UQU9fQ09SQkFfRG9tYWluTWFu
YWdlcl9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUmVt
b3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7Cn07CiMgMzQzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKZXh0ZXJuIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX0NPUkJBX0RvbWFpbk1hbmFnZXI7CgoKCgoKY2xhc3MgQ09SQkFfQ29uc3Ry
dWN0aW9uUG9saWN5Owp0eXBlZGVmIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeSAqQ09SQkFfQ29u
c3RydWN0aW9uUG9saWN5X3B0cjsKCgoKCgoKCmNsYXNzIENPUkJBX0NvbnN0cnVjdGlvblBvbGlj
eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX0NvbnN0cnVjdGlv
blBvbGljeV92YXIgKHZvaWQpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgKENPUkJB
X0NvbnN0cnVjdGlvblBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogIENPUkJBX0NvbnN0cnVj
dGlvblBvbGljeV92YXIgKGNvbnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgJik7CiAg
fkNPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgKHZvaWQpOwoKICBDT1JCQV9Db25zdHJ1Y3Rp
b25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIpOwog
IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29u
c3RydWN0aW9uUG9saWN5X3ZhciAmKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyIG9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVyYXRvciBjb25zdCBDT1JCQV9Db25zdHJ1Y3Rp
b25Qb2xpY3lfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xp
Y3lfcHRyICYoKTsKCiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciBpbiAodm9pZCkgY29u
c3Q7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJB
X0NvbnN0cnVjdGlvblBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgQ09SQkFfQ29uc3RydWN0aW9u
UG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0ciBw
dHIgKHZvaWQpIGNvbnN0OwoKCgogIHN0YXRpYyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRy
IGR1cGxpY2F0ZSAoQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0cik7CiAgc3RhdGljIHZvaWQg
cmVsZWFzZSAoQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3B0cik7CiAgc3RhdGljIENPUkJBX0Nv
bnN0cnVjdGlvblBvbGljeV9wdHIgbmlsICh2b2lkKTsKICBzdGF0aWMgQ09SQkFfQ29uc3RydWN0
aW9uUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50
ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKcHJpdmF0ZToK
ICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyIHB0cl87CgogIENPUkJBX0NvbnN0cnVjdGlv
blBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICBDT1JCQV9Db25zdHJ1Y3Rp
b25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyA0
MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9t
YWluQy5oIgpjbGFzcyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0CnsKcHVibGljOgogIENP
UkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQgKENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIg
Jik7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAoQ09SQkFfQ29uc3RydWN0aW9uUG9s
aWN5X3ZhciAmKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0IChjb25zdCBDT1JCQV9D
b25zdHJ1Y3Rpb25Qb2xpY3lfb3V0ICYpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAmKTsKICBDT1JC
QV9Db25zdHJ1Y3Rpb25Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0NvbnN0cnVj
dGlvblBvbGljeV92YXIgJik7CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X291dCAmb3BlcmF0
b3I9IChDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTsKICBvcGVyYXRvciBDT1JCQV9Db25z
dHJ1Y3Rpb25Qb2xpY3lfcHRyICYoKTsKICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyICZw
dHIgKHZvaWQpOwogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9p
ZCk7Cgpwcml2YXRlOgogIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgJnB0cl87Cn07CiMg
NDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0Rv
bWFpbkMuaCIKY2xhc3MgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUHJveHlfSW1wbDsK
Y2xhc3MgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGw7CmNs
YXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcjsKY2xhc3MgX1RB
T19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCmNsYXNzIENP
UkJBX0NvbnN0cnVjdGlvblBvbGljeTogcHVibGljIHZpcnR1YWwgQ09SQkFfUG9saWN5CnsKcHVi
bGljOgoKICB0eXBlZGVmIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX3B0cl90eXBlOwog
IHR5cGVkZWYgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgc3Rh
dGljIENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfQ29uc3Ry
dWN0aW9uUG9saWN5X3B0ciBvYmopOwogIHN0YXRpYyBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lf
cHRyIF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJBX0NvbnN0cnVjdGlv
blBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv
YmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGlj
IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0
dXJuIChDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTA7CiAgICB9CgogIHN0YXRpYyB2b2lk
IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgdmlydHVhbCB2b2lkIG1ha2VfZG9tYWlu
X21hbmFnZXIgKAogICAgICBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIG9iamVjdF90eXBlLAogICAg
ICBDT1JCQTo6Qm9vbGVhbiBjb25zdHJfcG9saWN5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsK
CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgY29uc3QgQ09SQkE6OkNo
YXIgKnR5cGVfaWQsCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7
CiAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsK
CiAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNv
bnN0OwoKcHJpdmF0ZToKICBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9Ccm9r
ZXIgKnRoZV9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcl87Cgpwcm90
ZWN0ZWQ6CiAgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5IChpbnQgY29sbG9jYXRlZCA9IDApOwoK
ICBwcm90ZWN0ZWQ6CgoKICAgIHZpcnR1YWwgdm9pZCBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lf
c2V0dXBfY29sbG9jYXRpb24gKGludCBjb2xsb2NhdGVkKTsKCiAgICBDT1JCQV9Db25zdHJ1Y3Rp
b25Qb2xpY3kgKAogICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICBDT1JCQTo6Qm9vbGVhbiBf
dGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZh
bnQgPSAwCiAgICAgICk7CgogICAgZnJpZW5kIGNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9u
UG9saWN5X1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fQ09SQkFfQ29u
c3RydWN0aW9uUG9saWN5X1RocnVQT0FfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBfVEFP
X0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9EaXJlY3RfUHJveHlfSW1wbDsKCiAgdmlydHVhbCB+
Q09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICh2b2lkKTsKcHJpdmF0ZToKICBDT1JCQV9Db25zdHJ1
Y3Rpb25Qb2xpY3kgKGNvbnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeSAmKTsKICB2b2lkIG9w
ZXJhdG9yPSAoY29uc3QgQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5ICYpOwp9OwojIDUxNCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmgi
CmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgOgogIHB1Ymxp
YyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUHJveHlfSW1wbAp7CnB1YmxpYzoKICB2aXJ0dWFs
IH5fVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KCiAg
ICB2aXJ0dWFsIHZvaWQgbWFrZV9kb21haW5fbWFuYWdlciAoCiAgICAgIENPUkJBOjpPYmplY3Rf
cHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBDT1JCQV9JbnRlcmZhY2VEZWZfcHRy
IG9iamVjdF90eXBlLAogICAgICBDT1JCQTo6Qm9vbGVhbiBjb25zdHJfcG9saWN5LAogICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICkK
ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKcHJvdGVjdGVkOgog
IF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgKHZvaWQpOwoKfTsKIyA1
NDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9t
YWluQy5oIgpjbGFzcyBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9SZW1vdGVfUHJveHlf
SW1wbCA6CiAgcHVibGljIHZpcnR1YWwgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUHJv
eHlfSW1wbCwKICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLAog
IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1RBT19Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwKCnsKcHVi
bGljOgogIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1JlbW90ZV9Qcm94eV9JbXBsICh2
b2lkKTsKCiAgdmlydHVhbCB+X1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1By
b3h5X0ltcGwgKHZvaWQpIHsgfQoKICB2aXJ0dWFsIHZvaWQgbWFrZV9kb21haW5fbWFuYWdlciAo
CiAgICAgIENPUkJBOjpPYmplY3RfcHRyIF9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICBD
T1JCQV9JbnRlcmZhY2VEZWZfcHRyIG9iamVjdF90eXBlLAogICAgICBDT1JCQTo6Qm9vbGVhbiBj
b25zdHJfcG9saWN5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUKICAgICkKICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiAp
OwoKCgp9OwojIDU4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9Eb21haW5DLmgiCmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1By
b3h5X0Jyb2tlcgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5fVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBv
bGljeV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIHZpcnR1YWwgX1RBT19DT1JCQV9Db25zdHJ1Y3Rp
b25Qb2xpY3lfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgIENPUkJBX0NvbnN0cnVjdGlv
blBvbGljeSAqb2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkgPSAwOwoKcHJv
dGVjdGVkOgogIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlciAodm9p
ZCk7Cgp9OwojIDYwNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9Eb21haW5DLmgiCmNsYXNzIF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Jl
bW90ZV9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0NPUkJBX0NvbnN0cnVjdGlv
blBvbGljeV9Qcm94eV9Ccm9rZXIKewpwdWJsaWM6CiAgX1RBT19DT1JCQV9Db25zdHJ1Y3Rpb25Q
b2xpY3lfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIHZpcnR1YWwgfl9UQU9fQ09SQkFf
Q29uc3RydWN0aW9uUG9saWN5X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB2aXJ0dWFs
IF9UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAo
CiAgICBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKm9iamVjdCwKICAgIENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKCnByaXZhdGU6CiAgX1RB
T19DT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfUmVtb3RlX1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5
X2ltcGxfOwoKCgoKcHVibGljOgogIHN0YXRpYyBfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGlj
eV9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9S
ZW1vdGVfUHJveHlfQnJva2VyICh2b2lkKTsKfTsKIyA2MzUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgpleHRlcm4gQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5OwoKCgoKCgoKICBjbGFzcyBf
VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgOiBw
dWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCgogICAgX1RB
T19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICh2b2lk
KTsKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2Vy
TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pOwogICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl
cXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAg
ICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgQ09SQkFfRG9tYWluTWFuYWdlciogKnZhbHVl
LAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICBfVEFPX1VuYm91bmRlZF9P
YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QoY29uc3QgX1RBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZyaHMpOwogICAgdmly
dHVhbCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJM
aXN0ICh2b2lkKTsKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21h
aW5NYW5hZ2VyTGlzdCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx
dWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJnJocyk7CiAgICBUQU9fT2JqZWN0X01hbmFn
ZXI8Q09SQkFfRG9tYWluTWFuYWdlcixDT1JCQV9Eb21haW5NYW5hZ2VyX3Zhcj4gb3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgIHN0YXRpYyBDT1JCQV9Eb21haW5NYW5h
Z2VyICoqYWxsb2NidWYgKENPUkJBOjpVTG9uZyBuZWxlbXMpOwogICAgc3RhdGljIHZvaWQgZnJl
ZWJ1ZiAoQ09SQkFfRG9tYWluTWFuYWdlciAqKmJ1ZmZlcik7CgogICAgdmlydHVhbCB2b2lkIF9h
bGxvY2F0ZV9idWZmZXIgKENPUkJBOjpVTG9uZyBsZW5ndGgpOwogICAgdmlydHVhbCB2b2lkIF9k
ZWFsbG9jYXRlX2J1ZmZlciAodm9pZCk7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyKiAqZ2V0X2J1
ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICBjb25zdCBDT1JCQV9Eb21haW5N
YW5hZ2VyKiAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CiAgICB2aXJ0dWFsIHZvaWQgX3Nocmlu
a19idWZmZXIgKENPUkJBOjpVTG9uZyBubCwgQ09SQkE6OlVMb25nIG9sKTsKICAgIHZpcnR1YWwg
dm9pZCBfZG93bmNhc3QgKAogICAgICAgIHZvaWQqIHRhcmdldCwKICAgICAgICBDT1JCQV9PYmpl
Y3QgKnNyYywKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp
OwogICAgdmlydHVhbCBDT1JCQV9PYmplY3QqIF91cGNhc3QgKHZvaWQgKnNyYykgY29uc3Q7Cgog
IH07CiMgNjg0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL0RvbWFpbkMuaCIKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q7CmNsYXNzIENPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0X3ZhcjsKCgoKCgpjbGFzcyBDT1JCQV9Eb21haW5NYW5hZ2VyTGlz
dCA6IHB1YmxpYwoKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWlu
TWFuYWdlckxpc3QKCgoKewpwdWJsaWM6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKHZvaWQp
OwogIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsKICBDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdCAoCiAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgQ09SQkE6OlVMb25n
IGxlbmd0aCwKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICpidWZmZXIsCiAgICBDT1JCQTo6
Qm9vbGVhbiByZWxlYXNlID0gMAogICk7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKGNvbnN0
IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYpOwogIH5DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAo
dm9pZCk7CiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlw
ZWRlZiBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgX3Zhcl90eXBlOwoKCn07CiMgNzI3ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMu
aCIKY2xhc3MgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyCnsKcHVibGljOgogIENPUkJBX0Rv
bWFpbk1hbmFnZXJMaXN0X3ZhciAodm9pZCk7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFy
IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92
YXIgKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmKTsKICB+Q09SQkFfRG9tYWlu
TWFuYWdlckxpc3RfdmFyICh2b2lkKTsKCiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICZv
cGVyYXRvcj0gKENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICopOwogIENPUkJBX0RvbWFpbk1hbmFn
ZXJMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIg
Jik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0
IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3Bl
cmF0b3IgY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJigpIGNvbnN0OwogIG9wZXJhdG9y
IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYoKTsKICBvcGVyYXRvciBDT1JCQV9Eb21haW5NYW5h
Z2VyTGlzdCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKiYo
KTsKCiAgVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX0RvbWFpbk1hbmFnZXIsIENPUkJBX0RvbWFp
bk1hbmFnZXJfdmFyPiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKCiAgY29uc3Qg
Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgJmluICh2b2lkKSBjb25zdDsKICBDT1JCQV9Eb21haW5N
YW5hZ2VyTGlzdCAmaW5vdXQgKHZvaWQpOwogIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IComb3V0
ICh2b2lkKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqX3JldG4gKHZvaWQpOwogIENPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdCAqcHRyXzsKfTsKIyA3NjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5oIgpjbGFzcyBDT1JCQV9Eb21haW5N
YW5hZ2VyTGlzdF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0IChD
T1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0
IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgJik7CiAgQ09SQkFfRG9tYWluTWFuYWdlckxp
c3Rfb3V0IChjb25zdCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJik7CiAgQ09SQkFfRG9t
YWluTWFuYWdlckxpc3Rfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJM
aXN0X291dCAmKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJm9wZXJhdG9yPSAoQ09S
QkFfRG9tYWluTWFuYWdlckxpc3QgKik7CiAgb3BlcmF0b3IgQ09SQkFfRG9tYWluTWFuYWdlckxp
c3QgKiYoKTsKICBDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJnB0ciAodm9pZCk7CiAgQ09SQkFf
RG9tYWluTWFuYWdlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogIFRBT19PYmplY3RfTWFuYWdl
cjxDT1JCQV9Eb21haW5NYW5hZ2VyLCBDT1JCQV9Eb21haW5NYW5hZ2VyX3Zhcj4gb3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAgQ09SQkFfRG9tYWluTWFuYWdlckxp
c3QgKiZwdHJfOwoKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxp
c3RfdmFyICYpOwp9OwoKCgoKZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NPUkJBX0Rv
bWFpbk1hbmFnZXJMaXN0OwoKCgoKCmV4dGVybgpfVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJv
eHlfQnJva2VyICoKKCpDT1JCQV9fVEFPX0NPUkJBX0RvbWFpbk1hbmFnZXJfUHJveHlfQnJva2Vy
X0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAg
KTsKCmV4dGVybgpfVEFPX0NPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9Qcm94eV9Ccm9rZXIgKgoo
KkNPUkJBX19UQU9fQ09SQkFfQ29uc3RydWN0aW9uUG9saWN5X1Byb3h5X0Jyb2tlcl9GYWN0b3J5
X2Z1bmN0aW9uX3BvaW50ZXIpICgKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iagogICk7CgoKICAg
ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX0RvbWFpbk1hbmFn
ZXJfcHRyKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBDT1JCQV9Eb21haW5NYW5hZ2VyIComKTsKCiAgICAgICAgICAgdm9pZCBvcGVy
YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3lfcHRyKTsKICAg
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBD
T1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g
KENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgJik7CiAgICAgICAg
ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9Eb21haW5NYW5hZ2VyTGlz
dCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0IComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBDT1JCQV9Eb21haW5N
YW5hZ2VyTGlzdCAqJik7CiMgODQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIKaW5saW5lCkNP
UkJBX0RvbWFpbk1hbmFnZXI6OkNPUkJBX0RvbWFpbk1hbmFnZXIgKAogICAgVEFPX1N0dWIgKm9i
anJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFj
dF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFv
X2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlzLT5DT1JCQV9Eb21haW5NYW5hZ2VyX3NldHVw
X2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgNDQgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5pIgppbmxpbmUKQ09SQkFf
Q29uc3RydWN0aW9uUG9saWN5OjpDT1JCQV9Db25zdHJ1Y3Rpb25Qb2xpY3kgKAogICAgVEFPX1N0
dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19B
YnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVm
LCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlzLT5DT1JCQV9Db25zdHJ1Y3Rpb25Q
b2xpY3lfc2V0dXBfY29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyA2NCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmkiCiAg
aW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXIgKioKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2Vx
dWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgbmVs
ZW1zKQogIHsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKipidWYgPSAwOwoKICAgIGRvIHsgdHJ5
IHsgYnVmID0gbmV3IENPUkJBX0RvbWFpbk1hbmFnZXIqW25lbGVtc107IH0gY2F0Y2ggKHN0ZDo6
YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3
aGlsZSAoMCk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCBuZWxlbXM7IGkrKykK
ICAgICAgewogICAgICAgIGJ1ZltpXSA9IENPUkJBX0RvbWFpbk1hbmFnZXI6Ol9uaWwgKCk7CiAg
ICAgIH0KCiAgICByZXR1cm4gYnVmOwogIH0KCiAgaW5saW5lIHZvaWQKICBfVEFPX1VuYm91bmRl
ZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmZyZWVidWYgKENPUkJB
X0RvbWFpbk1hbmFnZXIgKipidWZmZXIpCiAgewogICAgaWYgKGJ1ZmZlciA9PSAwKQogICAgICBy
ZXR1cm47CiAgICBkZWxldGVbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBfVEFPX1VuYm91bmRl
ZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6Ol9UQU9fVW5ib3VuZGVk
X09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAodm9pZCkKICB7CiAgfQoK
ICBpbmxpbmUKICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFu
YWdlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5h
Z2VyTGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9T
ZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0Rv
bWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAg
X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0Ojpf
VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3QgKENP
UkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIENPUkJBX0Rv
bWFpbk1hbmFnZXIqICp2YWx1ZSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2Up
CiAgewogIH0KCiAgaW5saW5lCiAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFf
RG9tYWluTWFuYWdlckxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NP
UkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZyaHMpCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1
ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAgewogICAgICBDT1JC
QV9Eb21haW5NYW5hZ2VyICoqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9D
T1JCQV9Eb21haW5NYW5hZ2VyTGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAg
Q09SQkFfRG9tYWluTWFuYWdlciAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JC
QV9Eb21haW5NYW5hZ2VyICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxv
bmcgaSA9IDA7IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIHRtcDFb
aV0gPSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICAgICAgICB9
CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg
dGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgX1RBT19VbmJvdW5kZWRfT2Jq
ZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYKICBfVEFPX1VuYm91bmRlZF9P
YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6Om9wZXJhdG9yPSAoY29uc3Qg
X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICZy
aHMpCiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0aGlzOwoKICAgIGlm
ICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgQ09SQkFfRG9tYWluTWFuYWdlciAqKnRtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfRG9tYWluTWFuYWdlciAqKj4gKHRoaXMtPmJ1ZmZlcl8p
OwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kp
CiAgICAgIHsKICAgICAgICBDT1JCQTo6cmVsZWFzZSAodG1wW2ldKTsKICAgICAgICB0bXBbaV0g
PSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfbmlsICgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLT5t
YXhpbXVtXyA8IHJocy5tYXhpbXVtXykKICAgICAgewogICAgICAgIF9UQU9fVW5ib3VuZGVkX09i
amVjdF9TZXF1ZW5jZV9DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAg
ICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0NPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgfQogICAg
fQogICAgZWxzZQogICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl
cXVlbmNlX0NPUkJBX0RvbWFpbk1hbmFnZXJMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsK
CiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBD
T1JCQV9Eb21haW5NYW5hZ2VyICoqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkFfRG9tYWlu
TWFuYWdlciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgQ09SQkFfRG9tYWluTWFuYWdlciAqKiBj
b25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyICoqPiAocmhz
LmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgcmhzLmxlbmd0aF87
ICsraSkKICAgICAgewogICAgICAgIHRtcDFbaV0gPSBDT1JCQV9Eb21haW5NYW5hZ2VyOjpfZHVw
bGljYXRlICh0bXAyW2ldKTsKICAgICAgfQoKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFuYWdlcixDT1JCQV9Eb21haW5NYW5h
Z2VyX3Zhcj4KICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFu
YWdlckxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3QKCiAgewogICAg
ZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD
RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp
bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaSIsIDE3MCwgLTEsIF9fYWNlX2Vycm9yLCBhY2Vf
X18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxi
YWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGlu
ZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaW5kZXggPCB0aGlzLT5tYXhp
bXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIENPUkJBX0RvbWFpbk1hbmFnZXIgKiogY29u
c3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyICoqPiAodGhpcy0+
YnVmZmVyXyk7CiAgICByZXR1cm4gVEFPX09iamVjdF9NYW5hZ2VyPENPUkJBX0RvbWFpbk1hbmFn
ZXIsQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+ICh0bXAgKyBpbmRleCwgdGhpcy0+cmVsZWFzZV8p
OwogIH0KCiAgaW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXIqICoKICBfVEFPX1VuYm91bmRlZF9P
YmplY3RfU2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmdldF9idWZmZXIgKENPUkJB
OjpCb29sZWFuIG9ycGhhbikKICB7CiAgICBDT1JCQV9Eb21haW5NYW5hZ2VyICoqcmVzdWx0ID0g
MDsKICAgIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09
IDApCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVu
Y2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAg
ICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7
CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAg
fQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoK
CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQV9Eb21haW5NYW5hZ2VyKio+
ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7CiAgICAgICAgdGhp
cy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICAgICAgdGhpcy0+
cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW5s
aW5lIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXIqICoKICBfVEFPX1VuYm91bmRlZF9PYmplY3Rf
U2VxdWVuY2VfQ09SQkFfRG9tYWluTWFuYWdlckxpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0
CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09SQkFfRG9tYWluTWFuYWdl
ciAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAyMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRG9tYWluQy5pIgppbmxpbmUKQ09SQkFfRG9tYWlu
TWFuYWdlckxpc3RfdmFyOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgKHZvaWQpCiAgOiBw
dHJfICgwKQp7fQoKaW5saW5lCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6Q09SQkFfRG9t
YWluTWFuYWdlckxpc3RfdmFyIChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqcCkKICA6IHB0cl8g
KHApCnt9CgppbmxpbmUKQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyOjpDT1JCQV9Eb21haW5N
YW5hZ2VyTGlzdF92YXIgKGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICZwKQp7
CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBX0Rv
bWFpbk1hbmFnZXJMaXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQog
ICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6
On5DT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy
XzsKfQoKaW5saW5lIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmCkNPUkJBX0RvbWFpbk1h
bmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3I9IChDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqcCkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyICYKQ09SQkFfRG9tYWluTWFuYWdl
ckxpc3RfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFy
ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAg
ICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8g
PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIENPUkJBX0RvbWFp
bk1hbmFnZXJMaXN0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgQ09SQkFfRG9tYWluTWFu
YWdlckxpc3QgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICp0bXAgPSBkZWVw
X2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAg
ICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0
IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6
Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5l
IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6
Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQV9Eb21haW5NYW5h
Z2VyTGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz
dCAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX0RvbWFpbk1hbmFn
ZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAmKCkgY29uc3QK
ewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz
dF92YXI6Om9wZXJhdG9yIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgKiYoKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFu
YWdlciwgQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zh
cjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t
Pm9wZXJhdG9yW10gKGluZGV4KTsKfQoKaW5saW5lIGNvbnN0IDo6Q09SQkFfRG9tYWluTWFuYWdl
ckxpc3QgJgpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAm
CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRo
aXMtPnB0cl87Cn0KCgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdCAqJgpDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwog
IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdCAqCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X3Zhcjo6X3JldG4gKHZv
aWQpCnsKICA6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRo
aXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFn
ZXJMaXN0ICoKQ09SQkFfRG9tYWluTWFuYWdlckxpc3RfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpDT1JCQV9Eb21haW5NYW5hZ2VyTGlz
dF9vdXQ6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dCAoQ09SQkFfRG9tYWluTWFuYWdlckxp
c3QgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFf
RG9tYWluTWFuYWdlckxpc3Rfb3V0OjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgKENPUkJB
X0RvbWFpbk1hbmFnZXJMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9Eb21haW5NYW5h
Z2VyTGlzdF9vdXQ6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dCAoY29uc3QgOjpDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX0RvbWFp
bk1hbmFnZXJMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfRG9tYWluTWFu
YWdlckxpc3Rfb3V0ICYKQ09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNv
bnN0IDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNv
bnN0X2Nhc3Q8Q09SQkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJu
ICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9Eb21haW5NYW5hZ2VyTGlzdF9vdXQgJgpDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdF9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfRG9tYWluTWFuYWdlckxpc3Qg
KnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9E
b21haW5NYW5hZ2VyTGlzdF9vdXQ6Om9wZXJhdG9yIDo6Q09SQkFfRG9tYWluTWFuYWdlckxpc3Qg
KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFn
ZXJMaXN0IComCkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dDo6cHRyICh2b2lkKQp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICoKQ09S
QkFfRG9tYWluTWFuYWdlckxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8Q09SQkFfRG9tYWluTWFuYWdl
ciwgQ09SQkFfRG9tYWluTWFuYWdlcl92YXI+CkNPUkJBX0RvbWFpbk1hbmFnZXJMaXN0X291dDo6
b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9w
ZXJhdG9yW10gKGluZGV4KTsKfQoKCgoKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJf
cHRyCiAgKTsKCiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9f
SW5wdXRDRFIgJiwKICAgIENPUkJBX0RvbWFpbk1hbmFnZXJfcHRyICYKICApOwoKICAgICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNv
bnN0IENPUkJBX0NvbnN0cnVjdGlvblBvbGljeV9wdHIKICApOwoKICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgQ09SQkFfQ29uc3Ry
dWN0aW9uUG9saWN5X3B0ciAmCiAgKTsKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgK
ICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENPUkJBX0RvbWFpbk1hbmFnZXJMaXN0ICYK
ICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAg
Q09SQkFfRG9tYWluTWFuYWdlckxpc3QgJgogICk7CiMgODQzICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0RvbWFpbkMuaCIgMgojIDg1MyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Eb21haW5DLmgiCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIg
MQojIDg1NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Eb21haW5DLmgiIDIKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Xcm9uZ1RyYW5zYWN0aW9uQy5oIiAxCiMgMjIgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj
dGlvbkMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcHJlLmgiIDEKIyAyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Xcm9uZ1RyYW5zYWN0aW9uQy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vb3JiY29uZi5oIiAxCiMgMjUgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj
dGlvbkMuaCIgMgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1dyb25nVHJhbnNhY3Rpb25DLmgiIDIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlvbi5o
IiAxCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vV3JvbmdUcmFuc2FjdGlvbkMuaCIgMgojIDU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1dyb25nVHJhbnNhY3Rpb25DLmgiCmNsYXNzIENPUkJB
X1dyb25nVHJhbnNhY3Rpb24gOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KewpwdWJsaWM6
CgogIENPUkJBX1dyb25nVHJhbnNhY3Rpb24gKHZvaWQpOwogIENPUkJBX1dyb25nVHJhbnNhY3Rp
b24gKGNvbnN0IENPUkJBX1dyb25nVHJhbnNhY3Rpb24gJik7CiAgfkNPUkJBX1dyb25nVHJhbnNh
Y3Rpb24gKHZvaWQpOwogIENPUkJBX1dyb25nVHJhbnNhY3Rpb24gJm9wZXJhdG9yPSAoY29uc3Qg
Q09SQkFfV3JvbmdUcmFuc2FjdGlvbiAmKTsKCgogIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQp
OwoKICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKFRBT19PdXRwdXRDRFIgJmNkciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmKSBjb25zdDsKICB2aXJ0
dWFsIHZvaWQgX3Rhb19kZWNvZGUgKFRBT19JbnB1dENEUiAmY2RyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpOwoKICBzdGF0aWMgQ09SQkFfV3JvbmdU
cmFuc2FjdGlvbiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogIHN0YXRpYyBD
T1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwoKfTsKCiAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4Kb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmLCBjb25zdCBDT1JCQV9Xcm9uZ1RyYW5z
YWN0aW9uICYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj4gKFRBT19JbnB1
dENEUiAmLCBDT1JCQV9Xcm9uZ1RyYW5zYWN0aW9uICYpOwoKCgoKCgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgOTMgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vV3JvbmdUcmFuc2Fj
dGlvbkMuaCIgMgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL2NvcmJhLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgNjMgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgoKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyA2
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3Ji
YS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9NYW5hZ2VkX1R5cGVzLmgiIDEKIyA2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5oIiAxCiMgMTUgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0X0tl
eUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cHJlLmgiIDEKIyAxNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9PYmplY3RfS2V5Qy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE4ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKCgoK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
U2VxdWVuY2UuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKCmNsYXNzIFRBT19PYmplY3RLZXkgOiBwdWJs
aWMgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+CnsKIyAzNSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5oIgpw
dWJsaWM6CgogICAgdHlwZWRlZiBUQU9fT2JqZWN0S2V5X3ZhciBfdmFyX3R5cGU7CgoKICBUQU9f
T2JqZWN0S2V5ICh2b2lkKTsKICBUQU9fT2JqZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4KTsKICBU
QU9fT2JqZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4LAogICAgICAgICAgICAgICAgICBDT1JCQTo6
VUxvbmcgbGVuZ3RoLAogICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0ZXQgKmRhdGEsCiAgICAg
ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICBUQU9fT2JqZWN0S2V5
IChjb25zdCBUQU9fT2JqZWN0S2V5ICYpOwogIFRBT19PYmplY3RLZXkmIG9wZXJhdG9yPSAoY29u
c3QgVEFPX09iamVjdEtleSAmKTsKCiAgc3RhdGljIHZvaWQgZW5jb2RlX3NlcXVlbmNlX3RvX3N0
cmluZyAoY2hhciAqICZzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+ICZzZXEpOwogIHN0
YXRpYyB2b2lkIGRlY29kZV9zdHJpbmdfdG9fc2VxdWVuY2UgKFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8Q09SQkE6Ok9jdGV0PiAmc2VxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnN0cik7Cn07CgpjbGFzcyBUQU9fT2JqZWN0S2V5X3Zhcgp7CnB1
YmxpYzoKICBUQU9fT2JqZWN0S2V5X3ZhciAodm9pZCk7CiAgVEFPX09iamVjdEtleV92YXIgKFRB
T19PYmplY3RLZXkgKik7CiAgVEFPX09iamVjdEtleV92YXIgKGNvbnN0IFRBT19PYmplY3RLZXlf
dmFyICYpOwogIH5UQU9fT2JqZWN0S2V5X3ZhciAodm9pZCk7CgogIFRBT19PYmplY3RLZXlfdmFy
ICZvcGVyYXRvcj0gKFRBT19PYmplY3RLZXkgKik7CiAgVEFPX09iamVjdEtleV92YXIgJm9wZXJh
dG9yPSAoY29uc3QgVEFPX09iamVjdEtleV92YXIgJik7CiAgVEFPX09iamVjdEtleSAqb3BlcmF0
b3ItPiAodm9pZCk7CiAgY29uc3QgVEFPX09iamVjdEtleSAqb3BlcmF0b3ItPiAodm9pZCkgY29u
c3Q7CgogIG9wZXJhdG9yIGNvbnN0IFRBT19PYmplY3RLZXkgJigpIGNvbnN0OwogIG9wZXJhdG9y
IFRBT19PYmplY3RLZXkgJigpOwogIG9wZXJhdG9yIFRBT19PYmplY3RLZXkgJigpIGNvbnN0Owog
IENPUkJBOjpPY3RldCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgY29uc3Qg
VEFPX09iamVjdEtleSAmaW4gKHZvaWQpIGNvbnN0OwogIFRBT19PYmplY3RLZXkgJmlub3V0ICh2
b2lkKTsKICBUQU9fT2JqZWN0S2V5IComb3V0ICh2b2lkKTsKICBUQU9fT2JqZWN0S2V5ICpfcmV0
biAodm9pZCk7CiAgVEFPX09iamVjdEtleSAqcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAg
VEFPX09iamVjdEtleSAqcHRyXzsKfTsKCmNsYXNzIFRBT19PYmplY3RLZXlfb3V0CnsKcHVibGlj
OgogIFRBT19PYmplY3RLZXlfb3V0IChUQU9fT2JqZWN0S2V5IComKTsKICBUQU9fT2JqZWN0S2V5
X291dCAoVEFPX09iamVjdEtleV92YXIgJik7CiAgVEFPX09iamVjdEtleV9vdXQgKFRBT19PYmpl
Y3RLZXlfb3V0ICYpOwogIFRBT19PYmplY3RLZXlfb3V0ICZvcGVyYXRvcj0gKFRBT19PYmplY3RL
ZXlfb3V0ICYpOwogIFRBT19PYmplY3RLZXlfb3V0ICZvcGVyYXRvcj0gKFRBT19PYmplY3RLZXkg
Kik7CiAgb3BlcmF0b3IgVEFPX09iamVjdEtleSAqJigpOwogIFRBT19PYmplY3RLZXkgKiZwdHIg
KHZvaWQpOwogIFRBT19PYmplY3RLZXkgKm9wZXJhdG9yLT4gKHZvaWQpOwogIENPUkJBOjpPY3Rl
dCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCnByaXZhdGU6CiAgVEFPX09iamVj
dEtleSAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBUQU9fT2JqZWN0S2V5X3ZhciAm
KTsKfTsKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vT2JqZWN0X0tleUMuaSIgMQojIDE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdF9LZXlDLmkiCmlubGluZQpUQU9fT2JqZWN0S2V5
OjpUQU9fT2JqZWN0S2V5ICh2b2lkKQp7Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5OjpUQU9fT2Jq
ZWN0S2V5IChDT1JCQTo6VUxvbmcgbWF4KQogIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JC
QTo6T2N0ZXQ+IChtYXgpCnsKfQoKaW5saW5lClRBT19PYmplY3RLZXk6OlRBT19PYmplY3RLZXkg
KENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
OlVMb25nIGxlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6T2N0
ZXQgKmRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiAobWF4LCBs
ZW5ndGgsIGRhdGEsIHJlbGVhc2UpCnsKfQoKaW5saW5lClRBT19PYmplY3RLZXk6OlRBT19PYmpl
Y3RLZXkgKGNvbnN0IFRBT19PYmplY3RLZXkgJnJocykKICA6IFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8Q09SQkE6Ok9jdGV0PiAocmhzKQp7Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5JgpUQU9fT2Jq
ZWN0S2V5OjpvcGVyYXRvcj0gKGNvbnN0IFRBT19PYmplY3RLZXkgJnJocykKewogIGlmICh0aGlz
ID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09S
QkE6Ok9jdGV0Pjo6b3BlcmF0b3I9IChyaHMpOwogIHJldHVybiAqdGhpczsKfQoKCgoKCmlubGlu
ZQpUQU9fT2JqZWN0S2V5X3Zhcjo6VEFPX09iamVjdEtleV92YXIgKHZvaWQpCiAgICAgICAgOiBw
dHJfICgwKQp7fQoKaW5saW5lClRBT19PYmplY3RLZXlfdmFyOjpUQU9fT2JqZWN0S2V5X3ZhciAo
VEFPX09iamVjdEtleSAqcCkKICAgICAgICA6IHB0cl8gKHApCnt9CgppbmxpbmUKVEFPX09iamVj
dEtleV92YXI6OlRBT19PYmplY3RLZXlfdmFyIChjb25zdCBUQU9fT2JqZWN0S2V5X3ZhciAmcCkK
ewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgVEFPX09iamVj
dEtleSgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CgogIGVsc2UKICAgIHRoaXMtPnB0
cl8gPSAwOwp9CgppbmxpbmUKVEFPX09iamVjdEtleV92YXI6On5UQU9fT2JqZWN0S2V5X3ZhciAo
dm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX09iamVjdEtleV92YXIg
JgpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0b3I9IChUQU9fT2JqZWN0S2V5ICpwKQp7CiAgZGVs
ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUgVEFPX09iamVjdEtleV92YXIgJgpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0b3I9IChjb25z
dCBUQU9fT2JqZWN0S2V5X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBp
ZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAg
ICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICBUQU9fT2JqZWN0S2V5ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgVEFPX09i
amVjdEtleSAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgVEFPX09iamVjdEtleSAqdG1wID0gZGVlcF9jb3B5OwogICAg
ICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRy
XyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCBUQU9fT2JqZWN0
S2V5ICoKVEFPX09iamVjdEtleV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3RLZXkgKgpUQU9fT2JqZWN0S2V5X3Zh
cjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKVEFP
X09iamVjdEtleV92YXI6Om9wZXJhdG9yIGNvbnN0IFRBT19PYmplY3RLZXkgJigpIGNvbnN0CnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5X3Zhcjo6b3BlcmF0
b3IgVEFPX09iamVjdEtleSAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClRB
T19PYmplY3RLZXlfdmFyOjpvcGVyYXRvciBUQU9fT2JqZWN0S2V5ICYoKSBjb25zdAp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKVEFPX09iamVjdEtleV92
YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBzbG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t
Pm9wZXJhdG9yW10gKHNsb3QpOwp9CgppbmxpbmUgY29uc3QgVEFPX09iamVjdEtleSAmClRBT19P
YmplY3RLZXlfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoK
aW5saW5lIFRBT19PYmplY3RLZXkgJgpUQU9fT2JqZWN0S2V5X3Zhcjo6aW5vdXQgKHZvaWQpCnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgVEFPX09iamVjdEtleSAqJgpUQU9fT2Jq
ZWN0S2V5X3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy
XyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5ICoKVEFP
X09iamVjdEtleV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgVEFPX09iamVjdEtleSAqdG1wID0gdGhp
cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgVEFPX09i
amVjdEtleSAqClRBT19PYmplY3RLZXlfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpUQU9fT2JqZWN0S2V5X291dDo6VEFPX09iamVjdEtl
eV9vdXQgKFRBT19PYmplY3RLZXkgKiZwKQogICAgICAgIDogcHRyXyAocCkKewogIHRoaXMtPnB0
cl8gPSAwOwp9CgppbmxpbmUKVEFPX09iamVjdEtleV9vdXQ6OlRBT19PYmplY3RLZXlfb3V0IChU
QU9fT2JqZWN0S2V5X3ZhciAmcCkKICAgICAgICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpUQU9fT2JqZWN0S2V5X291
dDo6VEFPX09iamVjdEtleV9vdXQgKFRBT19PYmplY3RLZXlfb3V0ICZwKQogICAgICAgIDogcHRy
XyAocC5wdHJfKQp7fQoKaW5saW5lIFRBT19PYmplY3RLZXlfb3V0ICYKVEFPX09iamVjdEtleV9v
dXQ6Om9wZXJhdG9yPSAoVEFPX09iamVjdEtleV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gcC5w
dHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFRBT19PYmplY3RLZXlfb3V0ICYKVEFPX09i
amVjdEtleV9vdXQ6Om9wZXJhdG9yPSAoVEFPX09iamVjdEtleSAqcCkKewogIHRoaXMtPnB0cl8g
PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lClRBT19PYmplY3RLZXlfb3V0OjpvcGVyYXRv
ciBUQU9fT2JqZWN0S2V5IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFP
X09iamVjdEtleSAqJgpUQU9fT2JqZWN0S2V5X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0S2V5ICoKVEFPX09iamVjdEtleV9vdXQ6Om9w
ZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpP
Y3RldCAmClRBT19PYmplY3RLZXlfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgc2xvdCkK
ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChzbG90KTsKfQojIDEwNCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfS2V5Qy5o
IiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cG9zdC5oIiAxCiMgMTA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL09iamVjdF9LZXlDLmgiIDIKIyA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIgMQojIDE1
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVj
dElETGlzdC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wcmUuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL09iamVjdElETGlzdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDE4ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdElETGlzdC5o
IiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9TZXF1ZW5jZS5oIiAxCiMgMTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vT2JqZWN0SURMaXN0LmgiIDIKIyA0NCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIKY2xhc3MgQ09S
QkFfT1JCX09iamVjdElkTGlzdCA6IHB1YmxpYwoKVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVu
Y2UKCgoKewpwdWJsaWM6CiBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICh2b2lkKTsKIENPUkJBX09S
Ql9PYmplY3RJZExpc3QgKENPUkJBOjpVTG9uZyBtYXgpOwogQ09SQkFfT1JCX09iamVjdElkTGlz
dCAoCiAgICAgICAgICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgICAgICAgIENPUkJB
OjpVTG9uZyBsZW5ndGgsCiAgICAgICAgICAgICAgIGNoYXIgKiAqYnVmZmVyLAogICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTAKICAgICAgICAgICAgICAgKTsKIENPUkJBX09S
Ql9PYmplY3RJZExpc3QgKGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3QgJik7CiB+Q09SQkFf
T1JCX09iamVjdElkTGlzdCAodm9pZCk7CgogIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0
b3IgKHZvaWQqKTsKfTsKCnR5cGVkZWYgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqQ09SQkFfT1JC
X09iamVjdElkTGlzdF9wdHI7CiMgNzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vT2JqZWN0SURMaXN0LmgiCmNsYXNzIENPUkJBX09SQl9PYmplY3RJ
ZExpc3RfdmFyCnsKcHVibGljOgogIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICh2b2lkKTsK
ICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqKTsK
ICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlz
dF92YXIgJik7CiAgfkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICh2b2lkKTsKCiAgQ09SQkFf
T1JCX09iamVjdElkTGlzdF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAq
KTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9P
UkJfT2JqZWN0SWRMaXN0X3ZhciAmKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpvcGVyYXRv
ci0+ICh2b2lkKTsKICBjb25zdCBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpvcGVyYXRvci0+ICh2
b2lkKSBjb25zdDsKCiAgb3BlcmF0b3IgY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKCkg
Y29uc3Q7CiAgb3BlcmF0b3IgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKCk7CiAgb3BlcmF0b3Ig
Q09SQkFfT1JCX09iamVjdElkTGlzdCAmKCkgY29uc3Q7CiAgVEFPX1NlcUVsZW1fU3RyaW5nX01h
bmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNsb3QpOwoKICBjb25zdCBDT1JCQV9PUkJf
T2JqZWN0SWRMaXN0ICZpbiAodm9pZCkgY29uc3Q7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdCAm
aW5vdXQgKHZvaWQpOwogIENPUkJBX09SQl9PYmplY3RJZExpc3QgKiZvdXQgKHZvaWQpOwogIENP
UkJBX09SQl9PYmplY3RJZExpc3QgKl9yZXRuICh2b2lkKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRM
aXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKcHJpdmF0ZToKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0
ICpwdHJfOwp9OwoKCgoKCgoKY2xhc3MgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQKewpwdWJs
aWM6CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgKENPUkJBX09SQl9PYmplY3RJZExpc3Qg
KiYpOwogIENPUkJBX09SQl9PYmplY3RJZExpc3Rfb3V0IChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0
X3ZhciAmKTsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoY29uc3QgQ09SQkFfT1JCX09i
amVjdElkTGlzdF9vdXQgJik7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJik7CiAgQ09SQkFfT1JCX09iamVj
dElkTGlzdF9vdXQgJm9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqKTsKICBvcGVy
YXRvciBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComKCk7CiAgQ09SQkFfT1JCX09iamVjdElkTGlz
dCAqJnB0ciAodm9pZCk7CiAgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqb3BlcmF0b3ItPiAodm9p
ZCk7CiAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n
IHNsb3QpOwoKcHJpdmF0ZToKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComcHRyXzsKCiAgdm9p
ZCBvcGVyYXRvcj0gKGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYpOwp9OwoKCgog
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJiwgY29u
c3QgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJiwgQ09SQkFfT1JCX09iamVjdElkTGlzdCAmKTsKCgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2Jq
ZWN0SURMaXN0LmkiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaSIKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp
c3RfdmFyOjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9
CgppbmxpbmUKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6OkNPUkJBX09SQl9PYmplY3RJZExp
c3RfdmFyIChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpwKQogIDogcHRyXyAocCkKe30KCmlubGlu
ZQpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6Q09SQkFfT1JCX09iamVjdElkTGlzdF92YXIg
KGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAg
IHRoaXMtPnB0cl8gPSBuZXcgQ09SQkFfT1JCX09iamVjdElkTGlzdCgqcC5wdHJfKTsKICBlbHNl
CiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFy
Ojp+Q09SQkFfT1JCX09iamVjdElkTGlzdF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy
XzsKfQoKaW5saW5lIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYKQ09SQkFfT1JCX09iamVj
dElkTGlzdF92YXI6Om9wZXJhdG9yPSAoQ09SQkFfT1JCX09iamVjdElkTGlzdCAqcCkKewogIGRl
bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lIENPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyICYKQ09SQkFfT1JCX09iamVjdElkTGlzdF92
YXI6Om9wZXJhdG9yPSAoY29uc3QgQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXIgJnApCnsKICBp
ZiAodGhpcyAhPSAmcCkKICB7CiAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgIHRoaXMtPnB0cl8g
PSBuZXcgQ09SQkFfT1JCX09iamVjdElkTGlzdCAoKnAucHRyXyk7CiAgfQogIHJldHVybiAqdGhp
czsKfQoKaW5saW5lIGNvbnN0IENPUkJBX09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2Jq
ZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgQ09SQkFfT1JCX09iamVjdElkTGlzdCAqCkNPUkJBX09SQl9PYmplY3RJ
ZExpc3RfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu
bGluZQpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3IgY29uc3QgQ09SQkFfT1JC
X09iamVjdElkTGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l
CkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjpvcGVyYXRvciBDT1JCQV9PUkJfT2JqZWN0SWRM
aXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfT1JCX09iamVj
dElkTGlzdF92YXI6Om9wZXJhdG9yIENPUkJBX09SQl9PYmplY3RJZExpc3QgJigpIGNvbnN0CnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdl
cgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIHNs
b3QpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoc2xvdCk7Cn0KCmlubGluZSBj
b25zdCBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICYKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6
OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkFf
T1JCX09iamVjdElkTGlzdCAmCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjppbm91dCAodm9p
ZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSBDT1JCQV9PUkJfT2JqZWN0SWRM
aXN0IComCkNPUkJBX09SQl9PYmplY3RJZExpc3RfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUg
dGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIENPUkJBX09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X3Zhcjo6
X3JldG4gKHZvaWQpCnsKICBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICp0bXAgPSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSBDT1JCQV9PUkJfT2Jq
ZWN0SWRMaXN0ICoKQ09SQkFfT1JCX09iamVjdElkTGlzdF92YXI6OnB0ciAodm9pZCkgY29uc3QK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp
c3Rfb3V0OjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoQ09SQkFfT1JCX09iamVjdElkTGlz
dCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpDT1JCQV9P
UkJfT2JqZWN0SWRMaXN0X291dDo6Q09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgKENPUkJBX09S
Ql9PYmplY3RJZExpc3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhp
cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX09SQl9PYmplY3RJZExp
c3Rfb3V0OjpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dCAoY29uc3QgQ09SQkFfT1JCX09iamVj
dElkTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PENPUkJBX09SQl9PYmplY3RJZExp
c3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQg
JgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6b3BlcmF0b3I9IChjb25zdCBDT1JCQV9PUkJf
T2JqZWN0SWRMaXN0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PENPUkJBX09S
Ql9PYmplY3RJZExpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
Q09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQgJgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6
b3BlcmF0b3I9IChDT1JCQV9PUkJfT2JqZWN0SWRMaXN0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQ6Om9w
ZXJhdG9yIENPUkJBX09SQl9PYmplY3RJZExpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSBDT1JCQV9PUkJfT2JqZWN0SWRMaXN0IComCkNPUkJBX09SQl9PYmplY3RJZExp
c3Rfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB
X09SQl9PYmplY3RJZExpc3QgKgpDT1JCQV9PUkJfT2JqZWN0SWRMaXN0X291dDo6b3BlcmF0b3It
PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1NlcUVsZW1fU3Ry
aW5nX01hbmFnZXIKQ09SQkFfT1JCX09iamVjdElkTGlzdF9vdXQ6Om9wZXJhdG9yW10gKENPUkJB
OjpVTG9uZyBzbG90KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKHNsb3QpOwp9
CiMgMTM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L09iamVjdElETGlzdC5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3RJRExpc3QuaCIgMgojIDY4ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIK
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9S
ZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDcwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiIDEKIyAy
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJp
bmdTZXFDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
YWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmFmd2QuaCIgMQojIDI4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaCIgMgoK
CgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9TZXF1ZW5jZS5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCiMgNjEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIgogIGNsYXNzIENPUkJB
X1N0cmluZ1NlcTsKICBjbGFzcyBDT1JCQV9TdHJpbmdTZXFfdmFyOwoKCgoKCiAgY2xhc3MgQ09S
QkFfU3RyaW5nU2VxIDogcHVibGljCgogICAgVEFPX1VuYm91bmRlZF9TdHJpbmdfU2VxdWVuY2UK
CgoKICB7CiAgcHVibGljOgogICAgQ09SQkFfU3RyaW5nU2VxICh2b2lkKTsKICAgIENPUkJBX1N0
cmluZ1NlcSAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBDT1JCQV9TdHJpbmdTZXEgKAogICAgICBD
T1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBjaGFyICog
KmJ1ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBDT1JC
QV9TdHJpbmdTZXEgKGNvbnN0IENPUkJBX1N0cmluZ1NlcSAmKTsKICAgIH5DT1JCQV9TdHJpbmdT
ZXEgKHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK
CiAgICB0eXBlZGVmIENPUkJBX1N0cmluZ1NlcV92YXIgX3Zhcl90eXBlOwoKCiAgfTsKIyAxMDQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vU3RyaW5n
U2VxQy5oIgogIGNsYXNzIENPUkJBX1N0cmluZ1NlcV92YXIKICB7CiAgcHVibGljOgogICAgQ09S
QkFfU3RyaW5nU2VxX3ZhciAodm9pZCk7CiAgICBDT1JCQV9TdHJpbmdTZXFfdmFyIChDT1JCQV9T
dHJpbmdTZXEgKik7CiAgICBDT1JCQV9TdHJpbmdTZXFfdmFyIChjb25zdCBDT1JCQV9TdHJpbmdT
ZXFfdmFyICYpOwogICAgfkNPUkJBX1N0cmluZ1NlcV92YXIgKHZvaWQpOwoKICAgIENPUkJBX1N0
cmluZ1NlcV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfU3RyaW5nU2VxICopOwogICAgQ09SQkFfU3Ry
aW5nU2VxX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9TdHJpbmdTZXFfdmFyICYpOwogICAg
Q09SQkFfU3RyaW5nU2VxICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IENPUkJBX1N0cmlu
Z1NlcSAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09SQkFf
U3RyaW5nU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENPUkJBX1N0cmluZ1NlcSAmKCk7CiAg
ICBvcGVyYXRvciBDT1JCQV9TdHJpbmdTZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ09SQkFf
U3RyaW5nU2VxIComKCk7CgogICAgVEFPX1NlcUVsZW1fU3RyaW5nX01hbmFnZXIgb3BlcmF0b3Jb
XSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgQ09SQkFfU3RyaW5nU2VxICZpbiAo
dm9pZCkgY29uc3Q7CiAgICBDT1JCQV9TdHJpbmdTZXEgJmlub3V0ICh2b2lkKTsKICAgIENPUkJB
X1N0cmluZ1NlcSAqJm91dCAodm9pZCk7CiAgICBDT1JCQV9TdHJpbmdTZXEgKl9yZXRuICh2b2lk
KTsKICAgIENPUkJBX1N0cmluZ1NlcSAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg
IENPUkJBX1N0cmluZ1NlcSAqcHRyXzsKICB9OwojIDE0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiCiAgY2xhc3MgQ09SQkFf
U3RyaW5nU2VxX291dAogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0IChDT1JC
QV9TdHJpbmdTZXEgKiYpOwogICAgQ09SQkFfU3RyaW5nU2VxX291dCAoQ09SQkFfU3RyaW5nU2Vx
X3ZhciAmKTsKICAgIENPUkJBX1N0cmluZ1NlcV9vdXQgKGNvbnN0IENPUkJBX1N0cmluZ1NlcV9v
dXQgJik7CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJBX1N0
cmluZ1NlcV9vdXQgJik7CiAgICBDT1JCQV9TdHJpbmdTZXFfb3V0ICZvcGVyYXRvcj0gKENPUkJB
X1N0cmluZ1NlcSAqKTsKICAgIG9wZXJhdG9yIENPUkJBX1N0cmluZ1NlcSAqJigpOwogICAgQ09S
QkFfU3RyaW5nU2VxIComcHRyICh2b2lkKTsKICAgIENPUkJBX1N0cmluZ1NlcSAqb3BlcmF0b3It
PiAodm9pZCk7CiAgICBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlciBvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgQ09SQkFfU3RyaW5nU2VxIComcHRyXzsK
CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfU3RyaW5nU2VxX3ZhciAmKTsKICB9OwoK
CgoKCgoKICBjbGFzcyBDT1JCQV9XU3RyaW5nU2VxOwogIGNsYXNzIENPUkJBX1dTdHJpbmdTZXFf
dmFyOwoKCgoKCiAgY2xhc3MgQ09SQkFfV1N0cmluZ1NlcSA6IHB1YmxpYwoKICAgIFRBT19VbmJv
dW5kZWRfV1N0cmluZ19TZXF1ZW5jZQoKCgogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9XU3RyaW5n
U2VxICh2b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKENPUkJBOjpVTG9uZyBtYXgpOwogICAg
Q09SQkFfV1N0cmluZ1NlcSAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgIENPUkJBOjpV
TG9uZyBsZW5ndGgsCiAgICAgIENPUkJBOjpXQ2hhciAqICpidWZmZXIsCiAgICAgIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UgPSAwCiAgICApOwogICAgQ09SQkFfV1N0cmluZ1NlcSAoY29uc3QgQ09S
QkFfV1N0cmluZ1NlcSAmKTsKICAgIH5DT1JCQV9XU3RyaW5nU2VxICh2b2lkKTsKICAgIHN0YXRp
YyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBDT1JCQV9X
U3RyaW5nU2VxX3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDIxMCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiCiAgY2xhc3MgQ09S
QkFfV1N0cmluZ1NlcV92YXIKICB7CiAgcHVibGljOgogICAgQ09SQkFfV1N0cmluZ1NlcV92YXIg
KHZvaWQpOwogICAgQ09SQkFfV1N0cmluZ1NlcV92YXIgKENPUkJBX1dTdHJpbmdTZXEgKik7CiAg
ICBDT1JCQV9XU3RyaW5nU2VxX3ZhciAoY29uc3QgQ09SQkFfV1N0cmluZ1NlcV92YXIgJik7CiAg
ICB+Q09SQkFfV1N0cmluZ1NlcV92YXIgKHZvaWQpOwoKICAgIENPUkJBX1dTdHJpbmdTZXFfdmFy
ICZvcGVyYXRvcj0gKENPUkJBX1dTdHJpbmdTZXEgKik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX3Zh
ciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9XU3RyaW5nU2VxX3ZhciAmKTsKICAgIENPUkJBX1dT
dHJpbmdTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgQ09SQkFfV1N0cmluZ1NlcSAq
b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ09SQkFfV1N0cmlu
Z1NlcSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBDT1JCQV9XU3RyaW5nU2VxICYoKTsKICAgIG9w
ZXJhdG9yIENPUkJBX1dTdHJpbmdTZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ09SQkFfV1N0
cmluZ1NlcSAqJigpOwoKICAgIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdlciBvcGVyYXRvcltd
IChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKCiAgICBjb25zdCBDT1JCQV9XU3RyaW5nU2VxICZpbiAo
dm9pZCkgY29uc3Q7CiAgICBDT1JCQV9XU3RyaW5nU2VxICZpbm91dCAodm9pZCk7CiAgICBDT1JC
QV9XU3RyaW5nU2VxIComb3V0ICh2b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKl9yZXRuICh2
b2lkKTsKICAgIENPUkJBX1dTdHJpbmdTZXEgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6
CiAgICBDT1JCQV9XU3RyaW5nU2VxICpwdHJfOwogIH07CiMgMjQ4ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaCIKICBjbGFzcyBD
T1JCQV9XU3RyaW5nU2VxX291dAogIHsKICBwdWJsaWM6CiAgICBDT1JCQV9XU3RyaW5nU2VxX291
dCAoQ09SQkFfV1N0cmluZ1NlcSAqJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAoQ09SQkFf
V1N0cmluZ1NlcV92YXIgJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAoY29uc3QgQ09SQkFf
V1N0cmluZ1NlcV9vdXQgJik7CiAgICBDT1JCQV9XU3RyaW5nU2VxX291dCAmb3BlcmF0b3I9IChj
b25zdCBDT1JCQV9XU3RyaW5nU2VxX291dCAmKTsKICAgIENPUkJBX1dTdHJpbmdTZXFfb3V0ICZv
cGVyYXRvcj0gKENPUkJBX1dTdHJpbmdTZXEgKik7CiAgICBvcGVyYXRvciBDT1JCQV9XU3RyaW5n
U2VxIComKCk7CiAgICBDT1JCQV9XU3RyaW5nU2VxIComcHRyICh2b2lkKTsKICAgIENPUkJBX1dT
dHJpbmdTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgVEFPX1NlcUVsZW1fV1N0cmluZ19NYW5h
Z2VyIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHByaXZhdGU6CiAgICBDT1JC
QV9XU3RyaW5nU2VxIComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFfV1N0
cmluZ1NlcV92YXIgJik7CiAgfTsKCgoKCgoKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChD
T1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1N0cmluZ1NlcSAmKTsKICAgICAgICAgICB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIENPUkJBX1N0cmluZ1NlcSopOwogICAgICAgICAgIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIENPUkJBX1N0cmlu
Z1NlcSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENP
UkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfU3RyaW5nU2VxIComKTsKICAgICAgICAgICB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IENPUkJBX1dTdHJpbmdTZXEgJik7CiAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBDT1JCQV9XU3RyaW5nU2VxKik7
CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkg
JiwgQ09SQkFfV1N0cmluZ1NlcSAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgQ09SQkFfV1N0cmluZ1NlcSAqJik7CiMg
MzE4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0
cmluZ1NlcUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIKaW5saW5lCkNPUkJBX1N0cmlu
Z1NlcV92YXI6OkNPUkJBX1N0cmluZ1NlcV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s
aW5lCkNPUkJBX1N0cmluZ1NlcV92YXI6OkNPUkJBX1N0cmluZ1NlcV92YXIgKENPUkJBX1N0cmlu
Z1NlcSAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6Q09S
QkFfU3RyaW5nU2VxX3ZhciAoY29uc3QgOjpDT1JCQV9TdHJpbmdTZXFfdmFyICZwKQp7CiAgaWYg
KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkNPUkJBX1N0cmluZ1Nl
cSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv
biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g
PSAwOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6fkNPUkJBX1N0cmluZ1NlcV92YXIg
KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBX1N0cmluZ1NlcV92
YXIgJgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvcj0gKENPUkJBX1N0cmluZ1NlcSAqcCkK
ewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsK
fQoKaW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxX3ZhciAmCkNPUkJBX1N0cmluZ1NlcV92YXI6Om9w
ZXJhdG9yPSAoY29uc3QgOjpDT1JCQV9TdHJpbmdTZXFfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g
JnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxl
dGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIENPUkJBX1N0cmluZ1NlcSAqZGVlcF9jb3B5ID0KICAg
ICAgICAgICAgbmV3IENPUkJBX1N0cmluZ1NlcSAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRl
ZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgQ09SQkFfU3RyaW5nU2Vx
ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsK
ICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVw
X2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lIGNvbnN0IDo6Q09SQkFfU3RyaW5nU2VxICoKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6b3Bl
cmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpD
T1JCQV9TdHJpbmdTZXEgKgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7
CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVy
YXRvciBjb25zdCA6OkNPUkJBX1N0cmluZ1NlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfU3Ry
aW5nU2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfU3RyaW5n
U2VxX3Zhcjo6b3BlcmF0b3IgOjpDT1JCQV9TdHJpbmdTZXEgJigpIGNvbnN0CnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3IgOjpD
T1JCQV9TdHJpbmdTZXEgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9f
U2VxRWxlbV9TdHJpbmdfTWFuYWdlcgpDT1JCQV9TdHJpbmdTZXFfdmFyOjpvcGVyYXRvcltdIChD
T1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5k
ZXgpOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9TdHJpbmdTZXEgJgpDT1JCQV9TdHJpbmdTZXFf
dmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6
Q09SQkFfU3RyaW5nU2VxICYKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy
ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXEgKiYKQ09SQkFf
U3RyaW5nU2VxX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1N0cmluZ1Nl
cSAqCkNPUkJBX1N0cmluZ1NlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9TdHJpbmdT
ZXEgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoK
aW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxICoKQ09SQkFfU3RyaW5nU2VxX3Zhcjo6cHRyICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfU3RyaW5n
U2VxX291dDo6Q09SQkFfU3RyaW5nU2VxX291dCAoQ09SQkFfU3RyaW5nU2VxIComcCkKICA6IHB0
cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1N0cmluZ1NlcV9vdXQ6
OkNPUkJBX1N0cmluZ1NlcV9vdXQgKENPUkJBX1N0cmluZ1NlcV92YXIgJnApCiAgOiBwdHJfIChw
Lm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9Cgppbmxp
bmUKQ09SQkFfU3RyaW5nU2VxX291dDo6Q09SQkFfU3RyaW5nU2VxX291dCAoY29uc3QgOjpDT1JC
QV9TdHJpbmdTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9TdHJpbmdTZXFf
b3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXFfb3V0ICYKQ09SQkFf
U3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX1N0cmluZ1NlcV9vdXQgJnAp
CnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxDT1JCQV9TdHJpbmdTZXFfb3V0Jj4gKHApLnB0
cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXFfb3V0ICYKQ09S
QkFfU3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChDT1JCQV9TdHJpbmdTZXEgKnApCnsKICB0aGlz
LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpDT1JCQV9TdHJpbmdTZXFfb3V0
OjpvcGVyYXRvciA6OkNPUkJBX1N0cmluZ1NlcSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIDo6Q09SQkFfU3RyaW5nU2VxIComCkNPUkJBX1N0cmluZ1NlcV9vdXQ6OnB0ciAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9TdHJpbmdTZXEg
KgpDT1JCQV9TdHJpbmdTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSBUQU9fU2VxRWxlbV9TdHJpbmdfTWFuYWdlcgpDT1JCQV9TdHJpbmdT
ZXFfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+
cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CiMgMjQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1N0cmluZ1NlcUMuaSIKaW5saW5lCkNPUkJBX1dT
dHJpbmdTZXFfdmFyOjpDT1JCQV9XU3RyaW5nU2VxX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9
CgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV92YXI6OkNPUkJBX1dTdHJpbmdTZXFfdmFyIChDT1JC
QV9XU3RyaW5nU2VxICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpDT1JCQV9XU3RyaW5nU2Vx
X3Zhcjo6Q09SQkFfV1N0cmluZ1NlcV92YXIgKGNvbnN0IDo6Q09SQkFfV1N0cmluZ1NlcV92YXIg
JnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6Q09S
QkFfV1N0cmluZ1NlcSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19l
cnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAg
IHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV92YXI6On5DT1JCQV9X
U3RyaW5nU2VxX3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09S
QkFfV1N0cmluZ1NlcV92YXIgJgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3I9IChDT1JC
QV9XU3RyaW5nU2VxICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpDT1JCQV9XU3RyaW5nU2VxX3ZhciAmCkNPUkJB
X1dTdHJpbmdTZXFfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6Q09SQkFfV1N0cmluZ1NlcV92YXIg
JnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAg
ICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9
IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgQ09SQkFfV1N0cmlu
Z1NlcSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IENPUkJBX1dTdHJpbmdTZXEgKCpwLnB0
cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIENPUkJBX1dTdHJpbmdTZXEgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBk
ZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAg
ICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
IH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpDT1JCQV9XU3RyaW5nU2VxICoK
Q09SQkFfV1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcSAqCkNPUkJBX1dTdHJpbmdT
ZXFfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu
ZQpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpDT1JCQV9XU3RyaW5nU2Vx
ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKQ09SQkFfV1N0cmlu
Z1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfV1N0cmluZ1NlcSAmKCkKewogIHJldHVybiAqdGhp
cy0+cHRyXzsKfQoKaW5saW5lCkNPUkJBX1dTdHJpbmdTZXFfdmFyOjpvcGVyYXRvciA6OkNPUkJB
X1dTdHJpbmdTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUK
Q09SQkFfV1N0cmluZ1NlcV92YXI6Om9wZXJhdG9yIDo6Q09SQkFfV1N0cmluZ1NlcSAqJigpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl
cgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7
CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQoKaW5saW5lIGNvbnN0
IDo6Q09SQkFfV1N0cmluZ1NlcSAmCkNPUkJBX1dTdHJpbmdTZXFfdmFyOjppbiAodm9pZCkgY29u
c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcSAm
CkNPUkJBX1dTdHJpbmdTZXFfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRy
XzsKfQoKCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXEgKiYKQ09SQkFfV1N0cmluZ1NlcV92YXI6
Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JCQV9XU3RyaW5nU2VxICoKQ09SQkFfV1N0
cmluZ1NlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpDT1JCQV9XU3RyaW5nU2VxICp0bXAgPSB0
aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OkNP
UkJBX1dTdHJpbmdTZXEgKgpDT1JCQV9XU3RyaW5nU2VxX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7
CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6
OkNPUkJBX1dTdHJpbmdTZXFfb3V0IChDT1JCQV9XU3RyaW5nU2VxIComcCkKICA6IHB0cl8gKHAp
CnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkNPUkJBX1dTdHJpbmdTZXFfb3V0OjpDT1JC
QV9XU3RyaW5nU2VxX291dCAoQ09SQkFfV1N0cmluZ1NlcV92YXIgJnApCiAgOiBwdHJfIChwLm91
dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK
Q09SQkFfV1N0cmluZ1NlcV9vdXQ6OkNPUkJBX1dTdHJpbmdTZXFfb3V0IChjb25zdCA6OkNPUkJB
X1dTdHJpbmdTZXFfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDT1JCQV9XU3RyaW5nU2Vx
X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6Q09SQkFfV1N0cmluZ1NlcV9vdXQgJgpDT1JC
QV9XU3RyaW5nU2VxX291dDo6b3BlcmF0b3I9IChjb25zdCA6OkNPUkJBX1dTdHJpbmdTZXFfb3V0
ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8Q09SQkFfV1N0cmluZ1NlcV9vdXQmPiAo
cCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXFfb3V0
ICYKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6Om9wZXJhdG9yPSAoQ09SQkFfV1N0cmluZ1NlcSAqcCkK
ewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkNPUkJBX1dTdHJp
bmdTZXFfb3V0OjpvcGVyYXRvciA6OkNPUkJBX1dTdHJpbmdTZXEgKiYoKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSA6OkNPUkJBX1dTdHJpbmdTZXEgKiYKQ09SQkFfV1N0cmluZ1Nl
cV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpDT1JC
QV9XU3RyaW5nU2VxICoKQ09SQkFfV1N0cmluZ1NlcV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19TZXFFbGVtX1dTdHJpbmdfTWFuYWdl
cgpDT1JCQV9XU3RyaW5nU2VxX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7
CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDQ1MCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmki
CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29u
c3QgQ09SQkE6OlN0cmluZ1NlcSAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAg
ICBUQU9fSW5wdXRDRFIgJiwKICAgIENPUkJBOjpTdHJpbmdTZXEgJgogICk7CgoKCgoKCgpDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IENP
UkJBX1dTdHJpbmdTZXEgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFP
X0lucHV0Q0RSICYsCiAgICBDT1JCQV9XU3RyaW5nU2VxICYKICApOwojIDMxOSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TdHJpbmdTZXFDLmgiIDIK
IyAzMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
U3RyaW5nU2VxQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL2FjZS9wb3N0LmgiIDEKIyAzMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vU3RyaW5nU2VxQy5oIiAyCiMgNzIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vT2N0ZXRTZXFDLmgiIDEK
IyA3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9j
b3JiYS5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5o
IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUu
aCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjggIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNl
cHRvckMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaCIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAyCgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29y
YmFmd2QuaCIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiIDEKIyAzNCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIiAyCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9TZXF1ZW5jZS5o
IiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vRHluYW1pY0MuaCIgMgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiCm5hbWVzcGFjZSBEeW5hbWljCnsKICBzdHJ1Y3Qg
UGFyYW1ldGVyOwogIGNsYXNzIFBhcmFtZXRlcl92YXI7CgogIHN0cnVjdCBQYXJhbWV0ZXIKICB7
CgoKICAgIHR5cGVkZWYgUGFyYW1ldGVyX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lk
IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBDT1JCQTo6QW55IGFyZ3VtZW50Owog
ICAgQ09SQkE6OlBhcmFtZXRlck1vZGUgbW9kZTsKICB9OwoKICBjbGFzcyBQYXJhbWV0ZXJfdmFy
CiAgewogIHB1YmxpYzoKICAgIFBhcmFtZXRlcl92YXIgKHZvaWQpOwogICAgUGFyYW1ldGVyX3Zh
ciAoUGFyYW1ldGVyICopOwogICAgUGFyYW1ldGVyX3ZhciAoY29uc3QgUGFyYW1ldGVyX3ZhciAm
KTsKICAgIH5QYXJhbWV0ZXJfdmFyICh2b2lkKTsKCiAgICBQYXJhbWV0ZXJfdmFyICZvcGVyYXRv
cj0gKFBhcmFtZXRlciAqKTsKICAgIFBhcmFtZXRlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUGFy
YW1ldGVyX3ZhciAmKTsKICAgIFBhcmFtZXRlciAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25z
dCBQYXJhbWV0ZXIgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0
IFBhcmFtZXRlciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQYXJhbWV0ZXIgJigpOwogICAgb3Bl
cmF0b3IgUGFyYW1ldGVyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBhcmFtZXRlciAqJigpOwoK
CiAgICBjb25zdCBQYXJhbWV0ZXIgJmluICh2b2lkKSBjb25zdDsKICAgIFBhcmFtZXRlciAmaW5v
dXQgKHZvaWQpOwogICAgUGFyYW1ldGVyIComb3V0ICh2b2lkKTsKICAgIFBhcmFtZXRlciAqX3Jl
dG4gKHZvaWQpOwogICAgUGFyYW1ldGVyICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgog
ICAgUGFyYW1ldGVyICpwdHJfOwogIH07CgogIGNsYXNzIFBhcmFtZXRlcl9vdXQKICB7CiAgcHVi
bGljOgogICAgUGFyYW1ldGVyX291dCAoUGFyYW1ldGVyIComKTsKICAgIFBhcmFtZXRlcl9vdXQg
KFBhcmFtZXRlcl92YXIgJik7CiAgICBQYXJhbWV0ZXJfb3V0IChjb25zdCBQYXJhbWV0ZXJfb3V0
ICYpOwogICAgUGFyYW1ldGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQYXJhbWV0ZXJfb3V0ICYp
OwogICAgUGFyYW1ldGVyX291dCAmb3BlcmF0b3I9IChQYXJhbWV0ZXIgKik7CiAgICBvcGVyYXRv
ciBQYXJhbWV0ZXIgKiYoKTsKICAgIFBhcmFtZXRlciAqJnB0ciAodm9pZCk7CiAgICBQYXJhbWV0
ZXIgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUGFyYW1ldGVyIComcHRyXzsK
CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUGFyYW1ldGVyX3ZhciAmKTsKICB9OwoKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUGFyYW1ldGVyOwoKCgoKCgoKICAgIGNsYXNzIF9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCA6IHB1YmxpYyBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKHZvaWQpOwogICAgICBfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKENPUkJBOjpVTG9uZyBt
YXhpbXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJM
aXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAog
ICAgICAgIFBhcmFtZXRlciAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g
MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAo
Y29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0ICZyaHMp
OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgJm9w
ZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJM
aXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWlj
X1BhcmFtZXRlckxpc3QgKHZvaWQpOwoKICAgICAgUGFyYW1ldGVyICZvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFBhcmFtZXRlciAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGkpIGNvbnN0OwoKICAgICAgc3RhdGljIFBhcmFtZXRlciAqYWxsb2NidWYgKENPUkJBOjpV
TG9uZyBzaXplKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoUGFyYW1ldGVyICpidWZmZXIp
OwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0
aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAg
IFBhcmFtZXRlciAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuID0gMCk7CiAgICAg
IGNvbnN0IFBhcmFtZXRlciAqZ2V0X2J1ZmZlciAodm9pZCkgY29uc3Q7CiAgICAgIHZvaWQgcmVw
bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg
ICAgIFBhcmFtZXRlciAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAg
IH07CiMgMTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL0R5bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdDsKICBjbGFzcyBQYXJhbWV0ZXJM
aXN0X3ZhcjsKCgoKCgogIGNsYXNzIFBhcmFtZXRlckxpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QKCgoKICB7CiAgcHVibGljOgog
ICAgUGFyYW1ldGVyTGlzdCAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0IChDT1JCQTo6VUxvbmcg
bWF4KTsKICAgIFBhcmFtZXRlckxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBD
T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBQYXJhbWV0ZXIgKmJ1ZmZlciwKICAgICAgQ09SQkE6
OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBQYXJhbWV0ZXJMaXN0IChjb25zdCBQYXJh
bWV0ZXJMaXN0ICYpOwogICAgflBhcmFtZXRlckxpc3QgKHZvaWQpOwogICAgc3RhdGljIHZvaWQg
X3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICB0eXBlZGVmIFBhcmFtZXRlckxpc3Rf
dmFyIF92YXJfdHlwZTsKCgogIH07CiMgMjE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdF92
YXIKICB7CiAgcHVibGljOgogICAgUGFyYW1ldGVyTGlzdF92YXIgKHZvaWQpOwogICAgUGFyYW1l
dGVyTGlzdF92YXIgKFBhcmFtZXRlckxpc3QgKik7CiAgICBQYXJhbWV0ZXJMaXN0X3ZhciAoY29u
c3QgUGFyYW1ldGVyTGlzdF92YXIgJik7CiAgICB+UGFyYW1ldGVyTGlzdF92YXIgKHZvaWQpOwoK
ICAgIFBhcmFtZXRlckxpc3RfdmFyICZvcGVyYXRvcj0gKFBhcmFtZXRlckxpc3QgKik7CiAgICBQ
YXJhbWV0ZXJMaXN0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBQYXJhbWV0ZXJMaXN0X3ZhciAmKTsK
ICAgIFBhcmFtZXRlckxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUGFyYW1ldGVy
TGlzdCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUGFyYW1l
dGVyTGlzdCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQYXJhbWV0ZXJMaXN0ICYoKTsKICAgIG9w
ZXJhdG9yIFBhcmFtZXRlckxpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUGFyYW1ldGVyTGlz
dCAqJigpOwoKICAgIFBhcmFtZXRlciAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7
CiAgICBjb25zdCBQYXJhbWV0ZXIgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNv
bnN0OwoKCiAgICBjb25zdCBQYXJhbWV0ZXJMaXN0ICZpbiAodm9pZCkgY29uc3Q7CiAgICBQYXJh
bWV0ZXJMaXN0ICZpbm91dCAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0IComb3V0ICh2b2lkKTsK
ICAgIFBhcmFtZXRlckxpc3QgKl9yZXRuICh2b2lkKTsKICAgIFBhcmFtZXRlckxpc3QgKnB0ciAo
dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBQYXJhbWV0ZXJMaXN0ICpwdHJfOwogIH07CiMg
MjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5
bmFtaWNDLmgiCiAgY2xhc3MgUGFyYW1ldGVyTGlzdF9vdXQKICB7CiAgcHVibGljOgogICAgUGFy
YW1ldGVyTGlzdF9vdXQgKFBhcmFtZXRlckxpc3QgKiYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQg
KFBhcmFtZXRlckxpc3RfdmFyICYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQgKGNvbnN0IFBhcmFt
ZXRlckxpc3Rfb3V0ICYpOwogICAgUGFyYW1ldGVyTGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
UGFyYW1ldGVyTGlzdF9vdXQgJik7CiAgICBQYXJhbWV0ZXJMaXN0X291dCAmb3BlcmF0b3I9IChQ
YXJhbWV0ZXJMaXN0ICopOwogICAgb3BlcmF0b3IgUGFyYW1ldGVyTGlzdCAqJigpOwogICAgUGFy
YW1ldGVyTGlzdCAqJnB0ciAodm9pZCk7CiAgICBQYXJhbWV0ZXJMaXN0ICpvcGVyYXRvci0+ICh2
b2lkKTsKICAgIFBhcmFtZXRlciAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7Cgog
IHByaXZhdGU6CiAgICBQYXJhbWV0ZXJMaXN0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAo
Y29uc3QgUGFyYW1ldGVyTGlzdF92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX1BhcmFtZXRlckxpc3Q7CgogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcSBD
b250ZXh0TGlzdDsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdTZXFfdmFyIENvbnRleHRMaXN0X3Zh
cjsKICB0eXBlZGVmIENPUkJBOjpTdHJpbmdTZXFfb3V0IENvbnRleHRMaXN0X291dDsKICAgIGV4
dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Db250ZXh0TGlzdDsKCiAgdHlwZWRlZiBDT1JC
QTo6VHlwZUNvZGUgVHlwZUNvZGU7CiAgdHlwZWRlZiBDT1JCQTo6VHlwZUNvZGVfcHRyIFR5cGVD
b2RlX3B0cjsKICB0eXBlZGVmIENPUkJBOjpUeXBlQ29kZV92YXIgVHlwZUNvZGVfdmFyOwogIHR5
cGVkZWYgQ09SQkE6OlR5cGVDb2RlX291dCBUeXBlQ29kZV9vdXQ7CiAgICBleHRlcm4gQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfVHlwZUNvZGU7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCA6IHB1YmxpYyBUQU9fVW5i
b3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91
bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICh2b2lkKTsKICAgICAg
X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAoQ09S
QkE6OlVMb25nIG1heGltdW0pOwogICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2Vf
RHluYW1pY19FeGNlcHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JC
QTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIENPUkJBOjpUeXBlQ29kZSogKnZhbHVlLAogICAgICAg
IENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwKTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmpl
Y3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5f
VEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0ICh2b2lk
KTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9u
TGlzdCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHlu
YW1pY19FeGNlcHRpb25MaXN0ICZyaHMpOwogICAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2Vy
PER5bmFtaWM6OlR5cGVDb2RlLER5bmFtaWM6OlR5cGVDb2RlX3Zhcj4gb3BlcmF0b3JbXSAoQ09S
QkE6OlVMb25nIGluZGV4KSBjb25zdDsKICAgICAgc3RhdGljIENPUkJBOjpUeXBlQ29kZSAqKmFs
bG9jYnVmIChDT1JCQTo6VUxvbmcgbmVsZW1zKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAo
Q09SQkE6OlR5cGVDb2RlICoqYnVmZmVyKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVf
YnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFsbG9j
YXRlX2J1ZmZlciAodm9pZCk7CiAgICAgIENPUkJBOjpUeXBlQ29kZSogKmdldF9idWZmZXIgKENP
UkJBOjpCb29sZWFuIG9ycGhhbiA9IDApOwogICAgICBjb25zdCBDT1JCQTo6VHlwZUNvZGUqICpn
ZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgdmlydHVhbCB2b2lkIF9zaHJpbmtfYnVmZmVy
IChDT1JCQTo6VUxvbmcgbmwsIENPUkJBOjpVTG9uZyBvbCk7CgogICAgfTsKIyAzMjkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaCIK
ICBjbGFzcyBFeGNlcHRpb25MaXN0OwogIGNsYXNzIEV4Y2VwdGlvbkxpc3RfdmFyOwoKCgoKCiAg
Y2xhc3MgRXhjZXB0aW9uTGlzdCA6IHB1YmxpYwoKICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9T
ZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QKCgoKICB7CiAgcHVibGljOgogICAgRXhjZXB0
aW9uTGlzdCAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAg
IEV4Y2VwdGlvbkxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxv
bmcgbGVuZ3RoLAogICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyICpidWZmZXIsCiAgICAgIENPUkJB
OjpCb29sZWFuIHJlbGVhc2UgPSAwCiAgICApOwogICAgRXhjZXB0aW9uTGlzdCAoY29uc3QgRXhj
ZXB0aW9uTGlzdCAmKTsKICAgIH5FeGNlcHRpb25MaXN0ICh2b2lkKTsKICAgIHN0YXRpYyB2b2lk
IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlwZWRlZiBFeGNlcHRpb25MaXN0
X3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDM3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIgogIGNsYXNzIEV4Y2VwdGlvbkxpc3Rf
dmFyCiAgewogIHB1YmxpYzoKICAgIEV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKTsKICAgIEV4Y2Vw
dGlvbkxpc3RfdmFyIChFeGNlcHRpb25MaXN0ICopOwogICAgRXhjZXB0aW9uTGlzdF92YXIgKGNv
bnN0IEV4Y2VwdGlvbkxpc3RfdmFyICYpOwogICAgfkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKTsK
CiAgICBFeGNlcHRpb25MaXN0X3ZhciAmb3BlcmF0b3I9IChFeGNlcHRpb25MaXN0ICopOwogICAg
RXhjZXB0aW9uTGlzdF92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXhjZXB0aW9uTGlzdF92YXIgJik7
CiAgICBFeGNlcHRpb25MaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEV4Y2VwdGlv
bkxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEV4Y2Vw
dGlvbkxpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgRXhjZXB0aW9uTGlzdCAmKCk7CiAgICBv
cGVyYXRvciBFeGNlcHRpb25MaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIEV4Y2VwdGlvbkxp
c3QgKiYoKTsKCiAgICBUQU9fUHNldWRvX09iamVjdF9NYW5hZ2VyPFR5cGVDb2RlLFR5cGVDb2Rl
X3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgRXhjZXB0
aW9uTGlzdCAmaW4gKHZvaWQpIGNvbnN0OwogICAgRXhjZXB0aW9uTGlzdCAmaW5vdXQgKHZvaWQp
OwogICAgRXhjZXB0aW9uTGlzdCAqJm91dCAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0ICpfcmV0
biAodm9pZCk7CiAgICBFeGNlcHRpb25MaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRl
OgogICAgRXhjZXB0aW9uTGlzdCAqcHRyXzsKICB9OwojIDQxMCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5oIgogIGNsYXNzIEV4Y2Vw
dGlvbkxpc3Rfb3V0CiAgewogIHB1YmxpYzoKICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRp
b25MaXN0IComKTsKICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRpb25MaXN0X3ZhciAmKTsK
ICAgIEV4Y2VwdGlvbkxpc3Rfb3V0IChjb25zdCBFeGNlcHRpb25MaXN0X291dCAmKTsKICAgIEV4
Y2VwdGlvbkxpc3Rfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEV4Y2VwdGlvbkxpc3Rfb3V0ICYpOwog
ICAgRXhjZXB0aW9uTGlzdF9vdXQgJm9wZXJhdG9yPSAoRXhjZXB0aW9uTGlzdCAqKTsKICAgIG9w
ZXJhdG9yIEV4Y2VwdGlvbkxpc3QgKiYoKTsKICAgIEV4Y2VwdGlvbkxpc3QgKiZwdHIgKHZvaWQp
OwogICAgRXhjZXB0aW9uTGlzdCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBUQU9fUHNldWRvX09i
amVjdF9NYW5hZ2VyPFR5cGVDb2RlLFR5cGVDb2RlX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIEV4Y2VwdGlvbkxpc3QgKiZwdHJfOwoKICAgIHZv
aWQgb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25MaXN0X3ZhciAmKTsKICB9OwoKCgoKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXhjZXB0aW9uTGlzdDsKCiAgdHlwZWRlZiBDT1JC
QTo6U3RyaW5nU2VxIFJlcXVlc3RDb250ZXh0OwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcV92
YXIgUmVxdWVzdENvbnRleHRfdmFyOwogIHR5cGVkZWYgQ09SQkE6OlN0cmluZ1NlcV9vdXQgUmVx
dWVzdENvbnRleHRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcXVl
c3RDb250ZXh0OwoKCn0KCgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg
JiwgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8
PD0gKENPUkJBOjpBbnkgJiwgRHluYW1pYzo6UGFyYW1ldGVyKik7CiAgICAgICAgICAgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgRHluYW1pYzo6UGFyYW1l
dGVyIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgKiYpOwogICAgICAgICAgIHZvaWQg
b3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyTGlzdCAm
KTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIER5bmFtaWM6OlBh
cmFtZXRlckxpc3QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u
c3QgQ09SQkE6OkFueSAmLCBEeW5hbWljOjpQYXJhbWV0ZXJMaXN0IComKTsKICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBEeW5h
bWljOjpQYXJhbWV0ZXJMaXN0IComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIGNvbnN0IER5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJik7CiAgICAgICAgICAgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBEeW5hbWljOjpFeGNlcHRpb25MaXN0Kik7CiAg
ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg
RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgRHluYW1pYzo6RXhjZXB0aW9uTGlz
dCAqJik7CiMgNDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL0R5bmFtaWNDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIKaW5saW5lCkR5bmFtaWM6
OlBhcmFtZXRlcl92YXI6OlBhcmFtZXRlcl92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s
aW5lCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6OlBhcmFtZXRlcl92YXIgKFBhcmFtZXRlciAqcCkK
ICA6IHB0cl8gKHApCnt9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6UGFyYW1ldGVy
X3ZhciAoY29uc3QgOjpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK
ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkR5bmFtaWM6OlBhcmFtZXRlciAoKnAu
cHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkg
PSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9
CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6flBhcmFtZXRlcl92YXIgKHZvaWQpCnsK
ICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIER5bmFtaWM6OlBhcmFtZXRlcl92YXIgJgpE
eW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRvcj0gKFBhcmFtZXRlciAqcCkKewogIGRlbGV0
ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IDo6RHluYW1pYzo6UGFyYW1ldGVyX3ZhciAmCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6Om9wZXJh
dG9yPSAoY29uc3QgOjpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0g
JnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxl
dGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIFBhcmFtZXRlciAqZGVlcF9jb3B5ID0KICAgICAgICAg
ICAgbmV3IFBhcmFtZXRlciAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAw
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgUGFyYW1ldGVyICp0bXAgPSBkZWVwX2NvcHk7
CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlz
LT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAg
IH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6RHlu
YW1pYzo6UGFyYW1ldGVyICoKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJh
bWV0ZXIgKgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvcGVyYXRv
ciBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlciAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlcl92YXI6Om9wZXJhdG9yIDo6RHluYW1p
Yzo6UGFyYW1ldGVyICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKRHluYW1p
Yzo6UGFyYW1ldGVyX3Zhcjo6b3BlcmF0b3IgOjpEeW5hbWljOjpQYXJhbWV0ZXIgJigpIGNvbnN0
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyX3Zh
cjo6b3BlcmF0b3IgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlciAmCkR5bmFtaWM6OlBhcmFt
ZXRlcl92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgJgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjppbm91dCAo
dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkR5bmFtaWM6OlBhcmFt
ZXRlciAqJgpEeW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhp
cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5l
IDo6RHluYW1pYzo6UGFyYW1ldGVyICoKRHluYW1pYzo6UGFyYW1ldGVyX3Zhcjo6X3JldG4gKHZv
aWQpCnsKICA6OkR5bmFtaWM6OlBhcmFtZXRlciAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5w
dHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKgpE
eW5hbWljOjpQYXJhbWV0ZXJfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKCgoKCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpQYXJhbWV0ZXJfb3V0
ICg6OkR5bmFtaWM6OlBhcmFtZXRlciAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9
IDA7Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpQYXJhbWV0ZXJfb3V0IChQYXJh
bWV0ZXJfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK
ICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlcl9vdXQ6OlBhcmFt
ZXRlcl9vdXQgKGNvbnN0IDo6RHluYW1pYzo6UGFyYW1ldGVyX291dCAmcCkKICA6IHB0cl8gKGNv
bnN0X2Nhc3Q8UGFyYW1ldGVyX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIER5bmFtaWM6OlBh
cmFtZXRlcl9vdXQgJgpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6
RHluYW1pYzo6UGFyYW1ldGVyX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBh
cmFtZXRlcl9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBEeW5hbWlj
OjpQYXJhbWV0ZXJfb3V0ICYKRHluYW1pYzo6UGFyYW1ldGVyX291dDo6b3BlcmF0b3I9IChQYXJh
bWV0ZXIgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpE
eW5hbWljOjpQYXJhbWV0ZXJfb3V0OjpvcGVyYXRvciA6OkR5bmFtaWM6OlBhcmFtZXRlciAqJigp
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVyICom
CkR5bmFtaWM6OlBhcmFtZXRlcl9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXIgKgpEeW5hbWljOjpQYXJhbWV0ZXJfb3V0
OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KIyAyMjIgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIK
ICBpbmxpbmUgRHluYW1pYzo6UGFyYW1ldGVyICoKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6
ZSkKCiAgewogICAgRHluYW1pYzo6UGFyYW1ldGVyICpyZXR2YWwgPSAwOwogICAgZG8geyB0cnkg
eyByZXR2YWwgPSBuZXcgRHluYW1pYzo6UGFyYW1ldGVyW3NpemVdOyB9IGNhdGNoIChzdGQ6OmJh
ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hp
bGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIER5bmFtaWM6Ol9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdDo6ZnJlZWJ1ZiAoRHlu
YW1pYzo6UGFyYW1ldGVyICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAgfQoK
ICBpbmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFt
ZXRlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAo
dm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNf
UGFyYW1ldGVyTGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRf
QmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19Q
YXJhbWV0ZXJMaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAgRHlu
YW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3QgKENPUkJBOjpVTG9uZyBt
YXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIER5bmFtaWM6OlBhcmFtZXRlciAq
ZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf
U2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxp
bmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxp
c3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAoY29uc3Qg
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0ICZyaHMpCgogICAg
OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZl
cl8gIT0gMCkKICAgIHsKICAgICAgRHluYW1pYzo6UGFyYW1ldGVyICp0bXAxID0gX1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjphbGxvY2J1ZiAodGhpcy0+bWF4
aW11bV8pOwogICAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKiBjb25zdCB0bXAyID0gcmVpbnRlcnBy
ZXRfY2FzdDxEeW5hbWljOjpQYXJhbWV0ZXIgKj4gKHJocy5idWZmZXJfKTsKCiAgICAgIGZvciAo
Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICAgIHRtcDFb
aV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNl
CiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAgaW5saW5lIER5bmFt
aWM6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdCAmCiAgRHlu
YW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpvcGVy
YXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlz
dCAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7Cgog
ICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCBy
aHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgRHluYW1pYzo6UGFyYW1ldGVyICp0bXAgPSBy
ZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlciAqPiAodGhpcy0+YnVmZmVyXyk7CiAg
ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHluYW1pY19QYXJhbWV0ZXJMaXN0OjpmcmVl
YnVmICh0bXApOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9
CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAg
IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIER5bmFt
aWM6OlBhcmFtZXRlciAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8RHluYW1pYzo6UGFyYW1ldGVy
ICo+ICh0aGlzLT5idWZmZXJfKTsKICAgIER5bmFtaWM6OlBhcmFtZXRlciAqIGNvbnN0IHRtcDIg
PSByZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlciAqPiAocmhzLmJ1ZmZlcl8pOwoK
ICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAg
ICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIER5
bmFtaWM6OlBhcmFtZXRlciAmCiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfRHlu
YW1pY19QYXJhbWV0ZXJMaXN0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAg
ZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09T
OjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3Rh
bmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vRHluYW1pY0MuaSIsIDMxNCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t
PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr
ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl
bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg
LTEpOyB9IH0gd2hpbGUgKDApOwogICAgRHluYW1pYzo6UGFyYW1ldGVyKiB0bXAgPSByZWludGVy
cHJldF9jYXN0PER5bmFtaWM6OlBhcmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy
biB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgRHluYW1pYzo6UGFyYW1ldGVyICYKICBEeW5h
bWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6Om9wZXJh
dG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMt
Pm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFD
RV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0
ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5h
bWljQy5pIiwgMzIzLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19f
LT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAo
TE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQg
Zm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7
CiAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0PER5
bmFtaWM6OlBhcmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBbaV07CiAg
fQoKCgogIGlubGluZSBEeW5hbWljOjpQYXJhbWV0ZXIgKgogIER5bmFtaWM6Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFyYW1ldGVyTGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJv
b2xlYW4gb3JwaGFuKQogIHsKICAgIER5bmFtaWM6OlBhcmFtZXRlciAqcmVzdWx0ID0gMDsKICAg
IGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJfID09IDApCiAg
ICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5hbWljX1Bh
cmFtZXRlckxpc3Q6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICB0aGlzLT5idWZm
ZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgfQogICAgICBl
bHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PER5bmFtaWM6OlBh
cmFtZXRlcio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewog
ICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0g
cmVpbnRlcnByZXRfY2FzdDxEeW5hbWljOjpQYXJhbWV0ZXIqPiAodGhpcy0+YnVmZmVyXyk7CiAg
ICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAg
ICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgICAg
fQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGluZSBjb25zdCBEeW5hbWljOjpQ
YXJhbWV0ZXIgKgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0R5bmFtaWNfUGFy
YW1ldGVyTGlzdDo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgKj4gKHRoaXMtPmJ1ZmZlcl8pOwog
IH0KCiAgaW5saW5lIHZvaWQKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9EeW5h
bWljX1BhcmFtZXRlckxpc3Q6OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVM
b25nIGxlbmd0aCwKICBEeW5hbWljOjpQYXJhbWV0ZXIgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8g
PSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQog
ICAgewogICAgICBEeW5hbWljOjpQYXJhbWV0ZXIgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RHlu
YW1pYzo6UGFyYW1ldGVyKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9EeW5hbWljX1BhcmFtZXRlckxpc3Q6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0
aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMg
Mzk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5
bmFtaWNDLmkiCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6UGFyYW1ldGVyTGlz
dF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxp
c3RfdmFyOjpQYXJhbWV0ZXJMaXN0X3ZhciAoUGFyYW1ldGVyTGlzdCAqcCkKICA6IHB0cl8gKHAp
Cnt9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6OlBhcmFtZXRlckxpc3RfdmFy
IChjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK
ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3Qg
KCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0g
MDsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjp+UGFyYW1ldGVyTGlzdF92
YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIER5bmFtaWM6OlBhcmFt
ZXRlckxpc3RfdmFyICYKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6Om9wZXJhdG9yPSAoUGFy
YW1ldGVyTGlzdCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwog
IHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXIgJgpE
eW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OkR5bmFtaWM6OlBh
cmFtZXRlckxpc3RfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChw
LnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAg
ICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgIFBhcmFtZXRlckxpc3QgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBQYXJhbWV0ZXJM
aXN0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBQYXJhbWV0ZXJMaXN0ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg
ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g
dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6RHluYW1pYzo6UGFy
YW1ldGVyTGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpvcGVyYXRvci0+ICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFt
ZXRlckxpc3QgKgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKRHluYW1pYzo6UGFyYW1ldGVyTGlzdF92
YXI6Om9wZXJhdG9yIGNvbnN0IDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdCAmKCkgY29uc3QKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFy
OjpvcGVyYXRvciA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3QgJigpCnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3IgOjpE
eW5hbWljOjpQYXJhbWV0ZXJMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9
CgoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpvcGVyYXRvciA6OkR5bmFtaWM6
OlBhcmFtZXRlckxpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5h
bWljOjpQYXJhbWV0ZXIgJgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6b3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGlu
ZGV4KTsKfQoKaW5saW5lIGNvbnN0IER5bmFtaWM6OlBhcmFtZXRlciAmCkR5bmFtaWM6OlBhcmFt
ZXRlckxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNvbnN0CnsKICBy
ZXR1cm4gY29uc3RfY2FzdDxjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXIgJj4gKHRoaXMtPnB0cl8t
Pm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OlBhcmFtZXRl
ckxpc3QgJgpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3QgJgpE
eW5hbWljOjpQYXJhbWV0ZXJMaXN0X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0IComCkR5bmFtaWM6OlBh
cmFtZXRlckxpc3RfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz
LT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFy
YW1ldGVyTGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3RfdmFyOjpfcmV0biAodm9pZCkKewog
IDo6RHluYW1pYzo6UGFyYW1ldGVyTGlzdCAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJf
ID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0ICoK
RHluYW1pYzo6UGFyYW1ldGVyTGlzdF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpQYXJh
bWV0ZXJMaXN0X291dCAoUGFyYW1ldGVyTGlzdCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+
cHRyXyA9IDA7Cn0KCmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X291dDo6UGFyYW1ldGVy
TGlzdF9vdXQgKFBhcmFtZXRlckxpc3RfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCkR5bmFtaWM6OlBh
cmFtZXRlckxpc3Rfb3V0OjpQYXJhbWV0ZXJMaXN0X291dCAoY29uc3QgOjpEeW5hbWljOjpQYXJh
bWV0ZXJMaXN0X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8UGFyYW1ldGVyTGlzdF9vdXQm
PiAocCkucHRyXykKe30KCmlubGluZSA6OkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0ICYKRHlu
YW1pYzo6UGFyYW1ldGVyTGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpEeW5hbWljOjpQYXJh
bWV0ZXJMaXN0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBhcmFtZXRlckxp
c3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpEeW5hbWljOjpQ
YXJhbWV0ZXJMaXN0X291dCAmCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpvcGVyYXRvcj0g
KFBhcmFtZXRlckxpc3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K
CmlubGluZQpEeW5hbWljOjpQYXJhbWV0ZXJMaXN0X291dDo6b3BlcmF0b3IgOjpEeW5hbWljOjpQ
YXJhbWV0ZXJMaXN0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5h
bWljOjpQYXJhbWV0ZXJMaXN0IComCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpwdHIgKHZv
aWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RHluYW1pYzo6UGFyYW1ldGVy
TGlzdCAqCkR5bmFtaWM6OlBhcmFtZXRlckxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5hbWljOjpQYXJhbWV0ZXIgJgpEeW5hbWlj
OjpQYXJhbWV0ZXJMaXN0X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDYxNSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIgogIGlu
bGluZSBDT1JCQTo6VHlwZUNvZGUgKioKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9PYmplY3Rf
U2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5l
bGVtcykKICB7CiAgICBDT1JCQTo6VHlwZUNvZGUgKipidWYgPSAwOwoKICAgIGRvIHsgdHJ5IHsg
YnVmID0gbmV3IENPUkJBOjpUeXBlQ29kZSpbbmVsZW1zXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxs
b2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgw
KTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IG5lbGVtczsgaSsrKQogICAgICB7
CiAgICAgICAgYnVmW2ldID0gQ09SQkE6OlR5cGVDb2RlOjpfbmlsICgpOwogICAgICB9CgogICAg
cmV0dXJuIGJ1ZjsKICB9CgogIGlubGluZSB2b2lkCiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6ZnJlZWJ1ZiAoQ09SQkE6OlR5
cGVDb2RlICoqYnVmZmVyKQogIHsKICAgIGlmIChidWZmZXIgPT0gMCkKICAgICAgcmV0dXJuOwog
ICAgZGVsZXRlW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgRHluYW1pYzo6X1RBT19VbmJvdW5k
ZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6X1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAodm9pZCkKICB7CiAgfQoKICBp
bmxpbmUKICBEeW5hbWljOjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19F
eGNlcHRpb25MaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNl
cHRpb25MaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNl
X1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1p
Y19FeGNlcHRpb25MaXN0OjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewogIH0KCiAgaW5saW5lCiAg
RHluYW1pYzo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9u
TGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlz
dCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgQ09S
QkE6OlR5cGVDb2RlKiAqdmFsdWUsCiAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIDogVEFP
X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIHZhbHVlLCByZWxlYXNl
KQogIHsKICB9CgogIGlubGluZQogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1
ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j
ZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVl
bmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAmcmhzKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf
U2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAg
Q09SQkE6OlR5cGVDb2RlICoqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9E
eW5hbWljX0V4Y2VwdGlvbkxpc3Q6OmFsbG9jYnVmICh0aGlzLT5tYXhpbXVtXyk7CiAgICAgIENP
UkJBOjpUeXBlQ29kZSAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6VHlw
ZUNvZGUgKio+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsg
aSA8IHJocy5sZW5ndGhfOyArK2kpCiAgICAgICAgewogICAgICAgICAgdG1wMVtpXSA9IENPUkJB
OjpUeXBlQ29kZTo6X2R1cGxpY2F0ZSAodG1wMltpXSk7CiAgICAgICAgfQoKICAgICAgdGhpcy0+
YnVmZmVyXyA9IHRtcDE7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8g
PSAwOwogICAgfQogIH0KCiAgaW5saW5lIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9T
ZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3QgJgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVk
X09iamVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Om9wZXJhdG9yPSAoY29uc3Qg
X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdCAmcmhz
KQogIHsKICAgIGlmICh0aGlzID09ICZyaHMpCiAgICAgIHJldHVybiAqdGhpczsKCiAgICBpZiAo
dGhpcy0+cmVsZWFzZV8pCiAgICB7CiAgICAgIENPUkJBOjpUeXBlQ29kZSAqKnRtcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Q09SQkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICBm
b3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgewog
ICAgICAgIENPUkJBOjpyZWxlYXNlICh0bXBbaV0pOwogICAgICAgIHRtcFtpXSA9IENPUkJBOjpU
eXBlQ29kZTo6X25pbCAoKTsKICAgICAgfQogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMu
bWF4aW11bV8pCiAgICAgIHsKICAgICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2Vf
RHluYW1pY19FeGNlcHRpb25MaXN0OjpmcmVlYnVmICh0bXApOwogICAgICAgIHRoaXMtPmJ1ZmZl
cl8gPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfRHluYW1pY19FeGNlcHRpb25MaXN0
OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgICB0
aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhj
ZXB0aW9uTGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9C
YXNlX1NlcXVlbmNlOjpvcGVyYXRvcj0gKHJocyk7CgogICAgQ09SQkE6OlR5cGVDb2RlICoqdG1w
MSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7
CiAgICBDT1JCQTo6VHlwZUNvZGUgKiogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09S
QkE6OlR5cGVDb2RlICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkg
PSAwOyBpIDwgcmhzLmxlbmd0aF87ICsraSkKICAgICAgewogICAgICAgIHRtcDFbaV0gPSBDT1JC
QTo6VHlwZUNvZGU6Ol9kdXBsaWNhdGUgKHRtcDJbaV0pOwogICAgICB9CgogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgaW5saW5lIFRBT19Qc2V1ZG9fT2JqZWN0X01hbmFnZXI8RHluYW1pYzo6VHlw
ZUNvZGUsRHluYW1pYzo6VHlwZUNvZGVfdmFyPgogIER5bmFtaWM6Ol9UQU9fVW5ib3VuZGVkX09i
amVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpV
TG9uZyBpbmRleCkgY29uc3QKCiAgewogICAgZG8geyBpZighKGluZGV4IDwgdGhpcy0+bWF4aW11
bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19N
c2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmki
LCA3MjEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19v
c3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJP
UiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVz
Jy4lYVxuIiwgImluZGV4IDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAg
ICBDT1JCQTo6VHlwZUNvZGUgKiogY29uc3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxDT1JCQTo6
VHlwZUNvZGUgKio+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiBUQU9fUHNldWRvX09iamVj
dF9NYW5hZ2VyPER5bmFtaWM6OlR5cGVDb2RlLER5bmFtaWM6OlR5cGVDb2RlX3Zhcj4gKHRtcCAr
IGluZGV4LCB0aGlzLT5yZWxlYXNlXyk7CiAgfQoKICBpbmxpbmUgQ09SQkE6OlR5cGVDb2RlKiAq
CiAgRHluYW1pYzo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0
aW9uTGlzdDo6Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIENPUkJB
OjpUeXBlQ29kZSAqKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAg
ICBpZiAodGhpcy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19V
bmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX0R5bmFtaWNfRXhjZXB0aW9uTGlzdDo6YWxsb2NidWYg
KHRoaXMtPm1heGltdW1fKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAg
IHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PENPUkJBOjpUeXBlQ29kZSoqPiAodGhpcy0+YnVmZmVy
Xyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2Vf
ICE9IDApCiAgICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q09SQkE6
OlR5cGVDb2RlKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7
CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg
ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0
OwogIH0KCiAgaW5saW5lIGNvbnN0IENPUkJBOjpUeXBlQ29kZSogKgogIER5bmFtaWM6Ol9UQU9f
VW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9EeW5hbWljX0V4Y2VwdGlvbkxpc3Q6OmdldF9idWZm
ZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ09S
QkE6OlR5cGVDb2RlICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQojIDc3OSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9EeW5hbWljQy5pIgppbmxpbmUK
RHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6OkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKQogIDog
cHRyXyAoMCkKe30KCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6RXhjZXB0aW9u
TGlzdF92YXIgKEV4Y2VwdGlvbkxpc3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkR5bmFt
aWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpFeGNlcHRpb25MaXN0X3ZhciAoY29uc3QgOjpEeW5hbWlj
OjpFeGNlcHRpb25MaXN0X3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRo
aXMtPnB0cl8gPSBuZXcgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICgqcC5wdHJfKTsgfSBjYXRj
aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47
IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpEeW5h
bWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6fkV4Y2VwdGlvbkxpc3RfdmFyICh2b2lkKQp7CiAgZGVs
ZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBEeW5hbWljOjpFeGNlcHRpb25MaXN0X3ZhciAmCkR5
bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvcj0gKEV4Y2VwdGlvbkxpc3QgKnApCnsK
ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K
CmlubGluZSA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyICYKRHluYW1pYzo6RXhjZXB0aW9u
TGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3ZhciAm
cCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAg
ICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0g
MDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBFeGNlcHRpb25MaXN0
ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgRXhjZXB0aW9uTGlzdCAoKnAucHRyXyk7Cgog
ICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
RXhjZXB0aW9uTGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9
IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAg
ICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1
cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5h
bWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICoKRHluYW1p
Yzo6RXhjZXB0aW9uTGlzdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvciBjb25z
dCA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3IgOjpEeW5h
bWljOjpFeGNlcHRpb25MaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK
RHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6Om9wZXJhdG9yIDo6RHluYW1pYzo6RXhjZXB0aW9u
TGlzdCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpEeW5hbWlj
OjpFeGNlcHRpb25MaXN0X3Zhcjo6b3BlcmF0b3IgOjpEeW5hbWljOjpFeGNlcHRpb25MaXN0ICom
KCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1BzZXVkb19PYmplY3RfTWFu
YWdlcjxEeW5hbWljOjpUeXBlQ29kZSxEeW5hbWljOjpUeXBlQ29kZV92YXI+CkR5bmFtaWM6OkV4
Y2VwdGlvbkxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1
cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgOjpEeW5h
bWljOjpFeGNlcHRpb25MaXN0ICYKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6OmluICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNl
cHRpb25MaXN0ICYKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF92YXI6Omlub3V0ICh2b2lkKQp7CiAg
cmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAq
JgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt
PnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6
OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X3Zhcjo6X3Jl
dG4gKHZvaWQpCnsKICA6OkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgKnRtcCA9IHRoaXMtPnB0cl87
CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6RHluYW1pYzo6RXhj
ZXB0aW9uTGlzdCAqCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3RfdmFyOjpwdHIgKHZvaWQpIGNvbnN0
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpEeW5hbWljOjpFeGNlcHRpb25M
aXN0X291dDo6RXhjZXB0aW9uTGlzdF9vdXQgKEV4Y2VwdGlvbkxpc3QgKiZwKQogIDogcHRyXyAo
cCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF9v
dXQ6OkV4Y2VwdGlvbkxpc3Rfb3V0IChFeGNlcHRpb25MaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAu
b3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGlu
ZQpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291dDo6RXhjZXB0aW9uTGlzdF9vdXQgKGNvbnN0IDo6
RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PEV4Y2Vw
dGlvbkxpc3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpEeW5hbWljOjpFeGNlcHRpb25M
aXN0X291dCAmCkR5bmFtaWM6OkV4Y2VwdGlvbkxpc3Rfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6
RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2Fz
dDxFeGNlcHRpb25MaXN0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQgJgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291
dDo6b3BlcmF0b3I9IChFeGNlcHRpb25MaXN0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUKRHluYW1pYzo6RXhjZXB0aW9uTGlzdF9vdXQ6Om9wZXJhdG9y
IDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIDo6RHluYW1pYzo6RXhjZXB0aW9uTGlzdCAqJgpEeW5hbWljOjpFeGNlcHRpb25MaXN0
X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkR5bmFt
aWM6OkV4Y2VwdGlvbkxpc3QgKgpEeW5hbWljOjpFeGNlcHRpb25MaXN0X291dDo6b3BlcmF0b3It
PiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgVEFPX1BzZXVkb19PYmpl
Y3RfTWFuYWdlcjxEeW5hbWljOjpUeXBlQ29kZSxEeW5hbWljOjpUeXBlQ29kZV92YXI+CkR5bmFt
aWM6OkV4Y2VwdGlvbkxpc3Rfb3V0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgoKCgppbmxpbmUgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgRHluYW1p
Yzo6UGFyYW1ldGVyICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9f
YWdncmVnYXRlLmFyZ3VtZW50KSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubW9kZSkK
ICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIER5bmFtaWM6OlBhcmFtZXRl
ciAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5h
cmd1bWVudCkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLm1vZGUpCiAgKQogICAgcmV0
dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBEeW5hbWljOjpQYXJhbWV0ZXJM
aXN0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAm
LAogICAgRHluYW1pYzo6UGFyYW1ldGVyTGlzdCAmCiAgKTsKCgoKCgoKCkNPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgRHluYW1pYzo6RXhj
ZXB0aW9uTGlzdCAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5w
dXRDRFIgJiwKICAgIER5bmFtaWM6OkV4Y2VwdGlvbkxpc3QgJgogICk7CiMgNDk2ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIK
IyA1MDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
RHluYW1pY0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvcG9zdC5oIiAxCiMgNTA3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL0R5bmFtaWNDLmgiIDIKIyAzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIiAyCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz
YWdpbmdDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9vcmJjb25mLmgiIDEKIyAy
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz
YWdpbmdDLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVmFsdWVCYXNlLmgiIDEK
IyAzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N
ZXNzYWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1ZhbHVlRmFjdG9yeS5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCgoKCgoKCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fRXhw
b3J0LmgiIDEKIyA0MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0FueS5oIiAxCiMgNDMgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9DRFIuaCIgMQojIDQ0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3Nh
Z2luZ0MuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vUmVtb3RlX09iamVjdF9Qcm94eV9JbXBsLmgiIDEKIyA0NSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAx
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1RpbWVC
YXNlQy5oIiAxCiMgNDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAyCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9UQU9fRXhw
b3J0LmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9JT1BDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vQW55LmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAxCiMgMzQgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAy
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9F
eGNlcHRpb24uaCIgMQojIDM1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL0lPUEMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vQ0RSLmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1NlcXVlbmNlLmgiIDEKIyAzNyAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgi
IDIKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9JT1BDLmgiCm5hbWVzcGFjZSBJT1AKewogIHR5cGVkZWYgQ09SQkE6OlVMb25nIFByb2ZpbGVJ
ZDsKICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgUHJvZmlsZUlkX291dDsKICAgIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Qcm9maWxlSWQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6
VUxvbmcgVEFHX0lOVEVSTkVUX0lPUDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdf
TVVMVElQTEVfQ09NUE9ORU5UUzsKCiAgc3RydWN0IFRhZ2dlZFByb2ZpbGU7CiAgY2xhc3MgVGFn
Z2VkUHJvZmlsZV92YXI7CgogIHN0cnVjdCBUYWdnZWRQcm9maWxlCiAgewoKCiAgICB0eXBlZGVm
IFRhZ2dlZFByb2ZpbGVfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlf
ZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIElPUDo6UHJvZmlsZUlkIHRhZzsKCgoKCiAgICBjbGFz
cyBfdGFvX3NlcV9PY3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAg
Y2xhc3MgX3Rhb19zZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVu
Y2U8Q09SQkE6Ok9jdGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3Rl
dCAodm9pZCk7CiAgICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAg
X3Rhb19zZXFfT2N0ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6
OlVMb25nIGxlbmd0aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JC
QTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29u
c3QgX3Rhb19zZXFfT2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAg
IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVm
IF90YW9fc2VxX09jdGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAo
CiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3Nh
Z2VfQmxvY2sqIG1iCiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxD
T1JCQTo6T2N0ZXQ+IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rh
b19zZXFfT2N0ZXQgX3Byb2ZpbGVfZGF0YV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0
IHByb2ZpbGVfZGF0YTsKICB9OwoKICBjbGFzcyBUYWdnZWRQcm9maWxlX3ZhcgogIHsKICBwdWJs
aWM6CiAgICBUYWdnZWRQcm9maWxlX3ZhciAodm9pZCk7CiAgICBUYWdnZWRQcm9maWxlX3ZhciAo
VGFnZ2VkUHJvZmlsZSAqKTsKICAgIFRhZ2dlZFByb2ZpbGVfdmFyIChjb25zdCBUYWdnZWRQcm9m
aWxlX3ZhciAmKTsKICAgIH5UYWdnZWRQcm9maWxlX3ZhciAodm9pZCk7CgogICAgVGFnZ2VkUHJv
ZmlsZV92YXIgJm9wZXJhdG9yPSAoVGFnZ2VkUHJvZmlsZSAqKTsKICAgIFRhZ2dlZFByb2ZpbGVf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRhZ2dlZFByb2ZpbGVfdmFyICYpOwogICAgVGFnZ2VkUHJv
ZmlsZSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBUYWdnZWRQcm9maWxlICpvcGVyYXRv
ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBUYWdnZWRQcm9maWxlICYoKSBj
b25zdDsKICAgIG9wZXJhdG9yIFRhZ2dlZFByb2ZpbGUgJigpOwogICAgb3BlcmF0b3IgVGFnZ2Vk
UHJvZmlsZSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRQcm9maWxlIComKCk7CgoKICAg
IGNvbnN0IFRhZ2dlZFByb2ZpbGUgJmluICh2b2lkKSBjb25zdDsKICAgIFRhZ2dlZFByb2ZpbGUg
Jmlub3V0ICh2b2lkKTsKICAgIFRhZ2dlZFByb2ZpbGUgKiZvdXQgKHZvaWQpOwogICAgVGFnZ2Vk
UHJvZmlsZSAqX3JldG4gKHZvaWQpOwogICAgVGFnZ2VkUHJvZmlsZSAqcHRyICh2b2lkKSBjb25z
dDsKCiAgcHJpdmF0ZToKICAgIFRhZ2dlZFByb2ZpbGUgKnB0cl87CiAgfTsKCiAgY2xhc3MgVGFn
Z2VkUHJvZmlsZV9vdXQKICB7CiAgcHVibGljOgogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKFRhZ2dl
ZFByb2ZpbGUgKiYpOwogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKFRhZ2dlZFByb2ZpbGVfdmFyICYp
OwogICAgVGFnZ2VkUHJvZmlsZV9vdXQgKGNvbnN0IFRhZ2dlZFByb2ZpbGVfb3V0ICYpOwogICAg
VGFnZ2VkUHJvZmlsZV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkUHJvZmlsZV9vdXQgJik7
CiAgICBUYWdnZWRQcm9maWxlX291dCAmb3BlcmF0b3I9IChUYWdnZWRQcm9maWxlICopOwogICAg
b3BlcmF0b3IgVGFnZ2VkUHJvZmlsZSAqJigpOwogICAgVGFnZ2VkUHJvZmlsZSAqJnB0ciAodm9p
ZCk7CiAgICBUYWdnZWRQcm9maWxlICpvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAg
IFRhZ2dlZFByb2ZpbGUgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBUYWdnZWRQ
cm9maWxlX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFn
Z2VkUHJvZmlsZTsKCiAgc3RydWN0IElPUjsKICBjbGFzcyBJT1JfdmFyOwoKICBzdHJ1Y3QgSU9S
CiAgewoKCiAgICB0eXBlZGVmIElPUl92YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBf
dGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgVEFPX1N0cmluZ19NYW5hZ2VyIHR5cGVf
aWQ7CgoKCgoKCiAgICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rh
b19zZXFfVGFnZ2VkUHJvZmlsZSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UK
ICAgICAgewogICAgICBwdWJsaWM6CgoKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J
T1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKHZvaWQpOwogICAgICAgIF9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoQ09SQkE6OlVMb25n
IG1heGltdW0pOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19z
ZXFfVGFnZ2VkUHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgICBDT1JCQTo6
VUxvbmcgbGVuZ3RoLAogICAgICAgICAgSU9QOjpUYWdnZWRQcm9maWxlICpkYXRhLAogICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDApOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoY29uc3QgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICZyaHMpOwogICAgICAg
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAm
b3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2Vx
X1RhZ2dlZFByb2ZpbGUgJnJocyk7CiAgICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICh2b2lkKTsKCiAgICAgICAgSU9Q
OjpUYWdnZWRQcm9maWxlICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgICAgY29u
c3QgSU9QOjpUYWdnZWRQcm9maWxlICZvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7
CgogICAgICAgIHN0YXRpYyBJT1A6OlRhZ2dlZFByb2ZpbGUgKmFsbG9jYnVmIChDT1JCQTo6VUxv
bmcgc2l6ZSk7CiAgICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoSU9QOjpUYWdnZWRQcm9maWxl
ICpidWZmZXIpOwogICAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6
VUxvbmcgbGVuZ3RoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2
b2lkKTsKCgogICAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJv
b2xlYW4gb3JwaGFuID0gMCk7CiAgICAgICAgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICpnZXRf
YnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBt
YXgsCiAgICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgSU9QOjpUYWdnZWRQ
cm9maWxlICpkYXRhLAogICAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CiAgICAgIH07
CiMgMjQ3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L0lPUEMuaCIKICAgIGNsYXNzIF90YW9fc2VxX1RhZ2dlZFByb2ZpbGU7CiAgICBjbGFzcyBfdGFv
X3NlcV9UYWdnZWRQcm9maWxlX3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19zZXFfVGFnZ2VkUHJv
ZmlsZSA6IHB1YmxpYwoKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFv
X3NlcV9UYWdnZWRQcm9maWxlCgoKCiAgICB7CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX1Rh
Z2dlZFByb2ZpbGUgKHZvaWQpOwogICAgICBfdGFvX3NlcV9UYWdnZWRQcm9maWxlIChDT1JCQTo6
VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAoCiAgICAgICAgQ09SQkE6
OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIElPUDo6VGFn
Z2VkUHJvZmlsZSAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAg
ICAgICk7CiAgICAgIF90YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKGNvbnN0IF90YW9fc2VxX1RhZ2dl
ZFByb2ZpbGUgJik7CiAgICAgIH5fdGFvX3NlcV9UYWdnZWRQcm9maWxlICh2b2lkKTsKICAgICAg
c3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYg
X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZV92YXIgX3Zhcl90eXBlOwoKCiAgICB9OwoKCgoKICAgIHR5
cGVkZWYgX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSBfcHJvZmlsZXNfc2VxOwoKCiAgICAgICAgICBf
dGFvX3NlcV9UYWdnZWRQcm9maWxlIHByb2ZpbGVzOwogIH07CgogIGNsYXNzIElPUl92YXIKICB7
CiAgcHVibGljOgogICAgSU9SX3ZhciAodm9pZCk7CiAgICBJT1JfdmFyIChJT1IgKik7CiAgICBJ
T1JfdmFyIChjb25zdCBJT1JfdmFyICYpOwogICAgfklPUl92YXIgKHZvaWQpOwoKICAgIElPUl92
YXIgJm9wZXJhdG9yPSAoSU9SICopOwogICAgSU9SX3ZhciAmb3BlcmF0b3I9IChjb25zdCBJT1Jf
dmFyICYpOwogICAgSU9SICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IElPUiAqb3BlcmF0
b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSU9SICYoKSBjb25zdDsKICAg
IG9wZXJhdG9yIElPUiAmKCk7CiAgICBvcGVyYXRvciBJT1IgJigpIGNvbnN0OwogICAgb3BlcmF0
b3IgSU9SIComKCk7CgoKICAgIGNvbnN0IElPUiAmaW4gKHZvaWQpIGNvbnN0OwogICAgSU9SICZp
bm91dCAodm9pZCk7CiAgICBJT1IgKiZvdXQgKHZvaWQpOwogICAgSU9SICpfcmV0biAodm9pZCk7
CiAgICBJT1IgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBJT1IgKnB0cl87CiAg
fTsKCiAgY2xhc3MgSU9SX291dAogIHsKICBwdWJsaWM6CiAgICBJT1Jfb3V0IChJT1IgKiYpOwog
ICAgSU9SX291dCAoSU9SX3ZhciAmKTsKICAgIElPUl9vdXQgKGNvbnN0IElPUl9vdXQgJik7CiAg
ICBJT1Jfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IElPUl9vdXQgJik7CiAgICBJT1Jfb3V0ICZvcGVy
YXRvcj0gKElPUiAqKTsKICAgIG9wZXJhdG9yIElPUiAqJigpOwogICAgSU9SIComcHRyICh2b2lk
KTsKICAgIElPUiAqb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJT1IgKiZwdHJf
OwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBJT1JfdmFyICYpOwogIH07CgogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JT1I7CgogIHR5cGVkZWYgQ09SQkE6OlVMb25nIENvbXBv
bmVudElkOwogIHR5cGVkZWYgQ09SQkE6OlVMb25nX291dCBDb21wb25lbnRJZF9vdXQ7CiAgICBl
eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfQ29tcG9uZW50SWQ7CgogIHN0cnVjdCBUYWdn
ZWRDb21wb25lbnQ7CiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50X3ZhcjsKCiAgc3RydWN0IFRhZ2dl
ZENvbXBvbmVudAogIHsKCgogICAgdHlwZWRlZiBUYWdnZWRDb21wb25lbnRfdmFyIF92YXJfdHlw
ZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIElP
UDo6Q29tcG9uZW50SWQgdGFnOwoKCgoKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0OwogICAgY2xh
c3MgX3Rhb19zZXFfT2N0ZXRfdmFyOwoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldCA6IHB1
YmxpYwoKICAgICAgVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+CgoKCiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIF90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgX3Rhb19zZXFf
T2N0ZXQgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAg
Q09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIENP
UkJBOjpPY3RldCAqYnVmZmVyLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UgPSAwCiAg
ICAgICk7CiAgICAgIF90YW9fc2VxX09jdGV0IChjb25zdCBfdGFvX3NlcV9PY3RldCAmKTsKICAg
ICAgfl90YW9fc2VxX09jdGV0ICh2b2lkKTsKICAgICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz
dHJ1Y3RvciAodm9pZCopOwoKCiAgICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXRfdmFyIF92YXJf
dHlwZTsKCgoKCiAgICAgIF90YW9fc2VxX09jdGV0ICgKICAgICAgICAgIENPUkJBOjpVTG9uZyBs
ZW5ndGgsCiAgICAgICAgICBjb25zdCBBQ0VfTWVzc2FnZV9CbG9jayogbWIKICAgICAgICApCiAg
ICAgICAgOiBUQU9fVW5ib3VuZGVkX1NlcXVlbmNlPENPUkJBOjpPY3RldD4gKGxlbmd0aCwgbWIp
IHt9CgoKICAgIH07CgoKCgogICAgdHlwZWRlZiBfdGFvX3NlcV9PY3RldCBfY29tcG9uZW50X2Rh
dGFfc2VxOwoKCiAgICAgICAgICBfdGFvX3NlcV9PY3RldCBjb21wb25lbnRfZGF0YTsKICB9OwoK
ICBjbGFzcyBUYWdnZWRDb21wb25lbnRfdmFyCiAgewogIHB1YmxpYzoKICAgIFRhZ2dlZENvbXBv
bmVudF92YXIgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50X3ZhciAoVGFnZ2VkQ29tcG9uZW50
ICopOwogICAgVGFnZ2VkQ29tcG9uZW50X3ZhciAoY29uc3QgVGFnZ2VkQ29tcG9uZW50X3ZhciAm
KTsKICAgIH5UYWdnZWRDb21wb25lbnRfdmFyICh2b2lkKTsKCiAgICBUYWdnZWRDb21wb25lbnRf
dmFyICZvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudCAqKTsKICAgIFRhZ2dlZENvbXBvbmVudF92
YXIgJm9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50X3ZhciAmKTsKICAgIFRhZ2dlZENv
bXBvbmVudCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgKm9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRhZ2dlZENvbXBvbmVu
dCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRDb21wb25lbnQgJigpOwogICAgb3BlcmF0
b3IgVGFnZ2VkQ29tcG9uZW50ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFRhZ2dlZENvbXBvbmVu
dCAqJigpOwoKCiAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgJmluICh2b2lkKSBjb25zdDsKICAg
IFRhZ2dlZENvbXBvbmVudCAmaW5vdXQgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50IComb3V0
ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudCAqX3JldG4gKHZvaWQpOwogICAgVGFnZ2VkQ29t
cG9uZW50ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50
ICpwdHJfOwogIH07CgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudF9vdXQKICB7CiAgcHVibGljOgog
ICAgVGFnZ2VkQ29tcG9uZW50X291dCAoVGFnZ2VkQ29tcG9uZW50IComKTsKICAgIFRhZ2dlZENv
bXBvbmVudF9vdXQgKFRhZ2dlZENvbXBvbmVudF92YXIgJik7CiAgICBUYWdnZWRDb21wb25lbnRf
b3V0IChjb25zdCBUYWdnZWRDb21wb25lbnRfb3V0ICYpOwogICAgVGFnZ2VkQ29tcG9uZW50X291
dCAmb3BlcmF0b3I9IChjb25zdCBUYWdnZWRDb21wb25lbnRfb3V0ICYpOwogICAgVGFnZ2VkQ29t
cG9uZW50X291dCAmb3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnQgKik7CiAgICBvcGVyYXRvciBU
YWdnZWRDb21wb25lbnQgKiYoKTsKICAgIFRhZ2dlZENvbXBvbmVudCAqJnB0ciAodm9pZCk7CiAg
ICBUYWdnZWRDb21wb25lbnQgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgVGFn
Z2VkQ29tcG9uZW50IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29t
cG9uZW50X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFn
Z2VkQ29tcG9uZW50OwoKCgoKCgoKICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP
UF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1Nl
cXVlbmNlCiAgICB7CiAgICBwdWJsaWM6CgoKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
SU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk
X1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhp
bXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50
UHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0
aCwKICAgICAgICBUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSA9IDApOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVD
b21wb25lbnRQcm9maWxlIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlw
bGVDb21wb25lbnRQcm9maWxlICZyaHMpOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J
T1BfTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJnJocyk7CiAgICAgIHZp
cnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2Zp
bGUgKHZvaWQpOwoKICAgICAgVGFnZ2VkQ29tcG9uZW50ICZvcGVyYXRvcltdIChDT1JCQTo6VUxv
bmcgaSk7CiAgICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGkpIGNvbnN0OwoKICAgICAgc3RhdGljIFRhZ2dlZENvbXBvbmVudCAqYWxsb2NidWYgKENP
UkJBOjpVTG9uZyBzaXplKTsKICAgICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoVGFnZ2VkQ29tcG9u
ZW50ICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6
OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZv
aWQpOwoKCiAgICAgIFRhZ2dlZENvbXBvbmVudCAqZ2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4g
b3JwaGFuID0gMCk7CiAgICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudCAqZ2V0X2J1ZmZlciAodm9p
ZCkgY29uc3Q7CiAgICAgIHZvaWQgcmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBD
T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIFRhZ2dlZENvbXBvbmVudCAqZGF0YSwKICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgNTA1ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaCIKICBjbGFzcyBNdWx0aXBs
ZUNvbXBvbmVudFByb2ZpbGU7CiAgY2xhc3MgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhcjsK
CgoKCgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSA6IHB1YmxpYwoKICAgIF9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUKCgoKICB7CiAg
cHVibGljOgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICh2b2lkKTsKICAgIE11bHRpcGxl
Q29tcG9uZW50UHJvZmlsZSAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBNdWx0aXBsZUNvbXBvbmVu
dFByb2ZpbGUgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVu
Z3RoLAogICAgICBUYWdnZWRDb21wb25lbnQgKmJ1ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSA9IDAKICAgICk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKGNvbnN0IE11
bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmKTsKICAgIH5NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg
KHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAg
ICB0eXBlZGVmIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgX3Zhcl90eXBlOwoKCiAgfTsK
IyA1NDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
SU9QQy5oIgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIKICB7CiAgcHVibGlj
OgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAodm9pZCk7CiAgICBNdWx0aXBsZUNv
bXBvbmVudFByb2ZpbGVfdmFyIChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKik7CiAgICBNdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyIChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf
dmFyICYpOwogICAgfk11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgKHZvaWQpOwoKICAgIE11
bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJm9wZXJhdG9yPSAoTXVsdGlwbGVDb21wb25lbnRQ
cm9maWxlICopOwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmb3BlcmF0b3I9IChj
b25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyICYpOwogICAgTXVsdGlwbGVDb21wb25l
bnRQcm9maWxlICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IE11bHRpcGxlQ29tcG9uZW50
UHJvZmlsZSAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgTXVs
dGlwbGVDb21wb25lbnRQcm9maWxlICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIE11bHRpcGxlQ29t
cG9uZW50UHJvZmlsZSAmKCk7CiAgICBvcGVyYXRvciBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKCk7Cgog
ICAgVGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKICAg
IGNvbnN0IFRhZ2dlZENvbXBvbmVudCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkg
Y29uc3Q7CgoKICAgIGNvbnN0IE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmaW4gKHZvaWQpIGNv
bnN0OwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlICZpbm91dCAodm9pZCk7CiAgICBNdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGUgKiZvdXQgKHZvaWQpOwogICAgTXVsdGlwbGVDb21wb25lbnRQ
cm9maWxlICpfcmV0biAodm9pZCk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnB0ciAo
dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnB0
cl87CiAgfTsKIyA1ODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vSU9QQy5oIgogIGNsYXNzIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQKICB7
CiAgcHVibGljOgogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAoTXVsdGlwbGVDb21w
b25lbnRQcm9maWxlIComKTsKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQgKE11bHRp
cGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJik7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf
b3V0IChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0ICYpOwogICAgTXVsdGlwbGVD
b21wb25lbnRQcm9maWxlX291dCAmb3BlcmF0b3I9IChjb25zdCBNdWx0aXBsZUNvbXBvbmVudFBy
b2ZpbGVfb3V0ICYpOwogICAgTXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmb3BlcmF0b3I9
IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKik7CiAgICBvcGVyYXRvciBNdWx0aXBsZUNvbXBv
bmVudFByb2ZpbGUgKiYoKTsKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqJnB0ciAodm9p
ZCk7CiAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAg
VGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJp
dmF0ZToKICAgIE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqJnB0cl87CgogICAgdm9pZCBvcGVy
YXRvcj0gKGNvbnN0IE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJik7CiAgfTsKCgoKCiAg
ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTsK
CgoKCgoKCiAgICBjbGFzcyBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9u
ZW50TGlzdCA6IHB1YmxpYyBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1
YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50
TGlzdCAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w
b25lbnRMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAg
ICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIFRhZ2dlZENvbXBvbmVudCAqZGF0YSwK
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk
X1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0IChjb25zdCBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmcmhzKTsKICAgICAgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgJm9wZXJhdG9yPSAoY29uc3QgX1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgJnJocyk7CiAgICAg
IHZpcnR1YWwgfl9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0
ICh2b2lkKTsKCiAgICAgIFRhZ2dlZENvbXBvbmVudCAmb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n
IGkpOwogICAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpKSBjb25zdDsKCiAgICAgIHN0YXRpYyBUYWdnZWRDb21wb25lbnQgKmFsbG9jYnVmIChDT1JC
QTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVidWYgKFRhZ2dlZENvbXBvbmVu
dCAqYnVmZmVyKTsKICAgICAgdmlydHVhbCB2b2lkIF9hbGxvY2F0ZV9idWZmZXIgKENPUkJBOjpV
TG9uZyBsZW5ndGgpOwogICAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lk
KTsKCgogICAgICBUYWdnZWRDb21wb25lbnQgKmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9y
cGhhbiA9IDApOwogICAgICBjb25zdCBUYWdnZWRDb21wb25lbnQgKmdldF9idWZmZXIgKHZvaWQp
IGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09S
QkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICAgICAg
Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSk7CiAgICB9OwojIDY1NyAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29t
cG9uZW50TGlzdDsKICBjbGFzcyBUYWdnZWRDb21wb25lbnRMaXN0X3ZhcjsKCgoKCgogIGNsYXNz
IFRhZ2dlZENvbXBvbmVudExpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5j
ZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdAoKCgogIHsKICBwdWJsaWM6CiAgICBUYWdnZWRDb21w
b25lbnRMaXN0ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudExpc3QgKENPUkJBOjpVTG9uZyBt
YXgpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAg
ICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgIFRhZ2dlZENvbXBvbmVudCAqYnVmZmVyLAog
ICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIFRhZ2dlZENvbXBvbmVu
dExpc3QgKGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3QgJik7CiAgICB+VGFnZ2VkQ29tcG9uZW50
TGlzdCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7
CgoKICAgIHR5cGVkZWYgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgX3Zhcl90eXBlOwoKCiAgfTsK
IyA3MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
SU9QQy5oIgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudExpc3RfdmFyCiAgewogIHB1YmxpYzoKICAg
IFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudExpc3Rf
dmFyIChUYWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIg
KGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICYpOwogICAgflRhZ2dlZENvbXBvbmVudExp
c3RfdmFyICh2b2lkKTsKCiAgICBUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmb3BlcmF0b3I9IChU
YWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJm9wZXJh
dG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJik7CiAgICBUYWdnZWRDb21wb25l
bnRMaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3Qg
Km9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRhZ2dlZENvbXBv
bmVudExpc3QgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9uZW50TGlzdCAmKCk7
CiAgICBvcGVyYXRvciBUYWdnZWRDb21wb25lbnRMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9y
IFRhZ2dlZENvbXBvbmVudExpc3QgKiYoKTsKCiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRv
cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICYgb3Bl
cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgVGFnZ2VkQ29t
cG9uZW50TGlzdCAmaW4gKHZvaWQpIGNvbnN0OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAmaW5v
dXQgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqJm91dCAodm9pZCk7CiAgICBUYWdn
ZWRDb21wb25lbnRMaXN0ICpfcmV0biAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnRMaXN0ICpw
dHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqcHRy
XzsKICB9OwojIDczOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQKICB7CiAgcHVi
bGljOgogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKFRhZ2dlZENvbXBvbmVudExpc3QgKiYp
OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKFRhZ2dlZENvbXBvbmVudExpc3RfdmFyICYp
OwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgKGNvbnN0IFRhZ2dlZENvbXBvbmVudExpc3Rf
b3V0ICYpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgVGFn
Z2VkQ29tcG9uZW50TGlzdF9vdXQgJik7CiAgICBUYWdnZWRDb21wb25lbnRMaXN0X291dCAmb3Bl
cmF0b3I9IChUYWdnZWRDb21wb25lbnRMaXN0ICopOwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9u
ZW50TGlzdCAqJigpOwogICAgVGFnZ2VkQ29tcG9uZW50TGlzdCAqJnB0ciAodm9pZCk7CiAgICBU
YWdnZWRDb21wb25lbnRMaXN0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVu
dCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHByaXZhdGU6CiAgICBUYWdn
ZWRDb21wb25lbnRMaXN0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2Vk
Q29tcG9uZW50TGlzdF92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w
dHIgX3RjX1RhZ2dlZENvbXBvbmVudExpc3Q7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSA6IHB1YmxpYyBUQU9fVW5ib3VuZGVk
X0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxICh2b2lkKTsKICAgICAgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0p
OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxIChD
T1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAg
IFRhZ2dlZENvbXBvbmVudCAqZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g
MCk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEg
KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEgJnJo
cyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEg
Jm9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBv
bmVudFNlcSAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q
X1RhZ2dlZENvbXBvbmVudFNlcSAodm9pZCk7CgogICAgICBUYWdnZWRDb21wb25lbnQgJm9wZXJh
dG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICZvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgVGFnZ2VkQ29tcG9u
ZW50ICphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIHNpemUpOwogICAgICBzdGF0aWMgdm9pZCBmcmVl
YnVmIChUYWdnZWRDb21wb25lbnQgKmJ1ZmZlcik7CiAgICAgIHZpcnR1YWwgdm9pZCBfYWxsb2Nh
dGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3RoKTsKICAgICAgdmlydHVhbCB2b2lkIF9kZWFs
bG9jYXRlX2J1ZmZlciAodm9pZCk7CgoKICAgICAgVGFnZ2VkQ29tcG9uZW50ICpnZXRfYnVmZmVy
IChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50
ICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgICAgdm9pZCByZXBsYWNlIChDT1JCQTo6VUxv
bmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgVGFnZ2VkQ29tcG9u
ZW50ICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpOwogICAgfTsKIyA4MDkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o
IgogIGNsYXNzIFRhZ2dlZENvbXBvbmVudFNlcTsKICBjbGFzcyBUYWdnZWRDb21wb25lbnRTZXFf
dmFyOwoKCgoKCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxIDogcHVibGljCgogICAgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcQoKCgogIHsKICBwdWJsaWM6
CiAgICBUYWdnZWRDb21wb25lbnRTZXEgKHZvaWQpOwogICAgVGFnZ2VkQ29tcG9uZW50U2VxIChD
T1JCQTo6VUxvbmcgbWF4KTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAoCiAgICAgIENPUkJBOjpV
TG9uZyBtYXgsCiAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgIFRhZ2dlZENvbXBvbmVu
dCAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIFRh
Z2dlZENvbXBvbmVudFNlcSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxICYpOwogICAgflRhZ2dl
ZENvbXBvbmVudFNlcSAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y
ICh2b2lkKik7CgoKICAgIHR5cGVkZWYgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciBfdmFyX3R5cGU7
CgoKICB9OwojIDg1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9JT1BDLmgiCiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhcgogIHsKICBwdWJs
aWM6CiAgICBUYWdnZWRDb21wb25lbnRTZXFfdmFyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVu
dFNlcV92YXIgKFRhZ2dlZENvbXBvbmVudFNlcSAqKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcV92
YXIgKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV92YXIgJik7CiAgICB+VGFnZ2VkQ29tcG9uZW50
U2VxX3ZhciAodm9pZCk7CgogICAgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmb3BlcmF0b3I9IChU
YWdnZWRDb21wb25lbnRTZXEgKik7CiAgICBUYWdnZWRDb21wb25lbnRTZXFfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV92YXIgJik7CiAgICBUYWdnZWRDb21wb25lbnRT
ZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxICpvcGVy
YXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBUYWdnZWRDb21wb25lbnRT
ZXEgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGFnZ2VkQ29tcG9uZW50U2VxICYoKTsKICAgIG9w
ZXJhdG9yIFRhZ2dlZENvbXBvbmVudFNlcSAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBUYWdnZWRD
b21wb25lbnRTZXEgKiYoKTsKCiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgaW5kZXgpOwogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50ICYgb3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgVGFnZ2VkQ29tcG9uZW50U2Vx
ICZpbiAodm9pZCkgY29uc3Q7CiAgICBUYWdnZWRDb21wb25lbnRTZXEgJmlub3V0ICh2b2lkKTsK
ICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqJm91dCAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnRT
ZXEgKl9yZXRuICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqcHRyICh2b2lkKSBjb25z
dDsKCiAgcHJpdmF0ZToKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqcHRyXzsKICB9OwojIDg5MSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgi
CiAgY2xhc3MgVGFnZ2VkQ29tcG9uZW50U2VxX291dAogIHsKICBwdWJsaWM6CiAgICBUYWdnZWRD
b21wb25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXEgKiYpOwogICAgVGFnZ2VkQ29tcG9u
ZW50U2VxX291dCAoVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmKTsKICAgIFRhZ2dlZENvbXBvbmVu
dFNlcV9vdXQgKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJik7CiAgICBUYWdnZWRDb21w
b25lbnRTZXFfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJik7
CiAgICBUYWdnZWRDb21wb25lbnRTZXFfb3V0ICZvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudFNl
cSAqKTsKICAgIG9wZXJhdG9yIFRhZ2dlZENvbXBvbmVudFNlcSAqJigpOwogICAgVGFnZ2VkQ29t
cG9uZW50U2VxIComcHRyICh2b2lkKTsKICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqb3BlcmF0b3It
PiAodm9pZCk7CiAgICBUYWdnZWRDb21wb25lbnQgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcg
aW5kZXgpOwoKICBwcml2YXRlOgogICAgVGFnZ2VkQ29tcG9uZW50U2VxIComcHRyXzsKCiAgICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgVGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAmKTsKICB9OwoKCgoK
ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGFnZ2VkQ29tcG9uZW50U2VxOwoKICBl
eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19PUkJfVFlQRTsKCiAgZXh0ZXJuIGNvbnN0IENP
UkJBOjpVTG9uZyBUQUdfQ09ERV9TRVRTOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRB
R19QT0xJQ0lFUzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfQUxURVJOQVRFX0lJ
T1BfQUREUkVTUzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfQ09NUExFVEVfT0JK
RUNUX0tFWTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfRU5EUE9JTlRfSURfUE9T
SVRJT047CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgVEFHX0xPQ0FUSU9OX1BPTElDWTsK
CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBUQUdfRENFX1NUUklOR19CSU5ESU5HOwoKICBl
eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19EQ0VfQklORElOR19OQU1FOwoKICBleHRlcm4g
Y29uc3QgQ09SQkE6OlVMb25nIFRBR19EQ0VfTk9fUElQRVM7CgogIHR5cGVkZWYgQ09SQkE6OlVM
b25nIFNlcnZpY2VJZDsKICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgU2VydmljZUlkX291dDsK
ICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TZXJ2aWNlSWQ7CgogIHN0cnVjdCBT
ZXJ2aWNlQ29udGV4dDsKICBjbGFzcyBTZXJ2aWNlQ29udGV4dF92YXI7CgogIHN0cnVjdCBTZXJ2
aWNlQ29udGV4dAogIHsKCgogICAgdHlwZWRlZiBTZXJ2aWNlQ29udGV4dF92YXIgX3Zhcl90eXBl
OwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgSU9Q
OjpTZXJ2aWNlSWQgY29udGV4dF9pZDsKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9PY3RldDsKICAg
IGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19zZXFfT2N0ZXQg
OiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PgoKCgog
ICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIF90YW9f
c2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0ZXQgKAogICAg
ICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAg
ICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0g
MAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFfT2N0ZXQgJik7
CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55
X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09jdGV0X3ZhciBf
dmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBDT1JCQTo6VUxv
bmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iCiAgICAgICAg
KQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+IChsZW5ndGgs
IG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQgX2NvbnRleHRf
ZGF0YV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0IGNvbnRleHRfZGF0YTsKICB9OwoK
ICBjbGFzcyBTZXJ2aWNlQ29udGV4dF92YXIKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRl
eHRfdmFyICh2b2lkKTsKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAoU2VydmljZUNvbnRleHQgKik7
CiAgICBTZXJ2aWNlQ29udGV4dF92YXIgKGNvbnN0IFNlcnZpY2VDb250ZXh0X3ZhciAmKTsKICAg
IH5TZXJ2aWNlQ29udGV4dF92YXIgKHZvaWQpOwoKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAmb3Bl
cmF0b3I9IChTZXJ2aWNlQ29udGV4dCAqKTsKICAgIFNlcnZpY2VDb250ZXh0X3ZhciAmb3BlcmF0
b3I9IChjb25zdCBTZXJ2aWNlQ29udGV4dF92YXIgJik7CiAgICBTZXJ2aWNlQ29udGV4dCAqb3Bl
cmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBTZXJ2aWNlQ29udGV4dCAqb3BlcmF0b3ItPiAodm9p
ZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmljZUNvbnRleHQgJigpIGNvbnN0Owog
ICAgb3BlcmF0b3IgU2VydmljZUNvbnRleHQgJigpOwogICAgb3BlcmF0b3IgU2VydmljZUNvbnRl
eHQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmljZUNvbnRleHQgKiYoKTsKCgogICAgY29u
c3QgU2VydmljZUNvbnRleHQgJmluICh2b2lkKSBjb25zdDsKICAgIFNlcnZpY2VDb250ZXh0ICZp
bm91dCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dCAqJm91dCAodm9pZCk7CiAgICBTZXJ2aWNl
Q29udGV4dCAqX3JldG4gKHZvaWQpOwogICAgU2VydmljZUNvbnRleHQgKnB0ciAodm9pZCkgY29u
c3Q7CgogIHByaXZhdGU6CiAgICBTZXJ2aWNlQ29udGV4dCAqcHRyXzsKICB9OwoKICBjbGFzcyBT
ZXJ2aWNlQ29udGV4dF9vdXQKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRleHRfb3V0IChT
ZXJ2aWNlQ29udGV4dCAqJik7CiAgICBTZXJ2aWNlQ29udGV4dF9vdXQgKFNlcnZpY2VDb250ZXh0
X3ZhciAmKTsKICAgIFNlcnZpY2VDb250ZXh0X291dCAoY29uc3QgU2VydmljZUNvbnRleHRfb3V0
ICYpOwogICAgU2VydmljZUNvbnRleHRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZpY2VDb250
ZXh0X291dCAmKTsKICAgIFNlcnZpY2VDb250ZXh0X291dCAmb3BlcmF0b3I9IChTZXJ2aWNlQ29u
dGV4dCAqKTsKICAgIG9wZXJhdG9yIFNlcnZpY2VDb250ZXh0IComKCk7CiAgICBTZXJ2aWNlQ29u
dGV4dCAqJnB0ciAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dCAqb3BlcmF0b3ItPiAodm9pZCk7
CgogIHByaXZhdGU6CiAgICBTZXJ2aWNlQ29udGV4dCAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRv
cj0gKGNvbnN0IFNlcnZpY2VDb250ZXh0X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfU2VydmljZUNvbnRleHQ7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCA6IHB1YmxpYyBUQU9fVW5ib3Vu
ZGVkX0Jhc2VfU2VxdWVuY2UKICAgIHsKICAgIHB1YmxpYzoKCgogICAgICBfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0ICh2b2lkKTsKICAgICAgX1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6OlVMb25nIG1heGlt
dW0pOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0
IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAg
ICAgIFNlcnZpY2VDb250ZXh0ICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2Ug
PSAwKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz
dCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAm
cmhzKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz
dCAmb3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNv
bnRleHRMaXN0ICZyaHMpOwogICAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J
T1BfU2VydmljZUNvbnRleHRMaXN0ICh2b2lkKTsKCiAgICAgIFNlcnZpY2VDb250ZXh0ICZvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFNlcnZpY2VDb250ZXh0ICZvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgU2VydmljZUNvbnRl
eHQgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVi
dWYgKFNlcnZpY2VDb250ZXh0ICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRl
X2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxv
Y2F0ZV9idWZmZXIgKHZvaWQpOwoKCiAgICAgIFNlcnZpY2VDb250ZXh0ICpnZXRfYnVmZmVyIChD
T1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgU2VydmljZUNvbnRleHQgKmdl
dF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBt
YXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBTZXJ2aWNlQ29udGV4dCAq
ZGF0YSwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgMTEwMiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAg
Y2xhc3MgU2VydmljZUNvbnRleHRMaXN0OwogIGNsYXNzIFNlcnZpY2VDb250ZXh0TGlzdF92YXI7
CgoKCgoKICBjbGFzcyBTZXJ2aWNlQ29udGV4dExpc3QgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0CgoKCiAgewogIHB1YmxpYzoKICAg
IFNlcnZpY2VDb250ZXh0TGlzdCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKENPUkJB
OjpVTG9uZyBtYXgpOwogICAgU2VydmljZUNvbnRleHRMaXN0ICgKICAgICAgQ09SQkE6OlVMb25n
IG1heCwKICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgU2VydmljZUNvbnRleHQgKmJ1
ZmZlciwKICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgICBTZXJ2aWNl
Q29udGV4dExpc3QgKGNvbnN0IFNlcnZpY2VDb250ZXh0TGlzdCAmKTsKICAgIH5TZXJ2aWNlQ29u
dGV4dExpc3QgKHZvaWQpOwogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9p
ZCopOwoKCiAgICB0eXBlZGVmIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgX3Zhcl90eXBlOwoKCiAg
fTsKIyAxMTQ1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL0lPUEMuaCIKICBjbGFzcyBTZXJ2aWNlQ29udGV4dExpc3RfdmFyCiAgewogIHB1YmxpYzoK
ICAgIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgKHZvaWQpOwogICAgU2VydmljZUNvbnRleHRMaXN0
X3ZhciAoU2VydmljZUNvbnRleHRMaXN0ICopOwogICAgU2VydmljZUNvbnRleHRMaXN0X3ZhciAo
Y29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICAgIH5TZXJ2aWNlQ29udGV4dExpc3Rf
dmFyICh2b2lkKTsKCiAgICBTZXJ2aWNlQ29udGV4dExpc3RfdmFyICZvcGVyYXRvcj0gKFNlcnZp
Y2VDb250ZXh0TGlzdCAqKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdF92YXIgJm9wZXJhdG9yPSAo
Y29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAq
b3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBTZXJ2aWNlQ29udGV4dExpc3QgKm9wZXJhdG9y
LT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZpY2VDb250ZXh0TGlzdCAm
KCkgY29uc3Q7CiAgICBvcGVyYXRvciBTZXJ2aWNlQ29udGV4dExpc3QgJigpOwogICAgb3BlcmF0
b3IgU2VydmljZUNvbnRleHRMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFNlcnZpY2VDb250
ZXh0TGlzdCAqJigpOwoKICAgIFNlcnZpY2VDb250ZXh0ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGluZGV4KTsKICAgIGNvbnN0IFNlcnZpY2VDb250ZXh0ICYgb3BlcmF0b3JbXSAoQ09SQkE6
OlVMb25nIGluZGV4KSBjb25zdDsKCgogICAgY29uc3QgU2VydmljZUNvbnRleHRMaXN0ICZpbiAo
dm9pZCkgY29uc3Q7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgJmlub3V0ICh2b2lkKTsKICAgIFNl
cnZpY2VDb250ZXh0TGlzdCAqJm91dCAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKl9y
ZXRuICh2b2lkKTsKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAqcHRyICh2b2lkKSBjb25zdDsKCiAg
cHJpdmF0ZToKICAgIFNlcnZpY2VDb250ZXh0TGlzdCAqcHRyXzsKICB9OwojIDExODQgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNs
YXNzIFNlcnZpY2VDb250ZXh0TGlzdF9vdXQKICB7CiAgcHVibGljOgogICAgU2VydmljZUNvbnRl
eHRMaXN0X291dCAoU2VydmljZUNvbnRleHRMaXN0IComKTsKICAgIFNlcnZpY2VDb250ZXh0TGlz
dF9vdXQgKFNlcnZpY2VDb250ZXh0TGlzdF92YXIgJik7CiAgICBTZXJ2aWNlQ29udGV4dExpc3Rf
b3V0IChjb25zdCBTZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICYpOwogICAgU2VydmljZUNvbnRleHRM
aXN0X291dCAmb3BlcmF0b3I9IChjb25zdCBTZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICYpOwogICAg
U2VydmljZUNvbnRleHRMaXN0X291dCAmb3BlcmF0b3I9IChTZXJ2aWNlQ29udGV4dExpc3QgKik7
CiAgICBvcGVyYXRvciBTZXJ2aWNlQ29udGV4dExpc3QgKiYoKTsKICAgIFNlcnZpY2VDb250ZXh0
TGlzdCAqJnB0ciAodm9pZCk7CiAgICBTZXJ2aWNlQ29udGV4dExpc3QgKm9wZXJhdG9yLT4gKHZv
aWQpOwogICAgU2VydmljZUNvbnRleHQgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp
OwoKICBwcml2YXRlOgogICAgU2VydmljZUNvbnRleHRMaXN0IComcHRyXzsKCiAgICB2b2lkIG9w
ZXJhdG9yPSAoY29uc3QgU2VydmljZUNvbnRleHRMaXN0X3ZhciAmKTsKICB9OwoKCgoKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfU2VydmljZUNvbnRleHRMaXN0OwoKICBleHRlcm4g
Y29uc3QgQ09SQkE6OlVMb25nIFRyYW5zYWN0aW9uU2VydmljZTsKCiAgZXh0ZXJuIGNvbnN0IENP
UkJBOjpVTG9uZyBDb2RlU2V0czsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBDaGFpbkJ5
cGFzc0NoZWNrOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIENoYWluQnlwYXNzSW5mbzsK
CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBMb2dpY2FsVGhyZWFkSWQ7CgogIGV4dGVybiBj
b25zdCBDT1JCQTo6VUxvbmcgQklfRElSX0lJT1A7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxv
bmcgU2VuZGluZ0NvbnRleHRSdW5UaW1lOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIElO
Vk9DQVRJT05fUE9MSUNJRVM7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgVW5rbm93bkV4
Y2VwdGlvbkluZm87CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUlRDb3JiYVByaW9yaXR5
OwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJUQ29yYmFQcmlvcml0eVJhbmdlOwoKICBl
eHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19GVF9HUk9VUDsKCiAgZXh0ZXJuIGNvbnN0IENP
UkJBOjpVTG9uZyBUQUdfRlRfUFJJTUFSWTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBU
QUdfRlRfSEVBUlRCRUFUX0VOQUJMRUQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgRlRf
R1JPVVBfVkVSU0lPTjsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBGVF9SRVFVRVNUOwoK
CgoKCiAgY2xhc3MgQ29kZWM7CiAgdHlwZWRlZiBDb2RlYyAqQ29kZWNfcHRyOwoKCgoKCgoKICBj
bGFzcyBDb2RlY192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIENv
ZGVjX3ZhciAodm9pZCk7CiAgICBDb2RlY192YXIgKENvZGVjX3B0ciBwKSA6IHB0cl8gKHApIHt9
CiAgICBDb2RlY192YXIgKGNvbnN0IENvZGVjX3ZhciAmKTsKICAgIH5Db2RlY192YXIgKHZvaWQp
OwoKICAgIENvZGVjX3ZhciAmb3BlcmF0b3I9IChDb2RlY19wdHIpOwogICAgQ29kZWNfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IENvZGVjX3ZhciAmKTsKICAgIENvZGVjX3B0ciBvcGVyYXRvci0+ICh2
b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDb2RlY19wdHIgJigpIGNvbnN0OwogICAg
b3BlcmF0b3IgQ29kZWNfcHRyICYoKTsKCiAgICBDb2RlY19wdHIgaW4gKHZvaWQpIGNvbnN0Owog
ICAgQ29kZWNfcHRyICZpbm91dCAodm9pZCk7CiAgICBDb2RlY19wdHIgJm91dCAodm9pZCk7CiAg
ICBDb2RlY19wdHIgX3JldG4gKHZvaWQpOwogICAgQ29kZWNfcHRyIHB0ciAodm9pZCkgY29uc3Q7
CgoKCiAgICBzdGF0aWMgQ29kZWNfcHRyIGR1cGxpY2F0ZSAoQ29kZWNfcHRyKTsKICAgIHN0YXRp
YyB2b2lkIHJlbGVhc2UgKENvZGVjX3B0cik7CiAgICBzdGF0aWMgQ29kZWNfcHRyIG5pbCAodm9p
ZCk7CiAgICBzdGF0aWMgQ29kZWNfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6
RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAq
KTsKCiAgcHJpdmF0ZToKICAgIENvZGVjX3B0ciBwdHJfOwoKICAgIENvZGVjX3ZhciAoY29uc3Qg
VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ29kZWNfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19C
YXNlX3ZhciAmcmhzKTsKICB9OwojIDEyOTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNsYXNzIENvZGVjX291dAogIHsKICBwdWJs
aWM6CiAgICBDb2RlY19vdXQgKENvZGVjX3B0ciAmKTsKICAgIENvZGVjX291dCAoQ29kZWNfdmFy
ICYpOwogICAgQ29kZWNfb3V0IChjb25zdCBDb2RlY19vdXQgJik7CiAgICBDb2RlY19vdXQgJm9w
ZXJhdG9yPSAoY29uc3QgQ29kZWNfb3V0ICYpOwogICAgQ29kZWNfb3V0ICZvcGVyYXRvcj0gKGNv
bnN0IENvZGVjX3ZhciAmKTsKICAgIENvZGVjX291dCAmb3BlcmF0b3I9IChDb2RlY19wdHIpOwog
ICAgb3BlcmF0b3IgQ29kZWNfcHRyICYoKTsKICAgIENvZGVjX3B0ciAmcHRyICh2b2lkKTsKICAg
IENvZGVjX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIENvZGVjX3B0ciAm
cHRyXzsKICB9OwojIDEzMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vSU9QQy5oIgpjbGFzcyBDb2RlYyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09i
amVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDb2RlY19wdHIgX3B0cl90eXBlOwogICAg
dHlwZWRlZiBDb2RlY192YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIENvZGVjX3B0ciBfZHVw
bGljYXRlIChDb2RlY19wdHIgb2JqKTsKICAgIHN0YXRpYyBDb2RlY19wdHIgX25hcnJvdyAoCiAg
ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENvZGVjX3B0ciBfdW5jaGVja2VkX25h
cnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENvZGVjX3B0ciBfbmls
ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChDb2RlY19wdHIpMDsKICAgICAgfQoKCgoK
CiAgICBjbGFzcyBJbnZhbGlkVHlwZUZvckVuY29kaW5nIDogcHVibGljIENPUkJBOjpVc2VyRXhj
ZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nICh2
b2lkKTsKCgogICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nIChjb25zdCBJbnZhbGlkVHlwZUZv
ckVuY29kaW5nICYpOwoKCiAgICAgIH5JbnZhbGlkVHlwZUZvckVuY29kaW5nICh2b2lkKTsKCgog
ICAgICBJbnZhbGlkVHlwZUZvckVuY29kaW5nICZvcGVyYXRvcj0gKGNvbnN0IEludmFsaWRUeXBl
Rm9yRW5jb2RpbmcgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAg
IHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAg
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgSW52YWxpZFR5
cGVGb3JFbmNvZGluZyAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBz
dGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMTM5MCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiAg
ICBjbGFzcyBGb3JtYXRNaXNtYXRjaCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAg
ewogICAgcHVibGljOgoKICAgICAgRm9ybWF0TWlzbWF0Y2ggKHZvaWQpOwoKCiAgICAgIEZvcm1h
dE1pc21hdGNoIChjb25zdCBGb3JtYXRNaXNtYXRjaCAmKTsKCgogICAgICB+Rm9ybWF0TWlzbWF0
Y2ggKHZvaWQpOwoKCiAgICAgIEZvcm1hdE1pc21hdGNoICZvcGVyYXRvcj0gKGNvbnN0IEZvcm1h
dE1pc21hdGNoICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2
aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVh
bCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIEZvcm1hdE1pc21h
dGNoICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBDT1JC
QTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgfTsKIyAxNDMxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaCIKICAgIGNsYXNzIFR5
cGVNaXNtYXRjaCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGlj
OgoKICAgICAgVHlwZU1pc21hdGNoICh2b2lkKTsKCgogICAgICBUeXBlTWlzbWF0Y2ggKGNvbnN0
IFR5cGVNaXNtYXRjaCAmKTsKCgogICAgICB+VHlwZU1pc21hdGNoICh2b2lkKTsKCgogICAgICBU
eXBlTWlzbWF0Y2ggJm9wZXJhdG9yPSAoY29uc3QgVHlwZU1pc21hdGNoICYpOwoKICAgICAgdmly
dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUg
KAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAg
ICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg
ICAgICApOwoKICAgICAgc3RhdGljIFR5cGVNaXNtYXRjaCAqX2Rvd25jYXN0IChDT1JCQTo6RXhj
ZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lk
KTsKICAgIH07CgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2N0ZXRTZXEgKiBlbmNvZGUgKAogICAg
ICAgIGNvbnN0IENPUkJBOjpBbnkgJiBkYXRhLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
biwgSU9QOjpDb2RlYzo6SW52YWxpZFR5cGVGb3JFbmNvZGluZyApID0gMDsKCgoKCiAgICB2aXJ0
dWFsIENPUkJBOjpBbnkgKiBkZWNvZGUgKAogICAgICAgIGNvbnN0IENPUkJBOjpPY3RldFNlcSAm
IGRhdGEsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkK
ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjOjpGb3JtYXRN
aXNtYXRjaCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPY3RldFNlcSAqIGVuY29kZV92
YWx1ZSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkFueSAmIGRhdGEsCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjOjpJbnZhbGlkVHlwZUZvckVuY29kaW5nICkgPSAwOwoK
CgoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIGRlY29kZV92YWx1ZSAoCiAgICAgICAgY29uc3Qg
Q09SQkE6Ok9jdGV0U2VxICYgZGF0YSwKICAgICAgICBDT1JCQTo6VHlwZUNvZGVfcHRyIHRjLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgSU9QOjpDb2RlYzo6Rm9ybWF0TWlzbWF0Y2gs
IElPUDo6Q29kZWM6OlR5cGVNaXNtYXRjaCApID0gMDsKCgoKCgogICAgdmlydHVhbCB2b2lkICpf
dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3Rl
ZDoKICAgIENvZGVjICgpOwoKICAgIHZpcnR1YWwgfkNvZGVjICh2b2lkKTsKICBwcml2YXRlOgog
ICAgQ29kZWMgKGNvbnN0IENvZGVjICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IENvZGVj
ICYpOwogIH07CgoKCgogIHR5cGVkZWYgQ09SQkE6OlNob3J0IEVuY29kaW5nRm9ybWF0OwogIHR5
cGVkZWYgQ09SQkE6OlNob3J0X291dCBFbmNvZGluZ0Zvcm1hdF9vdXQ7CiAgICBleHRlcm4gQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfRW5jb2RpbmdGb3JtYXQ7CgogIGV4dGVybiBjb25zdCBDT1JC
QTo6U2hvcnQgRU5DT0RJTkdfQ0RSX0VOQ0FQUzsKCiAgc3RydWN0IEVuY29kaW5nOwogIGNsYXNz
IEVuY29kaW5nX3ZhcjsKCiAgc3RydWN0IEVuY29kaW5nCiAgewoKCiAgICB0eXBlZGVmIEVuY29k
aW5nX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3Ig
KHZvaWQqKTsKCiAgICBJT1A6OkVuY29kaW5nRm9ybWF0IGZvcm1hdDsKICAgIENPUkJBOjpPY3Rl
dCBtYWpvcl92ZXJzaW9uOwogICAgQ09SQkE6Ok9jdGV0IG1pbm9yX3ZlcnNpb247CiAgfTsKCiAg
Y2xhc3MgRW5jb2RpbmdfdmFyCiAgewogIHB1YmxpYzoKICAgIEVuY29kaW5nX3ZhciAodm9pZCk7
CiAgICBFbmNvZGluZ192YXIgKEVuY29kaW5nICopOwogICAgRW5jb2RpbmdfdmFyIChjb25zdCBF
bmNvZGluZ192YXIgJik7CiAgICBFbmNvZGluZ192YXIgKGNvbnN0IEVuY29kaW5nICYpOwogICAg
fkVuY29kaW5nX3ZhciAodm9pZCk7CgogICAgRW5jb2RpbmdfdmFyICZvcGVyYXRvcj0gKEVuY29k
aW5nICopOwogICAgRW5jb2RpbmdfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEVuY29kaW5nX3ZhciAm
KTsKICAgIEVuY29kaW5nX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFbmNvZGluZyAmKTsKICAgIEVu
Y29kaW5nICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEVuY29kaW5nICpvcGVyYXRvci0+
ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBFbmNvZGluZyAmKCkgY29uc3Q7CiAg
ICBvcGVyYXRvciBFbmNvZGluZyAmKCk7CiAgICBvcGVyYXRvciBFbmNvZGluZyAmKCkgY29uc3Q7
CgoKICAgIGNvbnN0IEVuY29kaW5nICZpbiAodm9pZCkgY29uc3Q7CiAgICBFbmNvZGluZyAmaW5v
dXQgKHZvaWQpOwogICAgRW5jb2RpbmcgJm91dCAodm9pZCk7CiAgICBFbmNvZGluZyBfcmV0biAo
dm9pZCk7CiAgICBFbmNvZGluZyAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIEVu
Y29kaW5nICpwdHJfOwogIH07CgogIHR5cGVkZWYgRW5jb2RpbmcgJkVuY29kaW5nX291dDsKCiAg
ZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0VuY29kaW5nOwoKCgoKCiAgY2xhc3MgQ29k
ZWNGYWN0b3J5OwogIHR5cGVkZWYgQ29kZWNGYWN0b3J5ICpDb2RlY0ZhY3RvcnlfcHRyOwoKCgoK
CgoKICBjbGFzcyBDb2RlY0ZhY3RvcnlfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw
dWJsaWM6CiAgICBDb2RlY0ZhY3RvcnlfdmFyICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV92YXIg
KENvZGVjRmFjdG9yeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ29kZWNGYWN0b3J5X3ZhciAo
Y29uc3QgQ29kZWNGYWN0b3J5X3ZhciAmKTsKICAgIH5Db2RlY0ZhY3RvcnlfdmFyICh2b2lkKTsK
CiAgICBDb2RlY0ZhY3RvcnlfdmFyICZvcGVyYXRvcj0gKENvZGVjRmFjdG9yeV9wdHIpOwogICAg
Q29kZWNGYWN0b3J5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3RvcnlfdmFyICYpOwog
ICAgQ29kZWNGYWN0b3J5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBjb25zdCBDb2RlY0ZhY3RvcnlfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENvZGVjRmFj
dG9yeV9wdHIgJigpOwoKICAgIENvZGVjRmFjdG9yeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAg
Q29kZWNGYWN0b3J5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ29kZWNGYWN0b3J5X3B0ciAmb3V0
ICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV9wdHIgX3JldG4gKHZvaWQpOwogICAgQ29kZWNGYWN0
b3J5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIENvZGVjRmFjdG9yeV9wdHIg
ZHVwbGljYXRlIChDb2RlY0ZhY3RvcnlfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENv
ZGVjRmFjdG9yeV9wdHIpOwogICAgc3RhdGljIENvZGVjRmFjdG9yeV9wdHIgbmlsICh2b2lkKTsK
ICAgIHN0YXRpYyBDb2RlY0ZhY3RvcnlfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JC
QTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9p
ZCAqKTsKCiAgcHJpdmF0ZToKICAgIENvZGVjRmFjdG9yeV9wdHIgcHRyXzsKCiAgICBDb2RlY0Zh
Y3RvcnlfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBDb2RlY0ZhY3RvcnlfdmFy
ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE2MzkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIgogIGNs
YXNzIENvZGVjRmFjdG9yeV9vdXQKICB7CiAgcHVibGljOgogICAgQ29kZWNGYWN0b3J5X291dCAo
Q29kZWNGYWN0b3J5X3B0ciAmKTsKICAgIENvZGVjRmFjdG9yeV9vdXQgKENvZGVjRmFjdG9yeV92
YXIgJik7CiAgICBDb2RlY0ZhY3Rvcnlfb3V0IChjb25zdCBDb2RlY0ZhY3Rvcnlfb3V0ICYpOwog
ICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3Rvcnlfb3V0ICYp
OwogICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChjb25zdCBDb2RlY0ZhY3RvcnlfdmFy
ICYpOwogICAgQ29kZWNGYWN0b3J5X291dCAmb3BlcmF0b3I9IChDb2RlY0ZhY3RvcnlfcHRyKTsK
ICAgIG9wZXJhdG9yIENvZGVjRmFjdG9yeV9wdHIgJigpOwogICAgQ29kZWNGYWN0b3J5X3B0ciAm
cHRyICh2b2lkKTsKICAgIENvZGVjRmFjdG9yeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy
aXZhdGU6CiAgICBDb2RlY0ZhY3RvcnlfcHRyICZwdHJfOwogIH07CiMgMTY2MyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCmNsYXNzIENv
ZGVjRmFjdG9yeSA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6Cgog
ICAgdHlwZWRlZiBDb2RlY0ZhY3RvcnlfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgQ29kZWNG
YWN0b3J5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgQ29kZWNGYWN0b3J5X3B0ciBfZHVw
bGljYXRlIChDb2RlY0ZhY3RvcnlfcHRyIG9iaik7CiAgICBzdGF0aWMgQ29kZWNGYWN0b3J5X3B0
ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ29kZWNGYWN0
b3J5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq
LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAg
c3RhdGljIENvZGVjRmFjdG9yeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVy
biAoQ29kZWNGYWN0b3J5X3B0cikwOwogICAgICB9CgoKCgoKICAgIGNsYXNzIFVua25vd25FbmNv
ZGluZyA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAg
ICAgVW5rbm93bkVuY29kaW5nICh2b2lkKTsKCgogICAgICBVbmtub3duRW5jb2RpbmcgKGNvbnN0
IFVua25vd25FbmNvZGluZyAmKTsKCgogICAgICB+VW5rbm93bkVuY29kaW5nICh2b2lkKTsKCgog
ICAgICBVbmtub3duRW5jb2RpbmcgJm9wZXJhdG9yPSAoY29uc3QgVW5rbm93bkVuY29kaW5nICYp
OwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQg
X3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9f
ZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIFVua25vd25FbmNvZGluZyAqX2Rvd25j
YXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlv
biAqX2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgogICAgdmlydHVhbCBJT1A6OkNvZGVjX3B0ciBj
cmVhdGVfY29kZWMgKAogICAgICAgIGNvbnN0IElPUDo6RW5jb2RpbmcgJiBlbmMsCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBJT1A6OkNvZGVjRmFjdG9yeTo6VW5rbm93bkVuY29kaW5n
ICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2Fy
aXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRv
cnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBDb2RlY0ZhY3RvcnkgKCk7Cgog
ICAgdmlydHVhbCB+Q29kZWNGYWN0b3J5ICh2b2lkKTsKICBwcml2YXRlOgogICAgQ29kZWNGYWN0
b3J5IChjb25zdCBDb2RlY0ZhY3RvcnkgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ29k
ZWNGYWN0b3J5ICYpOwogIH07CgoKCgoKfQoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBjb25zdCBJT1A6OlRhZ2dlZFByb2ZpbGUgJik7CiAgICAgICAgICAgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6OlRhZ2dlZFByb2ZpbGUqKTsKICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBJT1A6
OlRhZ2dlZFByb2ZpbGUgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkUHJvZmlsZSAqJik7CiAgICAg
ICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBJT1A6OklPUiAmKTsK
ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIElPUDo6SU9SKik7CiAg
ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwg
SU9QOjpJT1IgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z
dCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6SU9SIComKTsKICAgICAgICAgICB2b2lkIG9wZXJh
dG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYpOwogICAg
ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgSU9QOjpUYWdnZWRDb21wb25l
bnQqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6
OkFueSAmLCBJT1A6OlRhZ2dlZENvbXBvbmVudCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgSU9QOjpUYWdnZWRDb21w
b25lbnQgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u
c3QgSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJik7CiAgICAgICAgICAgdm9pZCBvcGVy
YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSopOwog
ICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYs
IElPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBJT1A6Ok11bHRpcGxl
Q29tcG9uZW50UHJvZmlsZSAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6
OkFueSAmLCBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgJik7CiAgICAgICAgICAgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QqKTsK
ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm
LCBJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9u
ZW50TGlzdCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBj
b25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudFNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y
PDw9IChDT1JCQTo6QW55ICYsIElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxKik7CiAgICAgICAgICAg
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpUYWdn
ZWRDb21wb25lbnRTZXEgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49
IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxIComKTsK
ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6U2Vy
dmljZUNvbnRleHQgJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAm
LCBJT1A6OlNlcnZpY2VDb250ZXh0Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpTZXJ2aWNlQ29udGV4dCAqJik7CiAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29u
c3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAqJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBjb25zdCBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmKTsKICAgICAgICAg
ICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIElPUDo6U2VydmljZUNvbnRleHRMaXN0
Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpB
bnkgJiwgSU9QOjpTZXJ2aWNlQ29udGV4dExpc3QgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29s
ZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IElPUDo6U2VydmljZUNv
bnRleHRMaXN0IComKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYs
IGNvbnN0IElPUDo6RW5jb2RpbmcgJik7CiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S
QkE6OkFueSAmLCBJT1A6OkVuY29kaW5nKik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgSU9QOjpFbmNvZGluZyAqJik7CiAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3Qg
SU9QOjpFbmNvZGluZyAqJik7CiMgMTkzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlRh
Z2dlZFByb2ZpbGVfdmFyOjpUYWdnZWRQcm9maWxlX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9
CgppbmxpbmUKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6VGFnZ2VkUHJvZmlsZV92YXIgKFRhZ2dl
ZFByb2ZpbGUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92
YXI6OlRhZ2dlZFByb2ZpbGVfdmFyIChjb25zdCA6OklPUDo6VGFnZ2VkUHJvZmlsZV92YXIgJnAp
CnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpU
YWdnZWRQcm9maWxlICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAg
dGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjp+VGFnZ2Vk
UHJvZmlsZV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6
VGFnZ2VkUHJvZmlsZV92YXIgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvcj0gKFRh
Z2dlZFByb2ZpbGUgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmlsZV92YXIgJgpJT1A6
OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6SU9QOjpUYWdnZWRQcm9maWxl
X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDAp
CiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5w
dHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRQ
cm9maWxlICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgVGFnZ2VkUHJvZmlsZSAoKnAucHRy
Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgVGFnZ2VkUHJvZmlsZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBf
Y29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAg
ICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkUHJvZmlsZSAqCklP
UDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9maWxlICoKSU9QOjpUYWdnZWRQ
cm9maWxlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpJT1A6OlRhZ2dl
ZFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6
OlRhZ2dlZFByb2ZpbGVfdmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkUHJvZmlsZSAmKCkKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9w
ZXJhdG9yIDo6SU9QOjpUYWdnZWRQcm9maWxlICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgoKaW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9QOjpU
YWdnZWRQcm9maWxlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3Qg
OjpJT1A6OlRhZ2dlZFByb2ZpbGUgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfdmFyOjppbiAodm9pZCkg
Y29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9m
aWxlICYKSU9QOjpUYWdnZWRQcm9maWxlX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRo
aXMtPnB0cl87Cn0KCgppbmxpbmUgOjpJT1A6OlRhZ2dlZFByb2ZpbGUgKiYKSU9QOjpUYWdnZWRQ
cm9maWxlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy
XyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmls
ZSAqCklPUDo6VGFnZ2VkUHJvZmlsZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6OlRhZ2dl
ZFByb2ZpbGUgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRt
cDsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRQcm9maWxlICoKSU9QOjpUYWdnZWRQcm9maWxlX3Zh
cjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUK
SU9QOjpUYWdnZWRQcm9maWxlX291dDo6VGFnZ2VkUHJvZmlsZV9vdXQgKDo6SU9QOjpUYWdnZWRQ
cm9maWxlIComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCklP
UDo6VGFnZ2VkUHJvZmlsZV9vdXQ6OlRhZ2dlZFByb2ZpbGVfb3V0IChUYWdnZWRQcm9maWxlX3Zh
ciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0OjpUYWdnZWRQcm9maWxl
X291dCAoY29uc3QgOjpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0ICZwKQogIDogcHRyXyAoY29uc3Rf
Y2FzdDxUYWdnZWRQcm9maWxlX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElPUDo6VGFnZ2Vk
UHJvZmlsZV9vdXQgJgpJT1A6OlRhZ2dlZFByb2ZpbGVfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6
SU9QOjpUYWdnZWRQcm9maWxlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFRh
Z2dlZFByb2ZpbGVfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgSU9Q
OjpUYWdnZWRQcm9maWxlX291dCAmCklPUDo6VGFnZ2VkUHJvZmlsZV9vdXQ6Om9wZXJhdG9yPSAo
VGFnZ2VkUHJvZmlsZSAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lCklPUDo6VGFnZ2VkUHJvZmlsZV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRQcm9m
aWxlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZFBy
b2ZpbGUgKiYKSU9QOjpUYWdnZWRQcm9maWxlX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkUHJvZmlsZSAqCklPUDo6VGFnZ2VkUHJv
ZmlsZV9vdXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoK
CmlubGluZQpJT1A6OklPUl92YXI6OklPUl92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5s
aW5lCklPUDo6SU9SX3Zhcjo6SU9SX3ZhciAoSU9SICpwKQogIDogcHRyXyAocCkKe30KCmlubGlu
ZQpJT1A6OklPUl92YXI6OklPUl92YXIgKGNvbnN0IDo6SU9QOjpJT1JfdmFyICZwKQp7CiAgaWYg
KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OklPUDo6SU9SICgqcC5w
dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K
CmlubGluZQpJT1A6OklPUl92YXI6On5JT1JfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0
cl87Cn0KCmlubGluZSBJT1A6OklPUl92YXIgJgpJT1A6OklPUl92YXI6Om9wZXJhdG9yPSAoSU9S
ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgOjpJT1A6OklPUl92YXIgJgpJT1A6OklPUl92YXI6Om9wZXJhdG9yPSAo
Y29uc3QgOjpJT1A6OklPUl92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAg
aWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwog
ICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewog
ICAgICAgICAgSU9SICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgSU9SICgqcC5wdHJfKTsK
CiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBJT1IgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5w
dHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRl
IGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUgY29uc3QgOjpJT1A6OklPUiAqCklPUDo6SU9SX3Zhcjo6b3BlcmF0b3ItPiAo
dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OklPUiAq
CklPUDo6SU9SX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUKSU9QOjpJT1JfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6SU9SICYoKSBjb25z
dAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpJT1JfdmFyOjpvcGVyYXRv
ciA6OklPUDo6SU9SICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpJ
T1JfdmFyOjpvcGVyYXRvciA6OklPUDo6SU9SICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgoKaW5saW5lCklPUDo6SU9SX3Zhcjo6b3BlcmF0b3IgOjpJT1A6OklPUiAqJigpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6SU9QOjpJT1IgJgpJT1A6OklP
Ul92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg
OjpJT1A6OklPUiAmCklPUDo6SU9SX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCgppbmxpbmUgOjpJT1A6OklPUiAqJgpJT1A6OklPUl92YXI6Om91dCAodm9pZCkK
ewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgOjpJT1A6OklPUiAqCklPUDo6SU9SX3Zhcjo6X3JldG4gKHZvaWQpCnsK
ICA6OklPUDo6SU9SICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVy
biB0bXA7Cn0KCmlubGluZSA6OklPUDo6SU9SICoKSU9QOjpJT1JfdmFyOjpwdHIgKHZvaWQpIGNv
bnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpJT1A6OklPUl9vdXQ6OklP
Ul9vdXQgKDo6SU9QOjpJT1IgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9
CgppbmxpbmUKSU9QOjpJT1Jfb3V0OjpJT1Jfb3V0IChJT1JfdmFyICZwKQogIDogcHRyXyAocC5v
dXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l
CklPUDo6SU9SX291dDo6SU9SX291dCAoY29uc3QgOjpJT1A6OklPUl9vdXQgJnApCiAgOiBwdHJf
IChjb25zdF9jYXN0PElPUl9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSBJT1A6OklPUl9vdXQg
JgpJT1A6OklPUl9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpJT1A6OklPUl9vdXQgJnApCnsKICB0
aGlzLT5wdHJfID0gY29uc3RfY2FzdDxJT1Jfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlz
Owp9CgppbmxpbmUgSU9QOjpJT1Jfb3V0ICYKSU9QOjpJT1Jfb3V0OjpvcGVyYXRvcj0gKElPUiAq
cCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCklPUDo6SU9S
X291dDo6b3BlcmF0b3IgOjpJT1A6OklPUiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoK
aW5saW5lIDo6SU9QOjpJT1IgKiYKSU9QOjpJT1Jfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpJT1IgKgpJT1A6OklPUl9vdXQ6Om9wZXJhdG9y
LT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDQxNSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCiAgaW5saW5lIElPUDo6
VGFnZ2VkUHJvZmlsZSAqCiAgSU9QOjpJT1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9J
T1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoK
ICB7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUgKnJldHZhbCA9IDA7CiAgICBkbyB7IHRyeSB7IHJl
dHZhbCA9IG5ldyBJT1A6OlRhZ2dlZFByb2ZpbGVbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2Fs
bG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAo
MCk7CiAgICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZvaWQgSU9QOjpJT1I6Ol9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6ZnJlZWJ1
ZiAoSU9QOjpUYWdnZWRQcm9maWxlICpidWZmZXIpCgogIHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7
CiAgfQoKICBpbmxpbmUKICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lP
Ul9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9S
X190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKHZvaWQpCiAgewogIH0KCiAgaW5saW5lCiAgSU9QOjpJ
T1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmls
ZTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxl
IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAgIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNl
IChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dl
ZFByb2ZpbGU6OmFsbG9jYnVmIChtYXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6OklP
Ujo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxl
OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUg
KENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIElPUDo6
VGFnZ2VkUHJvZmlsZSAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkK
ICB7CiAgfQoKICBpbmxpbmUKICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q
X0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf
SU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGUgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmcmhzKQoKICAgIDogVEFPX1VuYm91bmRl
ZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9IDApCiAgICB7
CiAgICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0lPUF9JT1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1f
KTsKICAgICAgSU9QOjpUYWdnZWRQcm9maWxlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SU9QOjpUYWdnZWRQcm9maWxlICo+IChyaHMuYnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJB
OjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgICB0bXAxW2ldID0g
dG1wMltpXTsKCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogICAgfQogICAgZWxzZQogICAg
ewogICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgIH0KICB9CgogIGlubGluZSBJT1A6OklPUjo6
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlICYK
ICBJT1A6OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdn
ZWRQcm9maWxlOjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9J
T1JfX3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhz
KQogICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAg
ICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9Q
OjpUYWdnZWRQcm9maWxlICp0bXAgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmls
ZSAqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q
X0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpmcmVlYnVmICh0bXApOwogICAgICAgIHRoaXMt
PmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dl
ZFByb2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNl
CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190
YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICAgIFRBT19V
bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICAgIElPUDo6VGFnZ2Vk
UHJvZmlsZSAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9maWxlICo+ICh0
aGlzLT5idWZmZXJfKTsKICAgIElPUDo6VGFnZ2VkUHJvZmlsZSAqIGNvbnN0IHRtcDIgPSByZWlu
dGVycHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmlsZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZv
ciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAx
W2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIElPUDo6VGFn
Z2VkUHJvZmlsZSAmCiAgSU9QOjpJT1I6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9JT1Jf
X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgogIHsK
ICAgIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFD
RV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjpp
bnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIsIDUwNywgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t
PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr
ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl
bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg
LTEpOyB9IH0gd2hpbGUgKDApOwogICAgSU9QOjpUYWdnZWRQcm9maWxlKiB0bXAgPSByZWludGVy
cHJldF9jYXN0PElPUDo6VGFnZ2VkUHJvZmlsZSo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy
biB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICYKICBJT1A6
OklPUjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9m
aWxlOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZigh
KGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vy
cm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBh
Y2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vSU9QQy5pIiwgNTE2LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwg
YWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18t
PmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBm
YWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGls
ZSAoMCk7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9j
YXN0PElPUDo6VGFnZ2VkUHJvZmlsZSo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVybiB0bXBb
aV07CiAgfQoKCgogIGlubGluZSBJT1A6OlRhZ2dlZFByb2ZpbGUgKgogIElPUDo6SU9SOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmdldF9i
dWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbikKICB7CiAgICBJT1A6OlRhZ2dlZFByb2ZpbGUg
KnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+
YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjphbGxvY2J1ZiAodGhpcy0+bGVu
Z3RoXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxl
YXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZFByb2ZpbGUqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAg
IH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAg
ICAgIHsKCgogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9m
aWxlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg
ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0
aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK
ICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRQcm9maWxlICoKICBJT1A6OklPUjo6X1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfSU9QX0lPUl9fdGFvX3NlcV9UYWdnZWRQcm9maWxlOjpnZXRfYnVmZmVy
ICh2b2lkKSBjb25zdAogIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IElPUDo6
VGFnZ2VkUHJvZmlsZSAqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElP
UDo6SU9SOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfSU9SX190YW9fc2VxX1RhZ2dlZFBy
b2ZpbGU6OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgQ09SQkE6OlVMb25nIGxlbmd0aCwK
ICBJT1A6OlRhZ2dlZFByb2ZpbGUgKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7
CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAg
ICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJ
T1A6OlRhZ2dlZFByb2ZpbGUgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRQcm9m
aWxlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf
SU9SX190YW9fc2VxX1RhZ2dlZFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0aGlz
LT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMgNTg4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMu
aSIKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6VGFnZ2VkQ29tcG9uZW50X3ZhciAo
dm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfdmFyOjpU
YWdnZWRDb21wb25lbnRfdmFyIChUYWdnZWRDb21wb25lbnQgKnApCiAgOiBwdHJfIChwKQp7fQoK
aW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6VGFnZ2VkQ29tcG9uZW50X3ZhciAoY29u
c3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g
eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnQgKCpwLnB0cl8p
OyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7
IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s
aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6flRhZ2dlZENvbXBvbmVudF92YXIgKHZvaWQp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50X3Zh
ciAmCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6b3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnQg
KnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRo
aXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X3ZhciAmCklPUDo6VGFnZ2VkQ29t
cG9uZW50X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X3ZhciAm
cCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAg
ICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0g
MDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRDb21wb25l
bnQgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBUYWdnZWRDb21wb25lbnQgKCpwLnB0cl8p
OwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIFRhZ2dlZENvbXBvbmVudCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBf
Y29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAg
ICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoK
SU9QOjpUYWdnZWRDb21wb25lbnRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoKSU9QOjpU
YWdnZWRDb21wb25lbnRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6
SU9QOjpUYWdnZWRDb21wb25lbnQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRD
b21wb25lbnQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dl
ZENvbXBvbmVudF92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnQgJigpIGNvbnN0
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRf
dmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50IComKCkKewogIHJldHVybiB0aGlz
LT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFn
Z2VkQ29tcG9uZW50X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87
Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICYKSU9QOjpUYWdnZWRDb21wb25lbnRf
dmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklP
UDo6VGFnZ2VkQ29tcG9uZW50IComCklPUDo6VGFnZ2VkQ29tcG9uZW50X3Zhcjo6b3V0ICh2b2lk
KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50ICoKSU9QOjpUYWdnZWRDb21w
b25lbnRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9
IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6
SU9QOjpUYWdnZWRDb21wb25lbnQgKgpJT1A6OlRhZ2dlZENvbXBvbmVudF92YXI6OnB0ciAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lCklPUDo6VGFnZ2Vk
Q29tcG9uZW50X291dDo6VGFnZ2VkQ29tcG9uZW50X291dCAoOjpJT1A6OlRhZ2dlZENvbXBvbmVu
dCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlRh
Z2dlZENvbXBvbmVudF9vdXQ6OlRhZ2dlZENvbXBvbmVudF9vdXQgKFRhZ2dlZENvbXBvbmVudF92
YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt
PnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfb3V0OjpUYWdnZWRDb21w
b25lbnRfb3V0IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X291dCAmcCkKICA6IHB0cl8g
KGNvbnN0X2Nhc3Q8VGFnZ2VkQ29tcG9uZW50X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElP
UDo6VGFnZ2VkQ29tcG9uZW50X291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50X291dDo6b3BlcmF0
b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50X291dCAmcCkKewogIHRoaXMtPnB0cl8g
PSBjb25zdF9jYXN0PFRhZ2dlZENvbXBvbmVudF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRo
aXM7Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudF9vdXQgJgpJT1A6OlRhZ2dlZENvbXBv
bmVudF9vdXQ6Om9wZXJhdG9yPSAoVGFnZ2VkQ29tcG9uZW50ICpwKQp7CiAgdGhpcy0+cHRyXyA9
IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRfb3V0Ojpv
cGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50IComKCkKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudCAqJgpJT1A6OlRhZ2dlZENvbXBvbmVu
dF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6
OlRhZ2dlZENvbXBvbmVudCAqCklPUDo6VGFnZ2VkQ29tcG9uZW50X291dDo6b3BlcmF0b3ItPiAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgNzg0ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKICBpbmxpbmUgSU9QOjpUYWdn
ZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxl
Q29tcG9uZW50UHJvZmlsZTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKICB7CiAgICBJ
T1A6OlRhZ2dlZENvbXBvbmVudCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0g
bmV3IElPUDo6VGFnZ2VkQ29tcG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykg
eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwog
ICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6ZnJlZWJ1ZiAoSU9QOjpUYWdn
ZWRDb21wb25lbnQgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9CgogIGlu
bGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50
UHJvZmlsZTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJv
ZmlsZSAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhpbXVtKQogICAg
OiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmFsbG9jYnVmIChtYXhpbXVtKSkK
ICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGU6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBs
ZUNvbXBvbmVudFByb2ZpbGUgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgQ09SQkE6OlVMb25n
IGxlbmd0aCwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpkYXRhLAogICAgQ09SQkE6OkJvb2xl
YW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu
Z3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQogIElPUDo6X1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6X1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAoY29uc3QgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmcmhzKQoKICAgIDogVEFP
X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9
IDApCiAgICB7CiAgICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICp0bXAxID0gX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6YWxsb2NidWYgKHRoaXMt
Pm1heGltdW1fKTsKICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVp
bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAg
ICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAg
ICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0K
ICAgIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxp
bmUgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVDb21wb25lbnRQcm9m
aWxlICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVu
dFByb2ZpbGU6Om9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011
bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQog
ICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBp
ZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9QOjpU
YWdnZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25l
bnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP
UF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+
YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFBy
b2ZpbGU6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgICB9CiAgICB9CiAgICBlbHNlCiAg
ICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVD
b21wb25lbnRQcm9maWxlOjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgICBUQU9fVW5ib3Vu
ZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJT1A6OlRhZ2dlZENvbXBv
bmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRo
aXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVp
bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAg
IGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0
bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIElPUDo6
VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGU6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKQoKICB7CiAg
ICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJyb3IgPSBBQ0Vf
T1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9nX01zZzo6aW5z
dGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCA4NzYsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5y
ZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAo
KSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwg
YXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0x
KTsgfSB9IHdoaWxlICgwKTsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50KiB0bXAgPSByZWludGVy
cHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0
dXJuIHRtcFtpXTsKICB9CgogIGlubGluZSBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCiAg
SU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfTXVsdGlwbGVDb21wb25lbnRQcm9maWxl
OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZighKGkg
PCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9y
ICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2Vf
X18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vSU9QQy5pIiwgODg1LCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNl
X19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxv
ZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWls
ZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAo
MCk7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqIGNvbnN0IHRtcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4gdG1w
W2ldOwogIH0KCgoKICBpbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6Z2V0X2J1ZmZl
ciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQogIHsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpy
ZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAwKQogICAgewoKICAgICAgaWYgKHRoaXMtPmJ1
ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJlc3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX0lPUF9NdWx0aXBsZUNvbXBvbmVudFByb2ZpbGU6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhf
KTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2Vf
ID0gMTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9
CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAg
ICB7CgoKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9u
ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAg
ICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0
aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoK
ICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6Z2V0X2J1ZmZlciAodm9p
ZCkgY29uc3QKICB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBJT1A6OlRhZ2dl
ZENvbXBvbmVudCAqPiAodGhpcy0+YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElPUDo6
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX011bHRpcGxlQ29tcG9uZW50UHJvZmlsZTo6cmVw
bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIElPUDo6VGFn
Z2VkQ29tcG9uZW50ICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgewogICAgdGhp
cy0+bWF4aW11bV8gPSBtYXg7CiAgICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogICAgaWYgKHRo
aXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICAgIHsKICAgICAgSU9QOjpUYWdn
ZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQq
PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9NdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGU6OmZyZWVidWYgKHRtcCk7CiAgICB9CiAgICB0aGlzLT5idWZm
ZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVsZWFzZTsKICB9CiMgOTYxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5s
aW5lCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6TXVsdGlwbGVDb21wb25lbnRQ
cm9maWxlX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKSU9QOjpNdWx0aXBsZUNv
bXBvbmVudFByb2ZpbGVfdmFyOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyIChNdWx0aXBs
ZUNvbXBvbmVudFByb2ZpbGUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6TXVsdGlw
bGVDb21wb25lbnRQcm9maWxlX3Zhcjo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAoY29u
c3QgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgJnApCnsKICBpZiAocC5wdHJf
KQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVu
dFByb2ZpbGUgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9f
bG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlz
LT5wdHJfID0gMDsKfQoKaW5saW5lCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6
fk11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRy
XzsKfQoKaW5saW5lIElPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmCklPUDo6TXVs
dGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0b3I9IChNdWx0aXBsZUNvbXBvbmVudFBy
b2ZpbGUgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1
cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAm
CklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklP
UDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQog
ICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRo
aXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKmRlZXBfY29weSA9
CiAgICAgICAgICAgIG5ldyBNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKCpwLnB0cl8pOwoKICAg
ICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIE11
bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRl
ZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAg
ICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
fQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6TXVsdGlwbGVDb21wb25l
bnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvcGVyYXRvci0+
ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs
dGlwbGVDb21wb25lbnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFy
OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6
Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6SU9QOjpNdWx0
aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CmlubGluZQpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9Q
OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CmlubGluZQpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yIDo6SU9Q
OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCgppbmxpbmUKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvcGVyYXRv
ciA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlIComKCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6Ok11bHRpcGxlQ29tcG9u
ZW50UHJvZmlsZV92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVy
biB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJT1A6OlRh
Z2dlZENvbXBvbmVudCAmCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6b3BlcmF0
b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29u
c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4
KSk7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlICYKSU9Q
OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVy
biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUg
JgpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2Zp
bGUgKiYKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyOjpvdXQgKHZvaWQpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKgpJT1A6Ok11bHRpcGxl
Q29tcG9uZW50UHJvZmlsZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6Ok11bHRpcGxlQ29t
cG9uZW50UHJvZmlsZSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1
cm4gdG1wOwp9CgppbmxpbmUgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAqCklPUDo6
TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVf
b3V0OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0IChNdWx0aXBsZUNvbXBvbmVudFByb2Zp
bGUgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpN
dWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0OjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0
IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsK
ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCklPUDo6TXVs
dGlwbGVDb21wb25lbnRQcm9maWxlX291dDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAo
Y29uc3QgOjpJT1A6Ok11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQgJnApCiAgOiBwdHJfIChj
b25zdF9jYXN0PE11bHRpcGxlQ29tcG9uZW50UHJvZmlsZV9vdXQmPiAocCkucHRyXykKe30KCmlu
bGluZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmCklPUDo6TXVsdGlwbGVD
b21wb25lbnRQcm9maWxlX291dDo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6TXVsdGlwbGVDb21w
b25lbnRQcm9maWxlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PE11bHRpcGxl
Q29tcG9uZW50UHJvZmlsZV9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu
ZSA6OklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dCAmCklPUDo6TXVsdGlwbGVDb21w
b25lbnRQcm9maWxlX291dDo6b3BlcmF0b3I9IChNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgKnAp
CnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6Ok11bHRp
cGxlQ29tcG9uZW50UHJvZmlsZV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpNdWx0aXBsZUNvbXBvbmVu
dFByb2ZpbGUgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs
dGlwbGVDb21wb25lbnRQcm9maWxlIComCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291
dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6TXVs
dGlwbGVDb21wb25lbnRQcm9maWxlICoKSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGVfb3V0
OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6
OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6TXVsdGlwbGVDb21wb25lbnRQcm9maWxlX291dDo6b3Bl
cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJh
dG9yW10gKGluZGV4KTsKfQojIDExNzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgogIGlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAq
CiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6
YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKICB7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVu
dCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3IElPUDo6VGFnZ2VkQ29t
cG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsK
ICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dl
ZENvbXBvbmVudExpc3Q6OmZyZWVidWYgKElPUDo6VGFnZ2VkQ29tcG9uZW50ICpidWZmZXIpCgog
IHsKICAgIGRlbGV0ZSBbXSBidWZmZXI7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAodm9pZCkKICB7CiAgfQoKICBpbmxpbmUKICBJ
T1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAoQ09SQkE6OlVMb25n
IG1heGltdW0pCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmFsbG9jYnVmICht
YXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFn
Z2VkQ29tcG9uZW50TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcg
bGVuZ3RoLAogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAgICBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlKQogIDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5n
dGgsIGRhdGEsIHJlbGVhc2UpCiAgewogIH0KCiAgaW5saW5lCiAgSU9QOjpfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3QgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X0lPUF9UYWdnZWRDb21wb25lbnRMaXN0ICZyaHMpCgogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf
U2VxdWVuY2UgKHJocykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAg
SU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf
VGFnZ2VkQ29tcG9uZW50TGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAgSU9Q
OjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRh
Z2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcg
aSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1wMVtpXSA9IHRtcDJbaV07
CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAg
dGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgSU9QOjpfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmCiAgSU9QOjpfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdDo6b3BlcmF0b3I9IChjb25zdCBfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50TGlzdCAmcmhzKQoKICB7CiAg
ICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJl
bGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAg
ICAgIHsKCiAgICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAgIF9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpmcmVlYnVmICh0bXAp
OwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFn
Z2VkQ29tcG9uZW50TGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP
UF9UYWdnZWRDb21wb25lbnRMaXN0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgICBUQU9f
VW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJT1A6OlRhZ2dl
ZENvbXBvbmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQg
Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAy
ID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8p
OwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog
ICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5l
IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP
UF9UYWdnZWRDb21wb25lbnRMaXN0OjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewog
ICAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNF
X09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omlu
c3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIiwgMTI3MCwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t
PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr
ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl
bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg
LTEpOyB9IH0gd2hpbGUgKDApOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQqIHRtcCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICBy
ZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICYK
ICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0Ojpv
cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3QKCiAgewogICAgZG8geyBpZighKGkgPCB0
aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp
OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t
PnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
SU9QQy5pIiwgMTI3OSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQgKCksIGFjZV9f
Xy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNlX19fLT5sb2cg
KExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRpb24gZmFpbGVk
IGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0gd2hpbGUgKDAp
OwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAgPSByZWludGVycHJldF9jYXN0
PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgcmV0dXJuIHRtcFtp
XTsKICB9CgoKCiAgaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50ICoKICBJT1A6Ol9UQU9fVW5i
b3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpnZXRfYnVmZmVyIChDT1JC
QTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnJlc3VsdCA9
IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVmZmVyXyA9
PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9Q
X1RhZ2dlZENvbXBvbmVudExpc3Q6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAgICB0
aGlzLT5idWZmZXJfID0gcmVzdWx0OwogICAgICAgIHRoaXMtPnJlbGVhc2VfID0gMTsKICAgICAg
fQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElP
UDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBl
bHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICB7CgoKICAgICAg
ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6VGFnZ2VkQ29tcG9uZW50Kj4gKHRoaXMt
PmJ1ZmZlcl8pOwogICAgICAgIHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5n
dGhfID0gMDsKICAgICAgICB0aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNl
XyA9IDA7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29u
c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
SU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRo
aXMtPmJ1ZmZlcl8pOwogIH0KCiAgaW5saW5lIHZvaWQKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRMaXN0OjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4
LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEsCiAg
Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAg
IHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5y
ZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wID0gcmVp
bnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAg
ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudExpc3Q6OmZyZWVi
dWYgKHRtcCk7CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVh
c2VfID0gcmVsZWFzZTsKICB9CiMgMTM1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExp
c3RfdmFyOjpUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgpp
bmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6VGFnZ2VkQ29tcG9uZW50TGlzdF92
YXIgKFRhZ2dlZENvbXBvbmVudExpc3QgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6
VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyIChjb25zdCA6
OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g
eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICgqcC5w
dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K
CmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjp+VGFnZ2VkQ29tcG9uZW50TGlz
dF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2Vk
Q29tcG9uZW50TGlzdF92YXIgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRv
cj0gKFRhZ2dlZENvbXBvbmVudExpc3QgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlz
LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9u
ZW50TGlzdF92YXIgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRvcj0gKGNv
bnN0IDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw
KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICBUYWdnZWRDb21wb25lbnRMaXN0ICpkZWVwX2NvcHkgPQog
ICAgICAgICAgICBuZXcgVGFnZ2VkQ29tcG9uZW50TGlzdCAoKnAucHRyXyk7CgogICAgICAgICAg
aWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgVGFnZ2VkQ29t
cG9uZW50TGlzdCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRo
aXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBk
ZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAqCklPUDo6
VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0CnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICoKSU9Q
OjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6b3BlcmF0
b3IgY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgJigpIGNvbnN0CnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVy
YXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAmKCkKewogIHJldHVybiAqdGhpcy0+cHRy
XzsKfQoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yIDo6SU9Q
OjpUYWdnZWRDb21wb25lbnRMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9
CgoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om9wZXJhdG9yIDo6SU9QOjpU
YWdnZWRDb21wb25lbnRMaXN0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
SU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0
b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6
OlRhZ2dlZENvbXBvbmVudExpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp
IGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAm
PiAodGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpKTsKfQoKaW5saW5lIGNvbnN0IDo6SU9Q
OjpUYWdnZWRDb21wb25lbnRMaXN0ICYKSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0X3Zhcjo6aW4g
KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFn
Z2VkQ29tcG9uZW50TGlzdCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Omlub3V0ICh2
b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21w
b25lbnRMaXN0IComCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF92YXI6Om91dCAodm9pZCkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3QgKgpJT1A6OlRhZ2dlZENvbXBv
bmVudExpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpUYWdnZWRDb21wb25lbnRMaXN0
ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlu
bGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdCAqCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlz
dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5s
aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0
IChUYWdnZWRDb21wb25lbnRMaXN0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0g
MDsKfQoKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OlRhZ2dlZENvbXBvbmVu
dExpc3Rfb3V0IChUYWdnZWRDb21wb25lbnRMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgp
KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6
OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpUYWdnZWRDb21wb25lbnRMaXN0X291dCAoY29uc3Qg
OjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxU
YWdnZWRDb21wb25lbnRMaXN0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6SU9QOjpUYWdn
ZWRDb21wb25lbnRMaXN0X291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6Om9wZXJh
dG9yPSAoY29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0ICZwKQp7CiAgdGhpcy0+
cHRyXyA9IGNvbnN0X2Nhc3Q8VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQmPiAocCkucHRyXzsKICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQgJgpJ
T1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvcj0gKFRhZ2dlZENvbXBvbmVudExp
c3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6
OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50
TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRD
b21wb25lbnRMaXN0IComCklPUDo6VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6OnB0ciAodm9pZCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudExp
c3QgKgpJT1A6OlRhZ2dlZENvbXBvbmVudExpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6
VGFnZ2VkQ29tcG9uZW50TGlzdF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkK
ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyAxNTcyICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKICBp
bmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgKgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoK
ICB7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsg
cmV0dmFsID0gbmV3IElPUDo6VGFnZ2VkQ29tcG9uZW50W3NpemVdOyB9IGNhdGNoIChzdGQ6OmJh
ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hp
bGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2b2lkIElPUDo6X1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6ZnJlZWJ1ZiAoSU9QOjpU
YWdnZWRDb21wb25lbnQgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9Cgog
IGlubGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVu
dFNlcTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAodm9p
ZCkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9U
YWdnZWRDb21wb25lbnRTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w
b25lbnRTZXEgKENPUkJBOjpVTG9uZyBtYXhpbXVtKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2Vf
U2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21w
b25lbnRTZXE6OmFsbG9jYnVmIChtYXhpbXVtKSkKICB7CiAgfQoKICBpbmxpbmUKICBJT1A6Ol9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXEgKENPUkJBOjpVTG9uZyBtYXhpbXVt
LAogICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICpkYXRh
LAogICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1
ZW5jZSAobWF4aW11bSwgbGVuZ3RoLCBkYXRhLCByZWxlYXNlKQogIHsKICB9CgogIGlubGluZQog
IElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6X1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAoY29uc3QgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAmcmhzKQoKICAgIDogVEFP
X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCiAgewogICAgaWYgKHJocy5idWZmZXJfICE9
IDApCiAgICB7CiAgICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICp0bXAxID0gX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKHRoaXMtPm1heGlt
dW1fKTsKICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBjb25zdCB0bXAyID0gcmVpbnRlcnBy
ZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9y
IChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1w
MVtpXSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVs
c2UKICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgSU9Q
OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxICYKICBJT1A6
Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Om9wZXJhdG9y
PSAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcSAm
cmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1cm4gKnRoaXM7CgogICAg
aWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMu
bWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnRtcCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwog
ICAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6OmZy
ZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAg
ICB9CiAgICB9CiAgICBlbHNlCiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsK
CiAgICBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgICBJ
T1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRD
b21wb25lbnQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKiBj
b25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCAqPiAocmhz
LmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3Ro
XzsgKytpKQogICAgICB0bXAxW2ldID0gdG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoK
CiAgaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX0lPUF9UYWdnZWRDb21wb25lbnRTZXE6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBp
KQoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2VfZXJy
b3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0VfTG9n
X01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCAxNjY0LCAtMSwgX19hY2VfZXJyb3Is
IGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2df
Y2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVO
LCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4
aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCogdG1w
ID0gcmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJf
KTsKICAgIHJldHVybiB0bXBbaV07CiAgfQoKICBpbmxpbmUgY29uc3QgSU9QOjpUYWdnZWRDb21w
b25lbnQgJgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVu
dFNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYo
IShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9l
cnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsg
YWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL0lPUEMuaSIsIDE2NzMsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgp
LCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9f
Xy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9u
IGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdo
aWxlICgwKTsKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50ICogY29uc3QgdG1wID0gcmVpbnRlcnBy
ZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAgIHJldHVy
biB0bXBbaV07CiAgfQoKCgogIGlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAqCiAgSU9QOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpnZXRfYnVmZmVy
IChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpUYWdnZWRDb21wb25lbnQgKnJl
c3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhpcy0+YnVm
ZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAg
ICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwog
ICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UKICAgIHsKICAgICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICAgIHsKCgog
ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpUYWdnZWRDb21wb25lbnQqPiAo
dGhpcy0+YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMt
Pmxlbmd0aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJl
bGVhc2VfID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGlu
ZSBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAqCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAogIHsK
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50ICo+
ICh0aGlzLT5idWZmZXJfKTsKICB9CgogIGlubGluZSB2b2lkCiAgSU9QOjpfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9JT1BfVGFnZ2VkQ29tcG9uZW50U2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcg
bWF4LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgSU9QOjpUYWdnZWRDb21wb25lbnQgKmRhdGEs
CiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsK
ICAgIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlz
LT5yZWxlYXNlXyA9PSAxKQogICAgewogICAgICBJT1A6OlRhZ2dlZENvbXBvbmVudCAqdG1wID0g
cmVpbnRlcnByZXRfY2FzdDxJT1A6OlRhZ2dlZENvbXBvbmVudCo+ICh0aGlzLT5idWZmZXJfKTsK
ICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1RhZ2dlZENvbXBvbmVudFNlcTo6ZnJl
ZWJ1ZiAodG1wKTsKICAgIH0KICAgIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwogICAgdGhpcy0+cmVs
ZWFzZV8gPSByZWxlYXNlOwogIH0KIyAxNzQ5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5saW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50
U2VxX3Zhcjo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgpp
bmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfdmFyOjpUYWdnZWRDb21wb25lbnRTZXFfdmFy
IChUYWdnZWRDb21wb25lbnRTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6VGFn
Z2VkQ29tcG9uZW50U2VxX3Zhcjo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAoY29uc3QgOjpJT1A6
OlRhZ2dlZENvbXBvbmVudFNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkg
eyB0aGlzLT5wdHJfID0gbmV3IDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgKCpwLnB0cl8pOyB9
IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl
dHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l
CklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6flRhZ2dlZENvbXBvbmVudFNlcV92YXIgKHZv
aWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIElPUDo6VGFnZ2VkQ29tcG9uZW50
U2VxX3ZhciAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0b3I9IChUYWdnZWRD
b21wb25lbnRTZXEgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsK
ICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3ZhciAm
CklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6VGFn
Z2VkQ29tcG9uZW50U2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBp
ZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAg
ICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICBUYWdnZWRDb21wb25lbnRTZXEgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBU
YWdnZWRDb21wb25lbnRTZXEgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIFRhZ2dlZENvbXBvbmVudFNlcSAqdG1wID0g
ZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAg
ICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBj
b25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf
dmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf
dmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpJ
T1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6SU9QOjpUYWdnZWRD
b21wb25lbnRTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJ
T1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25l
bnRTZXEgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlRhZ2dlZENv
bXBvbmVudFNlcV92YXI6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgJigpIGNv
bnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25l
bnRTZXFfdmFyOjpvcGVyYXRvciA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxIComKCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgSU9QOjpUYWdnZWRDb21wb25lbnQgJgpJT1A6OlRh
Z2dlZENvbXBvbmVudFNlcV92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewog
IHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJ
T1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX3Zhcjo6b3BlcmF0
b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29u
c3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4
KSk7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICYKSU9QOjpUYWdn
ZWRDb21wb25lbnRTZXFfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRy
XzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgJgpJT1A6OlRhZ2dlZENvbXBv
bmVudFNlcV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5s
aW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEgKiYKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFf
dmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEg
KgpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpJT1A6OlRh
Z2dlZENvbXBvbmVudFNlcSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICBy
ZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcSAqCklPUDo6VGFn
Z2VkQ29tcG9uZW50U2VxX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KCgoKCgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpUYWdnZWRDb21w
b25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXEgKiZwKQogIDogcHRyXyAocCkKewogIHRo
aXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpUYWdn
ZWRDb21wb25lbnRTZXFfb3V0IChUYWdnZWRDb21wb25lbnRTZXFfdmFyICZwKQogIDogcHRyXyAo
cC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5s
aW5lCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAo
Y29uc3QgOjpJT1A6OlRhZ2dlZENvbXBvbmVudFNlcV9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9j
YXN0PFRhZ2dlZENvbXBvbmVudFNlcV9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OklPUDo6
VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6b3Bl
cmF0b3I9IChjb25zdCA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmcCkKewogIHRoaXMt
PnB0cl8gPSBjb25zdF9jYXN0PFRhZ2dlZENvbXBvbmVudFNlcV9vdXQmPiAocCkucHRyXzsKICBy
ZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dCAmCklP
UDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6b3BlcmF0b3I9IChUYWdnZWRDb21wb25lbnRTZXEg
KnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpJT1A6OlRh
Z2dlZENvbXBvbmVudFNlcV9vdXQ6Om9wZXJhdG9yIDo6SU9QOjpUYWdnZWRDb21wb25lbnRTZXEg
KiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9u
ZW50U2VxIComCklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxX291dDo6cHRyICh2b2lkKQp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICoKSU9Q
OjpUYWdnZWRDb21wb25lbnRTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlRhZ2dlZENvbXBvbmVudCAmCklPUDo6VGFnZ2VkQ29t
cG9uZW50U2VxX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDE5NjMgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgppbmxpbmUKSU9QOjpT
ZXJ2aWNlQ29udGV4dF92YXI6OlNlcnZpY2VDb250ZXh0X3ZhciAodm9pZCkKICA6IHB0cl8gKDAp
Cnt9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6OlNlcnZpY2VDb250ZXh0X3ZhciAo
U2VydmljZUNvbnRleHQgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCklPUDo6U2VydmljZUNv
bnRleHRfdmFyOjpTZXJ2aWNlQ29udGV4dF92YXIgKGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29udGV4
dF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3
IDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j
KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwog
IGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92
YXI6On5TZXJ2aWNlQ29udGV4dF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoK
aW5saW5lIElPUDo6U2VydmljZUNvbnRleHRfdmFyICYKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6
Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHQgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0
aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNv
bnRleHRfdmFyICYKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpJ
T1A6OlNlcnZpY2VDb250ZXh0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAg
ICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87
CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7
CiAgICAgICAgICBTZXJ2aWNlQ29udGV4dCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFNl
cnZpY2VDb250ZXh0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBTZXJ2aWNlQ29udGV4dCAqdG1wID0gZGVlcF9jb3B5
OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhp
cy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklP
UDo6U2VydmljZUNvbnRleHQgKgpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3BlcmF0b3ItPiAo
dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZp
Y2VDb250ZXh0ICoKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRfdmFyOjpv
cGVyYXRvciBjb25zdCA6OklPUDo6U2VydmljZUNvbnRleHQgJigpIGNvbnN0CnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3BlcmF0b3Ig
OjpJT1A6OlNlcnZpY2VDb250ZXh0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp
bmUKSU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6Om9wZXJhdG9yIDo6SU9QOjpTZXJ2aWNlQ29udGV4
dCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpJT1A6OlNlcnZp
Y2VDb250ZXh0X3Zhcjo6b3BlcmF0b3IgOjpJT1A6OlNlcnZpY2VDb250ZXh0IComKCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0ICYK
SU9QOjpTZXJ2aWNlQ29udGV4dF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlz
LT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0ICYKSU9QOjpTZXJ2aWNlQ29u
dGV4dF92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l
IDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAqJgpJT1A6OlNlcnZpY2VDb250ZXh0X3Zhcjo6b3V0ICh2
b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNvbnRleHQgKgpJT1A6OlNlcnZpY2VD
b250ZXh0X3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OklPUDo6U2VydmljZUNvbnRleHQgKnRtcCA9
IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6
SU9QOjpTZXJ2aWNlQ29udGV4dCAqCklPUDo6U2VydmljZUNvbnRleHRfdmFyOjpwdHIgKHZvaWQp
IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpJT1A6OlNlcnZpY2VD
b250ZXh0X291dDo6U2VydmljZUNvbnRleHRfb3V0ICg6OklPUDo6U2VydmljZUNvbnRleHQgKiZw
KQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl
Q29udGV4dF9vdXQ6OlNlcnZpY2VDb250ZXh0X291dCAoU2VydmljZUNvbnRleHRfdmFyICZwKQog
IDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g
MDsKfQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRfb3V0OjpTZXJ2aWNlQ29udGV4dF9vdXQg
KGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0
PFNlcnZpY2VDb250ZXh0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIElPUDo6U2VydmljZUNv
bnRleHRfb3V0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpJ
T1A6OlNlcnZpY2VDb250ZXh0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFNl
cnZpY2VDb250ZXh0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIElP
UDo6U2VydmljZUNvbnRleHRfb3V0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dF9vdXQ6Om9wZXJhdG9y
PSAoU2VydmljZUNvbnRleHQgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0X291dDo6b3BlcmF0b3IgOjpJT1A6OlNlcnZp
Y2VDb250ZXh0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNl
cnZpY2VDb250ZXh0IComCklPUDo6U2VydmljZUNvbnRleHRfb3V0OjpwdHIgKHZvaWQpCnsKICBy
ZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpTZXJ2aWNlQ29udGV4dCAqCklPUDo6
U2VydmljZUNvbnRleHRfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KIyAyMTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL0lPUEMuaSIKICBpbmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAqCiAgSU9QOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0OjphbGxvY2J1ZiAoQ09S
QkE6OlVMb25nIHNpemUpCgogIHsKICAgIElPUDo6U2VydmljZUNvbnRleHQgKnJldHZhbCA9IDA7
CiAgICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBJT1A6OlNlcnZpY2VDb250ZXh0W3NpemVdOyB9
IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl
dHVybiAwOyB9IH0gd2hpbGUgKDApOwogICAgcmV0dXJuIHJldHZhbDsKICB9CgogIGlubGluZSB2
b2lkIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6
ZnJlZWJ1ZiAoSU9QOjpTZXJ2aWNlQ29udGV4dCAqYnVmZmVyKQoKICB7CiAgICBkZWxldGUgW10g
YnVmZmVyOwogIH0KCiAgaW5saW5lCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1Bf
U2VydmljZUNvbnRleHRMaXN0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNv
bnRleHRMaXN0ICh2b2lkKQogIHsKICB9CgogIGlubGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
SU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6IFRBT19V
bmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
SU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYgKG1heGltdW0pKQogIHsKICB9CgogIGlu
bGluZQogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz
dDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdCAoQ09SQkE6
OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgSU9QOjpTZXJ2aWNl
Q29udGV4dCAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3Vu
ZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKICB7CiAg
fQoKICBpbmxpbmUKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29u
dGV4dExpc3Q6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Qg
KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3QgJnJo
cykKCiAgICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChy
aHMuYnVmZmVyXyAhPSAwKQogICAgewogICAgICBJT1A6OlNlcnZpY2VDb250ZXh0ICp0bXAxID0g
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYg
KHRoaXMtPm1heGltdW1fKTsKICAgICAgSU9QOjpTZXJ2aWNlQ29udGV4dCAqIGNvbnN0IHRtcDIg
PSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQgKj4gKHJocy5idWZmZXJfKTsK
CiAgICAgIGZvciAoQ09SQkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQog
ICAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAg
ICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgfQogIH0KCiAg
aW5saW5lIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlz
dCAmCiAgSU9QOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0
OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29u
dGV4dExpc3QgJnJocykKCiAgewogICAgaWYgKHRoaXMgPT0gJnJocykKICAgICAgcmV0dXJuICp0
aGlzOwoKICAgIGlmICh0aGlzLT5yZWxlYXNlXykKICAgIHsKICAgICAgaWYgKHRoaXMtPm1heGlt
dW1fIDwgcmhzLm1heGltdW1fKQogICAgICB7CgogICAgICAgIElPUDo6U2VydmljZUNvbnRleHQg
KnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SU9QOjpTZXJ2aWNlQ29udGV4dCAqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0
TGlzdDo6ZnJlZWJ1ZiAodG1wKTsKICAgICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6YWxsb2NidWYgKHJocy5tYXhpbXVt
Xyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5i
b3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6OmFsbG9jYnVmIChyaHMubWF4
aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMp
OwoKICAgIElPUDo6U2VydmljZUNvbnRleHQgKnRtcDEgPSByZWludGVycHJldF9jYXN0PElPUDo6
U2VydmljZUNvbnRleHQgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgSU9QOjpTZXJ2aWNlQ29udGV4
dCAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQgKj4g
KHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxl
bmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgcmV0dXJuICp0aGlzOwog
IH0KCgogIGlubGluZSBJT1A6OlNlcnZpY2VDb250ZXh0ICYKICBJT1A6Ol9UQU9fVW5ib3VuZGVk
X1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpKQoKICB7CiAgICBkbyB7IGlmKCEoaSA8IHRoaXMtPm1heGltdW1fKSkgeyBpbnQgX19hY2Vf
ZXJyb3IgPSBBQ0VfT1M6Omxhc3RfZXJyb3IgKCk7IEFDRV9Mb2dfTXNnICphY2VfX18gPSBBQ0Vf
TG9nX01zZzo6aW5zdGFuY2UgKCk7IGFjZV9fXy0+c2V0ICgiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9JT1BDLmkiLCAyMjUxLCAtMSwgX19hY2VfZXJy
b3IsIGFjZV9fXy0+cmVzdGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5t
c2dfY2FsbGJhY2sgKCkpOyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxl
ICVOLCBsaW5lICVsIGFzc2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+
bWF4aW11bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBJT1A6OlNlcnZpY2VDb250ZXh0KiB0
bXAgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVy
Xyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCiAgaW5saW5lIGNvbnN0IElPUDo6U2VydmljZUNv
bnRleHQgJgogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfSU9QX1NlcnZpY2VDb250ZXh0
TGlzdDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRvIHsgaWYo
IShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9l
cnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsg
YWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL0lPUEMuaSIsIDIyNjAsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgp
LCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9f
Xy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9u
IGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdo
aWxlICgwKTsKICAgIElPUDo6U2VydmljZUNvbnRleHQgKiBjb25zdCB0bXAgPSByZWludGVycHJl
dF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICByZXR1cm4g
dG1wW2ldOwogIH0KCgoKICBpbmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAqCiAgSU9QOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9JT1BfU2VydmljZUNvbnRleHRMaXN0OjpnZXRfYnVmZmVyIChD
T1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgSU9QOjpTZXJ2aWNlQ29udGV4dCAqcmVzdWx0
ID0gMDsKICAgIGlmIChvcnBoYW4gPT0gMCkKICAgIHsKCiAgICAgIGlmICh0aGlzLT5idWZmZXJf
ID09IDApCiAgICAgIHsKICAgICAgICByZXN1bHQgPSBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9J
T1BfU2VydmljZUNvbnRleHRMaXN0OjphbGxvY2J1ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgICAg
dGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDE7CiAgICAg
IH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxJ
T1A6OlNlcnZpY2VDb250ZXh0Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB9CiAgICB9CiAgICBl
bHNlCiAgICB7CiAgICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAwKQogICAgICB7CgoKICAgICAg
ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+
YnVmZmVyXyk7CiAgICAgICAgdGhpcy0+bWF4aW11bV8gPSAwOwogICAgICAgIHRoaXMtPmxlbmd0
aF8gPSAwOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSAwOwogICAgICAgIHRoaXMtPnJlbGVhc2Vf
ID0gMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGlubGluZSBjb25z
dCBJT1A6OlNlcnZpY2VDb250ZXh0ICoKICBJT1A6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX0lP
UF9TZXJ2aWNlQ29udGV4dExpc3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAqPiAodGhpcy0+
YnVmZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIElPUDo6X1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfSU9QX1NlcnZpY2VDb250ZXh0TGlzdDo6cmVwbGFjZSAoQ09SQkE6OlVMb25nIG1heCwKICBD
T1JCQTo6VUxvbmcgbGVuZ3RoLAogIElPUDo6U2VydmljZUNvbnRleHQgKmRhdGEsCiAgQ09SQkE6
OkJvb2xlYW4gcmVsZWFzZSkKICB7CiAgICB0aGlzLT5tYXhpbXVtXyA9IG1heDsKICAgIHRoaXMt
Pmxlbmd0aF8gPSBsZW5ndGg7CiAgICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNl
XyA9PSAxKQogICAgewogICAgICBJT1A6OlNlcnZpY2VDb250ZXh0ICp0bXAgPSByZWludGVycHJl
dF9jYXN0PElPUDo6U2VydmljZUNvbnRleHQqPiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9f
VW5ib3VuZGVkX1NlcXVlbmNlX0lPUF9TZXJ2aWNlQ29udGV4dExpc3Q6OmZyZWVidWYgKHRtcCk7
CiAgICB9CiAgICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICAgIHRoaXMtPnJlbGVhc2VfID0gcmVs
ZWFzZTsKICB9CiMgMjMzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9JT1BDLmkiCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXI6OlNl
cnZpY2VDb250ZXh0TGlzdF92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCklPUDo6
U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6U2VydmljZUNvbnRleHRMaXN0X3ZhciAoU2VydmljZUNv
bnRleHRMaXN0ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpJT1A6OlNlcnZpY2VDb250ZXh0
TGlzdF92YXI6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgKGNvbnN0IDo6SU9QOjpTZXJ2aWNlQ29u
dGV4dExpc3RfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRy
XyA9IG5ldyA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3Rk
OjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3
aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlNlcnZp
Y2VDb250ZXh0TGlzdF92YXI6On5TZXJ2aWNlQ29udGV4dExpc3RfdmFyICh2b2lkKQp7CiAgZGVs
ZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgJgpJ
T1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXI6Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHRMaXN0
ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF92YXIgJgpJT1A6OlNlcnZp
Y2VDb250ZXh0TGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0
TGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9
PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhp
cy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgU2Vy
dmljZUNvbnRleHRMaXN0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgU2VydmljZUNvbnRl
eHRMaXN0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBTZXJ2aWNlQ29udGV4dExpc3QgKnRtcCA9IGRlZXBfY29weTsK
ICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMt
PnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpJT1A6
OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3BlcmF0
b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6
OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3BlcmF0
b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl
Q29udGV4dExpc3RfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0
ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNl
Q29udGV4dExpc3RfdmFyOjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYoKQp7
CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3Rf
dmFyOjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYoKSBjb25zdAp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6
b3BlcmF0b3IgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lIElPUDo6U2VydmljZUNvbnRleHQgJgpJT1A6OlNlcnZpY2VDb250ZXh0
TGlzdF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlz
LT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBJT1A6OlNlcnZpY2VD
b250ZXh0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6
VUxvbmcgaW5kZXgpIGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBJT1A6OlNlcnZp
Y2VDb250ZXh0ICY+ICh0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUg
Y29uc3QgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmCklPUDo6U2VydmljZUNvbnRleHRMaXN0
X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6
OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICYKSU9QOjpTZXJ2aWNlQ29udGV4dExpc3RfdmFyOjpp
bm91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklPUDo6U2Vy
dmljZUNvbnRleHRMaXN0IComCklPUDo6U2VydmljZUNvbnRleHRMaXN0X3Zhcjo6b3V0ICh2b2lk
KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0ICoKSU9QOjpTZXJ2aWNl
Q29udGV4dExpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6SU9QOjpTZXJ2aWNlQ29udGV4dExp
c3QgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoK
aW5saW5lIDo6SU9QOjpTZXJ2aWNlQ29udGV4dExpc3QgKgpJT1A6OlNlcnZpY2VDb250ZXh0TGlz
dF92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5s
aW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6U2VydmljZUNvbnRleHRMaXN0X291dCAo
U2VydmljZUNvbnRleHRMaXN0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsK
fQoKaW5saW5lCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6U2VydmljZUNvbnRleHRMaXN0
X291dCAoU2VydmljZUNvbnRleHRMaXN0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAg
ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpJT1A6OlNlcnZp
Y2VDb250ZXh0TGlzdF9vdXQ6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgKGNvbnN0IDo6SU9QOjpT
ZXJ2aWNlQ29udGV4dExpc3Rfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxTZXJ2aWNlQ29u
dGV4dExpc3Rfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0
TGlzdF9vdXQgJgpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3Qg
OjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3Rf
Y2FzdDxTZXJ2aWNlQ29udGV4dExpc3Rfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9
CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQgJgpJT1A6OlNlcnZpY2VDb250
ZXh0TGlzdF9vdXQ6Om9wZXJhdG9yPSAoU2VydmljZUNvbnRleHRMaXN0ICpwKQp7CiAgdGhpcy0+
cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKSU9QOjpTZXJ2aWNlQ29udGV4dExp
c3Rfb3V0OjpvcGVyYXRvciA6OklPUDo6U2VydmljZUNvbnRleHRMaXN0IComKCkKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqJgpJT1A6
OlNlcnZpY2VDb250ZXh0TGlzdF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAqCklPUDo6U2VydmljZUNvbnRl
eHRMaXN0X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUgSU9QOjpTZXJ2aWNlQ29udGV4dCAmCklPUDo6U2VydmljZUNvbnRleHRMaXN0X291dDo6
b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9w
ZXJhdG9yW10gKGluZGV4KTsKfQojIDI1NjIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgppbmxpbmUgSU9QOjpDb2RlY19wdHIKdGFvX0lP
UF9Db2RlY19kdXBsaWNhdGUgKAogICAgSU9QOjpDb2RlY19wdHIgcAogICkKewogIHJldHVybiBJ
T1A6OkNvZGVjOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX0lPUF9Db2RlY19y
ZWxlYXNlICgKICAgIElPUDo6Q29kZWNfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7
Cn0KCmlubGluZSBJT1A6OkNvZGVjX3B0cgp0YW9fSU9QX0NvZGVjX25pbCAoCiAgICB2b2lkCiAg
KQp7CiAgcmV0dXJuIElPUDo6Q29kZWM6Ol9uaWwgKCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjX3B0
cgp0YW9fSU9QX0NvZGVjX25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0
dXJuIElPUDo6Q29kZWM6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19JT1BfQ29kZWNfdXBjYXN0ICgKICAg
IHZvaWQgKnNyYwogICkKewogIElPUDo6Q29kZWMgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8SU9Q
OjpDb2RlYyAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAyNjEyICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lPUEMuaSIKaW5saW5lCklPUDo6
RW5jb2RpbmdfdmFyOjpFbmNvZGluZ192YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5l
CklPUDo6RW5jb2RpbmdfdmFyOjpFbmNvZGluZ192YXIgKEVuY29kaW5nICpwKQogIDogcHRyXyAo
cCkKe30KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6RW5jb2RpbmdfdmFyIChjb25zdCA6OklP
UDo6RW5jb2RpbmdfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+
cHRyXyA9IG5ldyA6OklPUDo6RW5jb2RpbmcgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9h
bGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgw
KTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpJT1A6OkVuY29kaW5nX3Zh
cjo6RW5jb2RpbmdfdmFyIChjb25zdCA6OklPUDo6RW5jb2RpbmcgJnApCnsKICBkbyB7IHRyeSB7
IHRoaXMtPnB0cl8gPSBuZXcgOjpJT1A6OkVuY29kaW5nIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRf
YWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAo
MCk7Cn0KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6fkVuY29kaW5nX3ZhciAodm9pZCkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgSU9QOjpFbmNvZGluZ192YXIgJgpJT1A6OkVu
Y29kaW5nX3Zhcjo6b3BlcmF0b3I9IChFbmNvZGluZyAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6SU9QOjpFbmNv
ZGluZ192YXIgJgpJT1A6OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OklPUDo6RW5j
b2RpbmdfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8g
PT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRo
aXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIEVu
Y29kaW5nICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgRW5jb2RpbmcgKCpwLnB0cl8pOwoK
ICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IEVuY29kaW5nICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhp
cy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRl
bGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAq
dGhpczsKfQoKCmlubGluZSBJT1A6OkVuY29kaW5nX3ZhciAmCklPUDo6RW5jb2RpbmdfdmFyOjpv
cGVyYXRvcj0gKGNvbnN0IDo6SU9QOjpFbmNvZGluZyAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9
ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJf
ID0gbmV3IDo6SU9QOjpFbmNvZGluZyAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuICp0aGlzOyB9IH0gd2hpbGUgKDApOwog
IH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OklPUDo6RW5jb2RpbmcgKgpJT1A6
OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgOjpJT1A6OkVuY29kaW5nICoKSU9QOjpFbmNvZGluZ192YXI6Om9wZXJh
dG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lCklPUDo6RW5jb2Rp
bmdfdmFyOjpvcGVyYXRvciBjb25zdCA6OklPUDo6RW5jb2RpbmcgJigpIGNvbnN0CnsKICByZXR1
cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpJT1A6OkVuY29kaW5nX3Zhcjo6b3BlcmF0b3IgOjpJ
T1A6OkVuY29kaW5nICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKSU9QOjpF
bmNvZGluZ192YXI6Om9wZXJhdG9yIDo6SU9QOjpFbmNvZGluZyAmKCkgY29uc3QKewogIHJldHVy
biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6SU9QOjpFbmNvZGluZyAmCklPUDo6RW5j
b2RpbmdfdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIDo6SU9QOjpFbmNvZGluZyAmCklPUDo6RW5jb2RpbmdfdmFyOjppbm91dCAodm9pZCkKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OklPUDo6RW5jb2RpbmcgJgpJT1A6OkVu
Y29kaW5nX3Zhcjo6b3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUg
OjpJT1A6OkVuY29kaW5nCklPUDo6RW5jb2RpbmdfdmFyOjpfcmV0biAodm9pZCkKewogIHJldHVy
biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6SU9QOjpFbmNvZGluZyAqCklPUDo6RW5jb2Rpbmdf
dmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQojIDI3NjEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5pIgpp
bmxpbmUgSU9QOjpDb2RlY0ZhY3RvcnlfcHRyCnRhb19JT1BfQ29kZWNGYWN0b3J5X2R1cGxpY2F0
ZSAoCiAgICBJT1A6OkNvZGVjRmFjdG9yeV9wdHIgcAogICkKewogIHJldHVybiBJT1A6OkNvZGVj
RmFjdG9yeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19JT1BfQ29kZWNGYWN0
b3J5X3JlbGVhc2UgKAogICAgSU9QOjpDb2RlY0ZhY3RvcnlfcHRyIHAKICApCnsKICBDT1JCQTo6
cmVsZWFzZSAocCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjRmFjdG9yeV9wdHIKdGFvX0lPUF9Db2Rl
Y0ZhY3RvcnlfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gSU9QOjpDb2RlY0ZhY3Rvcnk6
Ol9uaWwgKCk7Cn0KCmlubGluZSBJT1A6OkNvZGVjRmFjdG9yeV9wdHIKdGFvX0lPUF9Db2RlY0Zh
Y3RvcnlfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gSU9QOjpD
b2RlY0ZhY3Rvcnk6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUp
Owp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19JT1BfQ29kZWNGYWN0b3J5X3VwY2FzdCAo
CiAgICB2b2lkICpzcmMKICApCnsKICBJT1A6OkNvZGVjRmFjdG9yeSAqKnRtcCA9CiAgICBzdGF0
aWNfY2FzdDxJT1A6OkNvZGVjRmFjdG9yeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAy
ODExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0lP
UEMuaSIKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAg
ICBjb25zdCBJT1A6OlRhZ2dlZFByb2ZpbGU6Ol90YW9fc2VxX09jdGV0ICYKICApOwpDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgSU9QOjpUYWdnZWRQ
cm9maWxlOjpfdGFvX3NlcV9PY3RldCAmCiAgKTsKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElPUDo6VGFnZ2VkUHJvZmlsZSAm
X3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS50YWcp
ICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wcm9maWxlX2RhdGEpCiAgKQogICAgcmV0
dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBJT1A6OlRhZ2dlZFByb2ZpbGUgJl90YW9fYWdn
cmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUudGFnKSAmJgogICAg
KHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucHJvZmlsZV9kYXRhKQogICkKICAgIHJldHVybiAxOwog
IGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAog
ICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpJT1I6Ol90YW9fc2VxX1RhZ2dlZFBy
b2ZpbGUgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RS
ICYsCiAgICBJT1A6OklPUjo6X3Rhb19zZXFfVGFnZ2VkUHJvZmlsZSAmCiAgKTsKCgoKaW5saW5l
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElP
UDo6SU9SICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVn
YXRlLnR5cGVfaWQuaW4gKCkpICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wcm9maWxl
cykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIElPUDo6SU9SICZfdGFv
X2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnR5cGVfaWQu
b3V0ICgpKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucHJvZmlsZXMpCiAgKQogICAg
cmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBJT1A6OlRhZ2dlZENvbXBv
bmVudDo6X3Rhb19zZXFfT2N0ZXQgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAog
ICAgVEFPX0lucHV0Q0RSICYsCiAgICBJT1A6OlRhZ2dlZENvbXBvbmVudDo6X3Rhb19zZXFfT2N0
ZXQgJgogICk7CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0
Q0RSICZzdHJtLCBjb25zdCBJT1A6OlRhZ2dlZENvbXBvbmVudCAmX3Rhb19hZ2dyZWdhdGUpCnsK
ICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS50YWcpICYmCiAgICAoc3RybSA8PCBf
dGFvX2FnZ3JlZ2F0ZS5jb21wb25lbnRfZGF0YSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAg
ICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5w
dXRDRFIgJnN0cm0sIElPUDo6VGFnZ2VkQ29tcG9uZW50ICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlm
ICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnRhZykgJiYKICAgIChzdHJtID4+IF90YW9f
YWdncmVnYXRlLmNvbXBvbmVudF9kYXRhKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJl
dHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1
dENEUiAmLAogICAgY29uc3QgSU9QOjpNdWx0aXBsZUNvbXBvbmVudFByb2ZpbGUgJgogICk7CkNP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBJT1A6Ok11
bHRpcGxlQ29tcG9uZW50UHJvZmlsZSAmCiAgKTsKCgoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpUYWdnZWRDb21wb25l
bnRMaXN0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENE
UiAmLAogICAgSU9QOjpUYWdnZWRDb21wb25lbnRMaXN0ICYKICApOwoKCgoKCgoKQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBJT1A6OlRh
Z2dlZENvbXBvbmVudFNlcSAmCiAgKTsKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBU
QU9fSW5wdXRDRFIgJiwKICAgIElPUDo6VGFnZ2VkQ29tcG9uZW50U2VxICYKICApOwoKCgoKCgoK
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25z
dCBJT1A6OlNlcnZpY2VDb250ZXh0OjpfdGFvX3NlcV9PY3RldCAmCiAgKTsKQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIElPUDo6U2VydmljZUNvbnRl
eHQ6Ol90YW9fc2VxX09jdGV0ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0
b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgSU9QOjpTZXJ2aWNlQ29udGV4dCAmX3Rh
b19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5jb250ZXh0
X2lkKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuY29udGV4dF9kYXRhKQogICkKICAg
IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgSU9QOjpTZXJ2aWNlQ29udGV4dCAmX3Rh
b19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5jb250ZXh0
X2lkKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuY29udGV4dF9kYXRhKQogICkKICAg
IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgSU9QOjpTZXJ2aWNlQ29u
dGV4dExpc3QgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0
Q0RSICYsCiAgICBJT1A6OlNlcnZpY2VDb250ZXh0TGlzdCAmCiAgKTsKCgoKaW5saW5lIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IElPUDo6RW5j
b2RpbmcgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdh
dGUuZm9ybWF0KSAmJgogICAgKHN0cm0gPDwgQ09SQkE6OkFueTo6ZnJvbV9vY3RldCAoX3Rhb19h
Z2dyZWdhdGUubWFqb3JfdmVyc2lvbikpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9t
X29jdGV0IChfdGFvX2FnZ3JlZ2F0ZS5taW5vcl92ZXJzaW9uKSkKICApCiAgICByZXR1cm4gMTsK
ICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
IChUQU9fSW5wdXRDRFIgJnN0cm0sIElPUDo6RW5jb2RpbmcgJl90YW9fYWdncmVnYXRlKQp7CiAg
aWYgKAogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZm9ybWF0KSAmJgogICAgKHN0cm0gPj4g
Q09SQkE6OkFueTo6dG9fb2N0ZXQgKF90YW9fYWdncmVnYXRlLm1ham9yX3ZlcnNpb24pKSAmJgog
ICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fb2N0ZXQgKF90YW9fYWdncmVnYXRlLm1pbm9yX3Zl
cnNpb24pKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQojIDE5MzQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o
IiAyCiMgMTk0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9JT1BDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3Bvc3QuaCIgMQojIDE5NDUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vSU9QQy5oIiAyCiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIiAyCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDEKIyA0
OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz
YWdpbmdDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvbGxhYmxlQy5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3Ji
YWZ3ZC5oIiAxCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vUG9sbGFibGVDLmgiIDIKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL09iamVjdC5oIiAxCiMgMzEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL0V4Y2VwdGlv
bi5oIiAxCiMgMzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vUG9sbGFibGVDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0NEUi5oIiAxCiMgMzMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyA2MiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xh
c3MgQ09SQkFfUG9sbGFibGVTZXQ7CgoKCgp0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0ICpDT1JC
QV9Qb2xsYWJsZVNldF9wdHI7CgoKCgoKCgpjbGFzcyBDT1JCQV9Qb2xsYWJsZVNldF92YXIgOiBw
dWJsaWMgVEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAodm9p
ZCk7CiAgQ09SQkFfUG9sbGFibGVTZXRfdmFyIChDT1JCQV9Qb2xsYWJsZVNldF9wdHIgcCkgOiBw
dHJfIChwKSB7fQogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAoY29uc3QgQ09SQkFfUG9sbGFibGVT
ZXRfdmFyICYpOwogIH5DT1JCQV9Qb2xsYWJsZVNldF92YXIgKHZvaWQpOwoKICBDT1JCQV9Qb2xs
YWJsZVNldF92YXIgJm9wZXJhdG9yPSAoQ09SQkFfUG9sbGFibGVTZXRfcHRyKTsKICBDT1JCQV9Q
b2xsYWJsZVNldF92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfdmFyICYp
OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3Bl
cmF0b3IgY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBD
T1JCQV9Qb2xsYWJsZVNldF9wdHIgJigpOwoKICBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgaW4gKHZv
aWQpIGNvbnN0OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJB
X1BvbGxhYmxlU2V0X3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgX3Jl
dG4gKHZvaWQpOwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgog
IHN0YXRpYyBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgZHVwbGljYXRlIChDT1JCQV9Qb2xsYWJsZVNl
dF9wdHIpOwogIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX1BvbGxhYmxlU2V0X3B0cik7CiAg
c3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9Q
b2xsYWJsZVNldF9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVu
dCAmKTsKICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCnByaXZhdGU6
CiAgQ09SQkFfUG9sbGFibGVTZXRfcHRyIHB0cl87CgogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAo
Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX1BvbGxhYmxlU2V0X3ZhciAmb3BlcmF0
b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7Cn07CiMgMTE4ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgpjbGFzcyBDT1JC
QV9Qb2xsYWJsZVNldF9vdXQKewpwdWJsaWM6CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChDT1JC
QV9Qb2xsYWJsZVNldF9wdHIgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChDT1JCQV9Qb2xs
YWJsZVNldF92YXIgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0IChjb25zdCBDT1JCQV9Qb2xs
YWJsZVNldF9vdXQgJik7CiAgQ09SQkFfUG9sbGFibGVTZXRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0
IENPUkJBX1BvbGxhYmxlU2V0X291dCAmKTsKICBDT1JCQV9Qb2xsYWJsZVNldF9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgQ09SQkFfUG9sbGFibGVTZXRfdmFyICYpOwogIENPUkJBX1BvbGxhYmxlU2V0
X291dCAmb3BlcmF0b3I9IChDT1JCQV9Qb2xsYWJsZVNldF9wdHIpOwogIG9wZXJhdG9yIENPUkJB
X1BvbGxhYmxlU2V0X3B0ciAmKCk7CiAgQ09SQkFfUG9sbGFibGVTZXRfcHRyICZwdHIgKHZvaWQp
OwogIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAg
Q09SQkFfUG9sbGFibGVTZXRfcHRyICZwdHJfOwp9OwojIDE0MiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xhc3MgQ09SQkFf
UG9sbGFibGU7CnR5cGVkZWYgQ09SQkFfUG9sbGFibGUgKkNPUkJBX1BvbGxhYmxlX3B0cjsKCgoK
CgoKCmNsYXNzIENPUkJBX1BvbGxhYmxlX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKewpwdWJs
aWM6CiAgQ09SQkFfUG9sbGFibGVfdmFyICh2b2lkKTsKICBDT1JCQV9Qb2xsYWJsZV92YXIgKENP
UkJBX1BvbGxhYmxlX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgQ09SQkFfUG9sbGFibGVfdmFyIChj
b25zdCBDT1JCQV9Qb2xsYWJsZV92YXIgJik7CiAgfkNPUkJBX1BvbGxhYmxlX3ZhciAodm9pZCk7
CgogIENPUkJBX1BvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChDT1JCQV9Qb2xsYWJsZV9wdHIpOwog
IENPUkJBX1BvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xsYWJsZV92YXIg
Jik7CiAgQ09SQkFfUG9sbGFibGVfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICBvcGVy
YXRvciBjb25zdCBDT1JCQV9Qb2xsYWJsZV9wdHIgJigpIGNvbnN0OwogIG9wZXJhdG9yIENPUkJB
X1BvbGxhYmxlX3B0ciAmKCk7CgogIENPUkJBX1BvbGxhYmxlX3B0ciBpbiAodm9pZCkgY29uc3Q7
CiAgQ09SQkFfUG9sbGFibGVfcHRyICZpbm91dCAodm9pZCk7CiAgQ09SQkFfUG9sbGFibGVfcHRy
ICZvdXQgKHZvaWQpOwogIENPUkJBX1BvbGxhYmxlX3B0ciBfcmV0biAodm9pZCk7CiAgQ09SQkFf
UG9sbGFibGVfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgc3RhdGljIENPUkJBX1BvbGxhYmxl
X3B0ciBkdXBsaWNhdGUgKENPUkJBX1BvbGxhYmxlX3B0cik7CiAgc3RhdGljIHZvaWQgcmVsZWFz
ZSAoQ09SQkFfUG9sbGFibGVfcHRyKTsKICBzdGF0aWMgQ09SQkFfUG9sbGFibGVfcHRyIG5pbCAo
dm9pZCk7CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3Qg
KiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0
ICh2b2lkICopOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xsYWJsZV9wdHIgcHRyXzsKCiAgQ09SQkFf
UG9sbGFibGVfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgQ09SQkFfUG9sbGFibGVf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKfTsKIyAxOTQgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgi
CmNsYXNzIENPUkJBX1BvbGxhYmxlX291dAp7CnB1YmxpYzoKICBDT1JCQV9Qb2xsYWJsZV9vdXQg
KENPUkJBX1BvbGxhYmxlX3B0ciAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgKENPUkJBX1BvbGxh
YmxlX3ZhciAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgKGNvbnN0IENPUkJBX1BvbGxhYmxlX291
dCAmKTsKICBDT1JCQV9Qb2xsYWJsZV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfUG9sbGFi
bGVfb3V0ICYpOwogIENPUkJBX1BvbGxhYmxlX291dCAmb3BlcmF0b3I9IChjb25zdCBDT1JCQV9Q
b2xsYWJsZV92YXIgJik7CiAgQ09SQkFfUG9sbGFibGVfb3V0ICZvcGVyYXRvcj0gKENPUkJBX1Bv
bGxhYmxlX3B0cik7CiAgb3BlcmF0b3IgQ09SQkFfUG9sbGFibGVfcHRyICYoKTsKICBDT1JCQV9Q
b2xsYWJsZV9wdHIgJnB0ciAodm9pZCk7CiAgQ09SQkFfUG9sbGFibGVfcHRyIG9wZXJhdG9yLT4g
KHZvaWQpOwoKcHJpdmF0ZToKICBDT1JCQV9Qb2xsYWJsZV9wdHIgJnB0cl87Cn07CiMgMjE4ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxl
Qy5oIgpjbGFzcyBDT1JCQV9Qb2xsYWJsZSA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAp7
CnB1YmxpYzoKCiAgdHlwZWRlZiBDT1JCQV9Qb2xsYWJsZV9wdHIgX3B0cl90eXBlOwogIHR5cGVk
ZWYgQ09SQkFfUG9sbGFibGVfdmFyIF92YXJfdHlwZTsKCgoKICBzdGF0aWMgQ09SQkFfUG9sbGFi
bGVfcHRyIF9kdXBsaWNhdGUgKENPUkJBX1BvbGxhYmxlX3B0ciBvYmopOwogIHN0YXRpYyBDT1JC
QV9Qb2xsYWJsZV9wdHIgX25hcnJvdyAoCiAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKICBzdGF0aWMgQ09SQkFf
UG9sbGFibGVfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRp
YyBDT1JCQV9Qb2xsYWJsZV9wdHIgX25pbCAodm9pZCkKICAgIHsKICAgICAgcmV0dXJuIChDT1JC
QV9Qb2xsYWJsZV9wdHIpMDsKICAgIH0KCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBpc19yZWFk
eSAoCiAgICAgIENPUkJBOjpVTG9uZyB0aW1lb3V0LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICApCiAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9
IDA7CgoKCiAgdmlydHVhbCBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgY3JlYXRlX3BvbGxhYmxlX3Nl
dCAoCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkKICAgIHRocm93
ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICB2aXJ0dWFsIHZvaWQgKl90YW9f
UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09S
QkFfUG9sbGFibGUgKHZvaWQpOwoKICB2aXJ0dWFsIH5DT1JCQV9Qb2xsYWJsZSAodm9pZCk7CnBy
aXZhdGU6CiAgQ09SQkFfUG9sbGFibGUgKGNvbnN0IENPUkJBX1BvbGxhYmxlICYpOwogIHZvaWQg
b3BlcmF0b3I9IChjb25zdCBDT1JCQV9Qb2xsYWJsZSAmKTsKfTsKIyAyODAgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCmNsYXNz
IENPUkJBX0RJSVBvbGxhYmxlOwp0eXBlZGVmIENPUkJBX0RJSVBvbGxhYmxlICpDT1JCQV9ESUlQ
b2xsYWJsZV9wdHI7CgoKCgoKCgpjbGFzcyBDT1JCQV9ESUlQb2xsYWJsZV92YXIgOiBwdWJsaWMg
VEFPX0Jhc2VfdmFyCnsKcHVibGljOgogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAodm9pZCk7CiAg
Q09SQkFfRElJUG9sbGFibGVfdmFyIChDT1JCQV9ESUlQb2xsYWJsZV9wdHIgcCkgOiBwdHJfIChw
KSB7fQogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAoY29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFy
ICYpOwogIH5DT1JCQV9ESUlQb2xsYWJsZV92YXIgKHZvaWQpOwoKICBDT1JCQV9ESUlQb2xsYWJs
ZV92YXIgJm9wZXJhdG9yPSAoQ09SQkFfRElJUG9sbGFibGVfcHRyKTsKICBDT1JCQV9ESUlQb2xs
YWJsZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFyICYpOwogIENP
UkJBX0RJSVBvbGxhYmxlX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3BlcmF0b3Ig
Y29uc3QgQ09SQkFfRElJUG9sbGFibGVfcHRyICYoKSBjb25zdDsKICBvcGVyYXRvciBDT1JCQV9E
SUlQb2xsYWJsZV9wdHIgJigpOwoKICBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgaW4gKHZvaWQpIGNv
bnN0OwogIENPUkJBX0RJSVBvbGxhYmxlX3B0ciAmaW5vdXQgKHZvaWQpOwogIENPUkJBX0RJSVBv
bGxhYmxlX3B0ciAmb3V0ICh2b2lkKTsKICBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgX3JldG4gKHZv
aWQpOwogIENPUkJBX0RJSVBvbGxhYmxlX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogIHN0YXRp
YyBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgZHVwbGljYXRlIChDT1JCQV9ESUlQb2xsYWJsZV9wdHIp
OwogIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENPUkJBX0RJSVBvbGxhYmxlX3B0cik7CiAgc3RhdGlj
IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBuaWwgKHZvaWQpOwogIHN0YXRpYyBDT1JCQV9ESUlQb2xs
YWJsZV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsK
ICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCnByaXZhdGU6CiAgQ09S
QkFfRElJUG9sbGFibGVfcHRyIHB0cl87CgogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAoY29uc3Qg
VEFPX0Jhc2VfdmFyICZyaHMpOwogIENPUkJBX0RJSVBvbGxhYmxlX3ZhciAmb3BlcmF0b3I9IChj
b25zdCBUQU9fQmFzZV92YXIgJnJocyk7Cn07CiMgMzMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgpjbGFzcyBDT1JCQV9ESUlQ
b2xsYWJsZV9vdXQKewpwdWJsaWM6CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChDT1JCQV9ESUlQ
b2xsYWJsZV9wdHIgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChDT1JCQV9ESUlQb2xsYWJs
ZV92YXIgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0IChjb25zdCBDT1JCQV9ESUlQb2xsYWJs
ZV9vdXQgJik7CiAgQ09SQkFfRElJUG9sbGFibGVfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IENPUkJB
X0RJSVBvbGxhYmxlX291dCAmKTsKICBDT1JCQV9ESUlQb2xsYWJsZV9vdXQgJm9wZXJhdG9yPSAo
Y29uc3QgQ09SQkFfRElJUG9sbGFibGVfdmFyICYpOwogIENPUkJBX0RJSVBvbGxhYmxlX291dCAm
b3BlcmF0b3I9IChDT1JCQV9ESUlQb2xsYWJsZV9wdHIpOwogIG9wZXJhdG9yIENPUkJBX0RJSVBv
bGxhYmxlX3B0ciAmKCk7CiAgQ09SQkFfRElJUG9sbGFibGVfcHRyICZwdHIgKHZvaWQpOwogIENP
UkJBX0RJSVBvbGxhYmxlX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgQ09SQkFf
RElJUG9sbGFibGVfcHRyICZwdHJfOwp9OwojIDM1NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaCIKY2xhc3MgQ09SQkFfRElJUG9s
bGFibGU6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1BvbGxhYmxlCnsKcHVibGljOgoKICB0eXBlZGVm
IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBfcHRyX3R5cGU7CiAgdHlwZWRlZiBDT1JCQV9ESUlQb2xs
YWJsZV92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JCQV9ESUlQb2xsYWJsZV9wdHIgX2R1
cGxpY2F0ZSAoQ09SQkFfRElJUG9sbGFibGVfcHRyIG9iaik7CiAgc3RhdGljIENPUkJBX0RJSVBv
bGxhYmxlX3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICApOwogIHN0YXRpYyBDT1JCQV9ESUlQ
b2xsYWJsZV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv
YmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICk7CiAgc3RhdGlj
IENPUkJBX0RJSVBvbGxhYmxlX3B0ciBfbmlsICh2b2lkKQogICAgewogICAgICByZXR1cm4gKENP
UkJBX0RJSVBvbGxhYmxlX3B0cikwOwogICAgfQoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJ
bnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRl
cmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7Cgpwcm90ZWN0ZWQ6CiAgQ09SQkFfRElJ
UG9sbGFibGUgKHZvaWQpOwoKICB2aXJ0dWFsIH5DT1JCQV9ESUlQb2xsYWJsZSAodm9pZCk7CnBy
aXZhdGU6CiAgQ09SQkFfRElJUG9sbGFibGUgKGNvbnN0IENPUkJBX0RJSVBvbGxhYmxlICYpOwog
IHZvaWQgb3BlcmF0b3I9IChjb25zdCBDT1JCQV9ESUlQb2xsYWJsZSAmKTsKfTsKIyA0MTAgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVD
LmgiCmNsYXNzIENPUkJBX1BvbGxhYmxlU2V0IDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0
CnsKcHVibGljOgoKICB0eXBlZGVmIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfcHRyX3R5cGU7CiAg
dHlwZWRlZiBDT1JCQV9Qb2xsYWJsZVNldF92YXIgX3Zhcl90eXBlOwoKCgogIHN0YXRpYyBDT1JC
QV9Qb2xsYWJsZVNldF9wdHIgX2R1cGxpY2F0ZSAoQ09SQkFfUG9sbGFibGVTZXRfcHRyIG9iaik7
CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfbmFycm93ICgKICAgICAgQ09SQkE6Ok9i
amVjdF9wdHIgb2JqLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAp
OwogIHN0YXRpYyBDT1JCQV9Qb2xsYWJsZVNldF9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg
ICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l
bnQgKCkKICAgICk7CiAgc3RhdGljIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBfbmlsICh2b2lkKQog
ICAgewogICAgICByZXR1cm4gKENPUkJBX1BvbGxhYmxlU2V0X3B0cikwOwogICAgfQoKCgoKCiAg
Y2xhc3MgTm9Qb3NzaWJsZVBvbGxhYmxlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKCiAgICBOb1Bvc3NpYmxlUG9sbGFibGUgKHZvaWQpOwoKCiAgICBOb1Bvc3Np
YmxlUG9sbGFibGUgKGNvbnN0IE5vUG9zc2libGVQb2xsYWJsZSAmKTsKCgogICAgfk5vUG9zc2li
bGVQb2xsYWJsZSAodm9pZCk7CgoKICAgIE5vUG9zc2libGVQb2xsYWJsZSAmb3BlcmF0b3I9IChj
b25zdCBOb1Bvc3NpYmxlUG9sbGFibGUgJik7CgogICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p
ZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICBUQU9fT3V0cHV0Q0RS
ICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKSBjb25zdDsKCiAgICB2aXJ0
dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3RhdGljIE5vUG9zc2libGVQb2xsYWJs
ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgc3RhdGljIENPUkJBOjpF
eGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgfTsKIyA0ODAgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiCiAgY2xhc3MgVW5rbm93
blBvbGxhYmxlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAg
ICBVbmtub3duUG9sbGFibGUgKHZvaWQpOwoKCiAgICBVbmtub3duUG9sbGFibGUgKGNvbnN0IFVu
a25vd25Qb2xsYWJsZSAmKTsKCgogICAgflVua25vd25Qb2xsYWJsZSAodm9pZCk7CgoKICAgIFVu
a25vd25Qb2xsYWJsZSAmb3BlcmF0b3I9IChjb25zdCBVbmtub3duUG9sbGFibGUgJik7CgogICAg
dmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2Rl
ICgKICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYK
ICAgICAgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRB
T19JbnB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAg
c3RhdGljIFVua25vd25Qb2xsYWJsZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK
CgogICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgfTsKCgoKCnZp
cnR1YWwgQ09SQkFfRElJUG9sbGFibGVfcHRyIGNyZWF0ZV9kaWlfcG9sbGFibGUgKAogICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICkgPSAwOwoKCgp2aXJ0dWFsIHZvaWQgYWRkX3BvbGxhYmxlICgKICAgIENPUkJBX1Bv
bGxhYmxlX3B0ciBwb3RlbnRpYWwsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCnZpcnR1YWwgQ09S
QkFfUG9sbGFibGVfcHRyIHBvbGwgKAogICAgQ09SQkE6OlVMb25nIHRpbWVvdXQsCiAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sIENPUkJBX1BvbGxhYmxlU2V0OjpOb1Bvc3NpYmxlUG9sbGFibGUgKSA9IDA7CgoKCgp2
aXJ0dWFsIHZvaWQgcmVtb3ZlICgKICAgIENPUkJBX1BvbGxhYmxlX3B0ciBwb3RlbnRpYWwsCiAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24sIENPUkJBX1BvbGxhYmxlU2V0OjpVbmtub3duUG9sbGFibGUgKSA9IDA7CgoK
Cgp2aXJ0dWFsIENPUkJBOjpVU2hvcnQgbnVtYmVyX2xlZnQgKAogICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgVEFPX2RlZmF1bHRf
ZW52aXJvbm1lbnQgKCkKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAw
OwoKCgp2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUp
OwoKdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNv
bnN0OwoKcHJvdGVjdGVkOgogIENPUkJBX1BvbGxhYmxlU2V0ICh2b2lkKTsKCiAgdmlydHVhbCB+
Q09SQkFfUG9sbGFibGVTZXQgKHZvaWQpOwpwcml2YXRlOgogIENPUkJBX1BvbGxhYmxlU2V0IChj
b25zdCBDT1JCQV9Qb2xsYWJsZVNldCAmKTsKICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgQ09SQkFf
UG9sbGFibGVTZXQgJik7Cn07CiMgNTg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmkiIDEKIyAyNiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaSIK
aW5saW5lIENPUkJBX1BvbGxhYmxlX3B0cgp0YW9fQ09SQkFfUG9sbGFibGVfZHVwbGljYXRlICgK
ICAgIENPUkJBX1BvbGxhYmxlX3B0ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX1BvbGxhYmxlOjpf
ZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX0NPUkJBX1BvbGxhYmxlX3JlbGVhc2Ug
KAogICAgQ09SQkFfUG9sbGFibGVfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0K
CmlubGluZSBDT1JCQV9Qb2xsYWJsZV9wdHIKdGFvX0NPUkJBX1BvbGxhYmxlX25pbCAoCiAgICB2
b2lkCiAgKQp7CiAgcmV0dXJuIENPUkJBX1BvbGxhYmxlOjpfbmlsICgpOwp9CgppbmxpbmUgQ09S
QkFfUG9sbGFibGVfcHRyCnRhb19DT1JCQV9Qb2xsYWJsZV9uYXJyb3cgKAogICAgQ09SQkE6Ok9i
amVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZQogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZTo6X25hcnJvdyAocCwgX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFv
X0NPUkJBX1BvbGxhYmxlX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBDT1JCQV9Qb2xs
YWJsZSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9Qb2xsYWJsZSAqKj4gKHNyYyk7CiAg
cmV0dXJuICp0bXA7Cn0KIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Qb2xsYWJsZUMuaSIKaW5saW5lIENPUkJBX0RJSVBvbGxhYmxlX3B0cgp0
YW9fQ09SQkFfRElJUG9sbGFibGVfZHVwbGljYXRlICgKICAgIENPUkJBX0RJSVBvbGxhYmxlX3B0
ciBwCiAgKQp7CiAgcmV0dXJuIENPUkJBX0RJSVBvbGxhYmxlOjpfZHVwbGljYXRlIChwKTsKfQoK
aW5saW5lIHZvaWQKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX3JlbGVhc2UgKAogICAgQ09SQkFfRElJ
UG9sbGFibGVfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBDT1JC
QV9ESUlQb2xsYWJsZV9wdHIKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX25pbCAoCiAgICB2b2lkCiAg
KQp7CiAgcmV0dXJuIENPUkJBX0RJSVBvbGxhYmxlOjpfbmlsICgpOwp9CgppbmxpbmUgQ09SQkFf
RElJUG9sbGFibGVfcHRyCnRhb19DT1JCQV9ESUlQb2xsYWJsZV9uYXJyb3cgKAogICAgQ09SQkE6
Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICkKewogIHJldHVybiBDT1JCQV9ESUlQb2xsYWJsZTo6X25hcnJvdyAocCwg
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0
ICoKdGFvX0NPUkJBX0RJSVBvbGxhYmxlX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBD
T1JCQV9ESUlQb2xsYWJsZSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxDT1JCQV9ESUlQb2xsYWJs
ZSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzMgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmkiCmlubGluZSBDT1JCQV9Q
b2xsYWJsZVNldF9wdHIKdGFvX0NPUkJBX1BvbGxhYmxlU2V0X2R1cGxpY2F0ZSAoCiAgICBDT1JC
QV9Qb2xsYWJsZVNldF9wdHIgcAogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZVNldDo6X2R1
cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19DT1JCQV9Qb2xsYWJsZVNldF9yZWxlYXNl
ICgKICAgIENPUkJBX1BvbGxhYmxlU2V0X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHAp
Owp9CgppbmxpbmUgQ09SQkFfUG9sbGFibGVTZXRfcHRyCnRhb19DT1JCQV9Qb2xsYWJsZVNldF9u
aWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBDT1JCQV9Qb2xsYWJsZVNldDo6X25pbCAoKTsK
fQoKaW5saW5lIENPUkJBX1BvbGxhYmxlU2V0X3B0cgp0YW9fQ09SQkFfUG9sbGFibGVTZXRfbmFy
cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gQ09SQkFfUG9sbGFibGVT
ZXQ6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgppbmxp
bmUgQ09SQkE6Ok9iamVjdCAqCnRhb19DT1JCQV9Qb2xsYWJsZVNldF91cGNhc3QgKAogICAgdm9p
ZCAqc3JjCiAgKQp7CiAgQ09SQkFfUG9sbGFibGVTZXQgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8
Q09SQkFfUG9sbGFibGVTZXQgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNTg3ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvbGxhYmxlQy5o
IiAyCiMgNTk5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvbGxhYmxlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MDAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9sbGFibGVDLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyA3OCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdp
bmdDLmgiCm5hbWVzcGFjZSBNZXNzYWdpbmcKewogIHR5cGVkZWYgQ09SQkE6OlNob3J0IFJlYmlu
ZE1vZGU7CiAgdHlwZWRlZiBDT1JCQTo6U2hvcnRfb3V0IFJlYmluZE1vZGVfb3V0OwogICAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlYmluZE1vZGU7CgogIGV4dGVybiBjb25zdCBD
T1JCQTo6U2hvcnQgVFJBTlNQQVJFTlQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgTk9f
UkVCSU5EOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IE5PX1JFQ09OTkVDVDsKCiAgdHlw
ZWRlZiBDT1JCQTo6U2hvcnQgU3luY1Njb3BlOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291dCBT
eW5jU2NvcGVfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1N5bmNTY29w
ZTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBTWU5DX05PTkU7CgogIGV4dGVybiBjb25z
dCBDT1JCQTo6U2hvcnQgU1lOQ19XSVRIX1RSQU5TUE9SVDsKCiAgZXh0ZXJuIGNvbnN0IENPUkJB
OjpTaG9ydCBTWU5DX1dJVEhfU0VSVkVSOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFNZ
TkNfV0lUSF9UQVJHRVQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1lOQ19FQUdFUl9C
VUZGRVJJTkc7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1lOQ19ERUxBWUVEX0JVRkZF
UklORzsKCiAgdHlwZWRlZiBDT1JCQTo6U2hvcnQgUm91dGluZ1R5cGU7CiAgdHlwZWRlZiBDT1JC
QTo6U2hvcnRfb3V0IFJvdXRpbmdUeXBlX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVf
cHRyIF90Y19Sb3V0aW5nVHlwZTsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBST1VURV9O
T05FOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0IFJPVVRFX0ZPUldBUkQ7CgogIGV4dGVy
biBjb25zdCBDT1JCQTo6U2hvcnQgUk9VVEVfU1RPUkVfQU5EX0ZPUldBUkQ7CgogIHR5cGVkZWYg
VGltZUJhc2U6OlRpbWVUIFRpbWVvdXQ7CiAgdHlwZWRlZiBUaW1lQmFzZTo6VGltZVRfb3V0IFRp
bWVvdXRfb3V0OwogICAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1RpbWVvdXQ7Cgog
IHR5cGVkZWYgQ09SQkE6OlNob3J0IFByaW9yaXR5OwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291
dCBQcmlvcml0eV9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJpb3Jp
dHk7CgogIHR5cGVkZWYgQ09SQkE6OlVTaG9ydCBPcmRlcmluZzsKICB0eXBlZGVmIENPUkJBOjpV
U2hvcnRfb3V0IE9yZGVyaW5nX291dDsKICAgIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19PcmRlcmluZzsKCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVU2hvcnQgT1JERVJfQU5ZOwoKICBl
eHRlcm4gY29uc3QgQ09SQkE6OlVTaG9ydCBPUkRFUl9URU1QT1JBTDsKCiAgZXh0ZXJuIGNvbnN0
IENPUkJBOjpVU2hvcnQgT1JERVJfUFJJT1JJVFk7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VVNo
b3J0IE9SREVSX0RFQURMSU5FOwoKCgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUkVCSU5E
X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmViaW5kUG9saWN5OwogIHR5cGVkZWYgUmViaW5k
UG9saWN5ICpSZWJpbmRQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSZWJpbmRQb2xpY3lfdmFy
IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBSZWJpbmRQb2xpY3lfdmFy
ICh2b2lkKTsKICAgIFJlYmluZFBvbGljeV92YXIgKFJlYmluZFBvbGljeV9wdHIgcCkgOiBwdHJf
IChwKSB7fQogICAgUmViaW5kUG9saWN5X3ZhciAoY29uc3QgUmViaW5kUG9saWN5X3ZhciAmKTsK
ICAgIH5SZWJpbmRQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZWJpbmRQb2xpY3lfdmFyICZvcGVy
YXRvcj0gKFJlYmluZFBvbGljeV9wdHIpOwogICAgUmViaW5kUG9saWN5X3ZhciAmb3BlcmF0b3I9
IChjb25zdCBSZWJpbmRQb2xpY3lfdmFyICYpOwogICAgUmViaW5kUG9saWN5X3B0ciBvcGVyYXRv
ci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZWJpbmRQb2xpY3lfcHRyICYo
KSBjb25zdDsKICAgIG9wZXJhdG9yIFJlYmluZFBvbGljeV9wdHIgJigpOwoKICAgIFJlYmluZFBv
bGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmViaW5kUG9saWN5X3B0ciAmaW5vdXQgKHZv
aWQpOwogICAgUmViaW5kUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlYmluZFBvbGljeV9w
dHIgX3JldG4gKHZvaWQpOwogICAgUmViaW5kUG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK
CgogICAgc3RhdGljIFJlYmluZFBvbGljeV9wdHIgZHVwbGljYXRlIChSZWJpbmRQb2xpY3lfcHRy
KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlYmluZFBvbGljeV9wdHIpOwogICAgc3RhdGlj
IFJlYmluZFBvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZWJpbmRQb2xpY3lfcHRy
IG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0
aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlYmlu
ZFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWJpbmRQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92
YXIgJnJocyk7CiAgICBSZWJpbmRQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNl
X3ZhciAmcmhzKTsKICB9OwojIDE5NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmViaW5kUG9saWN5X291dAog
IHsKICBwdWJsaWM6CiAgICBSZWJpbmRQb2xpY3lfb3V0IChSZWJpbmRQb2xpY3lfcHRyICYpOwog
ICAgUmViaW5kUG9saWN5X291dCAoUmViaW5kUG9saWN5X3ZhciAmKTsKICAgIFJlYmluZFBvbGlj
eV9vdXQgKGNvbnN0IFJlYmluZFBvbGljeV9vdXQgJik7CiAgICBSZWJpbmRQb2xpY3lfb3V0ICZv
cGVyYXRvcj0gKGNvbnN0IFJlYmluZFBvbGljeV9vdXQgJik7CiAgICBSZWJpbmRQb2xpY3lfb3V0
ICZvcGVyYXRvcj0gKGNvbnN0IFJlYmluZFBvbGljeV92YXIgJik7CiAgICBSZWJpbmRQb2xpY3lf
b3V0ICZvcGVyYXRvcj0gKFJlYmluZFBvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgUmViaW5kUG9s
aWN5X3B0ciAmKCk7CiAgICBSZWJpbmRQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmViaW5k
UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlYmluZFBvbGlj
eV9wdHIgJnB0cl87CiAgfTsKIyAyMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlYmluZFBvbGljeTogcHVi
bGljIHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZWJp
bmRQb2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUmViaW5kUG9saWN5X3ZhciBfdmFy
X3R5cGU7CgoKCiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfZHVwbGljYXRlIChSZWJpbmRQ
b2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfbmFycm93ICgKICAg
ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmViaW5kUG9saWN5X3B0ciBfdW5jaGVj
a2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlYmluZFBv
bGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoUmViaW5kUG9saWN5
X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBNZXNzYWdpbmc6OlJlYmluZE1vZGUgcmViaW5k
X21vZGUgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp
CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1
YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK
ICBwcm90ZWN0ZWQ6CiAgICBSZWJpbmRQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+UmViaW5kUG9s
aWN5ICh2b2lkKTsKICBwcml2YXRlOgogICAgUmViaW5kUG9saWN5IChjb25zdCBSZWJpbmRQb2xp
Y3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmViaW5kUG9saWN5ICYpOwogIH07CiMg
MjczICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01l
c3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFNZTkNfU0NPUEVfUE9MSUNZ
X1RZUEU7CgoKCgoKICBjbGFzcyBTeW5jU2NvcGVQb2xpY3k7CiAgdHlwZWRlZiBTeW5jU2NvcGVQ
b2xpY3kgKlN5bmNTY29wZVBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFN5bmNTY29wZVBvbGlj
eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFN5bmNTY29wZVBv
bGljeV92YXIgKHZvaWQpOwogICAgU3luY1Njb3BlUG9saWN5X3ZhciAoU3luY1Njb3BlUG9saWN5
X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBTeW5jU2NvcGVQb2xpY3lfdmFyIChjb25zdCBTeW5j
U2NvcGVQb2xpY3lfdmFyICYpOwogICAgflN5bmNTY29wZVBvbGljeV92YXIgKHZvaWQpOwoKICAg
IFN5bmNTY29wZVBvbGljeV92YXIgJm9wZXJhdG9yPSAoU3luY1Njb3BlUG9saWN5X3B0cik7CiAg
ICBTeW5jU2NvcGVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFN5bmNTY29wZVBvbGljeV92
YXIgJik7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK
ICAgIG9wZXJhdG9yIGNvbnN0IFN5bmNTY29wZVBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3Bl
cmF0b3IgU3luY1Njb3BlUG9saWN5X3B0ciAmKCk7CgogICAgU3luY1Njb3BlUG9saWN5X3B0ciBp
biAodm9pZCkgY29uc3Q7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAg
ICBTeW5jU2NvcGVQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgU3luY1Njb3BlUG9saWN5X3B0
ciBfcmV0biAodm9pZCk7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7
CgoKCiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBkdXBsaWNhdGUgKFN5bmNTY29wZVBv
bGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU3luY1Njb3BlUG9saWN5X3B0cik7
CiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFN5
bmNTY29wZVBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u
bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw
cml2YXRlOgogICAgU3luY1Njb3BlUG9saWN5X3B0ciBwdHJfOwoKICAgIFN5bmNTY29wZVBvbGlj
eV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFN5bmNTY29wZVBvbGljeV92YXIg
Jm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMzMxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIK
ICBjbGFzcyBTeW5jU2NvcGVQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFN5bmNTY29wZVBv
bGljeV9vdXQgKFN5bmNTY29wZVBvbGljeV9wdHIgJik7CiAgICBTeW5jU2NvcGVQb2xpY3lfb3V0
IChTeW5jU2NvcGVQb2xpY3lfdmFyICYpOwogICAgU3luY1Njb3BlUG9saWN5X291dCAoY29uc3Qg
U3luY1Njb3BlUG9saWN5X291dCAmKTsKICAgIFN5bmNTY29wZVBvbGljeV9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgU3luY1Njb3BlUG9saWN5X291dCAmKTsKICAgIFN5bmNTY29wZVBvbGljeV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgU3luY1Njb3BlUG9saWN5X3ZhciAmKTsKICAgIFN5bmNTY29wZVBv
bGljeV9vdXQgJm9wZXJhdG9yPSAoU3luY1Njb3BlUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBT
eW5jU2NvcGVQb2xpY3lfcHRyICYoKTsKICAgIFN5bmNTY29wZVBvbGljeV9wdHIgJnB0ciAodm9p
ZCk7CiAgICBTeW5jU2NvcGVQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRl
OgogICAgU3luY1Njb3BlUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDM1NSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xh
c3MgU3luY1Njb3BlUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1
YmxpYzoKCiAgICB0eXBlZGVmIFN5bmNTY29wZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlw
ZWRlZiBTeW5jU2NvcGVQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTeW5jU2Nv
cGVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFN5bmNTY29wZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0
YXRpYyBTeW5jU2NvcGVQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3Rf
cHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg
KTsKICAgIHN0YXRpYyBTeW5jU2NvcGVQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAg
ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU3luY1Njb3BlUG9saWN5X3B0ciBfbmls
ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChTeW5jU2NvcGVQb2xpY3lfcHRyKTA7CiAg
ICAgIH0KCiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6U3luY1Njb3BlIHN5bmNocm9uaXphdGlvbiAo
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lk
ICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3Rl
Y3RlZDoKICAgIFN5bmNTY29wZVBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5TeW5jU2NvcGVQb2xp
Y3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBTeW5jU2NvcGVQb2xpY3kgKGNvbnN0IFN5bmNTY29w
ZVBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBTeW5jU2NvcGVQb2xpY3kgJik7
CiAgfTsKIyA0MDggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vTWVzc2FnaW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUkVRVUVTVF9Q
UklPUklUWV9QT0xJQ1lfVFlQRTsKCiAgc3RydWN0IFByaW9yaXR5UmFuZ2U7CiAgY2xhc3MgUHJp
b3JpdHlSYW5nZV92YXI7CgogIHN0cnVjdCBQcmlvcml0eVJhbmdlCiAgewoKCiAgICB0eXBlZGVm
IFByaW9yaXR5UmFuZ2VfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlf
ZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIE1lc3NhZ2luZzo6UHJpb3JpdHkgbWluOwogICAgTWVz
c2FnaW5nOjpQcmlvcml0eSBtYXg7CiAgfTsKCiAgY2xhc3MgUHJpb3JpdHlSYW5nZV92YXIKICB7
CiAgcHVibGljOgogICAgUHJpb3JpdHlSYW5nZV92YXIgKHZvaWQpOwogICAgUHJpb3JpdHlSYW5n
ZV92YXIgKFByaW9yaXR5UmFuZ2UgKik7CiAgICBQcmlvcml0eVJhbmdlX3ZhciAoY29uc3QgUHJp
b3JpdHlSYW5nZV92YXIgJik7CiAgICBQcmlvcml0eVJhbmdlX3ZhciAoY29uc3QgUHJpb3JpdHlS
YW5nZSAmKTsKICAgIH5Qcmlvcml0eVJhbmdlX3ZhciAodm9pZCk7CgogICAgUHJpb3JpdHlSYW5n
ZV92YXIgJm9wZXJhdG9yPSAoUHJpb3JpdHlSYW5nZSAqKTsKICAgIFByaW9yaXR5UmFuZ2VfdmFy
ICZvcGVyYXRvcj0gKGNvbnN0IFByaW9yaXR5UmFuZ2VfdmFyICYpOwogICAgUHJpb3JpdHlSYW5n
ZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJpb3JpdHlSYW5nZSAmKTsKICAgIFByaW9yaXR5UmFu
Z2UgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUHJpb3JpdHlSYW5nZSAqb3BlcmF0b3It
PiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUHJpb3JpdHlSYW5nZSAmKCkgY29u
c3Q7CiAgICBvcGVyYXRvciBQcmlvcml0eVJhbmdlICYoKTsKICAgIG9wZXJhdG9yIFByaW9yaXR5
UmFuZ2UgJigpIGNvbnN0OwoKCiAgICBjb25zdCBQcmlvcml0eVJhbmdlICZpbiAodm9pZCkgY29u
c3Q7CiAgICBQcmlvcml0eVJhbmdlICZpbm91dCAodm9pZCk7CiAgICBQcmlvcml0eVJhbmdlICZv
dXQgKHZvaWQpOwogICAgUHJpb3JpdHlSYW5nZSBfcmV0biAodm9pZCk7CiAgICBQcmlvcml0eVJh
bmdlICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgUHJpb3JpdHlSYW5nZSAqcHRy
XzsKICB9OwoKICB0eXBlZGVmIFByaW9yaXR5UmFuZ2UgJlByaW9yaXR5UmFuZ2Vfb3V0OwoKICBl
eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJpb3JpdHlSYW5nZTsKCgoKCgogIGNsYXNz
IFJlcXVlc3RQcmlvcml0eVBvbGljeTsKICB0eXBlZGVmIFJlcXVlc3RQcmlvcml0eVBvbGljeSAq
UmVxdWVzdFByaW9yaXR5UG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgUmVxdWVzdFByaW9yaXR5
UG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUmVxdWVz
dFByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfdmFy
IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RQ
cmlvcml0eVBvbGljeV92YXIgKGNvbnN0IFJlcXVlc3RQcmlvcml0eVBvbGljeV92YXIgJik7CiAg
ICB+UmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVxdWVzdFByaW9yaXR5
UG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAgIFJl
cXVlc3RQcmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFByaW9yaXR5
UG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgb3BlcmF0b3ItPiAo
dm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0
ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyICYoKTsK
CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIFJlcXVl
c3RQcmlvcml0eVBvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBv
bGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIF9yZXRu
ICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsK
CgoKICAgIHN0YXRpYyBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVxdWVz
dFByaW9yaXR5UG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChSZXF1ZXN0UHJp
b3JpdHlQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIG5p
bCAodm9pZCk7CiAgICBzdGF0aWMgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBuYXJyb3cgKENP
UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP
YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBSZXF1ZXN0UHJpb3JpdHlQ
b2xpY3lfcHRyIHB0cl87CgogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAoY29uc3QgVEFP
X0Jhc2VfdmFyICZyaHMpOwogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X3ZhciAmb3BlcmF0b3I9
IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyA1MTYgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJl
cXVlc3RQcmlvcml0eVBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByaW9yaXR5
UG9saWN5X291dCAoUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciAmKTsKICAgIFJlcXVlc3RQcmlv
cml0eVBvbGljeV9vdXQgKFJlcXVlc3RQcmlvcml0eVBvbGljeV92YXIgJik7CiAgICBSZXF1ZXN0
UHJpb3JpdHlQb2xpY3lfb3V0IChjb25zdCBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfb3V0ICYpOwog
ICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0UHJp
b3JpdHlQb2xpY3lfb3V0ICYpOwogICAgUmVxdWVzdFByaW9yaXR5UG9saWN5X291dCAmb3BlcmF0
b3I9IChjb25zdCBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdFByaW9y
aXR5UG9saWN5X291dCAmb3BlcmF0b3I9IChSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg
IG9wZXJhdG9yIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdFByaW9y
aXR5UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIg
b3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXF1ZXN0UHJpb3JpdHlQb2xpY3lf
cHRyICZwdHJfOwogIH07CiMgNTQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0UHJpb3JpdHlQb2xp
Y3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVk
ZWYgUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcXVl
c3RQcmlvcml0eVBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RQcmlv
cml0eVBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoUmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBvYmop
OwogICAgc3RhdGljIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIgX3Vu
Y2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZXF1
ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4g
KFJlcXVlc3RQcmlvcml0eVBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgTWVzc2Fn
aW5nOjpQcmlvcml0eVJhbmdlIHByaW9yaXR5X3JhbmdlICgKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2Ug
KHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9y
ZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVxdWVzdFByaW9y
aXR5UG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJlcXVlc3RQcmlvcml0eVBvbGljeSAodm9pZCk7
CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RQcmlvcml0eVBvbGljeSAoY29uc3QgUmVxdWVzdFByaW9y
aXR5UG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJlcXVlc3RQcmlvcml0eVBv
bGljeSAmKTsKICB9OwoKCgoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJFUExZX1BSSU9S
SVRZX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeTsKICB0eXBl
ZGVmIFJlcGx5UHJpb3JpdHlQb2xpY3kgKlJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyOwoKCgoKCgoK
ICBjbGFzcyBSZXBseVByaW9yaXR5UG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7
CiAgcHVibGljOgogICAgUmVwbHlQcmlvcml0eVBvbGljeV92YXIgKHZvaWQpOwogICAgUmVwbHlQ
cmlvcml0eVBvbGljeV92YXIgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHApIDogcHRyXyAocCkg
e30KICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfdmFyIChjb25zdCBSZXBseVByaW9yaXR5UG9saWN5
X3ZhciAmKTsKICAgIH5SZXBseVByaW9yaXR5UG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVwbHlQ
cmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoUmVwbHlQcmlvcml0eVBvbGljeV9wdHIpOwog
ICAgUmVwbHlQcmlvcml0eVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVwbHlQcmlvcml0
eVBvbGljeV92YXIgJik7CiAgICBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2
b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAm
KCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAmKCk7CgogICAg
UmVwbHlQcmlvcml0eVBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlQcmlvcml0
eVBvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyICZv
dXQgKHZvaWQpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAg
UmVwbHlQcmlvcml0eVBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBS
ZXBseVByaW9yaXR5UG9saWN5X3B0ciBkdXBsaWNhdGUgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy
KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg
IHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFJl
cGx5UHJpb3JpdHlQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52
aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK
CiAgcHJpdmF0ZToKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHB0cl87CgogICAgUmVwbHlQ
cmlvcml0eVBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFJlcGx5UHJp
b3JpdHlQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9
OwojIDY0NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQKICB7CiAgcHVi
bGljOgogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy
ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKFJlcGx5UHJpb3JpdHlQb2xpY3lfdmFy
ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgKGNvbnN0IFJlcGx5UHJpb3JpdHlQb2xp
Y3lfb3V0ICYpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
UmVwbHlQcmlvcml0eVBvbGljeV9vdXQgJik7CiAgICBSZXBseVByaW9yaXR5UG9saWN5X291dCAm
b3BlcmF0b3I9IChjb25zdCBSZXBseVByaW9yaXR5UG9saWN5X3ZhciAmKTsKICAgIFJlcGx5UHJp
b3JpdHlQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyKTsKICAg
IG9wZXJhdG9yIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyICYoKTsKICAgIFJlcGx5UHJpb3JpdHlQ
b2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVwbHlQcmlvcml0eVBvbGljeV9wdHIgb3BlcmF0
b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXBseVByaW9yaXR5UG9saWN5X3B0ciAmcHRy
XzsKICB9OwojIDY3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlQcmlvcml0eVBvbGljeTogcHVibGlj
IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXBseVBy
aW9yaXR5UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcGx5UHJpb3JpdHlQb2xp
Y3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBf
ZHVwbGljYXRlIChSZXBseVByaW9yaXR5UG9saWN5X3B0ciBvYmopOwogICAgc3RhdGljIFJlcGx5
UHJpb3JpdHlQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9i
aiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAg
IHN0YXRpYyBSZXBseVByaW9yaXR5UG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAg
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIF9u
aWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFJlcGx5UHJpb3JpdHlQb2xpY3lfcHRy
KTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSBwcmlvcml0
eV9yYW5nZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmly
dHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7
CgogIHByb3RlY3RlZDoKICAgIFJlcGx5UHJpb3JpdHlQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+
UmVwbHlQcmlvcml0eVBvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcGx5UHJpb3JpdHlQ
b2xpY3kgKGNvbnN0IFJlcGx5UHJpb3JpdHlQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAo
Y29uc3QgUmVwbHlQcmlvcml0eVBvbGljeSAmKTsKICB9OwojIDcyNCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJu
IGNvbnN0IENPUkJBOjpVTG9uZyBSRVFVRVNUX1NUQVJUX1RJTUVfUE9MSUNZX1RZUEU7CgoKCgoK
ICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OwogIHR5cGVkZWYgUmVxdWVzdFN0YXJ0VGlt
ZVBvbGljeSAqUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFJlcXVl
c3RTdGFydFRpbWVQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6
CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRU
aW1lUG9saWN5X3ZhciAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7
fQogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgKGNvbnN0IFJlcXVlc3RTdGFydFRpbWVQ
b2xpY3lfdmFyICYpOwogICAgflJlcXVlc3RTdGFydFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKCiAg
ICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0U3RhcnRUaW1l
UG9saWN5X3B0cik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChj
b25zdCBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RTdGFydFRpbWVQ
b2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJl
cXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFJlcXVlc3RT
dGFydFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBp
biAodm9pZCkgY29uc3Q7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciAmaW5vdXQgKHZv
aWQpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1
ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRUaW1l
UG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlcXVlc3RTdGFydFRp
bWVQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAg
c3RhdGljIHZvaWQgcmVsZWFzZSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgc3Rh
dGljIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVx
dWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpF
bnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICop
OwoKICBwcml2YXRlOgogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgcHRyXzsKCiAgICBS
ZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAg
UmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFy
ICZyaHMpOwogIH07CiMgNzgyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5
X291dAogIHsKICBwdWJsaWM6CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X291dCAoUmVxdWVz
dFN0YXJ0VGltZVBvbGljeV9wdHIgJik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X291dCAo
UmVxdWVzdFN0YXJ0VGltZVBvbGljeV92YXIgJik7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5
X291dCAoY29uc3QgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXF1ZXN0U3Rh
cnRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5
X291dCAmKTsKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0
IFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBvbGlj
eV9vdXQgJm9wZXJhdG9yPSAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgb3BlcmF0
b3IgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdFN0YXJ0VGltZVBv
bGljeV9wdHIgJnB0ciAodm9pZCk7CiAgICBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBvcGVy
YXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRy
ICZwdHJfOwogIH07CiMgODA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0U3RhcnRUaW1lUG9saWN5
OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm
IFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUmVxdWVz
dFN0YXJ0VGltZVBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RTdGFy
dFRpbWVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIG9i
aik7CiAgICBzdGF0aWMgUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAg
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRy
IF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMg
UmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJl
dHVybiAoUmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg
VGltZUJhc2U6OlV0Y1Qgc3RhcnRfdGltZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
ICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp
dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y
eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xp
Y3kgKCk7CgogICAgdmlydHVhbCB+UmVxdWVzdFN0YXJ0VGltZVBvbGljeSAodm9pZCk7CiAgcHJp
dmF0ZToKICAgIFJlcXVlc3RTdGFydFRpbWVQb2xpY3kgKGNvbnN0IFJlcXVlc3RTdGFydFRpbWVQ
b2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFN0YXJ0VGltZVBvbGlj
eSAmKTsKICB9OwojIDg1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBSRVFV
RVNUX0VORF9USU1FX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVxdWVzdEVuZFRpbWVQb2xp
Y3k7CiAgdHlwZWRlZiBSZXF1ZXN0RW5kVGltZVBvbGljeSAqUmVxdWVzdEVuZFRpbWVQb2xpY3lf
cHRyOwoKCgoKCgoKICBjbGFzcyBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgOiBwdWJsaWMgVEFP
X0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAodm9p
ZCk7CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0
ciBwKSA6IHB0cl8gKHApIHt9CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgKGNvbnN0IFJl
cXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAgIH5SZXF1ZXN0RW5kVGltZVBvbGljeV92YXIg
KHZvaWQpOwoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZXF1ZXN0
RW5kVGltZVBvbGljeV9wdHIpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAgIFJlcXVlc3RFbmRUaW1l
UG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBS
ZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUmVxdWVzdEVu
ZFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgaW4gKHZv
aWQpIGNvbnN0OwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAg
ICBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZXF1ZXN0RW5kVGlt
ZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIHB0
ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIGR1
cGxpY2F0ZSAoUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVh
c2UgKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0cik7CiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQ
b2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRy
IG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0
aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlcXVl
c3RFbmRUaW1lUG9saWN5X3B0ciBwdHJfOwoKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X3ZhciAo
Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDkxNyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg
Y2xhc3MgUmVxdWVzdEVuZFRpbWVQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RF
bmRUaW1lUG9saWN5X291dCAoUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICYpOwogICAgUmVxdWVz
dEVuZFRpbWVQb2xpY3lfb3V0IChSZXF1ZXN0RW5kVGltZVBvbGljeV92YXIgJik7CiAgICBSZXF1
ZXN0RW5kVGltZVBvbGljeV9vdXQgKGNvbnN0IFJlcXVlc3RFbmRUaW1lUG9saWN5X291dCAmKTsK
ICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0RW5k
VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeV9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgUmVxdWVzdEVuZFRpbWVQb2xpY3lfdmFyICYpOwogICAgUmVxdWVzdEVuZFRpbWVQ
b2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0cik7CiAgICBvcGVy
YXRvciBSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgJigpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xp
Y3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIG9wZXJhdG9y
LT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyICZwdHJf
OwogIH07CiMgOTQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSZXF1ZXN0RW5kVGltZVBvbGljeTogcHVibGlj
IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXF1ZXN0
RW5kVGltZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXF1ZXN0RW5kVGltZVBv
bGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0
ciBfZHVwbGljYXRlIChSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBS
ZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w
dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp
OwogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAo
CiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RFbmRUaW1lUG9saWN5
X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXF1ZXN0RW5kVGltZVBv
bGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgVGltZUJhc2U6OlV0Y1QgZW5kX3RpbWUg
KAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p
ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj
b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90
ZWN0ZWQ6CiAgICBSZXF1ZXN0RW5kVGltZVBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5SZXF1ZXN0
RW5kVGltZVBvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RFbmRUaW1lUG9saWN5
IChjb25zdCBSZXF1ZXN0RW5kVGltZVBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25z
dCBSZXF1ZXN0RW5kVGltZVBvbGljeSAmKTsKICB9OwojIDk5NCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNv
bnN0IENPUkJBOjpVTG9uZyBSRVBMWV9TVEFSVF9USU1FX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xh
c3MgUmVwbHlTdGFydFRpbWVQb2xpY3k7CiAgdHlwZWRlZiBSZXBseVN0YXJ0VGltZVBvbGljeSAq
UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSZXBseVN0YXJ0VGltZVBv
bGljeV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcGx5U3Rh
cnRUaW1lUG9saWN5X3ZhciAodm9pZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV92YXIgKFJl
cGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBSZXBseVN0YXJ0VGlt
ZVBvbGljeV92YXIgKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAmKTsKICAgIH5SZXBs
eVN0YXJ0VGltZVBvbGljeV92YXIgKHZvaWQpOwoKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3Zh
ciAmb3BlcmF0b3I9IChSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIpOwogICAgUmVwbHlTdGFydFRp
bWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAm
KTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK
CiAgICBvcGVyYXRvciBjb25zdCBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgJigpIGNvbnN0Owog
ICAgb3BlcmF0b3IgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyICYoKTsKCiAgICBSZXBseVN0YXJ0
VGltZVBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlTdGFydFRpbWVQb2xpY3lf
cHRyICZpbm91dCAodm9pZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgJm91dCAodm9p
ZCk7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVwbHlT
dGFydFRpbWVQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgUmVwbHlT
dGFydFRpbWVQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyKTsK
ICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0cik7CiAgICBz
dGF0aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgUmVw
bHlTdGFydFRpbWVQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52
aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK
CiAgcHJpdmF0ZToKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwdHJfOwoKICAgIFJlcGx5
U3RhcnRUaW1lUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVwbHlT
dGFydFRpbWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsK
ICB9OwojIDEwNTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dAogIHsK
ICBwdWJsaWM6CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9vdXQgKFJlcGx5U3RhcnRUaW1lUG9s
aWN5X3B0ciAmKTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dCAoUmVwbHlTdGFydFRpbWVQ
b2xpY3lfdmFyICYpOwogICAgUmVwbHlTdGFydFRpbWVQb2xpY3lfb3V0IChjb25zdCBSZXBseVN0
YXJ0VGltZVBvbGljeV9vdXQgJik7CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeV9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlTdGFydFRp
bWVQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciAm
KTsKICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChSZXBseVN0YXJ0VGlt
ZVBvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyICYoKTsK
ICAgIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcGx5U3RhcnRU
aW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5U3Rh
cnRUaW1lUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDEwNzYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5
U3RhcnRUaW1lUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1Ymxp
YzoKCiAgICB0eXBlZGVmIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0
eXBlZGVmIFJlcGx5U3RhcnRUaW1lUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMg
UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlcGx5U3RhcnRUaW1lUG9saWN5
X3B0ciBvYmopOwogICAgc3RhdGljIFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBfbmFycm93ICgK
ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lf
cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0
aWMgUmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICBy
ZXR1cm4gKFJlcGx5U3RhcnRUaW1lUG9saWN5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBU
aW1lQmFzZTo6VXRjVCBzdGFydF90aW1lICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g
KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5
X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVwbHlTdGFydFRpbWVQb2xpY3kg
KCk7CgogICAgdmlydHVhbCB+UmVwbHlTdGFydFRpbWVQb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6
CiAgICBSZXBseVN0YXJ0VGltZVBvbGljeSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3kgJik7
CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVwbHlTdGFydFRpbWVQb2xpY3kgJik7CiAgfTsK
IyAxMTI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L01lc3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFJFUExZX0VORF9USU1F
X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgUmVwbHlFbmRUaW1lUG9saWN5OwogIHR5cGVkZWYg
UmVwbHlFbmRUaW1lUG9saWN5ICpSZXBseUVuZFRpbWVQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFz
cyBSZXBseUVuZFRpbWVQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJs
aWM6CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKICAgIFJlcGx5RW5kVGltZVBv
bGljeV92YXIgKFJlcGx5RW5kVGltZVBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVw
bHlFbmRUaW1lUG9saWN5X3ZhciAoY29uc3QgUmVwbHlFbmRUaW1lUG9saWN5X3ZhciAmKTsKICAg
IH5SZXBseUVuZFRpbWVQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZXBseUVuZFRpbWVQb2xpY3lf
dmFyICZvcGVyYXRvcj0gKFJlcGx5RW5kVGltZVBvbGljeV9wdHIpOwogICAgUmVwbHlFbmRUaW1l
UG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICYpOwog
ICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBv
cGVyYXRvciBjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJh
dG9yIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgJigpOwoKICAgIFJlcGx5RW5kVGltZVBvbGljeV9w
dHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmaW5vdXQgKHZv
aWQpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlcGx5RW5k
VGltZVBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBw
dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgZHVw
bGljYXRlIChSZXBseUVuZFRpbWVQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2Ug
KFJlcGx5RW5kVGltZVBvbGljeV9wdHIpOwogICAgc3RhdGljIFJlcGx5RW5kVGltZVBvbGljeV9w
dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lfcHRyIG5hcnJvdyAo
Q09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6
Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5RW5kVGltZVBv
bGljeV9wdHIgcHRyXzsKCiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFz
ZV92YXIgJnJocyk7CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0
IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDExODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlcGx5RW5k
VGltZVBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAo
UmVwbHlFbmRUaW1lUG9saWN5X3B0ciAmKTsKICAgIFJlcGx5RW5kVGltZVBvbGljeV9vdXQgKFJl
cGx5RW5kVGltZVBvbGljeV92YXIgJik7CiAgICBSZXBseUVuZFRpbWVQb2xpY3lfb3V0IChjb25z
dCBSZXBseUVuZFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAm
b3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfb3V0ICYpOwogICAgUmVwbHlFbmRU
aW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXBseUVuZFRpbWVQb2xpY3lfdmFyICYp
OwogICAgUmVwbHlFbmRUaW1lUG9saWN5X291dCAmb3BlcmF0b3I9IChSZXBseUVuZFRpbWVQb2xp
Y3lfcHRyKTsKICAgIG9wZXJhdG9yIFJlcGx5RW5kVGltZVBvbGljeV9wdHIgJigpOwogICAgUmVw
bHlFbmRUaW1lUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlcGx5RW5kVGltZVBvbGljeV9w
dHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZXBseUVuZFRpbWVQb2xpY3lf
cHRyICZwdHJfOwogIH07CiMgMTIxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlFbmRUaW1lUG9saWN5
OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm
IFJlcGx5RW5kVGltZVBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXBseUVuZFRp
bWVQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lf
cHRyIF9kdXBsaWNhdGUgKFJlcGx5RW5kVGltZVBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBS
ZXBseUVuZFRpbWVQb2xpY3lfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRy
IG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsK
ICAgIHN0YXRpYyBSZXBseUVuZFRpbWVQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAg
ICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVwbHlFbmRUaW1lUG9saWN5X3B0ciBf
bmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXBseUVuZFRpbWVQb2xpY3lfcHRy
KTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIFRpbWVCYXNlOjpVdGNUIGVuZF90aW1lICgKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9f
UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgog
ICAgUmVwbHlFbmRUaW1lUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJlcGx5RW5kVGltZVBvbGlj
eSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcGx5RW5kVGltZVBvbGljeSAoY29uc3QgUmVwbHlF
bmRUaW1lUG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJlcGx5RW5kVGltZVBv
bGljeSAmKTsKICB9OwojIDEyNjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcg
UkVMQVRJVkVfUkVRX1RJTUVPVVRfUE9MSUNZX1RZUEU7CgoKCgoKICBjbGFzcyBSZWxhdGl2ZVJl
cXVlc3RUaW1lb3V0UG9saWN5OwogIHR5cGVkZWYgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj
eSAqUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFJlbGF0
aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw
dWJsaWM6CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAodm9pZCk7CiAgICBS
ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv
bGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj
eV92YXIgKGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAgflJl
bGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICh2b2lkKTsKCiAgICBSZWxhdGl2ZVJlcXVl
c3RUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9IChSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9s
aWN5X3B0cik7CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9
IChjb25zdCBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIFJlbGF0aXZl
UmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9w
ZXJhdG9yIGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKSBjb25zdDsK
ICAgIG9wZXJhdG9yIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKTsKCiAgICBS
ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZWxh
dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUmVsYXRpdmVS
ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBSZWxhdGl2ZVJlcXVlc3RU
aW1lb3V0UG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0
UG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlbGF0aXZlUmVxdWVz
dFRpbWVvdXRQb2xpY3lfcHRyIGR1cGxpY2F0ZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGlj
eV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv
bGljeV9wdHIpOwogICAgc3RhdGljIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIG5p
bCAodm9pZCk7CiAgICBzdGF0aWMgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgbmFy
cm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBD
T1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUmVsYXRpdmVS
ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0
UG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUmVsYXRpdmVSZXF1ZXN0
VGltZW91dFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog
IH07CiMgMTMyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9v
dXQKICB7CiAgcHVibGljOgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgKFJl
bGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYpOwogICAgUmVsYXRpdmVSZXF1ZXN0VGlt
ZW91dFBvbGljeV9vdXQgKFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAg
UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgKGNvbnN0IFJlbGF0aXZlUmVxdWVzdFRp
bWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9vdXQgJik7CiAg
ICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxh
dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIFJlbGF0aXZlUmVxdWVzdFRpbWVv
dXRQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRy
KTsKICAgIG9wZXJhdG9yIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICYoKTsKICAg
IFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUmVsYXRp
dmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6
CiAgICBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDEzNDYg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn
aW5nQy5oIgogIGNsYXNzIFJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3k6IHB1YmxpYyB2aXJ0
dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUmVsYXRpdmVSZXF1
ZXN0VGltZW91dFBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZWxhdGl2ZVJlcXVl
c3RUaW1lb3V0UG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUmVsYXRpdmVSZXF1
ZXN0VGltZW91dFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBv
bGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0
ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVsYXRpdmVS
ZXF1ZXN0VGltZW91dFBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJB
OjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBf
bmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0
UG9saWN5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBUaW1lQmFzZTo6VGltZVQgcmVsYXRp
dmVfZXhwaXJ5ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg
ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2
aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAg
IHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25z
dDsKCiAgcHJvdGVjdGVkOgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAoKTsKCiAg
ICB2aXJ0dWFsIH5SZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5ICh2b2lkKTsKICBwcml2YXRl
OgogICAgUmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAoY29uc3QgUmVsYXRpdmVSZXF1ZXN0
VGltZW91dFBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJlcXVl
c3RUaW1lb3V0UG9saWN5ICYpOwogIH07CiMgMTM5OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgZXh0ZXJuIGNvbnN0IENP
UkJBOjpVTG9uZyBSRUxBVElWRV9SVF9USU1FT1VUX1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3Mg
UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OwogIHR5cGVkZWYgUmVsYXRpdmVSb3VuZHRy
aXBUaW1lb3V0UG9saWN5ICpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyOwoKCgoK
CgoKICBjbGFzcyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyIDogcHVibGljIFRB
T19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp
Y3lfdmFyICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV92YXIgKFJl
bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUmVs
YXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3ZhciAoY29uc3QgUmVsYXRpdmVSb3VuZHRyaXBU
aW1lb3V0UG9saWN5X3ZhciAmKTsKICAgIH5SZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf
dmFyICh2b2lkKTsKCiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyICZvcGVy
YXRvcj0gKFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIpOwogICAgUmVsYXRpdmVS
b3VuZHRyaXBUaW1lb3V0UG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJvdW5k
dHJpcFRpbWVvdXRQb2xpY3lfdmFyICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s
aWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSZWxh
dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFJl
bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgJigpOwoKICAgIFJlbGF0aXZlUm91bmR0
cmlwVGltZW91dFBvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUmVsYXRpdmVSb3VuZHRy
aXBUaW1lb3V0UG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBU
aW1lb3V0UG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGltZW91
dFBvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s
aWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFJlbGF0aXZlUm91bmR0cmlw
VGltZW91dFBvbGljeV9wdHIgZHVwbGljYXRlIChSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp
Y3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJlbGF0aXZlUm91bmR0cmlwVGltZW91
dFBvbGljeV9wdHIpOwogICAgc3RhdGljIFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9w
dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf
cHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBz
dGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFJl
bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgcHRyXzsKCiAgICBSZWxhdGl2ZVJvdW5k
dHJpcFRpbWVvdXRQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBSZWxh
dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNl
X3ZhciAmcmhzKTsKICB9OwojIDE0NTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFJlbGF0aXZlUm91bmR0cmlw
VGltZW91dFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1l
b3V0UG9saWN5X291dCAoUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0ciAmKTsKICAg
IFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9vdXQgKFJlbGF0aXZlUm91bmR0cmlwVGlt
ZW91dFBvbGljeV92YXIgJik7CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0
IChjb25zdCBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRp
dmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJv
dW5kdHJpcFRpbWVvdXRQb2xpY3lfb3V0ICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0
UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp
Y3lfdmFyICYpOwogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X291dCAmb3BlcmF0
b3I9IChSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFJl
bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9wdHIgJigpOwogICAgUmVsYXRpdmVSb3VuZHRy
aXBUaW1lb3V0UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJlbGF0aXZlUm91bmR0cmlwVGlt
ZW91dFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBSZWxhdGl2
ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMTQ4MSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg
Y2xhc3MgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JC
QTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFJlbGF0aXZlUm91bmR0cmlwVGlt
ZW91dFBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZWxhdGl2ZVJvdW5kdHJpcFRp
bWVvdXRQb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJp
cFRpbWVvdXRQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJlbGF0aXZlUm91bmR0cmlwVGltZW91dFBv
bGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lf
cHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZWxhdGl2
ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBD
T1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5
X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZWxhdGl2ZVJvdW5kdHJp
cFRpbWVvdXRQb2xpY3lfcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIFRpbWVCYXNlOjpUaW1l
VCByZWxhdGl2ZV9leHBpcnkgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK
CgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlw
ZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZv
aWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xp
Y3kgKCk7CgogICAgdmlydHVhbCB+UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5ICh2b2lk
KTsKICBwcml2YXRlOgogICAgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5IChjb25zdCBS
ZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29u
c3QgUmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5ICYpOwogIH07CiMgMTUzNCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgi
CiAgZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBST1VUSU5HX1BPTElDWV9UWVBFOwoKICBzdHJ1
Y3QgUm91dGluZ1R5cGVSYW5nZTsKICBjbGFzcyBSb3V0aW5nVHlwZVJhbmdlX3ZhcjsKCiAgc3Ry
dWN0IFJvdXRpbmdUeXBlUmFuZ2UKICB7CgoKICAgIHR5cGVkZWYgUm91dGluZ1R5cGVSYW5nZV92
YXIgX3Zhcl90eXBlOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lk
Kik7CgogICAgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZSBtaW47CiAgICBNZXNzYWdpbmc6OlJvdXRp
bmdUeXBlIG1heDsKICB9OwoKICBjbGFzcyBSb3V0aW5nVHlwZVJhbmdlX3ZhcgogIHsKICBwdWJs
aWM6CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAodm9pZCk7CiAgICBSb3V0aW5nVHlwZVJhbmdl
X3ZhciAoUm91dGluZ1R5cGVSYW5nZSAqKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2VfdmFyIChjb25z
dCBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2VfdmFyIChjb25z
dCBSb3V0aW5nVHlwZVJhbmdlICYpOwogICAgflJvdXRpbmdUeXBlUmFuZ2VfdmFyICh2b2lkKTsK
CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmb3BlcmF0b3I9IChSb3V0aW5nVHlwZVJhbmdlICop
OwogICAgUm91dGluZ1R5cGVSYW5nZV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUm91dGluZ1R5cGVS
YW5nZV92YXIgJik7CiAgICBSb3V0aW5nVHlwZVJhbmdlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBS
b3V0aW5nVHlwZVJhbmdlICYpOwogICAgUm91dGluZ1R5cGVSYW5nZSAqb3BlcmF0b3ItPiAodm9p
ZCk7CiAgICBjb25zdCBSb3V0aW5nVHlwZVJhbmdlICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK
CiAgICBvcGVyYXRvciBjb25zdCBSb3V0aW5nVHlwZVJhbmdlICYoKSBjb25zdDsKICAgIG9wZXJh
dG9yIFJvdXRpbmdUeXBlUmFuZ2UgJigpOwogICAgb3BlcmF0b3IgUm91dGluZ1R5cGVSYW5nZSAm
KCkgY29uc3Q7CgoKICAgIGNvbnN0IFJvdXRpbmdUeXBlUmFuZ2UgJmluICh2b2lkKSBjb25zdDsK
ICAgIFJvdXRpbmdUeXBlUmFuZ2UgJmlub3V0ICh2b2lkKTsKICAgIFJvdXRpbmdUeXBlUmFuZ2Ug
Jm91dCAodm9pZCk7CiAgICBSb3V0aW5nVHlwZVJhbmdlIF9yZXRuICh2b2lkKTsKICAgIFJvdXRp
bmdUeXBlUmFuZ2UgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBSb3V0aW5nVHlw
ZVJhbmdlICpwdHJfOwogIH07CgogIHR5cGVkZWYgUm91dGluZ1R5cGVSYW5nZSAmUm91dGluZ1R5
cGVSYW5nZV9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Sb3V0aW5nVHlw
ZVJhbmdlOwoKCgoKCiAgY2xhc3MgUm91dGluZ1BvbGljeTsKICB0eXBlZGVmIFJvdXRpbmdQb2xp
Y3kgKlJvdXRpbmdQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBSb3V0aW5nUG9saWN5X3ZhciA6
IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUm91dGluZ1BvbGljeV92YXIg
KHZvaWQpOwogICAgUm91dGluZ1BvbGljeV92YXIgKFJvdXRpbmdQb2xpY3lfcHRyIHApIDogcHRy
XyAocCkge30KICAgIFJvdXRpbmdQb2xpY3lfdmFyIChjb25zdCBSb3V0aW5nUG9saWN5X3ZhciAm
KTsKICAgIH5Sb3V0aW5nUG9saWN5X3ZhciAodm9pZCk7CgogICAgUm91dGluZ1BvbGljeV92YXIg
Jm9wZXJhdG9yPSAoUm91dGluZ1BvbGljeV9wdHIpOwogICAgUm91dGluZ1BvbGljeV92YXIgJm9w
ZXJhdG9yPSAoY29uc3QgUm91dGluZ1BvbGljeV92YXIgJik7CiAgICBSb3V0aW5nUG9saWN5X3B0
ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBSb3V0aW5nUG9s
aWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSb3V0aW5nUG9saWN5X3B0ciAmKCk7Cgog
ICAgUm91dGluZ1BvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUm91dGluZ1BvbGljeV9w
dHIgJmlub3V0ICh2b2lkKTsKICAgIFJvdXRpbmdQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAg
Um91dGluZ1BvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgUm91dGluZ1BvbGljeV9wdHIgcHRy
ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSb3V0aW5nUG9saWN5X3B0ciBkdXBsaWNhdGUg
KFJvdXRpbmdQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFJvdXRpbmdQb2xp
Y3lfcHRyKTsKICAgIHN0YXRpYyBSb3V0aW5nUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3Rh
dGljIFJvdXRpbmdQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52
aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsK
CiAgcHJpdmF0ZToKICAgIFJvdXRpbmdQb2xpY3lfcHRyIHB0cl87CgogICAgUm91dGluZ1BvbGlj
eV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFJvdXRpbmdQb2xpY3lfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE2NDIgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgog
IGNsYXNzIFJvdXRpbmdQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFJvdXRpbmdQb2xpY3lf
b3V0IChSb3V0aW5nUG9saWN5X3B0ciAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0IChSb3V0aW5n
UG9saWN5X3ZhciAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0IChjb25zdCBSb3V0aW5nUG9saWN5
X291dCAmKTsKICAgIFJvdXRpbmdQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJvdXRpbmdQ
b2xpY3lfb3V0ICYpOwogICAgUm91dGluZ1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUm91
dGluZ1BvbGljeV92YXIgJik7CiAgICBSb3V0aW5nUG9saWN5X291dCAmb3BlcmF0b3I9IChSb3V0
aW5nUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBSb3V0aW5nUG9saWN5X3B0ciAmKCk7CiAgICBS
b3V0aW5nUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFJvdXRpbmdQb2xpY3lfcHRyIG9wZXJh
dG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUm91dGluZ1BvbGljeV9wdHIgJnB0cl87CiAg
fTsKIyAxNjY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBSb3V0aW5nUG9saWN5OiBwdWJsaWMgdmlydHVhbCBD
T1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFJvdXRpbmdQb2xpY3lfcHRy
IF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUm91dGluZ1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgog
ICAgc3RhdGljIFJvdXRpbmdQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKFJvdXRpbmdQb2xpY3lfcHRy
IG9iaik7CiAgICBzdGF0aWMgUm91dGluZ1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApOwogICAgc3RhdGljIFJvdXRpbmdQb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFy
cm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUm91dGluZ1BvbGljeV9w
dHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoUm91dGluZ1BvbGljeV9wdHIp
MDsKICAgICAgfQoKICAgIHZpcnR1YWwgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlIHJvdXRp
bmdfcmFuZ2UgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp
cnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAg
dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0
OwoKICBwcm90ZWN0ZWQ6CiAgICBSb3V0aW5nUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflJvdXRp
bmdQb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBSb3V0aW5nUG9saWN5IChjb25zdCBSb3V0
aW5nUG9saWN5ICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFJvdXRpbmdQb2xpY3kgJik7
CiAgfTsKIyAxNzE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL01lc3NhZ2luZ0MuaCIKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIE1BWF9IT1BT
X1BPTElDWV9UWVBFOwoKCgoKCiAgY2xhc3MgTWF4SG9wc1BvbGljeTsKICB0eXBlZGVmIE1heEhv
cHNQb2xpY3kgKk1heEhvcHNQb2xpY3lfcHRyOwoKCgoKCgoKICBjbGFzcyBNYXhIb3BzUG9saWN5
X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgTWF4SG9wc1BvbGlj
eV92YXIgKHZvaWQpOwogICAgTWF4SG9wc1BvbGljeV92YXIgKE1heEhvcHNQb2xpY3lfcHRyIHAp
IDogcHRyXyAocCkge30KICAgIE1heEhvcHNQb2xpY3lfdmFyIChjb25zdCBNYXhIb3BzUG9saWN5
X3ZhciAmKTsKICAgIH5NYXhIb3BzUG9saWN5X3ZhciAodm9pZCk7CgogICAgTWF4SG9wc1BvbGlj
eV92YXIgJm9wZXJhdG9yPSAoTWF4SG9wc1BvbGljeV9wdHIpOwogICAgTWF4SG9wc1BvbGljeV92
YXIgJm9wZXJhdG9yPSAoY29uc3QgTWF4SG9wc1BvbGljeV92YXIgJik7CiAgICBNYXhIb3BzUG9s
aWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBNYXhI
b3BzUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBNYXhIb3BzUG9saWN5X3B0ciAm
KCk7CgogICAgTWF4SG9wc1BvbGljeV9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgTWF4SG9wc1Bv
bGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIE1heEhvcHNQb2xpY3lfcHRyICZvdXQgKHZvaWQp
OwogICAgTWF4SG9wc1BvbGljeV9wdHIgX3JldG4gKHZvaWQpOwogICAgTWF4SG9wc1BvbGljeV9w
dHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBNYXhIb3BzUG9saWN5X3B0ciBkdXBs
aWNhdGUgKE1heEhvcHNQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKE1heEhv
cHNQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBNYXhIb3BzUG9saWN5X3B0ciBuaWwgKHZvaWQpOwog
ICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JC
QTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9p
ZCAqKTsKCiAgcHJpdmF0ZToKICAgIE1heEhvcHNQb2xpY3lfcHRyIHB0cl87CgogICAgTWF4SG9w
c1BvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIE1heEhvcHNQb2xpY3lf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDE3NzcgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5n
Qy5oIgogIGNsYXNzIE1heEhvcHNQb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIE1heEhvcHNQ
b2xpY3lfb3V0IChNYXhIb3BzUG9saWN5X3B0ciAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0IChN
YXhIb3BzUG9saWN5X3ZhciAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0IChjb25zdCBNYXhIb3Bz
UG9saWN5X291dCAmKTsKICAgIE1heEhvcHNQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IE1h
eEhvcHNQb2xpY3lfb3V0ICYpOwogICAgTWF4SG9wc1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29u
c3QgTWF4SG9wc1BvbGljeV92YXIgJik7CiAgICBNYXhIb3BzUG9saWN5X291dCAmb3BlcmF0b3I9
IChNYXhIb3BzUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBNYXhIb3BzUG9saWN5X3B0ciAmKCk7
CiAgICBNYXhIb3BzUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIE1heEhvcHNQb2xpY3lfcHRy
IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgTWF4SG9wc1BvbGljeV9wdHIgJnB0
cl87CiAgfTsKIyAxODAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBNYXhIb3BzUG9saWN5OiBwdWJsaWMgdmly
dHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIE1heEhvcHNQb2xp
Y3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgTWF4SG9wc1BvbGljeV92YXIgX3Zhcl90eXBl
OwoKCgogICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIF9kdXBsaWNhdGUgKE1heEhvcHNQb2xp
Y3lfcHRyIG9iaik7CiAgICBzdGF0aWMgTWF4SG9wc1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAg
ICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIE1heEhvcHNQb2xpY3lfcHRyIF91bmNoZWNr
ZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgTWF4SG9wc1Bv
bGljeV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoTWF4SG9wc1BvbGlj
eV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgQ09SQkE6OlVTaG9ydCBtYXhfaG9wcyAoCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpf
dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3Rl
ZDoKICAgIE1heEhvcHNQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+TWF4SG9wc1BvbGljeSAodm9p
ZCk7CiAgcHJpdmF0ZToKICAgIE1heEhvcHNQb2xpY3kgKGNvbnN0IE1heEhvcHNQb2xpY3kgJik7
CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgTWF4SG9wc1BvbGljeSAmKTsKICB9OwojIDE4NTQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn
aW5nQy5oIgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgUVVFVUVfT1JERVJfUE9MSUNZX1RZ
UEU7CgoKCgoKICBjbGFzcyBRdWV1ZU9yZGVyUG9saWN5OwogIHR5cGVkZWYgUXVldWVPcmRlclBv
bGljeSAqUXVldWVPcmRlclBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFF1ZXVlT3JkZXJQb2xp
Y3lfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBRdWV1ZU9yZGVy
UG9saWN5X3ZhciAodm9pZCk7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAoUXVldWVPcmRlclBv
bGljeV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUXVldWVPcmRlclBvbGljeV92YXIgKGNvbnN0
IFF1ZXVlT3JkZXJQb2xpY3lfdmFyICYpOwogICAgflF1ZXVlT3JkZXJQb2xpY3lfdmFyICh2b2lk
KTsKCiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAmb3BlcmF0b3I9IChRdWV1ZU9yZGVyUG9saWN5
X3B0cik7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBRdWV1ZU9y
ZGVyUG9saWN5X3ZhciAmKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZv
aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFF1ZXVlT3JkZXJQb2xpY3lfcHRyICYoKSBj
b25zdDsKICAgIG9wZXJhdG9yIFF1ZXVlT3JkZXJQb2xpY3lfcHRyICYoKTsKCiAgICBRdWV1ZU9y
ZGVyUG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3B0ciAm
aW5vdXQgKHZvaWQpOwogICAgUXVldWVPcmRlclBvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBR
dWV1ZU9yZGVyUG9saWN5X3B0ciBfcmV0biAodm9pZCk7CiAgICBRdWV1ZU9yZGVyUG9saWN5X3B0
ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIGR1
cGxpY2F0ZSAoUXVldWVPcmRlclBvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAo
UXVldWVPcmRlclBvbGljeV9wdHIpOwogICAgc3RhdGljIFF1ZXVlT3JkZXJQb2xpY3lfcHRyIG5p
bCAodm9pZCk7CiAgICBzdGF0aWMgUXVldWVPcmRlclBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6
T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0
ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUXVldWVPcmRlclBvbGljeV9wdHIg
cHRyXzsKCiAgICBRdWV1ZU9yZGVyUG9saWN5X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMp
OwogICAgUXVldWVPcmRlclBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFy
ICZyaHMpOwogIH07CiMgMTkxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUXVldWVPcmRlclBvbGljeV9vdXQK
ICB7CiAgcHVibGljOgogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKFF1ZXVlT3JkZXJQb2xpY3lf
cHRyICYpOwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKFF1ZXVlT3JkZXJQb2xpY3lfdmFyICYp
OwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgKGNvbnN0IFF1ZXVlT3JkZXJQb2xpY3lfb3V0ICYp
OwogICAgUXVldWVPcmRlclBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUXVldWVPcmRlclBv
bGljeV9vdXQgJik7CiAgICBRdWV1ZU9yZGVyUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBR
dWV1ZU9yZGVyUG9saWN5X3ZhciAmKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfb3V0ICZvcGVyYXRv
cj0gKFF1ZXVlT3JkZXJQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFF1ZXVlT3JkZXJQb2xpY3lf
cHRyICYoKTsKICAgIFF1ZXVlT3JkZXJQb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgUXVldWVP
cmRlclBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBRdWV1ZU9y
ZGVyUG9saWN5X3B0ciAmcHRyXzsKICB9OwojIDE5MzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIFF1ZXVlT3Jk
ZXJQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAg
IHR5cGVkZWYgUXVldWVPcmRlclBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBRdWV1
ZU9yZGVyUG9saWN5X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUXVldWVPcmRlclBvbGlj
eV9wdHIgX2R1cGxpY2F0ZSAoUXVldWVPcmRlclBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBR
dWV1ZU9yZGVyUG9saWN5X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv
YmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAg
ICBzdGF0aWMgUXVldWVPcmRlclBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAg
IENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBRdWV1ZU9yZGVyUG9saWN5X3B0ciBfbmlsICh2
b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChRdWV1ZU9yZGVyUG9saWN5X3B0cikwOwogICAg
ICB9CgogICAgdmlydHVhbCBNZXNzYWdpbmc6Ok9yZGVyaW5nIGFsbG93ZWRfb3JkZXJzICgKICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90
YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk
OgogICAgUXVldWVPcmRlclBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5RdWV1ZU9yZGVyUG9saWN5
ICh2b2lkKTsKICBwcml2YXRlOgogICAgUXVldWVPcmRlclBvbGljeSAoY29uc3QgUXVldWVPcmRl
clBvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBRdWV1ZU9yZGVyUG9saWN5ICYp
OwogIH07CgoKCgoKCiAgc3RydWN0IFBvbGljeVZhbHVlOwogIGNsYXNzIFBvbGljeVZhbHVlX3Zh
cjsKCiAgc3RydWN0IFBvbGljeVZhbHVlCiAgewoKCiAgICB0eXBlZGVmIFBvbGljeVZhbHVlX3Zh
ciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQq
KTsKCiAgICBDT1JCQTo6UG9saWN5VHlwZSBwdHlwZTsKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9P
Y3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19z
ZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j
dGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAg
ICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0
ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0
aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFf
T2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lk
IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09j
dGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBD
T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1i
CiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+
IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQg
X3B2YWx1ZV9zZXE7CgoKICAgICAgICAgIF90YW9fc2VxX09jdGV0IHB2YWx1ZTsKICB9OwoKICBj
bGFzcyBQb2xpY3lWYWx1ZV92YXIKICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVfdmFyICh2
b2lkKTsKICAgIFBvbGljeVZhbHVlX3ZhciAoUG9saWN5VmFsdWUgKik7CiAgICBQb2xpY3lWYWx1
ZV92YXIgKGNvbnN0IFBvbGljeVZhbHVlX3ZhciAmKTsKICAgIH5Qb2xpY3lWYWx1ZV92YXIgKHZv
aWQpOwoKICAgIFBvbGljeVZhbHVlX3ZhciAmb3BlcmF0b3I9IChQb2xpY3lWYWx1ZSAqKTsKICAg
IFBvbGljeVZhbHVlX3ZhciAmb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZV92YXIgJik7CiAg
ICBQb2xpY3lWYWx1ZSAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBQb2xpY3lWYWx1ZSAq
b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUG9saWN5VmFsdWUg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgUG9saWN5VmFsdWUgJigpOwogICAgb3BlcmF0b3IgUG9s
aWN5VmFsdWUgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUG9saWN5VmFsdWUgKiYoKTsKCgogICAg
Y29uc3QgUG9saWN5VmFsdWUgJmluICh2b2lkKSBjb25zdDsKICAgIFBvbGljeVZhbHVlICZpbm91
dCAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAqJm91dCAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAq
X3JldG4gKHZvaWQpOwogICAgUG9saWN5VmFsdWUgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZh
dGU6CiAgICBQb2xpY3lWYWx1ZSAqcHRyXzsKICB9OwoKICBjbGFzcyBQb2xpY3lWYWx1ZV9vdXQK
ICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVfb3V0IChQb2xpY3lWYWx1ZSAqJik7CiAgICBQ
b2xpY3lWYWx1ZV9vdXQgKFBvbGljeVZhbHVlX3ZhciAmKTsKICAgIFBvbGljeVZhbHVlX291dCAo
Y29uc3QgUG9saWN5VmFsdWVfb3V0ICYpOwogICAgUG9saWN5VmFsdWVfb3V0ICZvcGVyYXRvcj0g
KGNvbnN0IFBvbGljeVZhbHVlX291dCAmKTsKICAgIFBvbGljeVZhbHVlX291dCAmb3BlcmF0b3I9
IChQb2xpY3lWYWx1ZSAqKTsKICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlIComKCk7CiAgICBQb2xp
Y3lWYWx1ZSAqJnB0ciAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZSAqb3BlcmF0b3ItPiAodm9pZCk7
CgogIHByaXZhdGU6CiAgICBQb2xpY3lWYWx1ZSAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0g
KGNvbnN0IFBvbGljeVZhbHVlX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2Rl
X3B0ciBfdGNfUG9saWN5VmFsdWU7CgoKCgoKCgogICAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxIDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFz
ZV9TZXF1ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAodm9pZCk7CiAgICAgIF9UQU9fVW5ib3VuZGVk
X1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0p
OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEg
KENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAg
ICAgUG9saWN5VmFsdWUgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAp
OwogICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEg
KGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAm
cmhzKTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVl
U2VxICZvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Q
b2xpY3lWYWx1ZVNlcSAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxICh2b2lkKTsKCiAgICAgIFBvbGljeVZhbHVlICZv
cGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSk7CiAgICAgIGNvbnN0IFBvbGljeVZhbHVlICZvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaSkgY29uc3Q7CgogICAgICBzdGF0aWMgUG9saWN5VmFsdWUg
KmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICAgIHN0YXRpYyB2b2lkIGZyZWVidWYg
KFBvbGljeVZhbHVlICpidWZmZXIpOwogICAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZl
ciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9i
dWZmZXIgKHZvaWQpOwoKCiAgICAgIFBvbGljeVZhbHVlICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9v
bGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgUG9saWN5VmFsdWUgKmdldF9idWZmZXIgKHZv
aWQpIGNvbnN0OwogICAgICB2b2lkIHJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAg
Q09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBQb2xpY3lWYWx1ZSAqZGF0YSwKICAgICAgICBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlKTsKICAgIH07CiMgMjE1MCAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9s
aWN5VmFsdWVTZXE7CiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfdmFyOwoKCgoKCiAgY2xhc3MgUG9s
aWN5VmFsdWVTZXEgOiBwdWJsaWMKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp
bmdfUG9saWN5VmFsdWVTZXEKCgoKICB7CiAgcHVibGljOgogICAgUG9saWN5VmFsdWVTZXEgKHZv
aWQpOwogICAgUG9saWN5VmFsdWVTZXEgKENPUkJBOjpVTG9uZyBtYXgpOwogICAgUG9saWN5VmFs
dWVTZXEgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogICAgICBQb2xpY3lWYWx1ZSAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNl
ID0gMAogICAgKTsKICAgIFBvbGljeVZhbHVlU2VxIChjb25zdCBQb2xpY3lWYWx1ZVNlcSAmKTsK
ICAgIH5Qb2xpY3lWYWx1ZVNlcSAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0
cnVjdG9yICh2b2lkKik7CgoKICAgIHR5cGVkZWYgUG9saWN5VmFsdWVTZXFfdmFyIF92YXJfdHlw
ZTsKCgogIH07CiMgMjE5MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfdmFyCiAgewog
IHB1YmxpYzoKICAgIFBvbGljeVZhbHVlU2VxX3ZhciAodm9pZCk7CiAgICBQb2xpY3lWYWx1ZVNl
cV92YXIgKFBvbGljeVZhbHVlU2VxICopOwogICAgUG9saWN5VmFsdWVTZXFfdmFyIChjb25zdCBQ
b2xpY3lWYWx1ZVNlcV92YXIgJik7CiAgICB+UG9saWN5VmFsdWVTZXFfdmFyICh2b2lkKTsKCiAg
ICBQb2xpY3lWYWx1ZVNlcV92YXIgJm9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKik7CiAgICBQ
b2xpY3lWYWx1ZVNlcV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUG9saWN5VmFsdWVTZXFfdmFyICYp
OwogICAgUG9saWN5VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgUG9saWN5
VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFBv
bGljeVZhbHVlU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlU2VxICYoKTsK
ICAgIG9wZXJhdG9yIFBvbGljeVZhbHVlU2VxICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGlj
eVZhbHVlU2VxIComKCk7CgogICAgUG9saWN5VmFsdWUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxv
bmcgaW5kZXgpOwogICAgY29uc3QgUG9saWN5VmFsdWUgJiBvcGVyYXRvcltdIChDT1JCQTo6VUxv
bmcgaW5kZXgpIGNvbnN0OwoKCiAgICBjb25zdCBQb2xpY3lWYWx1ZVNlcSAmaW4gKHZvaWQpIGNv
bnN0OwogICAgUG9saWN5VmFsdWVTZXEgJmlub3V0ICh2b2lkKTsKICAgIFBvbGljeVZhbHVlU2Vx
IComb3V0ICh2b2lkKTsKICAgIFBvbGljeVZhbHVlU2VxICpfcmV0biAodm9pZCk7CiAgICBQb2xp
Y3lWYWx1ZVNlcSAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIFBvbGljeVZhbHVl
U2VxICpwdHJfOwogIH07CiMgMjIzMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUG9saWN5VmFsdWVTZXFfb3V0
CiAgewogIHB1YmxpYzoKICAgIFBvbGljeVZhbHVlU2VxX291dCAoUG9saWN5VmFsdWVTZXEgKiYp
OwogICAgUG9saWN5VmFsdWVTZXFfb3V0IChQb2xpY3lWYWx1ZVNlcV92YXIgJik7CiAgICBQb2xp
Y3lWYWx1ZVNlcV9vdXQgKGNvbnN0IFBvbGljeVZhbHVlU2VxX291dCAmKTsKICAgIFBvbGljeVZh
bHVlU2VxX291dCAmb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZVNlcV9vdXQgJik7CiAgICBQ
b2xpY3lWYWx1ZVNlcV9vdXQgJm9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKik7CiAgICBvcGVy
YXRvciBQb2xpY3lWYWx1ZVNlcSAqJigpOwogICAgUG9saWN5VmFsdWVTZXEgKiZwdHIgKHZvaWQp
OwogICAgUG9saWN5VmFsdWVTZXEgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgUG9saWN5VmFsdWUg
JiBvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgUG9saWN5
VmFsdWVTZXEgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQb2xpY3lWYWx1ZVNl
cV92YXIgJik7CiAgfTsKCgoKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1BvbGlj
eVZhbHVlU2VxOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRBR19QT0xJQ0lFUzsKCiAg
ZXh0ZXJuIGNvbnN0IENPUkJBOjpVTG9uZyBJTlZPQ0FUSU9OX1BPTElDSUVTOwoKCgoKICBjbGFz
cyBFeGNlcHRpb25Ib2xkZXI7CiAgdHlwZWRlZiBFeGNlcHRpb25Ib2xkZXIgKkV4Y2VwdGlvbkhv
bGRlcl9wdHI7CgoKCgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlcl92YXIKICB7CiAgcHVibGljOgog
ICAgRXhjZXB0aW9uSG9sZGVyX3ZhciAodm9pZCk7CiAgICBFeGNlcHRpb25Ib2xkZXJfdmFyIChF
eGNlcHRpb25Ib2xkZXIqKTsKICAgIEV4Y2VwdGlvbkhvbGRlcl92YXIgKGNvbnN0IEV4Y2VwdGlv
bkhvbGRlciopOwogICAgRXhjZXB0aW9uSG9sZGVyX3ZhciAoY29uc3QgRXhjZXB0aW9uSG9sZGVy
X3ZhciAmKTsKICAgIH5FeGNlcHRpb25Ib2xkZXJfdmFyICh2b2lkKTsKCiAgICBFeGNlcHRpb25I
b2xkZXJfdmFyICZvcGVyYXRvcj0gKEV4Y2VwdGlvbkhvbGRlciopOwogICAgRXhjZXB0aW9uSG9s
ZGVyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfdmFyICYpOwogICAgRXhj
ZXB0aW9uSG9sZGVyKiBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25z
dCBFeGNlcHRpb25Ib2xkZXIqICgpIGNvbnN0OwogICAgb3BlcmF0b3IgRXhjZXB0aW9uSG9sZGVy
KiAoKTsKCiAgICBFeGNlcHRpb25Ib2xkZXIqIGluICh2b2lkKSBjb25zdDsKICAgIEV4Y2VwdGlv
bkhvbGRlciogJmlub3V0ICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciogJm91dCAodm9pZCk7
CiAgICBFeGNlcHRpb25Ib2xkZXIqIF9yZXRuICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciog
cHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIEV4Y2VwdGlvbkhvbGRlciogcHRyXzsK
ICB9OwojIDIzMDIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vTWVzc2FnaW5nQy5oIgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlcl9vdXQKICB7CiAgcHVi
bGljOgogICAgRXhjZXB0aW9uSG9sZGVyX291dCAoRXhjZXB0aW9uSG9sZGVyKiAmKTsKICAgIEV4
Y2VwdGlvbkhvbGRlcl9vdXQgKEV4Y2VwdGlvbkhvbGRlcl92YXIgJik7CiAgICBFeGNlcHRpb25I
b2xkZXJfb3V0IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfb3V0ICYpOwogICAgRXhjZXB0aW9uSG9s
ZGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfb3V0ICYpOwogICAgRXhj
ZXB0aW9uSG9sZGVyX291dCAmb3BlcmF0b3I9IChjb25zdCBFeGNlcHRpb25Ib2xkZXJfdmFyICYp
OwogICAgRXhjZXB0aW9uSG9sZGVyX291dCAmb3BlcmF0b3I9IChFeGNlcHRpb25Ib2xkZXIqKTsK
ICAgIG9wZXJhdG9yIEV4Y2VwdGlvbkhvbGRlciogJigpOwogICAgRXhjZXB0aW9uSG9sZGVyKiAm
cHRyICh2b2lkKTsKICAgIEV4Y2VwdGlvbkhvbGRlciogb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy
aXZhdGU6CiAgICBFeGNlcHRpb25Ib2xkZXIqICZwdHJfOwogIH07CiMgMjMyNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAg
Y2xhc3MgRXhjZXB0aW9uSG9sZGVyX2luaXQgOiBwdWJsaWMgQ09SQkFfVmFsdWVGYWN0b3J5QmFz
ZQogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5FeGNlcHRpb25Ib2xkZXJfaW5pdCAoKTsKICAg
IHZpcnR1YWwgY29uc3QgY2hhciogdGFvX3JlcG9zaXRvcnlfaWQgKHZvaWQpOwoKCgogIH07CgoK
CgoKCgogIGNsYXNzIEV4Y2VwdGlvbkhvbGRlciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX1ZhbHVl
QmFzZQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBFeGNlcHRpb25Ib2xkZXIqIF9wdHJfdHlw
ZTsKICAgIHR5cGVkZWYgRXhjZXB0aW9uSG9sZGVyX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRp
YyBFeGNlcHRpb25Ib2xkZXIqIF9kb3duY2FzdCAoQ09SQkE6OlZhbHVlQmFzZSogKTsKCgoKICAg
IHN0YXRpYyBDT1JCQTo6Qm9vbGVhbiBfdGFvX3VubWFyc2hhbCAoVEFPX0lucHV0Q0RSICYsIEV4
Y2VwdGlvbkhvbGRlciAqJik7CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF90YW9fb2J2X3JlcG9z
aXRvcnlfaWQgKCkgY29uc3Q7CiAgICBzdGF0aWMgY29uc3QgY2hhciogX3Rhb19vYnZfc3RhdGlj
X3JlcG9zaXRvcnlfaWQgKCk7CiAgcHVibGljOgogICAgdmlydHVhbCB2b2lkIGlzX3N5c3RlbV9l
eGNlcHRpb24gKENPUkJBOjpCb29sZWFuKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IGlzX3N5c3RlbV9leGNlcHRpb24gKHZvaWQpIGNvbnN0ID0gMDsKCiAgICB2aXJ0dWFsIHZvaWQg
Ynl0ZV9vcmRlciAoQ09SQkE6OkJvb2xlYW4pID0gMDsKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xl
YW4gYnl0ZV9vcmRlciAodm9pZCkgY29uc3QgPSAwOwoKCgoKCiAgICBjbGFzcyBfdGFvX3NlcV9P
Y3RldDsKICAgIGNsYXNzIF90YW9fc2VxX09jdGV0X3ZhcjsKCgoKCgogICAgY2xhc3MgX3Rhb19z
ZXFfT2N0ZXQgOiBwdWJsaWMKCiAgICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9j
dGV0PgoKCgogICAgewogICAgcHVibGljOgogICAgICBfdGFvX3NlcV9PY3RldCAodm9pZCk7CiAg
ICAgIF90YW9fc2VxX09jdGV0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgICAgX3Rhb19zZXFfT2N0
ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0
aCwKICAgICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlID0gMAogICAgICApOwogICAgICBfdGFvX3NlcV9PY3RldCAoY29uc3QgX3Rhb19zZXFf
T2N0ZXQgJik7CiAgICAgIH5fdGFvX3NlcV9PY3RldCAodm9pZCk7CiAgICAgIHN0YXRpYyB2b2lk
IF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgICB0eXBlZGVmIF90YW9fc2VxX09j
dGV0X3ZhciBfdmFyX3R5cGU7CgoKCgogICAgICBfdGFvX3NlcV9PY3RldCAoCiAgICAgICAgICBD
T1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1i
CiAgICAgICAgKQogICAgICAgIDogVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0ZXQ+
IChsZW5ndGgsIG1iKSB7fQoKCiAgICB9OwoKCgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0ZXQg
X21hcnNoYWxlZF9leGNlcHRpb25fc2VxOwoKCiAgICAgICAgICB2aXJ0dWFsIHZvaWQgbWFyc2hh
bGVkX2V4Y2VwdGlvbiAoY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXI6Ol90YW9fc2Vx
X09jdGV0ICYpID0gMDsKICAgIHZpcnR1YWwgY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xk
ZXI6Ol90YW9fc2VxX09jdGV0ICZtYXJzaGFsZWRfZXhjZXB0aW9uICh2b2lkKSBjb25zdCA9IDA7
CiAgICB2aXJ0dWFsIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX3NlcV9PY3RldCAm
bWFyc2hhbGVkX2V4Y2VwdGlvbiAodm9pZCkgPSAwOwoKCiAgcHJvdGVjdGVkOgogICAgRXhjZXB0
aW9uSG9sZGVyICgpOwogICAgdmlydHVhbCB+RXhjZXB0aW9uSG9sZGVyICgpOwoKCiAgICB2aXJ0
dWFsIHZvaWQgKl90YW9fb2J2X25hcnJvdyAocHRyX2FyaXRoX3QpOwogICAgdmlydHVhbCBDT1JC
QTo6Qm9vbGVhbiBfdGFvX21hcnNoYWxfdiAoVEFPX091dHB1dENEUiAmKTsKICAgIHZpcnR1YWwg
Q09SQkE6OkJvb2xlYW4gX3Rhb191bm1hcnNoYWxfdiAoVEFPX0lucHV0Q0RSICYpOwoKICBwcml2
YXRlOgogICAgRXhjZXB0aW9uSG9sZGVyIChjb25zdCBFeGNlcHRpb25Ib2xkZXIgJik7CiAgICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgRXhjZXB0aW9uSG9sZGVyICYpOwoKICBwcm90ZWN0ZWQ6CiAg
ICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fbWFyc2hhbF9fTWVzc2FnaW5nX0V4Y2VwdGlv
bkhvbGRlciAoVEFPX091dHB1dENEUiAmKSA9IDA7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IF90YW9fdW5tYXJzaGFsX19NZXNzYWdpbmdfRXhjZXB0aW9uSG9sZGVyIChUQU9fSW5wdXRDRFIg
JikgPSAwOwoKICB9OwoKCgoKCgoKICBjbGFzcyBSZXBseUhhbmRsZXI7CiAgdHlwZWRlZiBSZXBs
eUhhbmRsZXIgKlJlcGx5SGFuZGxlcl9wdHI7CgoKCgoKCgogIGNsYXNzIFJlcGx5SGFuZGxlcl92
YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFJlcGx5SGFuZGxlcl92
YXIgKHZvaWQpOwogICAgUmVwbHlIYW5kbGVyX3ZhciAoUmVwbHlIYW5kbGVyX3B0ciBwKSA6IHB0
cl8gKHApIHt9CiAgICBSZXBseUhhbmRsZXJfdmFyIChjb25zdCBSZXBseUhhbmRsZXJfdmFyICYp
OwogICAgflJlcGx5SGFuZGxlcl92YXIgKHZvaWQpOwoKICAgIFJlcGx5SGFuZGxlcl92YXIgJm9w
ZXJhdG9yPSAoUmVwbHlIYW5kbGVyX3B0cik7CiAgICBSZXBseUhhbmRsZXJfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IFJlcGx5SGFuZGxlcl92YXIgJik7CiAgICBSZXBseUhhbmRsZXJfcHRyIG9wZXJh
dG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJlcGx5SGFuZGxlcl9wdHIg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgUmVwbHlIYW5kbGVyX3B0ciAmKCk7CgogICAgUmVwbHlI
YW5kbGVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZXBseUhhbmRsZXJfcHRyICZpbm91dCAo
dm9pZCk7CiAgICBSZXBseUhhbmRsZXJfcHRyICZvdXQgKHZvaWQpOwogICAgUmVwbHlIYW5kbGVy
X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXBseUhhbmRsZXJfcHRyIHB0ciAodm9pZCkgY29uc3Q7
CgoKCiAgICBzdGF0aWMgUmVwbHlIYW5kbGVyX3B0ciBkdXBsaWNhdGUgKFJlcGx5SGFuZGxlcl9w
dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVwbHlIYW5kbGVyX3B0cik7CiAgICBzdGF0
aWMgUmVwbHlIYW5kbGVyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFJlcGx5SGFuZGxlcl9w
dHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0
YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgUmVw
bHlIYW5kbGVyX3B0ciBwdHJfOwoKICAgIFJlcGx5SGFuZGxlcl92YXIgKGNvbnN0IFRBT19CYXNl
X3ZhciAmcmhzKTsKICAgIFJlcGx5SGFuZGxlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jh
c2VfdmFyICZyaHMpOwogIH07CiMgMjQ5OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiCiAgY2xhc3MgUmVwbHlIYW5kbGVyX291
dAogIHsKICBwdWJsaWM6CiAgICBSZXBseUhhbmRsZXJfb3V0IChSZXBseUhhbmRsZXJfcHRyICYp
OwogICAgUmVwbHlIYW5kbGVyX291dCAoUmVwbHlIYW5kbGVyX3ZhciAmKTsKICAgIFJlcGx5SGFu
ZGxlcl9vdXQgKGNvbnN0IFJlcGx5SGFuZGxlcl9vdXQgJik7CiAgICBSZXBseUhhbmRsZXJfb3V0
ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5SGFuZGxlcl9vdXQgJik7CiAgICBSZXBseUhhbmRsZXJf
b3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJlcGx5SGFuZGxlcl92YXIgJik7CiAgICBSZXBseUhhbmRs
ZXJfb3V0ICZvcGVyYXRvcj0gKFJlcGx5SGFuZGxlcl9wdHIpOwogICAgb3BlcmF0b3IgUmVwbHlI
YW5kbGVyX3B0ciAmKCk7CiAgICBSZXBseUhhbmRsZXJfcHRyICZwdHIgKHZvaWQpOwogICAgUmVw
bHlIYW5kbGVyX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFJlcGx5SGFu
ZGxlcl9wdHIgJnB0cl87CiAgfTsKIyAyNTIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBfVEFPX1JlcGx5SGFu
ZGxlcl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9J
bXBsOwogIGNsYXNzIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlcjsKICBjbGFzcyBfVEFP
X1JlcGx5SGFuZGxlcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBSZXBseUhhbmRsZXIg
OiBwdWJsaWMgdmlydHVhbCBDT1JCQTo6T2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVm
IFJlcGx5SGFuZGxlcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXBseUhhbmRsZXJfdmFy
IF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF9kdXBsaWNhdGUgKFJl
cGx5SGFuZGxlcl9wdHIgb2JqKTsKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF9uYXJyb3cg
KAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBSZXBseUhhbmRsZXJfcHRyIF91
bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVw
bHlIYW5kbGVyX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChSZXBseUhh
bmRsZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y
ICh2b2lkKik7CgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29u
c3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpCiAgICAgICk7CiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2Ug
KHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9y
ZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fUmVwbHlIYW5k
bGVyX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19SZXBseUhhbmRsZXJfUHJveHlfQnJva2VyXzsKCiAg
cHJvdGVjdGVkOgogICAgUmVwbHlIYW5kbGVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKICAgIHBy
b3RlY3RlZDoKCgogICAgICB2aXJ0dWFsIHZvaWQgTWVzc2FnaW5nX1JlcGx5SGFuZGxlcl9zZXR1
cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoKICAgICAgUmVwbHlIYW5kbGVyICgKICAg
ICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9j
YXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAog
ICAgICAgICk7CgogICAgICBmcmllbmQgY2xhc3MgX1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1By
b3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9UaHJ1UE9BX1By
b3h5X0ltcGw7CiAgICAgIGZyaWVuZCBjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9EaXJlY3RfUHJv
eHlfSW1wbDsKCiAgICB2aXJ0dWFsIH5SZXBseUhhbmRsZXIgKHZvaWQpOwogIHByaXZhdGU6CiAg
ICBSZXBseUhhbmRsZXIgKGNvbnN0IFJlcGx5SGFuZGxlciAmKTsKICAgIHZvaWQgb3BlcmF0b3I9
IChjb25zdCBSZXBseUhhbmRsZXIgJik7CiAgfTsKIyAyNjAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKICBjbGFzcyBfVEFP
X1JlcGx5SGFuZGxlcl9Qcm94eV9JbXBsIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94
eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5
X0ltcGwgKHZvaWQpIHsgfQoKICAgIHByb3RlY3RlZDoKICAgIF9UQU9fUmVwbHlIYW5kbGVyX1By
b3h5X0ltcGwgKHZvaWQpOwoKICB9OwojIDI2MTkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgpjbGFzcyBfVEFPX1JlcGx5SGFu
ZGxlcl9SZW1vdGVfUHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwgX1RBT19SZXBseUhhbmRs
ZXJfUHJveHlfSW1wbCwKICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9J
bXBsCnsKcHVibGljOgogIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lk
KTsKCiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQp
IHsgfQoKICB9OwojIDI2NDYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5oIgpjbGFzcyBfVEFPX1JlcGx5SGFuZGxlcl9Qcm94eV9C
cm9rZXIKewpwdWJsaWM6CiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUHJveHlfQnJva2Vy
ICh2b2lkKTsKICB2aXJ0dWFsIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0ltcGwgJnNlbGVjdF9w
cm94eSAoCiAgICBSZXBseUhhbmRsZXIgKm9iamVjdCwKICAgIENPUkJBX0Vudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICApID0gMDsKCnByb3RlY3RlZDoKICBfVEFPX1JlcGx5SGFuZGxlcl9Qcm94eV9Ccm9rZXIg
KHZvaWQpOwoKfTsKIyAyNjY5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKY2xhc3MgX1RBT19SZXBseUhhbmRsZXJfUmVtb3Rl
X1Byb3h5X0Jyb2tlciA6IHB1YmxpYyB2aXJ0dWFsIF9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jy
b2tlcgp7CnB1YmxpYzoKICBfVEFPX1JlcGx5SGFuZGxlcl9SZW1vdGVfUHJveHlfQnJva2VyICh2
b2lkKTsKCiAgdmlydHVhbCB+X1RBT19SZXBseUhhbmRsZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAo
dm9pZCk7CgogIHZpcnR1YWwgX1RBT19SZXBseUhhbmRsZXJfUHJveHlfSW1wbCAmc2VsZWN0X3By
b3h5ICgKICAgIFJlcGx5SGFuZGxlciAqb2JqZWN0LAogICAgQ09SQkFfRW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApOwoKcHJpdmF0ZToKICBfVEFPX1JlcGx5
SGFuZGxlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgoKCgpwdWJsaWM6
CiAgc3RhdGljIF9UQU9fUmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f
UmVwbHlIYW5kbGVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwp9OwojIDI2OTkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5o
IgpleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVwbHlIYW5kbGVyOwoKCgp9CgoKCgoK
CmV4dGVybgpNZXNzYWdpbmc6Ol9UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlciAqCigqTWVz
c2FnaW5nX19UQU9fUmVwbHlIYW5kbGVyX1Byb3h5X0Jyb2tlcl9GYWN0b3J5X2Z1bmN0aW9uX3Bv
aW50ZXIpICgKICAgIENPUkJBOjpPYmplY3RfcHRyIG9iagogICk7CgoKCgoKbmFtZXNwYWNlIE9C
Vl9NZXNzYWdpbmcKewoKCgoKCiAgY2xhc3MgRXhjZXB0aW9uSG9sZGVyIDogcHVibGljIHZpcnR1
YWwgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB2
b2lkIGlzX3N5c3RlbV9leGNlcHRpb24gKENPUkJBOjpCb29sZWFuKTsKICAgIHZpcnR1YWwgQ09S
QkE6OkJvb2xlYW4gaXNfc3lzdGVtX2V4Y2VwdGlvbiAodm9pZCkgY29uc3Q7CgogICAgdmlydHVh
bCB2b2lkIGJ5dGVfb3JkZXIgKENPUkJBOjpCb29sZWFuKTsKICAgIHZpcnR1YWwgQ09SQkE6OkJv
b2xlYW4gYnl0ZV9vcmRlciAodm9pZCkgY29uc3Q7CgoKICAgIHR5cGVkZWYgX3Rhb19zZXFfT2N0
ZXQgX21hcnNoYWxlZF9leGNlcHRpb25fc2VxOwoKCiAgICAgICAgICB2aXJ0dWFsIHZvaWQgbWFy
c2hhbGVkX2V4Y2VwdGlvbiAoY29uc3QgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXI6Ol90YW9f
c2VxX09jdGV0ICYpOwogICAgdmlydHVhbCBjb25zdCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRl
cjo6X3Rhb19zZXFfT2N0ZXQgJm1hcnNoYWxlZF9leGNlcHRpb24gKHZvaWQpIGNvbnN0OwogICAg
dmlydHVhbCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcjo6X3Rhb19zZXFfT2N0ZXQgJm1hcnNo
YWxlZF9leGNlcHRpb24gKHZvaWQpOwoKCiAgcHJvdGVjdGVkOgogICAgdmlydHVhbCBDT1JCQTo6
Qm9vbGVhbiBfdGFvX21hcnNoYWxfX01lc3NhZ2luZ19FeGNlcHRpb25Ib2xkZXIgKFRBT19PdXRw
dXRDRFIgJik7CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF90YW9fdW5tYXJzaGFsX19NZXNz
YWdpbmdfRXhjZXB0aW9uSG9sZGVyIChUQU9fSW5wdXRDRFIgJik7CiAgICBDT1JCQTo6Qm9vbGVh
biBfdGFvX21hcnNoYWxfc3RhdGUgKFRBT19PdXRwdXRDRFIgJik7CiAgICBDT1JCQTo6Qm9vbGVh
biBfdGFvX3VubWFyc2hhbF9zdGF0ZSAoVEFPX0lucHV0Q0RSICYpOwoKCiAgcHJpdmF0ZToKICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBfcGRfaXNfc3lzdGVtX2V4Y2VwdGlvbjsKICAgIENPUkJBOjpC
b29sZWFuIF9wZF9ieXRlX29yZGVyOwogICAgX3Rhb19zZXFfT2N0ZXQgX3BkX21hcnNoYWxlZF9l
eGNlcHRpb247CiAgfTsKCgoKfQoKCgoKCgogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENP
UkJBOjpBbnkgJiwgY29uc3QgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYpOwogICAgICAgICAg
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdl
Kik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpB
bnkgJiwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBy
aW9yaXR5UmFuZ2UgKiYpOwoKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6
OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJik7CiAgICAgICAgICAg
dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFu
Z2UqKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6
OkFueSAmLCBNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKiYpOwogICAgICAgICAgIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IE1lc3NhZ2lu
Zzo6Um91dGluZ1R5cGVSYW5nZSAqJik7CgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYpOwogICAgICAgICAg
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSop
OwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55
ICYsIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiYpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5
VmFsdWUgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u
c3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAmKTsKICAgICAgICAgICB2b2lkIG9wZXJhdG9y
PDw9IChDT1JCQTo6QW55ICYsIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEqKTsKICAgICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBNZXNzYWdp
bmc6OlBvbGljeVZhbHVlU2VxIComKTsKICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx
IComKTsKCgoKCiAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBNZXNz
YWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIpOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyIComKTsK
IyAyODYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L01lc3NhZ2luZ0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIgMQojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2lu
Zzo6UmViaW5kUG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlYmluZFBvbGljeV9kdXBsaWNhdGUg
KAogICAgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn
aW5nOjpSZWJpbmRQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fTWVz
c2FnaW5nX1JlYmluZFBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UmViaW5kUG9saWN5
X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpS
ZWJpbmRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmViaW5kUG9saWN5X25pbCAoCiAgICB2b2lk
CiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmViaW5kUG9saWN5OjpfbmlsICgpOwp9Cgppbmxp
bmUgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmViaW5kUG9saWN5
X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6
UmViaW5kUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
KTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlYmluZFBvbGljeV91
cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZWJpbmRQb2xpY3kgKip0
bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZWJpbmRQb2xpY3kgKio+IChzcmMpOwog
IHJldHVybiAqdG1wOwp9CiMgODIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIgppbmxpbmUgTWVzc2FnaW5nOjpTeW5jU2NvcGVQ
b2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfU3luY1Njb3BlUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBN
ZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeV9wdHIgcAogICkKewogIHJldHVybiBNZXNzYWdpbmc6
OlN5bmNTY29wZVBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNz
YWdpbmdfU3luY1Njb3BlUG9saWN5X3JlbGVhc2UgKAogICAgTWVzc2FnaW5nOjpTeW5jU2NvcGVQ
b2xpY3lfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBNZXNzYWdp
bmc6OlN5bmNTY29wZVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19TeW5jU2NvcGVQb2xpY3lfbmls
ICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpTeW5jU2NvcGVQb2xpY3k6Ol9u
aWwgKCk7Cn0KCmlubGluZSBNZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeV9wdHIKdGFvX01lc3Nh
Z2luZ19TeW5jU2NvcGVQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK
ICByZXR1cm4gTWVzc2FnaW5nOjpTeW5jU2NvcGVQb2xpY3k6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19N
ZXNzYWdpbmdfU3luY1Njb3BlUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBN
ZXNzYWdpbmc6OlN5bmNTY29wZVBvbGljeSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdp
bmc6OlN5bmNTY29wZVBvbGljeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzYgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5n
Qy5pIgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6UHJpb3JpdHlSYW5nZV92
YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5n
ZV92YXI6OlByaW9yaXR5UmFuZ2VfdmFyIChQcmlvcml0eVJhbmdlICpwKQogIDogcHRyXyAocCkK
e30KCmlubGluZQpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyOjpQcmlvcml0eVJhbmdlX3Zh
ciAoY29uc3QgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyICZwKQp7CiAgaWYgKHAucHRy
XykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlS
YW5nZSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2Nh
dGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0
cl8gPSAwOwp9CgoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6OlByaW9yaXR5
UmFuZ2VfdmFyIChjb25zdCA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAmcCkKewogIGRvIHsg
dHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAocCk7IH0g
Y2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0
dXJuOyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zh
cjo6flByaW9yaXR5UmFuZ2VfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSBNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpQcmlvcml0eVJh
bmdlX3Zhcjo6b3BlcmF0b3I9IChQcmlvcml0eVJhbmdlICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0
cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpNZXNzYWdp
bmc6OlByaW9yaXR5UmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3Bl
cmF0b3I9IChjb25zdCA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXIgJnApCnsKICBpZiAo
dGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAg
ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAg
fQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgUHJpb3JpdHlSYW5nZSAqZGVlcF9jb3B5
ID0KICAgICAgICAgICAgbmV3IFByaW9yaXR5UmFuZ2UgKCpwLnB0cl8pOwoKICAgICAgICAgIGlm
IChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIFByaW9yaXR5UmFu
Z2UgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJf
OwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRl
ZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9
CgoKaW5saW5lIE1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXIgJgpNZXNzYWdpbmc6OlByaW9y
aXR5UmFuZ2VfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdl
ICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87
CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFu
Z2UgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9
CgppbmxpbmUgY29uc3QgOjpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgKgpNZXNzYWdpbmc6OlBy
aW9yaXR5UmFuZ2VfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAqCk1lc3NhZ2luZzo6
UHJpb3JpdHlSYW5nZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6Om9wZXJhdG9yIGNvbnN0
IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3BlcmF0b3IgOjpN
ZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlu
bGluZQpNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2VfdmFyOjpvcGVyYXRvciA6Ok1lc3NhZ2luZzo6
UHJpb3JpdHlSYW5nZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5l
IGNvbnN0IDo6TWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICYKTWVzc2FnaW5nOjpQcmlvcml0eVJh
bmdlX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGlu
ZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZSAmCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92
YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6TWVz
c2FnaW5nOjpQcmlvcml0eVJhbmdlICYKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6b3V0
ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBy
aW9yaXR5UmFuZ2UKTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlX3Zhcjo6X3JldG4gKHZvaWQpCnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UHJpb3JpdHlSYW5n
ZSAqCk1lc3NhZ2luZzo6UHJpb3JpdHlSYW5nZV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5
UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV9kdXBsaWNhdGUg
KAogICAgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyIHAKICApCnsKICByZXR1
cm4gTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9Cgpp
bmxpbmUgdm9pZAp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV9yZWxlYXNlICgK
ICAgIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6
OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lf
cHRyCnRhb19NZXNzYWdpbmdfUmVxdWVzdFByaW9yaXR5UG9saWN5X25pbCAoCiAgICB2b2lkCiAg
KQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5OjpfbmlsICgpOwp9
CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3lfcHRyCnRhb19NZXNzYWdp
bmdfUmVxdWVzdFByaW9yaXR5UG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAog
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
KQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVxdWVzdFByaW9yaXR5UG9saWN5OjpfbmFycm93IChw
LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl
Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RQcmlvcml0eVBvbGljeV91cGNhc3QgKAogICAgdm9p
ZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3kgKip0bXAgPQog
ICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZXF1ZXN0UHJpb3JpdHlQb2xpY3kgKio+IChzcmMp
OwogIHJldHVybiAqdG1wOwp9CiMgMzMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlQ
cmlvcml0eVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZXBseVByaW9yaXR5UG9saWN5X2R1cGxp
Y2F0ZSAoCiAgICBNZXNzYWdpbmc6OlJlcGx5UHJpb3JpdHlQb2xpY3lfcHRyIHAKICApCnsKICBy
ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoK
aW5saW5lIHZvaWQKdGFvX01lc3NhZ2luZ19SZXBseVByaW9yaXR5UG9saWN5X3JlbGVhc2UgKAog
ICAgTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJl
bGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0cgp0
YW9fTWVzc2FnaW5nX1JlcGx5UHJpb3JpdHlQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsKICBy
ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUg
TWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5UHJp
b3JpdHlQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4g
TWVzc2FnaW5nOjpSZXBseVByaW9yaXR5UG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2Fn
aW5nX1JlcGx5UHJpb3JpdHlQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIE1l
c3NhZ2luZzo6UmVwbHlQcmlvcml0eVBvbGljeSAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxNZXNz
YWdpbmc6OlJlcGx5UHJpb3JpdHlQb2xpY3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMg
Mzg1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01l
c3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVxdWVzdFN0YXJ0VGltZVBvbGljeV9wdHIK
dGFvX01lc3NhZ2luZ19SZXF1ZXN0U3RhcnRUaW1lUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBNZXNz
YWdpbmc6OlJlcXVlc3RTdGFydFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn
aW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZv
aWQKdGFvX01lc3NhZ2luZ19SZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3JlbGVhc2UgKAogICAgTWVz
c2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVh
c2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0cgp0
YW9fTWVzc2FnaW5nX1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsK
ICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfbmlsICgpOwp9Cgpp
bmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5X3B0cgp0YW9fTWVzc2FnaW5n
X1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp
CnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0U3RhcnRUaW1lUG9saWN5OjpfbmFycm93IChw
LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl
Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RTdGFydFRpbWVQb2xpY3lfdXBjYXN0ICgKICAgIHZv
aWQgKnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVxdWVzdFN0YXJ0VGltZVBvbGljeSAqKnRtcCA9
CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdpbmc6OlJlcXVlc3RTdGFydFRpbWVQb2xpY3kgKio+IChz
cmMpOwogIHJldHVybiAqdG1wOwp9CiMgNDM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVx
dWVzdEVuZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVxdWVzdEVuZFRpbWVQb2xpY3lf
ZHVwbGljYXRlICgKICAgIE1lc3NhZ2luZzo6UmVxdWVzdEVuZFRpbWVQb2xpY3lfcHRyIHAKICAp
CnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBvbGljeTo6X2R1cGxpY2F0ZSAo
cCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUmVxdWVzdEVuZFRpbWVQb2xpY3lfcmVs
ZWFzZSAoCiAgICBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAg
Q09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBv
bGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZXF1ZXN0RW5kVGltZVBvbGljeV9uaWwgKAogICAgdm9p
ZAogICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5OjpfbmlsICgp
Owp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXF1ZXN0RW5kVGltZVBvbGljeV9wdHIKdGFvX01lc3Nh
Z2luZ19SZXF1ZXN0RW5kVGltZVBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwK
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQog
ICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5OjpfbmFycm93IChw
LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmpl
Y3QgKgp0YW9fTWVzc2FnaW5nX1JlcXVlc3RFbmRUaW1lUG9saWN5X3VwY2FzdCAoCiAgICB2b2lk
ICpzcmMKICApCnsKICBNZXNzYWdpbmc6OlJlcXVlc3RFbmRUaW1lUG9saWN5ICoqdG1wID0KICAg
IHN0YXRpY19jYXN0PE1lc3NhZ2luZzo6UmVxdWVzdEVuZFRpbWVQb2xpY3kgKio+IChzcmMpOwog
IHJldHVybiAqdG1wOwp9CiMgNDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlTdGFy
dFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVwbHlTdGFydFRpbWVQb2xpY3lfZHVwbGlj
YXRlICgKICAgIE1lc3NhZ2luZzo6UmVwbHlTdGFydFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICBy
ZXR1cm4gTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0K
CmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUmVwbHlTdGFydFRpbWVQb2xpY3lfcmVsZWFzZSAo
CiAgICBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6
OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeV9w
dHIKdGFvX01lc3NhZ2luZ19SZXBseVN0YXJ0VGltZVBvbGljeV9uaWwgKAogICAgdm9pZAogICkK
ewogIHJldHVybiBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5OjpfbmlsICgpOwp9Cgpp
bmxpbmUgTWVzc2FnaW5nOjpSZXBseVN0YXJ0VGltZVBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19S
ZXBseVN0YXJ0VGltZVBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewog
IHJldHVybiBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5OjpfbmFycm93IChwLCBfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0
YW9fTWVzc2FnaW5nX1JlcGx5U3RhcnRUaW1lUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMK
ICApCnsKICBNZXNzYWdpbmc6OlJlcGx5U3RhcnRUaW1lUG9saWN5ICoqdG1wID0KICAgIHN0YXRp
Y19jYXN0PE1lc3NhZ2luZzo6UmVwbHlTdGFydFRpbWVQb2xpY3kgKio+IChzcmMpOwogIHJldHVy
biAqdG1wOwp9CiMgNTQ3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3NhZ2luZzo6UmVwbHlFbmRUaW1lUG9s
aWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGljeV9kdXBsaWNhdGUgKAogICAg
TWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn
aW5nOjpSZXBseUVuZFRpbWVQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0
YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6
UmVwbHlFbmRUaW1lUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9Cgpp
bmxpbmUgTWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVw
bHlFbmRUaW1lUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6
UmVwbHlFbmRUaW1lUG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZXBseUVu
ZFRpbWVQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVwbHlFbmRUaW1lUG9saWN5X25hcnJvdyAo
CiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVwbHlFbmRU
aW1lUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK
fQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlcGx5RW5kVGltZVBvbGlj
eV91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQ
b2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5nOjpSZXBseUVuZFRpbWVQb2xp
Y3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNjAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3Nh
Z2luZzo6UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19SZWxh
dGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X2R1cGxpY2F0ZSAoCiAgICBNZXNzYWdpbmc6OlJlbGF0
aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpS
ZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZv
aWQKdGFvX01lc3NhZ2luZ19SZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3JlbGVhc2UgKAog
ICAgTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5X3B0ciBwCiAgKQp7CiAg
Q09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RU
aW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xp
Y3lfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gTWVzc2FnaW5nOjpSZWxhdGl2ZVJlcXVl
c3RUaW1lb3V0UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxhdGl2ZVJl
cXVlc3RUaW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVv
dXRQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gTWVz
c2FnaW5nOjpSZWxhdGl2ZVJlcXVlc3RUaW1lb3V0UG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9f
TWVzc2FnaW5nX1JlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQg
KnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVsYXRpdmVSZXF1ZXN0VGltZW91dFBvbGljeSAqKnRt
cCA9CiAgICBzdGF0aWNfY2FzdDxNZXNzYWdpbmc6OlJlbGF0aXZlUmVxdWVzdFRpbWVvdXRQb2xp
Y3kgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgNjU1ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lIE1lc3Nh
Z2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0cgp0YW9fTWVzc2FnaW5nX1Jl
bGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpS
ZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gTWVzc2Fn
aW5nOjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9Cgpp
bmxpbmUgdm9pZAp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUm91bmR0cmlwVGltZW91dFBvbGljeV9y
ZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X3B0
ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpSZWxh
dGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdfUmVsYXRpdmVSb3Vu
ZHRyaXBUaW1lb3V0UG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2lu
Zzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgTWVz
c2FnaW5nOjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3lfcHRyCnRhb19NZXNzYWdpbmdf
UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0
ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UmVsYXRpdmVSb3VuZHRyaXBUaW1lb3V0UG9s
aWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5s
aW5lIENPUkJBOjpPYmplY3QgKgp0YW9fTWVzc2FnaW5nX1JlbGF0aXZlUm91bmR0cmlwVGltZW91
dFBvbGljeV91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgTWVzc2FnaW5nOjpSZWxhdGl2
ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2FnaW5n
OjpSZWxhdGl2ZVJvdW5kdHJpcFRpbWVvdXRQb2xpY3kgKio+IChzcmMpOwogIHJldHVybiAqdG1w
Owp9CiMgNzA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6
OlJvdXRpbmdUeXBlUmFuZ2VfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpNZXNz
YWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAoUm91dGlu
Z1R5cGVSYW5nZSAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpSb3V0aW5n
VHlwZVJhbmdlX3Zhcjo6Um91dGluZ1R5cGVSYW5nZV92YXIgKGNvbnN0IDo6TWVzc2FnaW5nOjpS
b3V0aW5nVHlwZVJhbmdlX3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRo
aXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKCpwLnB0cl8pOyB9
IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJl
dHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGlu
ZQpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAo
Y29uc3QgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJnApCnsKICBkbyB7IHRyeSB7IHRo
aXMtPnB0cl8gPSBuZXcgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKHApOyB9IGNhdGNo
IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg
fSB9IHdoaWxlICgwKTsKfQoKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6
On5Sb3V0aW5nVHlwZVJhbmdlX3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAmCk1lc3NhZ2luZzo6Um91dGlu
Z1R5cGVSYW5nZV92YXI6Om9wZXJhdG9yPSAoUm91dGluZ1R5cGVSYW5nZSAqcCkKewogIGRlbGV0
ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3ZhciAmCk1lc3NhZ2luZzo6Um91dGluZ1R5
cGVSYW5nZV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFu
Z2VfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0g
MCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMt
PnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFJvdXRp
bmdUeXBlUmFuZ2UgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBSb3V0aW5nVHlwZVJhbmdl
ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBSb3V0aW5nVHlwZVJhbmdlICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAg
ICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0g
dG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBNZXNzYWdpbmc6OlJvdXRpbmdU
eXBlUmFuZ2VfdmFyICYKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3Zhcjo6b3BlcmF0b3I9
IChjb25zdCA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmcCkKewogIGlmICh0aGlzLT5w
dHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlz
LT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlIChwKTsgfSBjYXRjaCAo
c3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm4gKnRo
aXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6
TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICoKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdl
X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKgpNZXNzYWdpbmc6OlJvdXRpbmdU
eXBlUmFuZ2VfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K
CmlubGluZQpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjpvcGVyYXRvciBjb25zdCA6
Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6Om9wZXJhdG9y
IDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgppbmxpbmUKTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlX3Zhcjo6b3BlcmF0b3IgOjpN
ZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCmlubGluZSBjb25zdCA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmCk1lc3Nh
Z2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgJgpNZXNz
YWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2VfdmFyOjppbm91dCAodm9pZCkKewogIHJldHVybiAqdGhp
cy0+cHRyXzsKfQoKCmlubGluZSA6Ok1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmCk1lc3Nh
Z2luZzo6Um91dGluZ1R5cGVSYW5nZV92YXI6Om91dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlCk1lc3NhZ2luZzo6
Um91dGluZ1R5cGVSYW5nZV92YXI6Ol9yZXRuICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlJvdXRpbmdUeXBlUmFuZ2UgKgpNZXNzYWdpbmc6OlJv
dXRpbmdUeXBlUmFuZ2VfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKCgoKCmlubGluZSBNZXNzYWdpbmc6OlJvdXRpbmdQb2xpY3lfcHRyCnRhb19NZXNzYWdp
bmdfUm91dGluZ1BvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpSb3V0aW5nUG9saWN5
X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeTo6X2R1cGxpY2F0
ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUm91dGluZ1BvbGljeV9yZWxlYXNl
ICgKICAgIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxl
YXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeV9wdHIKdGFvX01lc3Nh
Z2luZ19Sb3V0aW5nUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2lu
Zzo6Um91dGluZ1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6Um91dGluZ1Bv
bGljeV9wdHIKdGFvX01lc3NhZ2luZ19Sb3V0aW5nUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6
T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6Um91dGluZ1BvbGljeTo6X25hcnJv
dyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6
T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19Sb3V0aW5nUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpz
cmMKICApCnsKICBNZXNzYWdpbmc6OlJvdXRpbmdQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nh
c3Q8TWVzc2FnaW5nOjpSb3V0aW5nUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQoj
IDkwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9N
ZXNzYWdpbmdDLmkiCmlubGluZSBNZXNzYWdpbmc6Ok1heEhvcHNQb2xpY3lfcHRyCnRhb19NZXNz
YWdpbmdfTWF4SG9wc1BvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpNYXhIb3BzUG9s
aWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeTo6X2R1cGxp
Y2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfTWF4SG9wc1BvbGljeV9yZWxl
YXNlICgKICAgIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpy
ZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeV9wdHIKdGFvX01l
c3NhZ2luZ19NYXhIb3BzUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3Nh
Z2luZzo6TWF4SG9wc1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6TWF4SG9w
c1BvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19NYXhIb3BzUG9saWN5X25hcnJvdyAoCiAgICBDT1JC
QTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6TWF4SG9wc1BvbGljeTo6X25h
cnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JC
QTo6T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19NYXhIb3BzUG9saWN5X3VwY2FzdCAoCiAgICB2b2lk
ICpzcmMKICApCnsKICBNZXNzYWdpbmc6Ok1heEhvcHNQb2xpY3kgKip0bXAgPQogICAgc3RhdGlj
X2Nhc3Q8TWVzc2FnaW5nOjpNYXhIb3BzUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK
fQojIDk2MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9NZXNzYWdpbmdDLmkiCmlubGluZSBNZXNzYWdpbmc6OlF1ZXVlT3JkZXJQb2xpY3lfcHRyCnRh
b19NZXNzYWdpbmdfUXVldWVPcmRlclBvbGljeV9kdXBsaWNhdGUgKAogICAgTWVzc2FnaW5nOjpR
dWV1ZU9yZGVyUG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRl
clBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19NZXNzYWdpbmdfUXVl
dWVPcmRlclBvbGljeV9yZWxlYXNlICgKICAgIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeV9w
dHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UXVl
dWVPcmRlclBvbGljeV9wdHIKdGFvX01lc3NhZ2luZ19RdWV1ZU9yZGVyUG9saWN5X25pbCAoCiAg
ICB2b2lkCiAgKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeTo6X25pbCAo
KTsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeV9wdHIKdGFvX01lc3NhZ2lu
Z19RdWV1ZU9yZGVyUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAg
cmV0dXJuIE1lc3NhZ2luZzo6UXVldWVPcmRlclBvbGljeTo6X25hcnJvdyAocCwgX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX01l
c3NhZ2luZ19RdWV1ZU9yZGVyUG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBN
ZXNzYWdpbmc6OlF1ZXVlT3JkZXJQb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8TWVzc2Fn
aW5nOjpRdWV1ZU9yZGVyUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQojIDEwMTQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2Fn
aW5nQy5pIgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6OlBvbGljeVZhbHVlX3Zh
ciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92
YXI6OlBvbGljeVZhbHVlX3ZhciAoUG9saWN5VmFsdWUgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5s
aW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpQb2xpY3lWYWx1ZV92YXIgKGNvbnN0IDo6
TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0
cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAoKnAucHRyXyk7
IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsg
cmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9Cgppbmxp
bmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6On5Qb2xpY3lWYWx1ZV92YXIgKHZvaWQpCnsK
ICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFy
ICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yPSAoUG9saWN5VmFsdWUgKnAp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyICYKTWVzc2FnaW5nOjpQb2xp
Y3lWYWx1ZV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zh
ciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAg
ICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJf
ID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBQb2xpY3lWYWx1
ZSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFBvbGljeVZhbHVlICgqcC5wdHJfKTsKCiAg
ICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBQ
b2xpY3lWYWx1ZSAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRo
aXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBk
ZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4g
KnRoaXM7Cn0KCmlubGluZSBjb25zdCA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKgpNZXNzYWdp
bmc6OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlICoKTWVzc2FnaW5n
OjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpvcGVyYXRvciBjb25zdCA6
Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87
Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdp
bmc6OlBvbGljeVZhbHVlICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKTWVz
c2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Om9wZXJhdG9yIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1
ZSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpNZXNzYWdpbmc6
OlBvbGljeVZhbHVlX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlIComKCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpNZXNzYWdpbmc6OlBvbGlj
eVZhbHVlICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6OmluICh2b2lkKSBjb25zdAp7CiAg
cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYK
TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV92YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlz
LT5wdHJfOwp9CgoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqJgpNZXNzYWdpbmc6
OlBvbGljeVZhbHVlX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhp
cy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6
UG9saWN5VmFsdWUgKgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX3Zhcjo6X3JldG4gKHZvaWQpCnsK
ICA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy
XyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAq
Ck1lc3NhZ2luZzo6UG9saWN5VmFsdWVfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX291dDo6UG9s
aWN5VmFsdWVfb3V0ICg6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiZwKQogIDogcHRyXyAocCkK
ewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6
OlBvbGljeVZhbHVlX291dCAoUG9saWN5VmFsdWVfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lCk1lc3Nh
Z2luZzo6UG9saWN5VmFsdWVfb3V0OjpQb2xpY3lWYWx1ZV9vdXQgKGNvbnN0IDo6TWVzc2FnaW5n
OjpQb2xpY3lWYWx1ZV9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PFBvbGljeVZhbHVlX291
dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0ICYKTWVz
c2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpNZXNzYWdpbmc6OlBv
bGljeVZhbHVlX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFBvbGljeVZhbHVl
X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9s
aWN5VmFsdWVfb3V0ICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZV9vdXQ6Om9wZXJhdG9yPSAoUG9s
aWN5VmFsdWUgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu
ZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlX291dDo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGlj
eVZhbHVlIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6
OlBvbGljeVZhbHVlIComCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0OjpwdHIgKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAq
Ck1lc3NhZ2luZzo6UG9saWN5VmFsdWVfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KIyAxMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKICBpbmxpbmUgTWVzc2FnaW5nOjpQb2xpY3lW
YWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9s
aWN5VmFsdWVTZXE6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCiAgewogICAgTWVzc2Fn
aW5nOjpQb2xpY3lWYWx1ZSAqcmV0dmFsID0gMDsKICAgIGRvIHsgdHJ5IHsgcmV0dmFsID0gbmV3
IE1lc3NhZ2luZzo6UG9saWN5VmFsdWVbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7CiAg
ICByZXR1cm4gcmV0dmFsOwogIH0KCiAgaW5saW5lIHZvaWQgTWVzc2FnaW5nOjpfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXE6OmZyZWVidWYgKE1lc3NhZ2lu
Zzo6UG9saWN5VmFsdWUgKmJ1ZmZlcikKCiAgewogICAgZGVsZXRlIFtdIGJ1ZmZlcjsKICB9Cgog
IGlubGluZQogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1Bv
bGljeVZhbHVlU2VxOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFs
dWVTZXEgKHZvaWQpCiAgewogIH0KCiAgaW5saW5lCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVl
bmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgICA6
IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjphbGxvY2J1ZiAobWF4aW11bSkpCiAgewog
IH0KCiAgaW5saW5lCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp
bmdfUG9saWN5VmFsdWVTZXE6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xp
Y3lWYWx1ZVNlcSAoQ09SQkE6OlVMb25nIG1heGltdW0sCiAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqZGF0YSwKICAgIENPUkJBOjpCb29sZWFuIHJl
bGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwg
ZGF0YSwgcmVsZWFzZSkKICB7CiAgfQoKICBpbmxpbmUKICBNZXNzYWdpbmc6Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6X1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxIChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEgJnJocykKCiAgICA6IFRBT19VbmJvdW5kZWRf
QmFzZV9TZXF1ZW5jZSAocmhzKQogIHsKICAgIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogICAgewog
ICAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICp0bXAxID0gX1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwog
ICAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChD
T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICAgICAgdG1wMVtp
XSA9IHRtcDJbaV07CgogICAgICB0aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UK
ICAgIHsKICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgTWVzc2Fn
aW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdfUG9saWN5VmFsdWVTZXEgJgog
IE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVl
U2VxOjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Q
b2xpY3lWYWx1ZVNlcSAmcmhzKQoKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICByZXR1
cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBpZiAodGhpcy0+
bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICAgIHsKCiAgICAgICAgTWVzc2FnaW5nOjpQb2xp
Y3lWYWx1ZSAqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlICo+
ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdp
bmdfUG9saWN5VmFsdWVTZXE6OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6YWxsb2Ni
dWYgKHJocy5tYXhpbXVtXyk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgdGhpcy0+YnVm
ZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6
YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogICAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNl
OjpvcGVyYXRvcj0gKHJocyk7CgogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqdG1wMSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAodGhpcy0+YnVmZmVyXyk7
CiAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICogY29uc3QgdG1wMiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAocmhzLmJ1ZmZlcl8pOwoKICAgIGZvciAoQ09S
QkE6OlVMb25nIGkgPSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgICB0bXAxW2ldID0g
dG1wMltpXTsKCiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCiAgaW5saW5lIE1lc3NhZ2luZzo6UG9s
aWN5VmFsdWUgJgogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5n
X1BvbGljeVZhbHVlU2VxOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaSkKCiAgewogICAgZG8g
eyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjps
YXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNl
ICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIiwgMTMwMiwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18t
PnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNr
ICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAl
bCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwg
LTEpOyB9IH0gd2hpbGUgKDApOwogICAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSogdG1wID0gcmVp
bnRlcnByZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlKj4gKHRoaXMtPmJ1ZmZlcl8pOwog
ICAgcmV0dXJuIHRtcFtpXTsKICB9CgogIGlubGluZSBjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZh
bHVlICYKICBNZXNzYWdpbmc6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xp
Y3lWYWx1ZVNlcTo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpIGNvbnN0CgogIHsKICAgIGRv
IHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6
bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5j
ZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIsIDEzMTEsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f
LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj
ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg
JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIs
IC0xKTsgfSB9IHdoaWxlICgwKTsKICAgIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKiBjb25zdCB0
bXAgPSByZWludGVycHJldF9jYXN0PE1lc3NhZ2luZzo6UG9saWN5VmFsdWUqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgICByZXR1cm4gdG1wW2ldOwogIH0KCgoKICBpbmxpbmUgTWVzc2FnaW5nOjpQb2xp
Y3lWYWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdf
UG9saWN5VmFsdWVTZXE6OmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbikKICB7CiAg
ICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICpyZXN1bHQgPSAwOwogICAgaWYgKG9ycGhhbiA9PSAw
KQogICAgewoKICAgICAgaWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgICAgewogICAgICAgIHJl
c3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX01lc3NhZ2luZ19Qb2xpY3lWYWx1ZVNlcTo6
YWxsb2NidWYgKHRoaXMtPmxlbmd0aF8pOwogICAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7
CiAgICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewog
ICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSo+
ICh0aGlzLT5idWZmZXJfKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAo
dGhpcy0+cmVsZWFzZV8gIT0gMCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnBy
ZXRfY2FzdDxNZXNzYWdpbmc6OlBvbGljeVZhbHVlKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICAg
IHRoaXMtPm1heGltdW1fID0gMDsKICAgICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgICB0
aGlzLT5idWZmZXJfID0gMDsKICAgICAgICB0aGlzLT5yZWxlYXNlXyA9IDA7CiAgICAgIH0KICAg
IH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbmxpbmUgY29uc3QgTWVzc2FnaW5nOjpQb2xp
Y3lWYWx1ZSAqCiAgTWVzc2FnaW5nOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9NZXNzYWdpbmdf
UG9saWN5VmFsdWVTZXE6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqPiAodGhpcy0+YnVm
ZmVyXyk7CiAgfQoKICBpbmxpbmUgdm9pZAogIE1lc3NhZ2luZzo6X1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2VxOjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4
LAogIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAqZGF0YSwK
ICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogIHsKICAgIHRoaXMtPm1heGltdW1fID0gbWF4Owog
ICAgdGhpcy0+bGVuZ3RoXyA9IGxlbmd0aDsKICAgIGlmICh0aGlzLT5idWZmZXJfICYmIHRoaXMt
PnJlbGVhc2VfID09IDEpCiAgICB7CiAgICAgIE1lc3NhZ2luZzo6UG9saWN5VmFsdWUgKnRtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSo+ICh0aGlzLT5idWZmZXJf
KTsKICAgICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfTWVzc2FnaW5nX1BvbGljeVZhbHVlU2Vx
OjpmcmVlYnVmICh0bXApOwogICAgfQogICAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgICB0aGlz
LT5yZWxlYXNlXyA9IHJlbGVhc2U7CiAgfQojIDEzODcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vTWVzc2FnaW5nQy5pIgppbmxpbmUKTWVzc2FnaW5n
OjpQb2xpY3lWYWx1ZVNlcV92YXI6OlBvbGljeVZhbHVlU2VxX3ZhciAodm9pZCkKICA6IHB0cl8g
KDApCnt9CgppbmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6OlBvbGljeVZhbHVl
U2VxX3ZhciAoUG9saWN5VmFsdWVTZXEgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCk1lc3Nh
Z2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpQb2xpY3lWYWx1ZVNlcV92YXIgKGNvbnN0IDo6TWVz
c2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0
cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAoKnAucHRy
Xyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAx
MjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8gPSAwOwp9Cgpp
bmxpbmUKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6On5Qb2xpY3lWYWx1ZVNlcV92YXIg
KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6UG9saWN5
VmFsdWVTZXFfdmFyICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yPSAo
UG9saWN5VmFsdWVTZXEgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0g
cDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFf
dmFyICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpN
ZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAg
ewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMt
PnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBQb2xpY3lWYWx1ZVNlcSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAg
bmV3IFBvbGljeVZhbHVlU2VxICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBQb2xpY3lWYWx1ZVNlcSAqdG1wID0gZGVl
cF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAg
ICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25z
dCA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEgKgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx
X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxICoKTWVzc2FnaW5nOjpQb2xpY3lWYWx1
ZVNlcV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5s
aW5lCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvciBjb25zdCA6Ok1lc3Nh
Z2luZzo6UG9saWN5VmFsdWVTZXEgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdp
bmc6OlBvbGljeVZhbHVlU2VxICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUK
TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Om9wZXJhdG9yIDo6TWVzc2FnaW5nOjpQb2xp
Y3lWYWx1ZVNlcSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpN
ZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGlj
eVZhbHVlU2VxIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5n
OjpQb2xpY3lWYWx1ZSAmCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvcltd
IChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAo
aW5kZXgpOwp9CgppbmxpbmUgY29uc3QgTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZSAmCk1lc3NhZ2lu
Zzo6UG9saWN5VmFsdWVTZXFfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpIGNv
bnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICY+
ICh0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUgY29uc3QgOjpNZXNz
YWdpbmc6OlBvbGljeVZhbHVlU2VxICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Omlu
ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdp
bmc6OlBvbGljeVZhbHVlU2VxICYKTWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV92YXI6Omlub3V0
ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6TWVzc2FnaW5nOjpQ
b2xpY3lWYWx1ZVNlcSAqJgpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX3Zhcjo6b3V0ICh2b2lk
KQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXEgKgpNZXNzYWdpbmc6
OlBvbGljeVZhbHVlU2VxX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6Ok1lc3NhZ2luZzo6UG9saWN5
VmFsdWVTZXEgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRt
cDsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAqCk1lc3NhZ2luZzo6UG9s
aWN5VmFsdWVTZXFfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKCgoKCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX291dDo6UG9saWN5VmFsdWVT
ZXFfb3V0IChQb2xpY3lWYWx1ZVNlcSAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9
IDA7Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxX291dDo6UG9saWN5VmFsdWVT
ZXFfb3V0IChQb2xpY3lWYWx1ZVNlcV92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRl
bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpQ
b2xpY3lWYWx1ZVNlcV9vdXQ6OlBvbGljeVZhbHVlU2VxX291dCAoY29uc3QgOjpNZXNzYWdpbmc6
OlBvbGljeVZhbHVlU2VxX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8UG9saWN5VmFsdWVT
ZXFfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx
X291dCAmCk1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6
TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3Rf
Y2FzdDxQb2xpY3lWYWx1ZVNlcV9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlu
bGluZSA6Ok1lc3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0ICYKTWVzc2FnaW5nOjpQb2xpY3lW
YWx1ZVNlcV9vdXQ6Om9wZXJhdG9yPSAoUG9saWN5VmFsdWVTZXEgKnApCnsKICB0aGlzLT5wdHJf
ID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2Vx
X291dDo6b3BlcmF0b3IgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxIComKCkKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxIComCk1l
c3NhZ2luZzo6UG9saWN5VmFsdWVTZXFfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKaW5saW5lIDo6TWVzc2FnaW5nOjpQb2xpY3lWYWx1ZVNlcSAqCk1lc3NhZ2luZzo6
UG9saWN5VmFsdWVTZXFfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KCmlubGluZSBNZXNzYWdpbmc6OlBvbGljeVZhbHVlICYKTWVzc2FnaW5nOjpQb2xpY3lW
YWx1ZVNlcV9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0
aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCgoKCgoKaW5saW5lCk1lc3NhZ2luZzo6
RXhjZXB0aW9uSG9sZGVyOjpFeGNlcHRpb25Ib2xkZXIgKCkKe30KCmlubGluZQpNZXNzYWdpbmc6
OkV4Y2VwdGlvbkhvbGRlcjo6fkV4Y2VwdGlvbkhvbGRlciAoKQp7fQoKaW5saW5lIGNvbnN0IGNo
YXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX29idl9zdGF0aWNfcmVwb3NpdG9y
eV9pZCAoKQp7CiAgcmV0dXJuICJJREw6b21nLm9yZy9NZXNzYWdpbmcvRXhjZXB0aW9uSG9sZGVy
OjEuMCI7Cn0KIyAxNjIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy
X3Zhcjo6RXhjZXB0aW9uSG9sZGVyX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUK
TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfdmFyOjpFeGNlcHRpb25Ib2xkZXJfdmFyIChFeGNl
cHRpb25Ib2xkZXIqIHApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0
aW9uSG9sZGVyX3Zhcjo6RXhjZXB0aW9uSG9sZGVyX3ZhciAoY29uc3QgRXhjZXB0aW9uSG9sZGVy
KiBwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xkZXIqPiAocCkpCnt9Cgppbmxp
bmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy
X3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpN
ZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXI6OkV4Y2VwdGlvbkhvbGRlcl92YXIgKGNvbnN0
IEV4Y2VwdGlvbkhvbGRlcl92YXIgJnApCnsKICBDT1JCQTo6YWRkX3JlZiAocC5wdHIgKCkpOwog
IHRoaXMtPnB0cl8gPSBwLnB0ciAoKTsKfQoKaW5saW5lCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9s
ZGVyX3Zhcjo6fkV4Y2VwdGlvbkhvbGRlcl92YXIgKHZvaWQpCnsKICBDT1JCQTo6cmVtb3ZlX3Jl
ZiAodGhpcy0+cHRyXyk7Cn0KCmlubGluZSBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXIg
JgpNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl92YXI6Om9wZXJhdG9yPSAoRXhjZXB0aW9uSG9s
ZGVyKiBwKQp7CiAgQ09SQkE6OnJlbW92ZV9yZWYgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8g
PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVy
X3ZhciAmCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6b3BlcmF0b3I9IChjb25zdCBF
eGNlcHRpb25Ib2xkZXJfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgewogICAgQ09SQkE6
OnJlbW92ZV9yZWYgKHRoaXMtPnB0cl8pOwogICAgRXhjZXB0aW9uSG9sZGVyKiB0bXAgPSBwLnB0
ciAoKTsKICAgIENPUkJBOjphZGRfcmVmICh0bXApOwogICAgdGhpcy0+cHRyXyA9IHRtcDsKICB9
CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfdmFy
OjpvcGVyYXRvciBjb25zdCBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlciogKCkgY29uc3QKewog
IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJf
dmFyOjpvcGVyYXRvciBNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlciogKCkKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2lu
Zzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3Nh
Z2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyKiAmCk1lc3NhZ2lu
Zzo6RXhjZXB0aW9uSG9sZGVyX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lIE1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyKiAmCk1lc3NhZ2luZzo6RXhj
ZXB0aW9uSG9sZGVyX3Zhcjo6b3V0ICh2b2lkKQp7CiAgQ09SQkE6OnJlbW92ZV9yZWYgKHRoaXMt
PnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX3Zh
cjo6X3JldG4gKHZvaWQpCnsKCiAgRXhjZXB0aW9uSG9sZGVyKiB0bXAgPSB0aGlzLT5wdHJfOwog
IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KIyAxNzM0ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaSIKaW5saW5lCk1l
c3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6RXhjZXB0aW9uSG9sZGVyX291dCAoRXhjZXB0
aW9uSG9sZGVyKiAmcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l
Ck1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6RXhjZXB0aW9uSG9sZGVyX291dCAoRXhj
ZXB0aW9uSG9sZGVyX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgQ09SQkE6OnJlbW92
ZV9yZWYgKHRoaXMtPnB0cl8pOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKTWVzc2FnaW5n
OjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpFeGNlcHRpb25Ib2xkZXJfb3V0IChjb25zdCBFeGNlcHRp
b25Ib2xkZXJfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xkZXJfb3V0
Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0ICYK
TWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IEV4Y2VwdGlv
bkhvbGRlcl9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxFeGNlcHRpb25Ib2xk
ZXJfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpF
eGNlcHRpb25Ib2xkZXJfb3V0ICYKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVy
YXRvcj0gKGNvbnN0IEV4Y2VwdGlvbkhvbGRlcl92YXIgJnApCnsKICBFeGNlcHRpb25Ib2xkZXIq
IHRtcCA9IHAucHRyICgpOwogIENPUkJBOjphZGRfcmVmICh0bXApOwogIHRoaXMtPnB0cl8gPSB0
bXA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJf
b3V0ICYKTWVzc2FnaW5nOjpFeGNlcHRpb25Ib2xkZXJfb3V0OjpvcGVyYXRvcj0gKEV4Y2VwdGlv
bkhvbGRlciogcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
Ck1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6b3BlcmF0b3IgTWVzc2FnaW5nOjpFeGNl
cHRpb25Ib2xkZXIqICYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBNZXNzYWdp
bmc6OkV4Y2VwdGlvbkhvbGRlciogJgpNZXNzYWdpbmc6OkV4Y2VwdGlvbkhvbGRlcl9vdXQ6OnB0
ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgTWVzc2FnaW5nOjpFeGNl
cHRpb25Ib2xkZXIqCk1lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyX291dDo6b3BlcmF0b3ItPiAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMTgwMiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmkiCmlubGluZSBNZXNz
YWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIKdGFvX01lc3NhZ2luZ19SZXBseUhhbmRsZXJfZHVwbGlj
YXRlICgKICAgIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyX3B0ciBwCiAgKQp7CiAgcmV0dXJuIE1l
c3NhZ2luZzo6UmVwbHlIYW5kbGVyOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFv
X01lc3NhZ2luZ19SZXBseUhhbmRsZXJfcmVsZWFzZSAoCiAgICBNZXNzYWdpbmc6OlJlcGx5SGFu
ZGxlcl9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIE1lc3NhZ2lu
Zzo6UmVwbHlIYW5kbGVyX3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5SGFuZGxlcl9uaWwgKAogICAg
dm9pZAogICkKewogIHJldHVybiBNZXNzYWdpbmc6OlJlcGx5SGFuZGxlcjo6X25pbCAoKTsKfQoK
aW5saW5lIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyX3B0cgp0YW9fTWVzc2FnaW5nX1JlcGx5SGFu
ZGxlcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBNZXNzYWdp
bmc6OlJlcGx5SGFuZGxlcjo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX01lc3NhZ2luZ19SZXBseUhhbmRs
ZXJfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVy
ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PE1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyICoqPiAoc3Jj
KTsKICByZXR1cm4gKnRtcDsKfQoKaW5saW5lCk1lc3NhZ2luZzo6UmVwbHlIYW5kbGVyOjpSZXBs
eUhhbmRsZXIgKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29sZWFuIF90YW9f
Y29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudAogICkKICA6
IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQpCnsKICB0aGlz
LT5NZXNzYWdpbmdfUmVwbHlIYW5kbGVyX3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0
ZWQpOwp9CiMgMTg2MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9NZXNzYWdpbmdDLmkiCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChU
QU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNzYWdpbmc6OlByaW9yaXR5UmFuZ2UgJl90YW9f
YWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubWluKSAmJgog
ICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUubWF4KQogICkKICAgIHJldHVybiAxOwogIGVsc2UK
ICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19J
bnB1dENEUiAmc3RybSwgTWVzc2FnaW5nOjpQcmlvcml0eVJhbmdlICZfdGFvX2FnZ3JlZ2F0ZSkK
ewogIGlmICgKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLm1pbikgJiYKICAgIChzdHJtID4+
IF90YW9fYWdncmVnYXRlLm1heCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4g
MDsKCn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE
UiAmc3RybSwgY29uc3QgTWVzc2FnaW5nOjpSb3V0aW5nVHlwZVJhbmdlICZfdGFvX2FnZ3JlZ2F0
ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLm1pbikgJiYKICAgIChzdHJt
IDw8IF90YW9fYWdncmVnYXRlLm1heCkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1
cm4gMDsKCn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg
JnN0cm0sIE1lc3NhZ2luZzo6Um91dGluZ1R5cGVSYW5nZSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBp
ZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5taW4pICYmCiAgICAoc3RybSA+PiBfdGFv
X2FnZ3JlZ2F0ZS5tYXgpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9
CgoKCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwK
ICAgIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5VmFsdWU6Ol90YW9fc2VxX09jdGV0ICYKICApOwpD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgTWVzc2Fn
aW5nOjpQb2xpY3lWYWx1ZTo6X3Rhb19zZXFfT2N0ZXQgJgogICk7CgoKCmlubGluZSBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNzYWdpbmc6
OlBvbGljeVZhbHVlICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9f
YWdncmVnYXRlLnB0eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUucHZhbHVlKQog
ICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgTWVzc2FnaW5nOjpQb2xpY3lW
YWx1ZSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0
ZS5wdHlwZSkgJiYKICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLnB2YWx1ZSkKICApCiAgICBy
ZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IE1lc3NhZ2luZzo6UG9saWN5
VmFsdWVTZXEgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0
Q0RSICYsCiAgICBNZXNzYWdpbmc6OlBvbGljeVZhbHVlU2VxICYKICApOwoKCgoKCmlubGluZSBD
T1JCQTo6Qm9vbGVhbgpvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBNZXNz
YWdpbmc6OkV4Y2VwdGlvbkhvbGRlciAqX3Rhb192YWx1ZXR5cGUpCnsKICByZXR1cm4gQ09SQkFf
VmFsdWVCYXNlOjpfdGFvX21hcnNoYWwgKHN0cm0sCiAgICBjb25zdF9jYXN0PE1lc3NhZ2luZzo6
RXhjZXB0aW9uSG9sZGVyKj4gKF90YW9fdmFsdWV0eXBlKSwKICAgIChwdHJfYXJpdGhfdCkgJk1l
c3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfZG93bmNhc3QpOwp9CgppbmxpbmUgQ09SQkE6OkJv
b2xlYW4Kb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBNZXNzYWdpbmc6OkV4Y2VwdGlv
bkhvbGRlciAqJl90YW9fdmFsdWV0eXBlKQp7CiAgcmV0dXJuIE1lc3NhZ2luZzo6RXhjZXB0aW9u
SG9sZGVyOjpfdGFvX3VubWFyc2hhbCAoc3RybSwgX3Rhb192YWx1ZXR5cGUpOwp9CgppbmxpbmUg
Q09SQkE6OkJvb2xlYW4KT0JWX01lc3NhZ2luZzo6RXhjZXB0aW9uSG9sZGVyOjpfdGFvX21hcnNo
YWxfc3RhdGUgKFRBT19PdXRwdXRDRFIgJnN0cm0pCnsKICBpZiAoCiAgICAoc3RybSA8PCBDT1JC
QTo6QW55Ojpmcm9tX2Jvb2xlYW4gKF9wZF9pc19zeXN0ZW1fZXhjZXB0aW9uKSkgJiYKICAgIChz
dHJtIDw8IENPUkJBOjpBbnk6OmZyb21fYm9vbGVhbiAoX3BkX2J5dGVfb3JkZXIpKSAmJgogICAg
KHN0cm0gPDwgX3BkX21hcnNoYWxlZF9leGNlcHRpb24pCiAgKQogICAgcmV0dXJuIDE7CiAgZWxz
ZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4KT0JWX01lc3NhZ2luZzo6
RXhjZXB0aW9uSG9sZGVyOjpfdGFvX3VubWFyc2hhbF9zdGF0ZSAoVEFPX0lucHV0Q0RSICZzdHJt
KQp7CiAgaWYgKAogICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fYm9vbGVhbiAoX3BkX2lzX3N5
c3RlbV9leGNlcHRpb24pKSAmJgogICAgKHN0cm0gPj4gQ09SQkE6OkFueTo6dG9fYm9vbGVhbiAo
X3BkX2J5dGVfb3JkZXIpKSAmJgogICAgKHN0cm0gPj4gX3BkX21hcnNoYWxlZF9leGNlcHRpb24p
CiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgpDT1JCQTo6Qm9vbGVh
bgpvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IE1lc3NhZ2luZzo6
UmVwbHlIYW5kbGVyX3B0cgogICk7CkNPUkJBOjpCb29sZWFuCm9wZXJhdG9yPj4gKAogICAgVEFP
X0lucHV0Q0RSICYsCiAgICBNZXNzYWdpbmc6OlJlcGx5SGFuZGxlcl9wdHIgJgogICk7CiMgMjg2
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNz
YWdpbmdDLmgiIDIKIyAyODcxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL01lc3NhZ2luZ0MuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjg3MiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9NZXNzYWdpbmdDLmgiIDIKIyAzNSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUlu
dGVyY2VwdG9yQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9DdXJyZW50Qy5oIiAxCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vSU9QQy5o
IiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIgMgojIDYxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCm5hbWVz
cGFjZSBQb3J0YWJsZUludGVyY2VwdG9yCnsKCgoKCiAgY2xhc3MgSW50ZXJjZXB0b3I7CiAgdHlw
ZWRlZiBJbnRlcmNlcHRvciAqSW50ZXJjZXB0b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBJbnRlcmNl
cHRvcl92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIEludGVyY2Vw
dG9yX3ZhciAodm9pZCk7CiAgICBJbnRlcmNlcHRvcl92YXIgKEludGVyY2VwdG9yX3B0ciBwKSA6
IHB0cl8gKHApIHt9CiAgICBJbnRlcmNlcHRvcl92YXIgKGNvbnN0IEludGVyY2VwdG9yX3ZhciAm
KTsKICAgIH5JbnRlcmNlcHRvcl92YXIgKHZvaWQpOwoKICAgIEludGVyY2VwdG9yX3ZhciAmb3Bl
cmF0b3I9IChJbnRlcmNlcHRvcl9wdHIpOwogICAgSW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0g
KGNvbnN0IEludGVyY2VwdG9yX3ZhciAmKTsKICAgIEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+
ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBJbnRlcmNlcHRvcl9wdHIgJigpIGNv
bnN0OwogICAgb3BlcmF0b3IgSW50ZXJjZXB0b3JfcHRyICYoKTsKCiAgICBJbnRlcmNlcHRvcl9w
dHIgaW4gKHZvaWQpIGNvbnN0OwogICAgSW50ZXJjZXB0b3JfcHRyICZpbm91dCAodm9pZCk7CiAg
ICBJbnRlcmNlcHRvcl9wdHIgJm91dCAodm9pZCk7CiAgICBJbnRlcmNlcHRvcl9wdHIgX3JldG4g
KHZvaWQpOwogICAgSW50ZXJjZXB0b3JfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0
aWMgSW50ZXJjZXB0b3JfcHRyIGR1cGxpY2F0ZSAoSW50ZXJjZXB0b3JfcHRyKTsKICAgIHN0YXRp
YyB2b2lkIHJlbGVhc2UgKEludGVyY2VwdG9yX3B0cik7CiAgICBzdGF0aWMgSW50ZXJjZXB0b3Jf
cHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgSW50ZXJjZXB0b3JfcHRyIG5hcnJvdyAoQ09SQkE6
Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVj
dCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yX3B0ciBwdHJf
OwoKICAgIEludGVyY2VwdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSW50
ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9Owoj
IDExOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
b3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIEludGVyY2VwdG9yX291dAogIHsKICBwdWJs
aWM6CiAgICBJbnRlcmNlcHRvcl9vdXQgKEludGVyY2VwdG9yX3B0ciAmKTsKICAgIEludGVyY2Vw
dG9yX291dCAoSW50ZXJjZXB0b3JfdmFyICYpOwogICAgSW50ZXJjZXB0b3Jfb3V0IChjb25zdCBJ
bnRlcmNlcHRvcl9vdXQgJik7CiAgICBJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
SW50ZXJjZXB0b3Jfb3V0ICYpOwogICAgSW50ZXJjZXB0b3Jfb3V0ICZvcGVyYXRvcj0gKGNvbnN0
IEludGVyY2VwdG9yX3ZhciAmKTsKICAgIEludGVyY2VwdG9yX291dCAmb3BlcmF0b3I9IChJbnRl
cmNlcHRvcl9wdHIpOwogICAgb3BlcmF0b3IgSW50ZXJjZXB0b3JfcHRyICYoKTsKICAgIEludGVy
Y2VwdG9yX3B0ciAmcHRyICh2b2lkKTsKICAgIEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2
b2lkKTsKCiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDE0MyAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs
ZUludGVyY2VwdG9yQy5oIgpjbGFzcyBJbnRlcmNlcHRvciA6IHB1YmxpYyB2aXJ0dWFsIENPUkJB
X09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJbnRlcmNlcHRvcl9wdHIgX3B0cl90
eXBlOwogICAgdHlwZWRlZiBJbnRlcmNlcHRvcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGlj
IEludGVyY2VwdG9yX3B0ciBfZHVwbGljYXRlIChJbnRlcmNlcHRvcl9wdHIgb2JqKTsKICAgIHN0
YXRpYyBJbnRlcmNlcHRvcl9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwog
ICAgc3RhdGljIEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApOwogICAgc3RhdGljIEludGVyY2VwdG9yX3B0ciBfbmlsICh2b2lkKQogICAg
ICB7CiAgICAgICAgcmV0dXJuIChJbnRlcmNlcHRvcl9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1
YWwgY2hhciAqIG5hbWUgKAoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCgogICAgICApCiAgICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p
ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj
b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90
ZWN0ZWQ6CiAgICBJbnRlcmNlcHRvciAoKTsKCiAgICB2aXJ0dWFsIH5JbnRlcmNlcHRvciAodm9p
ZCk7CiAgcHJpdmF0ZToKICAgIEludGVyY2VwdG9yIChjb25zdCBJbnRlcmNlcHRvciAmKTsKICAg
IHZvaWQgb3BlcmF0b3I9IChjb25zdCBJbnRlcmNlcHRvciAmKTsKICB9OwojIDIwMiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy
Y2VwdG9yQy5oIgogIGNsYXNzIEZvcndhcmRSZXF1ZXN0IDogcHVibGljIENPUkJBOjpVc2VyRXhj
ZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIENPUkJBOjpPYmplY3RfdmFyIGZvcndhcmQ7CiAgICBD
T1JCQTo6Qm9vbGVhbiBwZXJtYW5lbnQ7CgogICAgRm9yd2FyZFJlcXVlc3QgKHZvaWQpOwoKCiAg
ICBGb3J3YXJkUmVxdWVzdCAoY29uc3QgRm9yd2FyZFJlcXVlc3QgJik7CgoKICAgIH5Gb3J3YXJk
UmVxdWVzdCAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZv
aWQqKTsKCiAgICBGb3J3YXJkUmVxdWVzdCAmb3BlcmF0b3I9IChjb25zdCBGb3J3YXJkUmVxdWVz
dCAmKTsKCiAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICB2aXJ0dWFsIHZvaWQg
X3Rhb19lbmNvZGUgKAogICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJgogICAgICApIGNvbnN0OwoKICAgIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAo
CiAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg
ICAgKTsKCiAgICBzdGF0aWMgRm9yd2FyZFJlcXVlc3QgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2Vw
dGlvbiAqKTsKCiAgICBGb3J3YXJkUmVxdWVzdCAoCiAgICAgICAgY29uc3QgQ09SQkE6Ok9iamVj
dF9wdHIgX3Rhb19mb3J3YXJkLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fcGVybWFuZW50
CiAgICAgICk7CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwog
ICAgdmlydHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwoK
ICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRm9yd2FyZFJlcXVlc3Q7CgoKCgogIHR5
cGVkZWYgQ09SQkE6OlNob3J0IFJlcGx5U3RhdHVzOwogIHR5cGVkZWYgQ09SQkE6OlNob3J0X291
dCBSZXBseVN0YXR1c19vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUmVw
bHlTdGF0dXM7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgU1VDQ0VTU0ZVTDsKCiAgZXh0
ZXJuIGNvbnN0IENPUkJBOjpTaG9ydCBTWVNURU1fRVhDRVBUSU9OOwoKICBleHRlcm4gY29uc3Qg
Q09SQkE6OlNob3J0IFVTRVJfRVhDRVBUSU9OOwoKICBleHRlcm4gY29uc3QgQ09SQkE6OlNob3J0
IExPQ0FUSU9OX0ZPUldBUkQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgTE9DQVRJT05f
Rk9SV0FSRF9QRVJNQU5FTlQ7CgogIGV4dGVybiBjb25zdCBDT1JCQTo6U2hvcnQgVFJBTlNQT1JU
X1JFVFJZOwoKICB0eXBlZGVmIENPUkJBOjpVTG9uZyBTbG90SWQ7CiAgdHlwZWRlZiBDT1JCQTo6
VUxvbmdfb3V0IFNsb3RJZF9vdXQ7CiAgICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
U2xvdElkOwoKCgoKCiAgY2xhc3MgSW52YWxpZFNsb3QgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNl
cHRpb24KICB7CiAgcHVibGljOgoKICAgIEludmFsaWRTbG90ICh2b2lkKTsKCgogICAgSW52YWxp
ZFNsb3QgKGNvbnN0IEludmFsaWRTbG90ICYpOwoKCiAgICB+SW52YWxpZFNsb3QgKHZvaWQpOwoK
CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgSW52YWxp
ZFNsb3QgJm9wZXJhdG9yPSAoY29uc3QgSW52YWxpZFNsb3QgJik7CgogICAgdmlydHVhbCB2b2lk
IF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICBU
QU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKSBjb25z
dDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19JbnB1dENEUiAm
LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3RhdGljIEludmFs
aWRTbG90ICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICBzdGF0aWMgQ09S
QkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2Rl
X3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgfTsKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9w
dHIgX3RjX0ludmFsaWRTbG90OwojIDMyMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIEN1cnJl
bnQ7CiAgdHlwZWRlZiBDdXJyZW50ICpDdXJyZW50X3B0cjsKCgoKCgoKCiAgY2xhc3MgQ3VycmVu
dF92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIEN1cnJlbnRfdmFy
ICh2b2lkKTsKICAgIEN1cnJlbnRfdmFyIChDdXJyZW50X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg
ICBDdXJyZW50X3ZhciAoY29uc3QgQ3VycmVudF92YXIgJik7CiAgICB+Q3VycmVudF92YXIgKHZv
aWQpOwoKICAgIEN1cnJlbnRfdmFyICZvcGVyYXRvcj0gKEN1cnJlbnRfcHRyKTsKICAgIEN1cnJl
bnRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9wdHIg
b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgQ3VycmVudF9wdHIg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwoKICAgIEN1cnJlbnRfcHRy
IGluICh2b2lkKSBjb25zdDsKICAgIEN1cnJlbnRfcHRyICZpbm91dCAodm9pZCk7CiAgICBDdXJy
ZW50X3B0ciAmb3V0ICh2b2lkKTsKICAgIEN1cnJlbnRfcHRyIF9yZXRuICh2b2lkKTsKICAgIEN1
cnJlbnRfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgQ3VycmVudF9wdHIgZHVw
bGljYXRlIChDdXJyZW50X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChDdXJyZW50X3B0
cik7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBDdXJyZW50
X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAg
c3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBD
dXJyZW50X3B0ciBwdHJfOwoKICAgIEN1cnJlbnRfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgICBDdXJyZW50X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7
CiAgfTsKIyAzNzIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBDdXJyZW50X291dAogIHsKICBw
dWJsaWM6CiAgICBDdXJyZW50X291dCAoQ3VycmVudF9wdHIgJik7CiAgICBDdXJyZW50X291dCAo
Q3VycmVudF92YXIgJik7CiAgICBDdXJyZW50X291dCAoY29uc3QgQ3VycmVudF9vdXQgJik7CiAg
ICBDdXJyZW50X291dCAmb3BlcmF0b3I9IChjb25zdCBDdXJyZW50X291dCAmKTsKICAgIEN1cnJl
bnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9vdXQg
Jm9wZXJhdG9yPSAoQ3VycmVudF9wdHIpOwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwog
ICAgQ3VycmVudF9wdHIgJnB0ciAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2
b2lkKTsKCiAgcHJpdmF0ZToKICAgIEN1cnJlbnRfcHRyICZwdHJfOwogIH07CiMgMzk2ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50
ZXJjZXB0b3JDLmgiCmNsYXNzIEN1cnJlbnQ6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpDdXJyZW50
CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIEN1cnJlbnRfcHRyIF9wdHJfdHlwZTsKICAgIHR5
cGVkZWYgQ3VycmVudF92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIEN1cnJlbnRfcHRyIF9k
dXBsaWNhdGUgKEN1cnJlbnRfcHRyIG9iaik7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgX25hcnJv
dyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIEN1cnJlbnRfcHRyIF91bmNo
ZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ3VycmVu
dF9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoQ3VycmVudF9wdHIpMDsK
ICAgICAgfQoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIGdldF9zbG90ICgKICAgICAgICBQb3J0
YWJsZUludGVyY2VwdG9yOjpTbG90SWQgaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
LCBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlkU2xvdCApID0gMDsKCgoKCiAgICB2aXJ0dWFs
IHZvaWQgc2V0X3Nsb3QgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNsb3RJZCBpZCwK
ICAgICAgICBjb25zdCBDT1JCQTo6QW55ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludmFsaWRTbG90ICkgPSAwOwoKCgoKICAgIHZp
cnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAg
dmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0
OwoKICBwcm90ZWN0ZWQ6CiAgICBDdXJyZW50ICgpOwoKICAgIHZpcnR1YWwgfkN1cnJlbnQgKHZv
aWQpOwogIHByaXZhdGU6CiAgICBDdXJyZW50IChjb25zdCBDdXJyZW50ICYpOwogICAgdm9pZCBv
cGVyYXRvcj0gKGNvbnN0IEN1cnJlbnQgJik7CiAgfTsKIyA0NjIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIK
ICBjbGFzcyBSZXF1ZXN0SW5mbzsKICB0eXBlZGVmIFJlcXVlc3RJbmZvICpSZXF1ZXN0SW5mb19w
dHI7CgoKCgoKCgogIGNsYXNzIFJlcXVlc3RJbmZvX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIK
ICB7CiAgcHVibGljOgogICAgUmVxdWVzdEluZm9fdmFyICh2b2lkKTsKICAgIFJlcXVlc3RJbmZv
X3ZhciAoUmVxdWVzdEluZm9fcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RJbmZvX3Zh
ciAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAgflJlcXVlc3RJbmZvX3ZhciAodm9pZCk7
CgogICAgUmVxdWVzdEluZm9fdmFyICZvcGVyYXRvcj0gKFJlcXVlc3RJbmZvX3B0cik7CiAgICBS
ZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAg
UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNv
bnN0IFJlcXVlc3RJbmZvX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0SW5mb19w
dHIgJigpOwoKICAgIFJlcXVlc3RJbmZvX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBSZXF1ZXN0
SW5mb19wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RJbmZvX3B0ciAmb3V0ICh2b2lkKTsK
ICAgIFJlcXVlc3RJbmZvX3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0SW5mb19wdHIgcHRy
ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSZXF1ZXN0SW5mb19wdHIgZHVwbGljYXRlIChS
ZXF1ZXN0SW5mb19wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUmVxdWVzdEluZm9fcHRy
KTsKICAgIHN0YXRpYyBSZXF1ZXN0SW5mb19wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXF1
ZXN0SW5mb19wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAm
KTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRl
OgogICAgUmVxdWVzdEluZm9fcHRyIHB0cl87CgogICAgUmVxdWVzdEluZm9fdmFyIChjb25zdCBU
QU9fQmFzZV92YXIgJnJocyk7CiAgICBSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3Qg
VEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgNTE0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3Mg
UmVxdWVzdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAgIFJlcXVlc3RJbmZvX291dCAoUmVxdWVz
dEluZm9fcHRyICYpOwogICAgUmVxdWVzdEluZm9fb3V0IChSZXF1ZXN0SW5mb192YXIgJik7CiAg
ICBSZXF1ZXN0SW5mb19vdXQgKGNvbnN0IFJlcXVlc3RJbmZvX291dCAmKTsKICAgIFJlcXVlc3RJ
bmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBSZXF1ZXN0
SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdEluZm9fdmFyICYpOwogICAgUmVxdWVz
dEluZm9fb3V0ICZvcGVyYXRvcj0gKFJlcXVlc3RJbmZvX3B0cik7CiAgICBvcGVyYXRvciBSZXF1
ZXN0SW5mb19wdHIgJigpOwogICAgUmVxdWVzdEluZm9fcHRyICZwdHIgKHZvaWQpOwogICAgUmVx
dWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUmVxdWVzdElu
Zm9fcHRyICZwdHJfOwogIH07CiMgNTM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIFJlcXVlc3RJ
bmZvIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBl
ZGVmIFJlcXVlc3RJbmZvX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFJlcXVlc3RJbmZvX3Zh
ciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUmVxdWVzdEluZm9fcHRyIF9kdXBsaWNhdGUgKFJl
cXVlc3RJbmZvX3B0ciBvYmopOwogICAgc3RhdGljIFJlcXVlc3RJbmZvX3B0ciBfbmFycm93ICgK
ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVxdWVzdEluZm9fcHRyIF91bmNo
ZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUmVxdWVz
dEluZm9fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFJlcXVlc3RJbmZv
X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBDT1JCQTo6VUxvbmcgcmVxdWVzdF9pZCAoCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFyICog
b3BlcmF0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg
ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2
aXJ0dWFsIER5bmFtaWM6OlBhcmFtZXRlckxpc3QgKiBhcmd1bWVudHMgKAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgRHluYW1pYzo6RXhjZXB0aW9u
TGlzdCAqIGV4Y2VwdGlvbnMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK
CgoKICAgIHZpcnR1YWwgRHluYW1pYzo6Q29udGV4dExpc3QgKiBjb250ZXh0cyAoCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBEeW5hbWljOjpSZXF1
ZXN0Q29udGV4dCAqIG9wZXJhdGlvbl9jb250ZXh0ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiByZXN1bHQgKAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICgg
Q09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkJvb2xl
YW4gcmVzcG9uc2VfZXhwZWN0ZWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0g
MDsKCgoKCgogICAgdmlydHVhbCBNZXNzYWdpbmc6OlN5bmNTY29wZSBzeW5jX3Njb3BlICgKICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgUG9ydGFi
bGVJbnRlcmNlcHRvcjo6UmVwbHlTdGF0dXMgcmVwbHlfc3RhdHVzICgKICAgICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg
VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGZv
cndhcmRfcmVmZXJlbmNlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK
CiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiBnZXRfc2xvdCAoCiAgICAgICAgUG9ydGFibGVJbnRl
cmNlcHRvcjo6U2xvdElkIGlkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFi
bGVJbnRlcmNlcHRvcjo6SW52YWxpZFNsb3QgKSA9IDA7CgoKCgogICAgdmlydHVhbCBJT1A6OlNl
cnZpY2VDb250ZXh0ICogZ2V0X3JlcXVlc3Rfc2VydmljZV9jb250ZXh0ICgKICAgICAgICBJT1A6
OlNlcnZpY2VJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAg
ICB2aXJ0dWFsIElPUDo6U2VydmljZUNvbnRleHQgKiBnZXRfcmVwbHlfc2VydmljZV9jb250ZXh0
ICgKICAgICAgICBJT1A6OlNlcnZpY2VJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf
ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9h
cml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0
b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgUmVxdWVzdEluZm8gKCk7Cgog
ICAgdmlydHVhbCB+UmVxdWVzdEluZm8gKHZvaWQpOwogIHByaXZhdGU6CiAgICBSZXF1ZXN0SW5m
byAoY29uc3QgUmVxdWVzdEluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUmVxdWVz
dEluZm8gJik7CiAgfTsKIyA3MDMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBDbGllbnRSZXF1
ZXN0SW5mbzsKICB0eXBlZGVmIENsaWVudFJlcXVlc3RJbmZvICpDbGllbnRSZXF1ZXN0SW5mb19w
dHI7CgoKCgoKCgogIGNsYXNzIENsaWVudFJlcXVlc3RJbmZvX3ZhciA6IHB1YmxpYyBUQU9fQmFz
ZV92YXIKICB7CiAgcHVibGljOgogICAgQ2xpZW50UmVxdWVzdEluZm9fdmFyICh2b2lkKTsKICAg
IENsaWVudFJlcXVlc3RJbmZvX3ZhciAoQ2xpZW50UmVxdWVzdEluZm9fcHRyIHApIDogcHRyXyAo
cCkge30KICAgIENsaWVudFJlcXVlc3RJbmZvX3ZhciAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9f
dmFyICYpOwogICAgfkNsaWVudFJlcXVlc3RJbmZvX3ZhciAodm9pZCk7CgogICAgQ2xpZW50UmVx
dWVzdEluZm9fdmFyICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbmZvX3B0cik7CiAgICBDbGll
bnRSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9fdmFy
ICYpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK
ICAgIG9wZXJhdG9yIGNvbnN0IENsaWVudFJlcXVlc3RJbmZvX3B0ciAmKCkgY29uc3Q7CiAgICBv
cGVyYXRvciBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJigpOwoKICAgIENsaWVudFJlcXVlc3RJbmZv
X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJmlub3V0ICh2
b2lkKTsKICAgIENsaWVudFJlcXVlc3RJbmZvX3B0ciAmb3V0ICh2b2lkKTsKICAgIENsaWVudFJl
cXVlc3RJbmZvX3B0ciBfcmV0biAodm9pZCk7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19wdHIgcHRy
ICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgZHVwbGlj
YXRlIChDbGllbnRSZXF1ZXN0SW5mb19wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ2xp
ZW50UmVxdWVzdEluZm9fcHRyKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgbmls
ICh2b2lkKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19wdHIgbmFycm93IChDT1JCQTo6
T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0
ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRy
IHB0cl87CgogICAgQ2xpZW50UmVxdWVzdEluZm9fdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgICBDbGllbnRSZXF1ZXN0SW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2Vf
dmFyICZyaHMpOwogIH07CiMgNzU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgQ2xpZW50UmVx
dWVzdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAgIENsaWVudFJlcXVlc3RJbmZvX291dCAoQ2xp
ZW50UmVxdWVzdEluZm9fcHRyICYpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fb3V0IChDbGllbnRS
ZXF1ZXN0SW5mb192YXIgJik7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19vdXQgKGNvbnN0IENsaWVu
dFJlcXVlc3RJbmZvX291dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbmZvX291dCAmb3BlcmF0b3I9
IChjb25zdCBDbGllbnRSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBDbGllbnRSZXF1ZXN0SW5mb19v
dXQgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEluZm9fdmFyICYpOwogICAgQ2xpZW50
UmVxdWVzdEluZm9fb3V0ICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbmZvX3B0cik7CiAgICBv
cGVyYXRvciBDbGllbnRSZXF1ZXN0SW5mb19wdHIgJigpOwogICAgQ2xpZW50UmVxdWVzdEluZm9f
cHRyICZwdHIgKHZvaWQpOwogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZv
aWQpOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdEluZm9fcHRyICZwdHJfOwogIH07CiMg
Nzc5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIENsaWVudFJlcXVlc3RJbmZvOiBwdWJsaWMgdmly
dHVhbCBSZXF1ZXN0SW5mbwogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0
SW5mb19wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0SW5mb192YXIgX3Zh
cl90eXBlOwoKCgogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbmZvX3B0ciBfZHVwbGljYXRlIChD
bGllbnRSZXF1ZXN0SW5mb19wdHIgb2JqKTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW5mb19w
dHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENsaWVudFJl
cXVlc3RJbmZvX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w
dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp
OwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbmZvX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIChDbGllbnRSZXF1ZXN0SW5mb19wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1
YWwgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf
ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIGVmZmVjdGl2ZV90YXJn
ZXQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg
ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwg
SU9QOjpUYWdnZWRQcm9maWxlICogZWZmZWN0aXZlX3Byb2ZpbGUgKAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OkFueSAqIHJlY2VpdmVk
X2V4Y2VwdGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg
ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg
dmlydHVhbCBjaGFyICogcmVjZWl2ZWRfZXhjZXB0aW9uX2lkICgKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIElPUDo6VGFnZ2VkQ29tcG9uZW50ICog
Z2V0X2VmZmVjdGl2ZV9jb21wb25lbnQgKAogICAgICAgIElPUDo6Q29tcG9uZW50SWQgaWQsCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBJT1A6OlRh
Z2dlZENvbXBvbmVudFNlcSAqIGdldF9lZmZlY3RpdmVfY29tcG9uZW50cyAoCiAgICAgICAgSU9Q
OjpDb21wb25lbnRJZCBpZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK
CiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGdldF9yZXF1ZXN0X3BvbGljeSAoCiAgICAg
ICAgQ09SQkE6OlBvbGljeVR5cGUgdHlwZSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g
KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkX3JlcXVlc3Rfc2VydmljZV9jb250ZXh0ICgK
ICAgICAgICBjb25zdCBJT1A6OlNlcnZpY2VDb250ZXh0ICYgc2VydmljZV9jb250ZXh0LAogICAg
ICAgIENPUkJBOjpCb29sZWFuIHJlcGxhY2UsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
ICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp
dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y
eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIENsaWVudFJlcXVlc3RJbmZvICgp
OwoKICAgIHZpcnR1YWwgfkNsaWVudFJlcXVlc3RJbmZvICh2b2lkKTsKICBwcml2YXRlOgogICAg
Q2xpZW50UmVxdWVzdEluZm8gKGNvbnN0IENsaWVudFJlcXVlc3RJbmZvICYpOwogICAgdm9pZCBv
cGVyYXRvcj0gKGNvbnN0IENsaWVudFJlcXVlc3RJbmZvICYpOwogIH07CiMgOTAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJj
ZXB0b3JDLmgiCiAgY2xhc3MgU2VydmVyUmVxdWVzdEluZm87CiAgdHlwZWRlZiBTZXJ2ZXJSZXF1
ZXN0SW5mbyAqU2VydmVyUmVxdWVzdEluZm9fcHRyOwoKCgoKCgoKICBjbGFzcyBTZXJ2ZXJSZXF1
ZXN0SW5mb192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFNlcnZl
clJlcXVlc3RJbmZvX3ZhciAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb192YXIgKFNlcnZl
clJlcXVlc3RJbmZvX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb192
YXIgKGNvbnN0IFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmKTsKICAgIH5TZXJ2ZXJSZXF1ZXN0SW5m
b192YXIgKHZvaWQpOwoKICAgIFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmb3BlcmF0b3I9IChTZXJ2
ZXJSZXF1ZXN0SW5mb19wdHIpOwogICAgU2VydmVyUmVxdWVzdEluZm9fdmFyICZvcGVyYXRvcj0g
KGNvbnN0IFNlcnZlclJlcXVlc3RJbmZvX3ZhciAmKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0
ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBTZXJ2ZXJSZXF1
ZXN0SW5mb19wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmVyUmVxdWVzdEluZm9fcHRy
ICYoKTsKCiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgU2Vy
dmVyUmVxdWVzdEluZm9fcHRyICZpbm91dCAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19w
dHIgJm91dCAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgX3JldG4gKHZvaWQpOwog
ICAgU2VydmVyUmVxdWVzdEluZm9fcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMg
U2VydmVyUmVxdWVzdEluZm9fcHRyIGR1cGxpY2F0ZSAoU2VydmVyUmVxdWVzdEluZm9fcHRyKTsK
ICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFNlcnZlclJlcXVlc3RJbmZvX3B0cik7CiAgICBzdGF0
aWMgU2VydmVyUmVxdWVzdEluZm9fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgU2VydmVyUmVx
dWVzdEluZm9fcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQg
Jik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0
ZToKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0ciBwdHJfOwoKICAgIFNlcnZlclJlcXVlc3RJbmZv
X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgU2VydmVyUmVxdWVzdEluZm9fdmFy
ICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDk1MyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy
Y2VwdG9yQy5oIgogIGNsYXNzIFNlcnZlclJlcXVlc3RJbmZvX291dAogIHsKICBwdWJsaWM6CiAg
ICBTZXJ2ZXJSZXF1ZXN0SW5mb19vdXQgKFNlcnZlclJlcXVlc3RJbmZvX3B0ciAmKTsKICAgIFNl
cnZlclJlcXVlc3RJbmZvX291dCAoU2VydmVyUmVxdWVzdEluZm9fdmFyICYpOwogICAgU2VydmVy
UmVxdWVzdEluZm9fb3V0IChjb25zdCBTZXJ2ZXJSZXF1ZXN0SW5mb19vdXQgJik7CiAgICBTZXJ2
ZXJSZXF1ZXN0SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEluZm9fb3V0
ICYpOwogICAgU2VydmVyUmVxdWVzdEluZm9fb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZlclJl
cXVlc3RJbmZvX3ZhciAmKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX291dCAmb3BlcmF0b3I9IChT
ZXJ2ZXJSZXF1ZXN0SW5mb19wdHIpOwogICAgb3BlcmF0b3IgU2VydmVyUmVxdWVzdEluZm9fcHRy
ICYoKTsKICAgIFNlcnZlclJlcXVlc3RJbmZvX3B0ciAmcHRyICh2b2lkKTsKICAgIFNlcnZlclJl
cXVlc3RJbmZvX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFNlcnZlclJl
cXVlc3RJbmZvX3B0ciAmcHRyXzsKICB9OwojIDk3NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgpjbGFzcyBT
ZXJ2ZXJSZXF1ZXN0SW5mbzogcHVibGljIHZpcnR1YWwgUmVxdWVzdEluZm8KICB7CiAgcHVibGlj
OgoKICAgIHR5cGVkZWYgU2VydmVyUmVxdWVzdEluZm9fcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVk
ZWYgU2VydmVyUmVxdWVzdEluZm9fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTZXJ2ZXJS
ZXF1ZXN0SW5mb19wdHIgX2R1cGxpY2F0ZSAoU2VydmVyUmVxdWVzdEluZm9fcHRyIG9iaik7CiAg
ICBzdGF0aWMgU2VydmVyUmVxdWVzdEluZm9fcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpP
YmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgX3VuY2hlY2tlZF9uYXJy
b3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW5m
b19wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2VydmVyUmVxdWVzdElu
Zm9fcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFsIENPUkJBOjpBbnkgKiBzZW5kaW5nX2V4Y2Vw
dGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkK
ICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVh
bCBDT1JCQTo6T2N0ZXRTZXEgKiBvYmplY3RfaWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw
dGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6Ok9jdGV0U2VxICogYWRhcHRlcl9pZCAo
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFy
ICogdGFyZ2V0X21vc3RfZGVyaXZlZF9pbnRlcmZhY2UgKAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4
Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgQ09SQkE6OlBvbGljeV9wdHIgZ2V0X3NlcnZl
cl9wb2xpY3kgKAogICAgICAgIENPUkJBOjpQb2xpY3lUeXBlIHR5cGUsCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6
U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIHNldF9zbG90ICgKICAg
ICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTbG90SWQgaWQsCiAgICAgICAgY29uc3QgQ09SQkE6
OkFueSAmIGRhdGEsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg
ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVy
Y2VwdG9yOjpJbnZhbGlkU2xvdCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IHRhcmdldF9pc19hICgKICAgICAgICBjb25zdCBjaGFyICogaWQsCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIGFkZF9yZXBseV9zZXJ2aWNl
X2NvbnRleHQgKAogICAgICAgIGNvbnN0IElPUDo6U2VydmljZUNvbnRleHQgJiBzZXJ2aWNlX2Nv
bnRleHQsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVwbGFjZSwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZh
Y2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFj
ZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmVyUmVx
dWVzdEluZm8gKCk7CgogICAgdmlydHVhbCB+U2VydmVyUmVxdWVzdEluZm8gKHZvaWQpOwogIHBy
aXZhdGU6CiAgICBTZXJ2ZXJSZXF1ZXN0SW5mbyAoY29uc3QgU2VydmVyUmVxdWVzdEluZm8gJik7
CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEluZm8gJik7CiAgfTsKIyAx
MDkzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yOwog
IHR5cGVkZWYgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yICpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0
b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyIDogcHVi
bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0
b3JfdmFyICh2b2lkKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl92YXIgKENsaWVudFJl
cXVlc3RJbnRlcmNlcHRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ2xpZW50UmVxdWVzdElu
dGVyY2VwdG9yX3ZhciAoY29uc3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAg
IH5DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKCiAgICBDbGllbnRSZXF1ZXN0
SW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIp
OwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDbGll
bnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9y
X3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBDbGllbnRS
ZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIENsaWVudFJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIg
aW4gKHZvaWQpIGNvbnN0OwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciAmaW5vdXQg
KHZvaWQpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAg
IENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgX3JldG4gKHZvaWQpOwogICAgQ2xpZW50UmVx
dWVzdEludGVyY2VwdG9yX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIENsaWVu
dFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChDbGllbnRSZXF1ZXN0SW50ZXJjZXB0
b3JfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKENsaWVudFJlcXVlc3RJbnRlcmNlcHRv
cl9wdHIpOwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgbmlsICh2b2lk
KTsKICAgIHN0YXRpYyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG5hcnJvdyAoQ09SQkE6
Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVj
dCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIENsaWVudFJlcXVlc3RJbnRlcmNl
cHRvcl9wdHIgcHRyXzsKCiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyIChjb25zdCBU
QU9fQmFzZV92YXIgJnJocyk7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICZvcGVy
YXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDExNDUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRv
ckMuaCIKICBjbGFzcyBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0CiAgewogIHB1YmxpYzoK
ICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgKENsaWVudFJlcXVlc3RJbnRlcmNlcHRv
cl9wdHIgJik7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0IChDbGllbnRSZXF1ZXN0
SW50ZXJjZXB0b3JfdmFyICYpOwogICAgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291dCAoY29u
c3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRl
cmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX291
dCAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3Qg
Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAgIENsaWVudFJlcXVlc3RJbnRlcmNl
cHRvcl9vdXQgJm9wZXJhdG9yPSAoQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0cik7CiAgICBv
cGVyYXRvciBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKTsKICAgIENsaWVudFJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIgJnB0ciAodm9pZCk7CiAgICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0
b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ2xpZW50UmVxdWVzdElu
dGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDExNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKY2xhc3Mg
Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yOiBwdWJsaWMgdmlydHVhbCBJbnRlcmNlcHRvcgogIHsK
ICBwdWJsaWM6CgogICAgdHlwZWRlZiBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIF9wdHJf
dHlwZTsKICAgIHR5cGVkZWYgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3ZhciBfdmFyX3R5cGU7
CgoKCiAgICBzdGF0aWMgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciBfZHVwbGljYXRlIChD
bGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG9iaik7CiAgICBzdGF0aWMgQ2xpZW50UmVxdWVz
dEludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBz
dGF0aWMgQ2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAg
ICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIENsaWVudFJlcXVlc3RJbnRlcmNlcHRv
cl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoQ2xpZW50UmVxdWVzdElu
dGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2b2lkIHNlbmRfcmVxdWVzdCAo
CiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRyIHJpCgog
ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRl
cmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIHNlbmRf
cG9sbCAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRy
IHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsK
CgoKICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlX3JlcGx5ICgKICAgICAgICBQb3J0YWJsZUludGVy
Y2VwdG9yOjpDbGllbnRSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIHJlY2VpdmVf
ZXhjZXB0aW9uICgKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW5m
b19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQ
b3J0YWJsZUludGVyY2VwdG9yOjpGb3J3YXJkUmVxdWVzdCApID0gMDsKCgoKCiAgICB2aXJ0dWFs
IHZvaWQgcmVjZWl2ZV9vdGhlciAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50
UmVxdWVzdEluZm9fcHRyIHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4
Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoKCgog
ICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsK
CiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkg
Y29uc3Q7CgogIHByb3RlY3RlZDoKICAgIENsaWVudFJlcXVlc3RJbnRlcmNlcHRvciAoKTsKCiAg
ICB2aXJ0dWFsIH5DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3IgKHZvaWQpOwogIHByaXZhdGU6CiAg
ICBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3IgKGNvbnN0IENsaWVudFJlcXVlc3RJbnRlcmNlcHRv
ciAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3Ig
Jik7CiAgfTsKIyAxMjU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgU2VydmVyUmVxdWVzdElu
dGVyY2VwdG9yOwogIHR5cGVkZWYgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yICpTZXJ2ZXJSZXF1
ZXN0SW50ZXJjZXB0b3JfcHRyOwoKCgoKCgoKICBjbGFzcyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0
b3JfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTZXJ2ZXJSZXF1
ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl92
YXIgKFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2Vy
dmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9y
X3ZhciAmKTsKICAgIH5TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKCiAgICBT
ZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKFNlcnZlclJlcXVlc3RJbnRl
cmNlcHRvcl9wdHIpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAmb3BlcmF0b3I9
IChjb25zdCBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgU2VydmVyUmVxdWVz
dEludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBj
b25zdCBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9y
IFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIFNlcnZlclJlcXVlc3RJbnRl
cmNlcHRvcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9y
X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciAmb3V0
ICh2b2lkKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgX3JldG4gKHZvaWQpOwog
ICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAg
c3RhdGljIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChTZXJ2ZXJSZXF1
ZXN0SW50ZXJjZXB0b3JfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFNlcnZlclJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIpOwogICAgc3RhdGljIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9w
dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG5h
cnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBzdGF0aWMg
Q09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFNlcnZlclJl
cXVlc3RJbnRlcmNlcHRvcl9wdHIgcHRyXzsKCiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jf
dmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0
b3JfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDEzMDkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi
bGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0CiAg
ewogIHB1YmxpYzoKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgKFNlcnZlclJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIgJik7CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3Jfb3V0IChT
ZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdmFyICYpOwogICAgU2VydmVyUmVxdWVzdEludGVyY2Vw
dG9yX291dCAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX291dCAmKTsKICAgIFNlcnZl
clJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdElu
dGVyY2VwdG9yX291dCAmKTsKICAgIFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3ZhciAmKTsKICAgIFNlcnZlclJl
cXVlc3RJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9yPSAoU2VydmVyUmVxdWVzdEludGVyY2VwdG9y
X3B0cik7CiAgICBvcGVyYXRvciBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyICYoKTsKICAg
IFNlcnZlclJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgJnB0ciAodm9pZCk7CiAgICBTZXJ2ZXJSZXF1
ZXN0SW50ZXJjZXB0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgU2Vy
dmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDEzMzMgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRv
ckMuaCIKY2xhc3MgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yOiBwdWJsaWMgdmlydHVhbCBJbnRl
cmNlcHRvcgogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0
b3JfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3Zh
ciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBf
ZHVwbGljYXRlIChTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIG9iaik7CiAgICBzdGF0aWMg
U2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2Jq
ZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg
ICAgICk7CiAgICBzdGF0aWMgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0ciBfdW5jaGVja2Vk
X25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFNlcnZlclJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2Vy
dmVyUmVxdWVzdEludGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2b2lkIHJl
Y2VpdmVfcmVxdWVzdF9zZXJ2aWNlX2NvbnRleHRzICgKICAgICAgICBQb3J0YWJsZUludGVyY2Vw
dG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpGb3J3YXJkUmVxdWVzdCAp
ID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZV9yZXF1ZXN0ICgKICAgICAgICBQb3J0
YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcmkKCiAgICAgICkKICAgICAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpGb3J3
YXJkUmVxdWVzdCApID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgc2VuZF9yZXBseSAoCiAgICAg
ICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEluZm9fcHRyIHJpCgogICAgICAp
CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1
YWwgdm9pZCBzZW5kX2V4Y2VwdGlvbiAoCiAgICAgICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2Vy
dmVyUmVxdWVzdEluZm9fcHRyIHJpCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CgoK
CgogICAgdmlydHVhbCB2b2lkIHNlbmRfb3RoZXIgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0
b3I6OlNlcnZlclJlcXVlc3RJbmZvX3B0ciByaQoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB
OjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkZvcndhcmRSZXF1ZXN0ICkg
PSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRo
X3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlf
aWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0
b3IgKCk7CgogICAgdmlydHVhbCB+U2VydmVyUmVxdWVzdEludGVyY2VwdG9yICh2b2lkKTsKICBw
cml2YXRlOgogICAgU2VydmVyUmVxdWVzdEludGVyY2VwdG9yIChjb25zdCBTZXJ2ZXJSZXF1ZXN0
SW50ZXJjZXB0b3IgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmVyUmVxdWVzdElu
dGVyY2VwdG9yICYpOwogIH07CiMgMTQyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIElPUklu
Zm87CiAgdHlwZWRlZiBJT1JJbmZvICpJT1JJbmZvX3B0cjsKCgoKCgoKCiAgY2xhc3MgSU9SSW5m
b192YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIElPUkluZm9fdmFy
ICh2b2lkKTsKICAgIElPUkluZm9fdmFyIChJT1JJbmZvX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg
ICBJT1JJbmZvX3ZhciAoY29uc3QgSU9SSW5mb192YXIgJik7CiAgICB+SU9SSW5mb192YXIgKHZv
aWQpOwoKICAgIElPUkluZm9fdmFyICZvcGVyYXRvcj0gKElPUkluZm9fcHRyKTsKICAgIElPUklu
Zm9fdmFyICZvcGVyYXRvcj0gKGNvbnN0IElPUkluZm9fdmFyICYpOwogICAgSU9SSW5mb19wdHIg
b3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSU9SSW5mb19wdHIg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgSU9SSW5mb19wdHIgJigpOwoKICAgIElPUkluZm9fcHRy
IGluICh2b2lkKSBjb25zdDsKICAgIElPUkluZm9fcHRyICZpbm91dCAodm9pZCk7CiAgICBJT1JJ
bmZvX3B0ciAmb3V0ICh2b2lkKTsKICAgIElPUkluZm9fcHRyIF9yZXRuICh2b2lkKTsKICAgIElP
UkluZm9fcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgSU9SSW5mb19wdHIgZHVw
bGljYXRlIChJT1JJbmZvX3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChJT1JJbmZvX3B0
cik7CiAgICBzdGF0aWMgSU9SSW5mb19wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBJT1JJbmZv
X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAg
c3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJ
T1JJbmZvX3B0ciBwdHJfOwoKICAgIElPUkluZm9fdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgICBJT1JJbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7
CiAgfTsKIyAxNDc0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgSU9SSW5mb19vdXQKICB7CiAg
cHVibGljOgogICAgSU9SSW5mb19vdXQgKElPUkluZm9fcHRyICYpOwogICAgSU9SSW5mb19vdXQg
KElPUkluZm9fdmFyICYpOwogICAgSU9SSW5mb19vdXQgKGNvbnN0IElPUkluZm9fb3V0ICYpOwog
ICAgSU9SSW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgSU9SSW5mb19vdXQgJik7CiAgICBJT1JJ
bmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBJT1JJbmZvX3ZhciAmKTsKICAgIElPUkluZm9fb3V0
ICZvcGVyYXRvcj0gKElPUkluZm9fcHRyKTsKICAgIG9wZXJhdG9yIElPUkluZm9fcHRyICYoKTsK
ICAgIElPUkluZm9fcHRyICZwdHIgKHZvaWQpOwogICAgSU9SSW5mb19wdHIgb3BlcmF0b3ItPiAo
dm9pZCk7CgogIHByaXZhdGU6CiAgICBJT1JJbmZvX3B0ciAmcHRyXzsKICB9OwojIDE0OTggIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJ
bnRlcmNlcHRvckMuaCIKY2xhc3MgSU9SSW5mbyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVj
dAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJT1JJbmZvX3B0ciBfcHRyX3R5cGU7CiAgICB0
eXBlZGVmIElPUkluZm9fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBJT1JJbmZvX3B0ciBf
ZHVwbGljYXRlIChJT1JJbmZvX3B0ciBvYmopOwogICAgc3RhdGljIElPUkluZm9fcHRyIF9uYXJy
b3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJT1JJbmZvX3B0ciBfdW5j
aGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIElPUklu
Zm9fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKElPUkluZm9fcHRyKTA7
CiAgICAgIH0KCiAgICB2aXJ0dWFsIENPUkJBOjpQb2xpY3lfcHRyIGdldF9lZmZlY3RpdmVfcG9s
aWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSB0eXBlLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCBhZGRfaW9yX2NvbXBvbmVudCAo
CiAgICAgICAgY29uc3QgSU9QOjpUYWdnZWRDb21wb25lbnQgJiBjb21wb25lbnQsCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkIGFkZF9pb3Jf
Y29tcG9uZW50X3RvX3Byb2ZpbGUgKAogICAgICAgIGNvbnN0IElPUDo6VGFnZ2VkQ29tcG9uZW50
ICYgY29tcG9uZW50LAogICAgICAgIElPUDo6UHJvZmlsZUlkIHByb2ZpbGVfaWQsCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1
ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAg
IElPUkluZm8gKCk7CgogICAgdmlydHVhbCB+SU9SSW5mbyAodm9pZCk7CiAgcHJpdmF0ZToKICAg
IElPUkluZm8gKGNvbnN0IElPUkluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgSU9S
SW5mbyAmKTsKICB9OwojIDE1NzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBjbGFzcyBJT1JJbnRlcmNl
cHRvcjsKICB0eXBlZGVmIElPUkludGVyY2VwdG9yICpJT1JJbnRlcmNlcHRvcl9wdHI7CgoKCgoK
CgogIGNsYXNzIElPUkludGVyY2VwdG9yX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAg
cHVibGljOgogICAgSU9SSW50ZXJjZXB0b3JfdmFyICh2b2lkKTsKICAgIElPUkludGVyY2VwdG9y
X3ZhciAoSU9SSW50ZXJjZXB0b3JfcHRyIHApIDogcHRyXyAocCkge30KICAgIElPUkludGVyY2Vw
dG9yX3ZhciAoY29uc3QgSU9SSW50ZXJjZXB0b3JfdmFyICYpOwogICAgfklPUkludGVyY2VwdG9y
X3ZhciAodm9pZCk7CgogICAgSU9SSW50ZXJjZXB0b3JfdmFyICZvcGVyYXRvcj0gKElPUkludGVy
Y2VwdG9yX3B0cik7CiAgICBJT1JJbnRlcmNlcHRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgSU9S
SW50ZXJjZXB0b3JfdmFyICYpOwogICAgSU9SSW50ZXJjZXB0b3JfcHRyIG9wZXJhdG9yLT4gKHZv
aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IElPUkludGVyY2VwdG9yX3B0ciAmKCkgY29u
c3Q7CiAgICBvcGVyYXRvciBJT1JJbnRlcmNlcHRvcl9wdHIgJigpOwoKICAgIElPUkludGVyY2Vw
dG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBJT1JJbnRlcmNlcHRvcl9wdHIgJmlub3V0ICh2
b2lkKTsKICAgIElPUkludGVyY2VwdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAgIElPUkludGVyY2Vw
dG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBJT1JJbnRlcmNlcHRvcl9wdHIgcHRyICh2b2lkKSBj
b25zdDsKCgoKICAgIHN0YXRpYyBJT1JJbnRlcmNlcHRvcl9wdHIgZHVwbGljYXRlIChJT1JJbnRl
cmNlcHRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoSU9SSW50ZXJjZXB0b3JfcHRy
KTsKICAgIHN0YXRpYyBJT1JJbnRlcmNlcHRvcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBJ
T1JJbnRlcmNlcHRvcl9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u
bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw
cml2YXRlOgogICAgSU9SSW50ZXJjZXB0b3JfcHRyIHB0cl87CgogICAgSU9SSW50ZXJjZXB0b3Jf
dmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBJT1JJbnRlcmNlcHRvcl92YXIgJm9w
ZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTYyMyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2Vw
dG9yQy5oIgogIGNsYXNzIElPUkludGVyY2VwdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBJT1JJ
bnRlcmNlcHRvcl9vdXQgKElPUkludGVyY2VwdG9yX3B0ciAmKTsKICAgIElPUkludGVyY2VwdG9y
X291dCAoSU9SSW50ZXJjZXB0b3JfdmFyICYpOwogICAgSU9SSW50ZXJjZXB0b3Jfb3V0IChjb25z
dCBJT1JJbnRlcmNlcHRvcl9vdXQgJik7CiAgICBJT1JJbnRlcmNlcHRvcl9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgSU9SSW50ZXJjZXB0b3Jfb3V0ICYpOwogICAgSU9SSW50ZXJjZXB0b3Jfb3V0ICZv
cGVyYXRvcj0gKGNvbnN0IElPUkludGVyY2VwdG9yX3ZhciAmKTsKICAgIElPUkludGVyY2VwdG9y
X291dCAmb3BlcmF0b3I9IChJT1JJbnRlcmNlcHRvcl9wdHIpOwogICAgb3BlcmF0b3IgSU9SSW50
ZXJjZXB0b3JfcHRyICYoKTsKICAgIElPUkludGVyY2VwdG9yX3B0ciAmcHRyICh2b2lkKTsKICAg
IElPUkludGVyY2VwdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIElP
UkludGVyY2VwdG9yX3B0ciAmcHRyXzsKICB9OwojIDE2NDcgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKY2xh
c3MgSU9SSW50ZXJjZXB0b3I6IHB1YmxpYyB2aXJ0dWFsIEludGVyY2VwdG9yCiAgewogIHB1Ymxp
YzoKCiAgICB0eXBlZGVmIElPUkludGVyY2VwdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVm
IElPUkludGVyY2VwdG9yX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgSU9SSW50ZXJjZXB0
b3JfcHRyIF9kdXBsaWNhdGUgKElPUkludGVyY2VwdG9yX3B0ciBvYmopOwogICAgc3RhdGljIElP
UkludGVyY2VwdG9yX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBz
dGF0aWMgSU9SSW50ZXJjZXB0b3JfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpCiAgICAgICk7CiAgICBzdGF0aWMgSU9SSW50ZXJjZXB0b3JfcHRyIF9uaWwgKHZvaWQpCiAg
ICAgIHsKICAgICAgICByZXR1cm4gKElPUkludGVyY2VwdG9yX3B0cikwOwogICAgICB9CgogICAg
dmlydHVhbCB2b2lkIGVzdGFibGlzaF9jb21wb25lbnRzICgKICAgICAgICBQb3J0YWJsZUludGVy
Y2VwdG9yOjpJT1JJbmZvX3B0ciBpbmZvCgogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUludGVy
ZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50ZXJm
YWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBJT1JJbnRl
cmNlcHRvciAoKTsKCiAgICB2aXJ0dWFsIH5JT1JJbnRlcmNlcHRvciAodm9pZCk7CiAgcHJpdmF0
ZToKICAgIElPUkludGVyY2VwdG9yIChjb25zdCBJT1JJbnRlcmNlcHRvciAmKTsKICAgIHZvaWQg
b3BlcmF0b3I9IChjb25zdCBJT1JJbnRlcmNlcHRvciAmKTsKICB9OwojIDE3MDAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNl
cHRvckMuaCIKICBjbGFzcyBQb2xpY3lGYWN0b3J5OwogIHR5cGVkZWYgUG9saWN5RmFjdG9yeSAq
UG9saWN5RmFjdG9yeV9wdHI7CgoKCgoKCgogIGNsYXNzIFBvbGljeUZhY3RvcnlfdmFyIDogcHVi
bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAodm9p
ZCk7CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAoUG9saWN5RmFjdG9yeV9wdHIgcCkgOiBwdHJfIChw
KSB7fQogICAgUG9saWN5RmFjdG9yeV92YXIgKGNvbnN0IFBvbGljeUZhY3RvcnlfdmFyICYpOwog
ICAgflBvbGljeUZhY3RvcnlfdmFyICh2b2lkKTsKCiAgICBQb2xpY3lGYWN0b3J5X3ZhciAmb3Bl
cmF0b3I9IChQb2xpY3lGYWN0b3J5X3B0cik7CiAgICBQb2xpY3lGYWN0b3J5X3ZhciAmb3BlcmF0
b3I9IChjb25zdCBQb2xpY3lGYWN0b3J5X3ZhciAmKTsKICAgIFBvbGljeUZhY3RvcnlfcHRyIG9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFBvbGljeUZhY3Rvcnlf
cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBvbGljeUZhY3RvcnlfcHRyICYoKTsKCiAgICBQ
b2xpY3lGYWN0b3J5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQb2xpY3lGYWN0b3J5X3B0ciAm
aW5vdXQgKHZvaWQpOwogICAgUG9saWN5RmFjdG9yeV9wdHIgJm91dCAodm9pZCk7CiAgICBQb2xp
Y3lGYWN0b3J5X3B0ciBfcmV0biAodm9pZCk7CiAgICBQb2xpY3lGYWN0b3J5X3B0ciBwdHIgKHZv
aWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFBvbGljeUZhY3RvcnlfcHRyIGR1cGxpY2F0ZSAoUG9s
aWN5RmFjdG9yeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUG9saWN5RmFjdG9yeV9w
dHIpOwogICAgc3RhdGljIFBvbGljeUZhY3RvcnlfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg
UG9saWN5RmFjdG9yeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9u
bWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw
cml2YXRlOgogICAgUG9saWN5RmFjdG9yeV9wdHIgcHRyXzsKCiAgICBQb2xpY3lGYWN0b3J5X3Zh
ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgUG9saWN5RmFjdG9yeV92YXIgJm9wZXJh
dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTc1MiAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9y
Qy5oIgogIGNsYXNzIFBvbGljeUZhY3Rvcnlfb3V0CiAgewogIHB1YmxpYzoKICAgIFBvbGljeUZh
Y3Rvcnlfb3V0IChQb2xpY3lGYWN0b3J5X3B0ciAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0IChQ
b2xpY3lGYWN0b3J5X3ZhciAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0IChjb25zdCBQb2xpY3lG
YWN0b3J5X291dCAmKTsKICAgIFBvbGljeUZhY3Rvcnlfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFBv
bGljeUZhY3Rvcnlfb3V0ICYpOwogICAgUG9saWN5RmFjdG9yeV9vdXQgJm9wZXJhdG9yPSAoY29u
c3QgUG9saWN5RmFjdG9yeV92YXIgJik7CiAgICBQb2xpY3lGYWN0b3J5X291dCAmb3BlcmF0b3I9
IChQb2xpY3lGYWN0b3J5X3B0cik7CiAgICBvcGVyYXRvciBQb2xpY3lGYWN0b3J5X3B0ciAmKCk7
CiAgICBQb2xpY3lGYWN0b3J5X3B0ciAmcHRyICh2b2lkKTsKICAgIFBvbGljeUZhY3RvcnlfcHRy
IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgUG9saWN5RmFjdG9yeV9wdHIgJnB0
cl87CiAgfTsKIyAxNzc2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIFBvbGljeUZhY3RvcnkgOiBw
dWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUG9s
aWN5RmFjdG9yeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBQb2xpY3lGYWN0b3J5X3ZhciBf
dmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUG9saWN5RmFjdG9yeV9wdHIgX2R1cGxpY2F0ZSAoUG9s
aWN5RmFjdG9yeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBQb2xpY3lGYWN0b3J5X3B0ciBfbmFycm93
ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUG9saWN5RmFjdG9yeV9wdHIg
X3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBQ
b2xpY3lGYWN0b3J5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChQb2xp
Y3lGYWN0b3J5X3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBDT1JCQTo6UG9saWN5X3B0ciBj
cmVhdGVfcG9saWN5ICgKICAgICAgICBDT1JCQTo6UG9saWN5VHlwZSB0eXBlLAogICAgICAgIGNv
bnN0IENPUkJBOjpBbnkgJiB2YWx1ZQoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24sIENPUkJBOjpQb2xpY3lFcnJvciApID0gMDsKCgoKCiAgICB2aXJ0dWFsIHZv
aWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJv
dGVjdGVkOgogICAgUG9saWN5RmFjdG9yeSAoKTsKCiAgICB2aXJ0dWFsIH5Qb2xpY3lGYWN0b3J5
ICh2b2lkKTsKICBwcml2YXRlOgogICAgUG9saWN5RmFjdG9yeSAoY29uc3QgUG9saWN5RmFjdG9y
eSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQb2xpY3lGYWN0b3J5ICYpOwogIH07CiMg
MTgzMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
b3J0YWJsZUludGVyY2VwdG9yQy5oIgogIGNsYXNzIE9SQkluaXRJbmZvOwogIHR5cGVkZWYgT1JC
SW5pdEluZm8gKk9SQkluaXRJbmZvX3B0cjsKCgoKCgoKCiAgY2xhc3MgT1JCSW5pdEluZm9fdmFy
IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBPUkJJbml0SW5mb192YXIg
KHZvaWQpOwogICAgT1JCSW5pdEluZm9fdmFyIChPUkJJbml0SW5mb19wdHIgcCkgOiBwdHJfIChw
KSB7fQogICAgT1JCSW5pdEluZm9fdmFyIChjb25zdCBPUkJJbml0SW5mb192YXIgJik7CiAgICB+
T1JCSW5pdEluZm9fdmFyICh2b2lkKTsKCiAgICBPUkJJbml0SW5mb192YXIgJm9wZXJhdG9yPSAo
T1JCSW5pdEluZm9fcHRyKTsKICAgIE9SQkluaXRJbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBP
UkJJbml0SW5mb192YXIgJik7CiAgICBPUkJJbml0SW5mb19wdHIgb3BlcmF0b3ItPiAodm9pZCkg
Y29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgT1JCSW5pdEluZm9fcHRyICYoKSBjb25zdDsKICAg
IG9wZXJhdG9yIE9SQkluaXRJbmZvX3B0ciAmKCk7CgogICAgT1JCSW5pdEluZm9fcHRyIGluICh2
b2lkKSBjb25zdDsKICAgIE9SQkluaXRJbmZvX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgT1JCSW5p
dEluZm9fcHRyICZvdXQgKHZvaWQpOwogICAgT1JCSW5pdEluZm9fcHRyIF9yZXRuICh2b2lkKTsK
ICAgIE9SQkluaXRJbmZvX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIE9SQklu
aXRJbmZvX3B0ciBkdXBsaWNhdGUgKE9SQkluaXRJbmZvX3B0cik7CiAgICBzdGF0aWMgdm9pZCBy
ZWxlYXNlIChPUkJJbml0SW5mb19wdHIpOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBuaWwg
KHZvaWQpOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3Qg
KiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNh
c3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBPUkJJbml0SW5mb19wdHIgcHRyXzsKCiAgICBP
UkJJbml0SW5mb192YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIE9SQkluaXRJbmZv
X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxODgzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
SW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgT1JCSW5pdEluZm9fb3V0CiAgewogIHB1YmxpYzoKICAg
IE9SQkluaXRJbmZvX291dCAoT1JCSW5pdEluZm9fcHRyICYpOwogICAgT1JCSW5pdEluZm9fb3V0
IChPUkJJbml0SW5mb192YXIgJik7CiAgICBPUkJJbml0SW5mb19vdXQgKGNvbnN0IE9SQkluaXRJ
bmZvX291dCAmKTsKICAgIE9SQkluaXRJbmZvX291dCAmb3BlcmF0b3I9IChjb25zdCBPUkJJbml0
SW5mb19vdXQgJik7CiAgICBPUkJJbml0SW5mb19vdXQgJm9wZXJhdG9yPSAoY29uc3QgT1JCSW5p
dEluZm9fdmFyICYpOwogICAgT1JCSW5pdEluZm9fb3V0ICZvcGVyYXRvcj0gKE9SQkluaXRJbmZv
X3B0cik7CiAgICBvcGVyYXRvciBPUkJJbml0SW5mb19wdHIgJigpOwogICAgT1JCSW5pdEluZm9f
cHRyICZwdHIgKHZvaWQpOwogICAgT1JCSW5pdEluZm9fcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoK
ICBwcml2YXRlOgogICAgT1JCSW5pdEluZm9fcHRyICZwdHJfOwogIH07CiMgMTkwNyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVy
Y2VwdG9yQy5oIgpjbGFzcyBPUkJJbml0SW5mbyA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVj
dAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBPUkJJbml0SW5mb19wdHIgX3B0cl90eXBlOwog
ICAgdHlwZWRlZiBPUkJJbml0SW5mb192YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIE9SQklu
aXRJbmZvX3B0ciBfZHVwbGljYXRlIChPUkJJbml0SW5mb19wdHIgb2JqKTsKICAgIHN0YXRpYyBP
UkJJbml0SW5mb19wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3Rh
dGljIE9SQkluaXRJbmZvX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9i
amVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgICApOwogICAgc3RhdGljIE9SQkluaXRJbmZvX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIChPUkJJbml0SW5mb19wdHIpMDsKICAgICAgfQoKICAgIHR5cGVkZWYgY2hh
ciAqIE9iamVjdElkOwogICAgdHlwZWRlZiBDT1JCQTo6U3RyaW5nX3ZhciBPYmplY3RJZF92YXI7
CiAgICB0eXBlZGVmIENPUkJBOjpTdHJpbmdfb3V0IE9iamVjdElkX291dDsKCgoKCiAgICBjbGFz
cyBEdXBsaWNhdGVOYW1lIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIFRBT19TdHJpbmdfTWFuYWdlciBuYW1lOwoKICAgICAgRHVwbGljYXRlTmFt
ZSAodm9pZCk7CgoKICAgICAgRHVwbGljYXRlTmFtZSAoY29uc3QgRHVwbGljYXRlTmFtZSAmKTsK
CgogICAgICB+RHVwbGljYXRlTmFtZSAodm9pZCk7CgoKICAgICAgRHVwbGljYXRlTmFtZSAmb3Bl
cmF0b3I9IChjb25zdCBEdXBsaWNhdGVOYW1lICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlz
ZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFP
X091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNv
bnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1
dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAg
c3RhdGljIER1cGxpY2F0ZU5hbWUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCiAg
ICAgIER1cGxpY2F0ZU5hbWUgKAogICAgICAgICAgY29uc3QgY2hhciAqIF90YW9fbmFtZQogICAg
ICAgICk7CgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAg
ICB9OwojIDE5ODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICAgIGNsYXNzIEludmFsaWROYW1lIDogcHVi
bGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBJbnZhbGlk
TmFtZSAodm9pZCk7CgoKICAgICAgSW52YWxpZE5hbWUgKGNvbnN0IEludmFsaWROYW1lICYpOwoK
CiAgICAgIH5JbnZhbGlkTmFtZSAodm9pZCk7CgoKICAgICAgSW52YWxpZE5hbWUgJm9wZXJhdG9y
PSAoY29uc3QgSW52YWxpZE5hbWUgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lk
KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0
Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYs
CiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMg
SW52YWxpZE5hbWUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3Rh
dGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwoKCgoKICAgIHZpcnR1
YWwgQ09SQkE6OlN0cmluZ1NlcSAqIGFyZ3VtZW50cyAoCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBjaGFyICogb3JiX2lkICgKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB
OjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIElPUDo6Q29kZWNGYWN0b3J5
X3B0ciBjb2RlY19mYWN0b3J5ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l
bnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7
CgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJfaW5pdGlhbF9yZWZlcmVuY2UgKAogICAgICAg
IGNvbnN0IGNoYXIgKiBpZCwKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6
SW52YWxpZE5hbWUgKSA9IDA7CgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2JqZWN0X3B0ciByZXNv
bHZlX2luaXRpYWxfcmVmZXJlbmNlcyAoCiAgICAgICAgY29uc3QgY2hhciAqIGlkLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICgg
Q09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdEluZm86
OkludmFsaWROYW1lICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBhZGRfY2xpZW50X3JlcXVl
c3RfaW50ZXJjZXB0b3IgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVl
c3RJbnRlcmNlcHRvcl9wdHIgaW50ZXJjZXB0b3IsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0
aW9uLCBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6RHVwbGljYXRlTmFtZSApID0g
MDsKCgoKCiAgICB2aXJ0dWFsIHZvaWQgYWRkX3NlcnZlcl9yZXF1ZXN0X2ludGVyY2VwdG9yICgK
ICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRy
IGludGVyY2VwdG9yLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVJbnRl
cmNlcHRvcjo6T1JCSW5pdEluZm86OkR1cGxpY2F0ZU5hbWUgKSA9IDA7CgoKCgogICAgdmlydHVh
bCB2b2lkIGFkZF9pb3JfaW50ZXJjZXB0b3IgKAogICAgICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6
OklPUkludGVyY2VwdG9yX3B0ciBpbnRlcmNlcHRvciwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvOjpEdXBsaWNhdGVOYW1lICkg
PSAwOwoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2xvdElkIGFsbG9jYXRl
X3Nsb3RfaWQgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZp
cnR1YWwgdm9pZCByZWdpc3Rlcl9wb2xpY3lfZmFjdG9yeSAoCiAgICAgICAgQ09SQkE6OlBvbGlj
eVR5cGUgdHlwZSwKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5X3B0
ciBwb2xpY3lfZmFjdG9yeSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoK
CiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUp
OwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lk
KSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgT1JCSW5pdEluZm8gKCk7CgogICAgdmlydHVhbCB+
T1JCSW5pdEluZm8gKHZvaWQpOwogIHByaXZhdGU6CiAgICBPUkJJbml0SW5mbyAoY29uc3QgT1JC
SW5pdEluZm8gJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgT1JCSW5pdEluZm8gJik7CiAg
fTsKIyAyMTM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiAgY2xhc3MgT1JCSW5pdGlhbGl6ZXI7CiAgdHlw
ZWRlZiBPUkJJbml0aWFsaXplciAqT1JCSW5pdGlhbGl6ZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBP
UkJJbml0aWFsaXplcl92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAg
IE9SQkluaXRpYWxpemVyX3ZhciAodm9pZCk7CiAgICBPUkJJbml0aWFsaXplcl92YXIgKE9SQklu
aXRpYWxpemVyX3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBPUkJJbml0aWFsaXplcl92YXIgKGNv
bnN0IE9SQkluaXRpYWxpemVyX3ZhciAmKTsKICAgIH5PUkJJbml0aWFsaXplcl92YXIgKHZvaWQp
OwoKICAgIE9SQkluaXRpYWxpemVyX3ZhciAmb3BlcmF0b3I9IChPUkJJbml0aWFsaXplcl9wdHIp
OwogICAgT1JCSW5pdGlhbGl6ZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IE9SQkluaXRpYWxpemVy
X3ZhciAmKTsKICAgIE9SQkluaXRpYWxpemVyX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsK
CiAgICBvcGVyYXRvciBjb25zdCBPUkJJbml0aWFsaXplcl9wdHIgJigpIGNvbnN0OwogICAgb3Bl
cmF0b3IgT1JCSW5pdGlhbGl6ZXJfcHRyICYoKTsKCiAgICBPUkJJbml0aWFsaXplcl9wdHIgaW4g
KHZvaWQpIGNvbnN0OwogICAgT1JCSW5pdGlhbGl6ZXJfcHRyICZpbm91dCAodm9pZCk7CiAgICBP
UkJJbml0aWFsaXplcl9wdHIgJm91dCAodm9pZCk7CiAgICBPUkJJbml0aWFsaXplcl9wdHIgX3Jl
dG4gKHZvaWQpOwogICAgT1JCSW5pdGlhbGl6ZXJfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAg
ICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIGR1cGxpY2F0ZSAoT1JCSW5pdGlhbGl6ZXJfcHRy
KTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKE9SQkluaXRpYWxpemVyX3B0cik7CiAgICBzdGF0
aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6
ZXJfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAg
ICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAg
IE9SQkluaXRpYWxpemVyX3B0ciBwdHJfOwoKICAgIE9SQkluaXRpYWxpemVyX3ZhciAoY29uc3Qg
VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgT1JCSW5pdGlhbGl6ZXJfdmFyICZvcGVyYXRvcj0gKGNv
bnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDIxODYgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaCIKICBj
bGFzcyBPUkJJbml0aWFsaXplcl9vdXQKICB7CiAgcHVibGljOgogICAgT1JCSW5pdGlhbGl6ZXJf
b3V0IChPUkJJbml0aWFsaXplcl9wdHIgJik7CiAgICBPUkJJbml0aWFsaXplcl9vdXQgKE9SQklu
aXRpYWxpemVyX3ZhciAmKTsKICAgIE9SQkluaXRpYWxpemVyX291dCAoY29uc3QgT1JCSW5pdGlh
bGl6ZXJfb3V0ICYpOwogICAgT1JCSW5pdGlhbGl6ZXJfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IE9S
QkluaXRpYWxpemVyX291dCAmKTsKICAgIE9SQkluaXRpYWxpemVyX291dCAmb3BlcmF0b3I9IChj
b25zdCBPUkJJbml0aWFsaXplcl92YXIgJik7CiAgICBPUkJJbml0aWFsaXplcl9vdXQgJm9wZXJh
dG9yPSAoT1JCSW5pdGlhbGl6ZXJfcHRyKTsKICAgIG9wZXJhdG9yIE9SQkluaXRpYWxpemVyX3B0
ciAmKCk7CiAgICBPUkJJbml0aWFsaXplcl9wdHIgJnB0ciAodm9pZCk7CiAgICBPUkJJbml0aWFs
aXplcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBPUkJJbml0aWFsaXpl
cl9wdHIgJnB0cl87CiAgfTsKIyAyMjEwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCmNsYXNzIE9SQkluaXRp
YWxpemVyIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2JqZWN0CiAgewogIHB1YmxpYzoKCiAgICB0
eXBlZGVmIE9SQkluaXRpYWxpemVyX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIE9SQkluaXRp
YWxpemVyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIF9k
dXBsaWNhdGUgKE9SQkluaXRpYWxpemVyX3B0ciBvYmopOwogICAgc3RhdGljIE9SQkluaXRpYWxp
emVyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgT1JC
SW5pdGlhbGl6ZXJfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0
X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg
ICk7CiAgICBzdGF0aWMgT1JCSW5pdGlhbGl6ZXJfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAg
ICAgICByZXR1cm4gKE9SQkluaXRpYWxpemVyX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCB2
b2lkIHByZV9pbml0ICgKICAgICAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mb19w
dHIgaW5mbwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9
IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgcG9zdF9pbml0ICgKICAgICAgICBQb3J0YWJsZUludGVy
Y2VwdG9yOjpPUkJJbml0SW5mb19wdHIgaW5mbwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJB
OjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJ
bnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2lu
dGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgT1JC
SW5pdGlhbGl6ZXIgKCk7CgogICAgdmlydHVhbCB+T1JCSW5pdGlhbGl6ZXIgKHZvaWQpOwogIHBy
aXZhdGU6CiAgICBPUkJJbml0aWFsaXplciAoY29uc3QgT1JCSW5pdGlhbGl6ZXIgJik7CiAgICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgT1JCSW5pdGlhbGl6ZXIgJik7CiAgfTsKCgoKCgoKZXh0ZXJu
IHZvaWQgcmVnaXN0ZXJfb3JiX2luaXRpYWxpemVyICgKICBPUkJJbml0aWFsaXplcl9wdHIgaW5p
dCwKICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7Cgp9CgoKICAgICAgICAgICB2b2lkIG9wZXJh
dG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFBvcnRhYmxlSW50ZXJjZXB0b3I6OkZvcndhcmRS
ZXF1ZXN0ICYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9y
dGFibGVJbnRlcmNlcHRvcjo6Rm9yd2FyZFJlcXVlc3QqKTsKICAgICAgICAgICBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZUludGVyY2VwdG9y
OjpGb3J3YXJkUmVxdWVzdCAqJik7CiAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6Rm9yd2Fy
ZFJlcXVlc3QgKiYpOwogICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwg
Y29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6SW52YWxpZFNsb3QgJik7CiAgICAgICAgICAgdm9p
ZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlk
U2xvdCopOwogICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC
QTo6QW55ICYsIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludmFsaWRTbG90IComKTsKICAgICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBQ
b3J0YWJsZUludGVyY2VwdG9yOjpJbnZhbGlkU2xvdCAqJik7CiMgMjI5OCAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9y
Qy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGlu
ZSBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJj
ZXB0b3JfSW50ZXJjZXB0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6Oklu
dGVyY2VwdG9yX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkludGVy
Y2VwdG9yOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJj
ZXB0b3JfSW50ZXJjZXB0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpJbnRl
cmNlcHRvcl9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRh
YmxlSW50ZXJjZXB0b3I6OkludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9J
bnRlcmNlcHRvcl9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw
dG9yOjpJbnRlcmNlcHRvcjo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6
OkludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9JbnRlcmNlcHRvcl9uYXJy
b3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw
dG9yOjpJbnRlcmNlcHRvcjo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3Jf
SW50ZXJjZXB0b3JfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJj
ZXB0b3I6OkludGVyY2VwdG9yICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJj
ZXB0b3I6OkludGVyY2VwdG9yICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsKfQojIDg0ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50
ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDdXJyZW50X3B0cgp0YW9f
UG9ydGFibGVJbnRlcmNlcHRvcl9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVy
Y2VwdG9yOjpDdXJyZW50X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6
OkN1cnJlbnQ6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRl
cmNlcHRvcl9DdXJyZW50X3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVu
dF9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50
ZXJjZXB0b3I6OkN1cnJlbnRfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0N1cnJlbnRfbmls
ICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudDo6
X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkN1cnJlbnRfcHRyCnRhb19Q
b3J0YWJsZUludGVyY2VwdG9yX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAs
CiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK
ICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudDo6X25hcnJvdyAocCwg
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0
ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfQ3VycmVudF91cGNhc3QgKAogICAgdm9pZCAqc3Jj
CiAgKQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q3VycmVudCAqKnRtcCA9CiAgICBzdGF0aWNf
Y2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpDdXJyZW50ICoqPiAoc3JjKTsKICByZXR1cm4gKnRt
cDsKfQojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6
UmVxdWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX2R1cGxp
Y2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mb19wdHIgcAogICkKewog
IHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbzo6X2R1cGxpY2F0ZSAocCk7
Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX3JlbGVh
c2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm9fcHRyIHAKICApCnsKICBD
T1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0
SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUmVxdWVzdEluZm9fbmlsICgKICAgIHZv
aWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm86Ol9uaWwg
KCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mb19wdHIKdGFvX1Bv
cnRhYmxlSW50ZXJjZXB0b3JfUmVxdWVzdEluZm9fbmFycm93ICgKICAgIENPUkJBOjpPYmplY3Qg
KnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UmVxdWVzdEluZm86Ol9uYXJy
b3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6
Ok9iamVjdCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1JlcXVlc3RJbmZvX3VwY2FzdCAoCiAg
ICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbyAqKnRt
cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpSZXF1ZXN0SW5mbyAqKj4g
KHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBv
cnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvX3B0cgp0YW9fUG9ydGFibGVJbnRl
cmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb19kdXBsaWNhdGUgKAogICAgUG9ydGFibGVJbnRlcmNl
cHRvcjo6Q2xpZW50UmVxdWVzdEluZm9fcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRl
cmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm86Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9p
ZAp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb19yZWxlYXNlICgKICAg
IFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvX3B0ciBwCiAgKQp7CiAgQ09S
QkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVx
dWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbmZvX25p
bCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OkNsaWVudFJl
cXVlc3RJbmZvOjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50
UmVxdWVzdEluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbmZv
X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpwLAogICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50
ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbmZvOjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVJ
bnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0SW5mb191cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7
CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm8gKip0bXAgPQogICAgc3Rh
dGljX2Nhc3Q8UG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVxdWVzdEluZm8gKio+IChzcmMp
OwogIHJldHVybiAqdG1wOwp9CiMgMjM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJs
ZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0
b3JfU2VydmVyUmVxdWVzdEluZm9fZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6
OlNlcnZlclJlcXVlc3RJbmZvX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0
b3I6OlNlcnZlclJlcXVlc3RJbmZvOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFv
X1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVxdWVzdEluZm9fcmVsZWFzZSAoCiAgICBQb3J0
YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mb19wdHIgcAogICkKewogIENPUkJBOjpy
ZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJ
bmZvX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW5mb19uaWwgKAog
ICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1ZXN0
SW5mbzo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVl
c3RJbmZvX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW5mb19uYXJy
b3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2Vw
dG9yOjpTZXJ2ZXJSZXF1ZXN0SW5mbzo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJj
ZXB0b3JfU2VydmVyUmVxdWVzdEluZm9fdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBv
cnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbmZvICoqdG1wID0KICAgIHN0YXRpY19j
YXN0PFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbmZvICoqPiAoc3JjKTsKICBy
ZXR1cm4gKnRtcDsKfQojIDI4NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRl
cmNlcHRvcjo6Q2xpZW50UmVxdWVzdEludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNl
cHRvcl9DbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50
ZXJjZXB0b3I6OkNsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9wdHIgcAogICkKewogIHJldHVybiBQ
b3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3I6Ol9kdXBsaWNhdGUg
KHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9DbGllbnRSZXF1ZXN0
SW50ZXJjZXB0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1
ZXN0SW50ZXJjZXB0b3JfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGlu
ZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyCnRhb19Q
b3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl9uaWwgKAogICAgdm9p
ZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJj
ZXB0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1
ZXN0SW50ZXJjZXB0b3JfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJ
bnRlcmNlcHRvcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQ
b3J0YWJsZUludGVyY2VwdG9yOjpDbGllbnRSZXF1ZXN0SW50ZXJjZXB0b3I6Ol9uYXJyb3cgKHAs
IF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVj
dCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0NsaWVudFJlcXVlc3RJbnRlcmNlcHRvcl91cGNh
c3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6Q2xpZW50UmVx
dWVzdEludGVyY2VwdG9yICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJjZXB0
b3I6OkNsaWVudFJlcXVlc3RJbnRlcmNlcHRvciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0K
IyAzMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
UG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZl
clJlcXVlc3RJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVx
dWVzdEludGVyY2VwdG9yX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2
ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNl
cHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5l
IHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfU2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3Jl
bGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9y
X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRl
cmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yX3B0cgp0YW9fUG9ydGFibGVJbnRlcmNl
cHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1
cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfbmlsICgp
Owp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9y
X3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfbmFy
cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNl
cHRvcjo6U2VydmVyUmVxdWVzdEludGVyY2VwdG9yOjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFi
bGVJbnRlcmNlcHRvcl9TZXJ2ZXJSZXF1ZXN0SW50ZXJjZXB0b3JfdXBjYXN0ICgKICAgIHZvaWQg
KnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlNlcnZlclJlcXVlc3RJbnRlcmNlcHRv
ciAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpTZXJ2ZXJSZXF1
ZXN0SW50ZXJjZXB0b3IgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9CiMgMzg0ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJj
ZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbmZvX3B0cgp0YW9fUG9y
dGFibGVJbnRlcmNlcHRvcl9JT1JJbmZvX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2Vw
dG9yOjpJT1JJbmZvX3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6OklP
UkluZm86Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVJbnRlcmNl
cHRvcl9JT1JJbmZvX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mb19w
dHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJj
ZXB0b3I6OklPUkluZm9fcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkluZm9fbmlsICgK
ICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbzo6X25p
bCAoKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6OklPUkluZm9fcHRyCnRhb19Qb3J0
YWJsZUludGVyY2VwdG9yX0lPUkluZm9fbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAp
CnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbzo6X25hcnJvdyAocCwgX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoK
dGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW5mb191cGNhc3QgKAogICAgdm9pZCAqc3JjCiAg
KQp7CiAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW5mbyAqKnRtcCA9CiAgICBzdGF0aWNfY2Fz
dDxQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbmZvICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK
fQojIDQzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9S
SW50ZXJjZXB0b3JfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkludGVyY2VwdG9yX2R1
cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvcl9wdHIgcAog
ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvcjo6X2R1cGxp
Y2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX0lPUkludGVy
Y2VwdG9yX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRvcjo6SU9SSW50ZXJjZXB0b3Jf
cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVy
Y2VwdG9yOjpJT1JJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW50
ZXJjZXB0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRv
cjo6SU9SSW50ZXJjZXB0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9y
OjpJT1JJbnRlcmNlcHRvcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfSU9SSW50ZXJjZXB0
b3JfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVJ
bnRlcmNlcHRvcjo6SU9SSW50ZXJjZXB0b3I6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZUlu
dGVyY2VwdG9yX0lPUkludGVyY2VwdG9yX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQ
b3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvciAqKnRtcCA9CiAgICBzdGF0aWNfY2Fz
dDxQb3J0YWJsZUludGVyY2VwdG9yOjpJT1JJbnRlcmNlcHRvciAqKj4gKHNyYyk7CiAgcmV0dXJu
ICp0bXA7Cn0KIyA0ODQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMuaSIKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0
b3I6OlBvbGljeUZhY3RvcnlfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1BvbGljeUZhY3Rv
cnlfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6OlBvbGljeUZhY3RvcnlfcHRy
IHAKICApCnsKICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6UG9saWN5RmFjdG9yeTo6X2R1
cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX1BvbGlj
eUZhY3RvcnlfcmVsZWFzZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5
X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVJbnRl
cmNlcHRvcjo6UG9saWN5RmFjdG9yeV9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUG9saWN5
RmFjdG9yeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9y
OjpQb2xpY3lGYWN0b3J5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVJbnRlcmNlcHRvcjo6
UG9saWN5RmFjdG9yeV9wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfUG9saWN5RmFjdG9yeV9u
YXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZUludGVy
Y2VwdG9yOjpQb2xpY3lGYWN0b3J5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVJbnRlcmNl
cHRvcl9Qb2xpY3lGYWN0b3J5X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJs
ZUludGVyY2VwdG9yOjpQb2xpY3lGYWN0b3J5ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRh
YmxlSW50ZXJjZXB0b3I6OlBvbGljeUZhY3RvcnkgKio+IChzcmMpOwogIHJldHVybiAqdG1wOwp9
CiMgNTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFv
L1BvcnRhYmxlSW50ZXJjZXB0b3JDLmkiCmlubGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ
bml0SW5mb19wdHIKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fZHVwbGljYXRl
ICgKICAgIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvX3B0ciBwCiAgKQp7CiAgcmV0
dXJuIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvOjpfZHVwbGljYXRlIChwKTsKfQoK
aW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fcmVsZWFzZSAo
CiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mb19wdHIgcAogICkKewogIENPUkJB
OjpyZWxlYXNlIChwKTsKfQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZv
X3B0cgp0YW9fUG9ydGFibGVJbnRlcmNlcHRvcl9PUkJJbml0SW5mb19uaWwgKAogICAgdm9pZAog
ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6X25pbCAoKTsK
fQoKaW5saW5lIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvX3B0cgp0YW9fUG9ydGFi
bGVJbnRlcmNlcHRvcl9PUkJJbml0SW5mb19uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwK
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQog
ICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0SW5mbzo6X25hcnJvdyAo
cCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2Jq
ZWN0ICoKdGFvX1BvcnRhYmxlSW50ZXJjZXB0b3JfT1JCSW5pdEluZm9fdXBjYXN0ICgKICAgIHZv
aWQgKnNyYwogICkKewogIFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvICoqdG1wID0K
ICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlSW50ZXJjZXB0b3I6Ok9SQkluaXRJbmZvICoqPiAoc3Jj
KTsKICByZXR1cm4gKnRtcDsKfQojIDU5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZUludGVyY2VwdG9yQy5pIgppbmxpbmUgUG9ydGFi
bGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXJfcHRyCnRhb19Qb3J0YWJsZUludGVyY2VwdG9y
X09SQkluaXRpYWxpemVyX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ
bml0aWFsaXplcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJ
bml0aWFsaXplcjo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZUlu
dGVyY2VwdG9yX09SQkluaXRpYWxpemVyX3JlbGVhc2UgKAogICAgUG9ydGFibGVJbnRlcmNlcHRv
cjo6T1JCSW5pdGlhbGl6ZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlu
bGluZSBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplcl9wdHIKdGFvX1BvcnRhYmxl
SW50ZXJjZXB0b3JfT1JCSW5pdGlhbGl6ZXJfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4g
UG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQ
b3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplcl9wdHIKdGFvX1BvcnRhYmxlSW50ZXJj
ZXB0b3JfT1JCSW5pdGlhbGl6ZXJfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK
ICByZXR1cm4gUG9ydGFibGVJbnRlcmNlcHRvcjo6T1JCSW5pdGlhbGl6ZXI6Ol9uYXJyb3cgKHAs
IF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVj
dCAqCnRhb19Qb3J0YWJsZUludGVyY2VwdG9yX09SQkluaXRpYWxpemVyX3VwY2FzdCAoCiAgICB2
b2lkICpzcmMKICApCnsKICBQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplciAqKnRt
cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZUludGVyY2VwdG9yOjpPUkJJbml0aWFsaXplciAq
Kj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KCgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZUludGVyY2VwdG9yOjpG
b3J3YXJkUmVxdWVzdCAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dy
ZWdhdGUuX2lkICgpKQogIHsKCiAgICBpZiAoCiAgICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRl
LmZvcndhcmQuaW4gKCkpICYmCiAgICAgIChzdHJtIDw8IENPUkJBOjpBbnk6OmZyb21fYm9vbGVh
biAoX3Rhb19hZ2dyZWdhdGUucGVybWFuZW50KSkKICAgICkKICAgICAgcmV0dXJuIDE7CiAgICBl
bHNlCiAgICAgIHJldHVybiAwOwogIH0KICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSxQb3J0YWJsZUludGVy
Y2VwdG9yOjpGb3J3YXJkUmVxdWVzdCAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKAogICAgKHN0
cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZm9yd2FyZC5vdXQgKCkpICYmCiAgICAoc3RybSA+PiBDT1JC
QTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5wZXJtYW5lbnQpKQogICkKICAgIHJl
dHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVJbnRlcmNlcHRvcjo6
SW52YWxpZFNsb3QgJl90YW9fYWdncmVnYXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVn
YXRlLl9pZCAoKSkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUg
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICYsUG9ydGFibGVJbnRlcmNl
cHRvcjo6SW52YWxpZFNsb3QmKQp7CiAgcmV0dXJuIDE7Cn0KIyAyMjk5ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JD
LmgiIDIKIyAyMzA5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlSW50ZXJjZXB0b3JDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDIzMTAgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVJbnRlcmNlcHRvckMu
aCIgMgojIDc2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL2NvcmJhLmgiIDIKIyA4NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9jb3JiYS5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYS5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VD
LmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3Mvc3ZjX3V0aWxzX2V4cG9ydC5oIiAxCiMgMTAgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mvc3Zj
X3V0aWxzX2V4cG9ydC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9jb25maWctYWxsLmgiIDEKIyAxMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9zdmNfdXRpbHNfZXhwb3J0Lmgi
IDIKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vVGltZUJhc2VDLmgiIDEKIyAzNCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1l
QmFzZUMuaCIgMgojIDY2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VDLmki
IDEKIyA2NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDc3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlQy5oIgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEK
IyA3OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9UaW1lQmFzZUMuaCIgMgojIDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlUy5oIiAyCgoKCgoK
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMjAgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT
ZXJ2ZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcHJlLmgiIDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAyCgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2
ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0LmgiIDEKIyAxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZl
cl9leHBvcnQuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9hY2UvY29uZmlnLWFsbC5oIiAxCiMgMTEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0
LmgiIDIKIyAyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAyCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAxCiMgMjQg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi
bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXIuaCIgMgoKCgoKCmNsYXNzIFRBT19QT0FfSW5pdGlhbGl6
ZXIKewpwdWJsaWM6CiAgc3RhdGljIGludCBpbml0ICh2b2lkKTsKCn07CiMgNDUgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv
UG9ydGFibGVTZXJ2ZXIuaCIKc3RhdGljIGludApUQU9fUmVxdWlyZXNfUE9BX0luaXRpYWxpemVy
ID0gVEFPX1BPQV9Jbml0aWFsaXplcjo6aW5pdCAoKTsKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs
ZVNlcnZlckMuaCIgMQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
U2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9l
eHBvcnQuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9jb3JiYWZ3ZC5oIiAx
CiMgMjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
UG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQ3VycmVudEMuaCIgMQojIDM0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRh
YmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb2xpY3lDLmgiIDEKIyAzNSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q
b3J0YWJsZVNlcnZlckMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vVHlwZWNvZGUuaCIgMQojIDM2ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy
dmVyQy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9BbnkuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgNjEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi
bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIFRBT19TZXJ2YW50QmFzZTsKY2xhc3Mg
VEFPX1NlcnZhbnRCYXNlX3ZhcjsKY2xhc3MgVEFPX1JlZkNvdW50U2VydmFudEJhc2U7CmNsYXNz
IFRBT19Mb2NhbF9TZXJ2YW50QmFzZTsKY2xhc3MgVEFPX0R5bmFtaWNJbXBsZW1lbnRhdGlvbjsK
Y2xhc3MgVEFPX1BPQTsKCm5hbWVzcGFjZSBQb3J0YWJsZVNlcnZlcgp7CiAgdHlwZWRlZiBUQU9f
U2VydmFudEJhc2UgU2VydmFudEJhc2U7CiAgdHlwZWRlZiBUQU9fU2VydmFudEJhc2VfdmFyIFNl
cnZhbnRCYXNlX3ZhcjsKICB0eXBlZGVmIFRBT19SZWZDb3VudFNlcnZhbnRCYXNlIFJlZkNvdW50
U2VydmFudEJhc2U7CiAgdHlwZWRlZiBTZXJ2YW50QmFzZSAqU2VydmFudDsKCiAgdHlwZWRlZiBU
QU9fTG9jYWxfU2VydmFudEJhc2UgTG9jYWxTZXJ2YW50QmFzZTsKICB0eXBlZGVmIFRBT19EeW5h
bWljSW1wbGVtZW50YXRpb24gRHluYW1pY0ltcGxlbWVudGF0aW9uOwoKICBjbGFzcyBQT0E7CgoK
CgogIHR5cGVkZWYgUE9BICpQT0FfcHRyOwoKCgoKCgoKICBjbGFzcyBQT0FfdmFyIDogcHVibGlj
IFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQT0FfdmFyICh2b2lkKTsKICAgIFBPQV92
YXIgKFBPQV9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgUE9BX3ZhciAoY29uc3QgUE9BX3ZhciAm
KTsKICAgIH5QT0FfdmFyICh2b2lkKTsKCiAgICBQT0FfdmFyICZvcGVyYXRvcj0gKFBPQV9wdHIp
OwogICAgUE9BX3ZhciAmb3BlcmF0b3I9IChjb25zdCBQT0FfdmFyICYpOwogICAgUE9BX3B0ciBv
cGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBQT0FfcHRyICYoKSBj
b25zdDsKICAgIG9wZXJhdG9yIFBPQV9wdHIgJigpOwoKICAgIFBPQV9wdHIgaW4gKHZvaWQpIGNv
bnN0OwogICAgUE9BX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgUE9BX3B0ciAmb3V0ICh2b2lkKTsK
ICAgIFBPQV9wdHIgX3JldG4gKHZvaWQpOwogICAgUE9BX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK
CgogICAgc3RhdGljIFBPQV9wdHIgZHVwbGljYXRlIChQT0FfcHRyKTsKICAgIHN0YXRpYyB2b2lk
IHJlbGVhc2UgKFBPQV9wdHIpOwogICAgc3RhdGljIFBPQV9wdHIgbmlsICh2b2lkKTsKICAgIHN0
YXRpYyBQT0FfcHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQg
Jik7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0
ZToKICAgIFBPQV9wdHIgcHRyXzsKCiAgICBQT0FfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgICBQT0FfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9
OwojIDEzNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBQT0Ffb3V0CiAgewog
IHB1YmxpYzoKICAgIFBPQV9vdXQgKFBPQV9wdHIgJik7CiAgICBQT0Ffb3V0IChQT0FfdmFyICYp
OwogICAgUE9BX291dCAoY29uc3QgUE9BX291dCAmKTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAo
Y29uc3QgUE9BX291dCAmKTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUE9BX3ZhciAm
KTsKICAgIFBPQV9vdXQgJm9wZXJhdG9yPSAoUE9BX3B0cik7CiAgICBvcGVyYXRvciBQT0FfcHRy
ICYoKTsKICAgIFBPQV9wdHIgJnB0ciAodm9pZCk7CiAgICBQT0FfcHRyIG9wZXJhdG9yLT4gKHZv
aWQpOwoKICBwcml2YXRlOgogICAgUE9BX3B0ciAmcHRyXzsKICB9OwojIDE2MCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q
b3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5j
ZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0IDogcHVibGljIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1
ZW5jZQogICAgewogICAgcHVibGljOgoKCiAgICAgIF9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1
ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0ICh2b2lkKTsKICAgICAgX1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhp
bXVtKTsKICAgICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVy
X1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5n
dGgsCiAgICAgICAgUE9BKiAqdmFsdWUsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9
IDApOwogICAgICBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJf
UE9BTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2
ZXJfUE9BTGlzdCAmcmhzKTsKICAgICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfT2JqZWN0X1Nl
cXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKHZvaWQpOwogICAgICBfVEFPX1VuYm91bmRl
ZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAmb3BlcmF0b3I9IChjb25z
dCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAm
cmhzKTsKICAgICAgVEFPX09iamVjdF9NYW5hZ2VyPFBvcnRhYmxlU2VydmVyOjpQT0EsUG9ydGFi
bGVTZXJ2ZXI6OlBPQV92YXI+IG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3Q7
CiAgICAgIHN0YXRpYyBQT0EgKiphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcyk7CiAgICAg
IHN0YXRpYyB2b2lkIGZyZWVidWYgKFBPQSAqKmJ1ZmZlcik7CgogICAgICB2aXJ0dWFsIHZvaWQg
X2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICAgIHZpcnR1YWwgdm9p
ZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgICBQT0EqICpnZXRfYnVmZmVyIChDT1JC
QTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAgICAgY29uc3QgUE9BKiAqZ2V0X2J1ZmZlciAodm9p
ZCkgY29uc3Q7CiAgICAgIHZpcnR1YWwgdm9pZCBfc2hyaW5rX2J1ZmZlciAoQ09SQkE6OlVMb25n
IG5sLCBDT1JCQTo6VUxvbmcgb2wpOwogICAgICB2aXJ0dWFsIHZvaWQgX2Rvd25jYXN0ICgKICAg
ICAgICAgIHZvaWQqIHRhcmdldCwKICAgICAgICAgIENPUkJBX09iamVjdCAqc3JjLAogICAgICAg
ICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAgICk7CiAgICAgIHZp
cnR1YWwgQ09SQkFfT2JqZWN0KiBfdXBjYXN0ICh2b2lkICpzcmMpIGNvbnN0OwoKICAgIH07CiMg
MjAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFBPQUxpc3Q7CiAgY2xhc3Mg
UE9BTGlzdF92YXI7CgoKCgoKICBjbGFzcyBQT0FMaXN0IDogcHVibGljCgogICAgX1RBT19VbmJv
dW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QKCgoKICB7CiAgcHVi
bGljOgogICAgUE9BTGlzdCAodm9pZCk7CiAgICBQT0FMaXN0IChDT1JCQTo6VUxvbmcgbWF4KTsK
ICAgIFBPQUxpc3QgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4LAogICAgICBDT1JCQTo6VUxvbmcg
bGVuZ3RoLAogICAgICBQT0FfcHRyICpidWZmZXIsCiAgICAgIENPUkJBOjpCb29sZWFuIHJlbGVh
c2UgPSAwCiAgICApOwogICAgUE9BTGlzdCAoY29uc3QgUE9BTGlzdCAmKTsKICAgIH5QT0FMaXN0
ICh2b2lkKTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgog
ICAgdHlwZWRlZiBQT0FMaXN0X3ZhciBfdmFyX3R5cGU7CgoKICB9OwojIDI0NCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q
b3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBQT0FMaXN0X3ZhcgogIHsKICBwdWJsaWM6CiAgICBQ
T0FMaXN0X3ZhciAodm9pZCk7CiAgICBQT0FMaXN0X3ZhciAoUE9BTGlzdCAqKTsKICAgIFBPQUxp
c3RfdmFyIChjb25zdCBQT0FMaXN0X3ZhciAmKTsKICAgIH5QT0FMaXN0X3ZhciAodm9pZCk7Cgog
ICAgUE9BTGlzdF92YXIgJm9wZXJhdG9yPSAoUE9BTGlzdCAqKTsKICAgIFBPQUxpc3RfdmFyICZv
cGVyYXRvcj0gKGNvbnN0IFBPQUxpc3RfdmFyICYpOwogICAgUE9BTGlzdCAqb3BlcmF0b3ItPiAo
dm9pZCk7CiAgICBjb25zdCBQT0FMaXN0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBv
cGVyYXRvciBjb25zdCBQT0FMaXN0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFBPQUxpc3QgJigp
OwogICAgb3BlcmF0b3IgUE9BTGlzdCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQT0FMaXN0ICom
KCk7CgogICAgVEFPX09iamVjdF9NYW5hZ2VyPFBPQSwgUE9BX3Zhcj4gb3BlcmF0b3JbXSAoQ09S
QkE6OlVMb25nIGluZGV4KTsKCgogICAgY29uc3QgUE9BTGlzdCAmaW4gKHZvaWQpIGNvbnN0Owog
ICAgUE9BTGlzdCAmaW5vdXQgKHZvaWQpOwogICAgUE9BTGlzdCAqJm91dCAodm9pZCk7CiAgICBQ
T0FMaXN0ICpfcmV0biAodm9pZCk7CiAgICBQT0FMaXN0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBw
cml2YXRlOgogICAgUE9BTGlzdCAqcHRyXzsKICB9OwojIDI4MiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl
cnZlckMuaCIKICBjbGFzcyBQT0FMaXN0X291dAogIHsKICBwdWJsaWM6CiAgICBQT0FMaXN0X291
dCAoUE9BTGlzdCAqJik7CiAgICBQT0FMaXN0X291dCAoUE9BTGlzdF92YXIgJik7CiAgICBQT0FM
aXN0X291dCAoY29uc3QgUE9BTGlzdF9vdXQgJik7CiAgICBQT0FMaXN0X291dCAmb3BlcmF0b3I9
IChjb25zdCBQT0FMaXN0X291dCAmKTsKICAgIFBPQUxpc3Rfb3V0ICZvcGVyYXRvcj0gKFBPQUxp
c3QgKik7CiAgICBvcGVyYXRvciBQT0FMaXN0IComKCk7CiAgICBQT0FMaXN0IComcHRyICh2b2lk
KTsKICAgIFBPQUxpc3QgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgVEFPX09iamVjdF9NYW5hZ2Vy
PFBPQSwgUE9BX3Zhcj4gb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0
ZToKICAgIFBPQUxpc3QgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBQT0FMaXN0
X3ZhciAmKTsKICB9OwojIDMwOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBP
YmplY3RJZDsKICBjbGFzcyBPYmplY3RJZF92YXI7CgoKCgoKICBjbGFzcyBPYmplY3RJZCA6IHB1
YmxpYwoKICAgIFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PgoKCgogIHsKICBw
dWJsaWM6CiAgICBPYmplY3RJZCAodm9pZCk7CiAgICBPYmplY3RJZCAoQ09SQkE6OlVMb25nIG1h
eCk7CiAgICBPYmplY3RJZCAoCiAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAgICAgIENPUkJBOjpV
TG9uZyBsZW5ndGgsCiAgICAgIENPUkJBOjpPY3RldCAqYnVmZmVyLAogICAgICBDT1JCQTo6Qm9v
bGVhbiByZWxlYXNlID0gMAogICAgKTsKICAgIE9iamVjdElkIChjb25zdCBPYmplY3RJZCAmKTsK
ICAgIH5PYmplY3RJZCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9y
ICh2b2lkKik7CgoKICAgIHR5cGVkZWYgT2JqZWN0SWRfdmFyIF92YXJfdHlwZTsKCgoKCiAgICBP
YmplY3RJZCAoCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBjb25zdCBBQ0Vf
TWVzc2FnZV9CbG9jayogbWIKICAgICAgKQogICAgICA6IFRBT19VbmJvdW5kZWRfU2VxdWVuY2U8
Q09SQkE6Ok9jdGV0PiAobGVuZ3RoLCBtYikge30KCgogIH07CiMgMzYwICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRh
YmxlU2VydmVyQy5oIgogIGNsYXNzIE9iamVjdElkX3ZhcgogIHsKICBwdWJsaWM6CiAgICBPYmpl
Y3RJZF92YXIgKHZvaWQpOwogICAgT2JqZWN0SWRfdmFyIChPYmplY3RJZCAqKTsKICAgIE9iamVj
dElkX3ZhciAoY29uc3QgT2JqZWN0SWRfdmFyICYpOwogICAgT2JqZWN0SWRfdmFyIChjb25zdCBP
YmplY3RJZCAmKTsKICAgIH5PYmplY3RJZF92YXIgKHZvaWQpOwoKICAgIE9iamVjdElkX3ZhciAm
b3BlcmF0b3I9IChPYmplY3RJZCAqKTsKICAgIE9iamVjdElkX3ZhciAmb3BlcmF0b3I9IChjb25z
dCBPYmplY3RJZF92YXIgJik7CiAgICBPYmplY3RJZF92YXIgJm9wZXJhdG9yPSAoY29uc3QgT2Jq
ZWN0SWQgJik7CiAgICBPYmplY3RJZCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBPYmpl
Y3RJZCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgT2JqZWN0
SWQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgT2JqZWN0SWQgJigpOwogICAgb3BlcmF0b3IgT2Jq
ZWN0SWQgJigpIGNvbnN0OwoKICAgIENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpV
TG9uZyBpbmRleCk7CiAgICBjb25zdCBDT1JCQTo6T2N0ZXQgJiBvcGVyYXRvcltdIChDT1JCQTo6
VUxvbmcgaW5kZXgpIGNvbnN0OwoKCiAgICBjb25zdCBPYmplY3RJZCAmaW4gKHZvaWQpIGNvbnN0
OwogICAgT2JqZWN0SWQgJmlub3V0ICh2b2lkKTsKICAgIE9iamVjdElkIComb3V0ICh2b2lkKTsK
ICAgIE9iamVjdElkICpfcmV0biAodm9pZCk7CiAgICBPYmplY3RJZCAqcHRyICh2b2lkKSBjb25z
dDsKCiAgcHJpdmF0ZToKICAgIE9iamVjdElkICpwdHJfOwogIH07CiMgNDAwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1Bv
cnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIE9iamVjdElkX291dAogIHsKICBwdWJsaWM6CiAgICBP
YmplY3RJZF9vdXQgKE9iamVjdElkIComKTsKICAgIE9iamVjdElkX291dCAoT2JqZWN0SWRfdmFy
ICYpOwogICAgT2JqZWN0SWRfb3V0IChjb25zdCBPYmplY3RJZF9vdXQgJik7CiAgICBPYmplY3RJ
ZF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgT2JqZWN0SWRfb3V0ICYpOwogICAgT2JqZWN0SWRfb3V0
ICZvcGVyYXRvcj0gKE9iamVjdElkICopOwogICAgb3BlcmF0b3IgT2JqZWN0SWQgKiYoKTsKICAg
IE9iamVjdElkIComcHRyICh2b2lkKTsKICAgIE9iamVjdElkICpvcGVyYXRvci0+ICh2b2lkKTsK
ICAgIENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7CgogIHBy
aXZhdGU6CiAgICBPYmplY3RJZCAqJnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IE9i
amVjdElkX3ZhciAmKTsKICB9OwoKCgoKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
T2JqZWN0SWQ7CgoKCgoKCgogIGNsYXNzIEZvcndhcmRSZXF1ZXN0IDogcHVibGljIENPUkJBOjpV
c2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIENPUkJBOjpPYmplY3RfdmFyIGZvcndhcmRf
cmVmZXJlbmNlOwoKICAgIEZvcndhcmRSZXF1ZXN0ICh2b2lkKTsKCgogICAgRm9yd2FyZFJlcXVl
c3QgKGNvbnN0IEZvcndhcmRSZXF1ZXN0ICYpOwoKCiAgICB+Rm9yd2FyZFJlcXVlc3QgKHZvaWQp
OwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgRm9y
d2FyZFJlcXVlc3QgJm9wZXJhdG9yPSAoY29uc3QgRm9yd2FyZFJlcXVlc3QgJik7CgogICAgdmly
dHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgK
ICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg
ICAgKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgIFRBT19J
bnB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CgogICAgc3Rh
dGljIEZvcndhcmRSZXF1ZXN0ICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgogICAg
Rm9yd2FyZFJlcXVlc3QgKAogICAgICAgIGNvbnN0IENPUkJBOjpPYmplY3RfcHRyIF90YW9fZm9y
d2FyZF9yZWZlcmVuY2UKICAgICAgKTsKCgogICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9h
bGxvYyAodm9pZCk7CiAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQp
IGNvbnN0OwogIH07CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19Gb3J3YXJkUmVx
dWVzdDsKCgoKCgoKICBleHRlcm4gY29uc3QgQ09SQkE6OlVMb25nIFRIUkVBRF9QT0xJQ1lfSUQ7
CgogIGV4dGVybiBjb25zdCBDT1JCQTo6VUxvbmcgTElGRVNQQU5fUE9MSUNZX0lEOwoKICBleHRl
cm4gY29uc3QgQ09SQkE6OlVMb25nIElEX1VOSVFVRU5FU1NfUE9MSUNZX0lEOwoKICBleHRlcm4g
Y29uc3QgQ09SQkE6OlVMb25nIElEX0FTU0lHTk1FTlRfUE9MSUNZX0lEOwoKICBleHRlcm4gY29u
c3QgQ09SQkE6OlVMb25nIElNUExJQ0lUX0FDVElWQVRJT05fUE9MSUNZX0lEOwoKICBleHRlcm4g
Y29uc3QgQ09SQkE6OlVMb25nIFNFUlZBTlRfUkVURU5USU9OX1BPTElDWV9JRDsKCiAgZXh0ZXJu
IGNvbnN0IENPUkJBOjpVTG9uZyBSRVFVRVNUX1BST0NFU1NJTkdfUE9MSUNZX0lEOwoKICBlbnVt
IFRocmVhZFBvbGljeVZhbHVlCiAgewogICAgICAgIE9SQl9DVFJMX01PREVMLAogICAgICAgIFNJ
TkdMRV9USFJFQURfTU9ERUwKICB9OwoKCgogIHR5cGVkZWYgVGhyZWFkUG9saWN5VmFsdWUgJlRo
cmVhZFBvbGljeVZhbHVlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfVGhy
ZWFkUG9saWN5VmFsdWU7CgoKCgoKICBjbGFzcyBUaHJlYWRQb2xpY3k7CiAgdHlwZWRlZiBUaHJl
YWRQb2xpY3kgKlRocmVhZFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIFRocmVhZFBvbGljeV92
YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIFRocmVhZFBvbGljeV92
YXIgKHZvaWQpOwogICAgVGhyZWFkUG9saWN5X3ZhciAoVGhyZWFkUG9saWN5X3B0ciBwKSA6IHB0
cl8gKHApIHt9CiAgICBUaHJlYWRQb2xpY3lfdmFyIChjb25zdCBUaHJlYWRQb2xpY3lfdmFyICYp
OwogICAgflRocmVhZFBvbGljeV92YXIgKHZvaWQpOwoKICAgIFRocmVhZFBvbGljeV92YXIgJm9w
ZXJhdG9yPSAoVGhyZWFkUG9saWN5X3B0cik7CiAgICBUaHJlYWRQb2xpY3lfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IFRocmVhZFBvbGljeV92YXIgJik7CiAgICBUaHJlYWRQb2xpY3lfcHRyIG9wZXJh
dG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFRocmVhZFBvbGljeV9wdHIg
JigpIGNvbnN0OwogICAgb3BlcmF0b3IgVGhyZWFkUG9saWN5X3B0ciAmKCk7CgogICAgVGhyZWFk
UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBUaHJlYWRQb2xpY3lfcHRyICZpbm91dCAo
dm9pZCk7CiAgICBUaHJlYWRQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgVGhyZWFkUG9saWN5
X3B0ciBfcmV0biAodm9pZCk7CiAgICBUaHJlYWRQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7
CgoKCiAgICBzdGF0aWMgVGhyZWFkUG9saWN5X3B0ciBkdXBsaWNhdGUgKFRocmVhZFBvbGljeV9w
dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoVGhyZWFkUG9saWN5X3B0cik7CiAgICBzdGF0
aWMgVGhyZWFkUG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFRocmVhZFBvbGljeV9w
dHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0
YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgVGhy
ZWFkUG9saWN5X3B0ciBwdHJfOwoKICAgIFRocmVhZFBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNl
X3ZhciAmcmhzKTsKICAgIFRocmVhZFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jh
c2VfdmFyICZyaHMpOwogIH07CiMgNTU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNs
YXNzIFRocmVhZFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgVGhyZWFkUG9saWN5X291dCAo
VGhyZWFkUG9saWN5X3B0ciAmKTsKICAgIFRocmVhZFBvbGljeV9vdXQgKFRocmVhZFBvbGljeV92
YXIgJik7CiAgICBUaHJlYWRQb2xpY3lfb3V0IChjb25zdCBUaHJlYWRQb2xpY3lfb3V0ICYpOwog
ICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBUaHJlYWRQb2xpY3lfb3V0ICYp
OwogICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBUaHJlYWRQb2xpY3lfdmFy
ICYpOwogICAgVGhyZWFkUG9saWN5X291dCAmb3BlcmF0b3I9IChUaHJlYWRQb2xpY3lfcHRyKTsK
ICAgIG9wZXJhdG9yIFRocmVhZFBvbGljeV9wdHIgJigpOwogICAgVGhyZWFkUG9saWN5X3B0ciAm
cHRyICh2b2lkKTsKICAgIFRocmVhZFBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHBy
aXZhdGU6CiAgICBUaHJlYWRQb2xpY3lfcHRyICZwdHJfOwogIH07CiMgNTgzICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1Bv
cnRhYmxlU2VydmVyQy5oIgpjbGFzcyBUaHJlYWRQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJB
OjpQb2xpY3kKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgVGhyZWFkUG9saWN5X3B0ciBfcHRy
X3R5cGU7CiAgICB0eXBlZGVmIFRocmVhZFBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3Rh
dGljIFRocmVhZFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoVGhyZWFkUG9saWN5X3B0ciBvYmopOwog
ICAgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApOwogICAgc3RhdGljIFRocmVhZFBvbGljeV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAg
ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBUaHJlYWRQb2xpY3lfcHRyIF9uaWwgKHZv
aWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFRocmVhZFBvbGljeV9wdHIpMDsKICAgICAgfQoK
ICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlIHZhbHVlICgKICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90
YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk
OgogICAgVGhyZWFkUG9saWN5ICgpOwoKICAgIHZpcnR1YWwgflRocmVhZFBvbGljeSAodm9pZCk7
CiAgcHJpdmF0ZToKICAgIFRocmVhZFBvbGljeSAoY29uc3QgVGhyZWFkUG9saWN5ICYpOwogICAg
dm9pZCBvcGVyYXRvcj0gKGNvbnN0IFRocmVhZFBvbGljeSAmKTsKICB9OwoKCgoKCgogIGVudW0g
TGlmZXNwYW5Qb2xpY3lWYWx1ZQogIHsKICAgICAgICBUUkFOU0lFTlQsCiAgICAgICAgUEVSU0lT
VEVOVAogIH07CiAgdHlwZWRlZiBMaWZlc3BhblBvbGljeVZhbHVlICZMaWZlc3BhblBvbGljeVZh
bHVlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfTGlmZXNwYW5Qb2xpY3lW
YWx1ZTsKCgoKCgogIGNsYXNzIExpZmVzcGFuUG9saWN5OwogIHR5cGVkZWYgTGlmZXNwYW5Qb2xp
Y3kgKkxpZmVzcGFuUG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgTGlmZXNwYW5Qb2xpY3lfdmFy
IDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBMaWZlc3BhblBvbGljeV92
YXIgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfdmFyIChMaWZlc3BhblBvbGljeV9wdHIgcCkg
OiBwdHJfIChwKSB7fQogICAgTGlmZXNwYW5Qb2xpY3lfdmFyIChjb25zdCBMaWZlc3BhblBvbGlj
eV92YXIgJik7CiAgICB+TGlmZXNwYW5Qb2xpY3lfdmFyICh2b2lkKTsKCiAgICBMaWZlc3BhblBv
bGljeV92YXIgJm9wZXJhdG9yPSAoTGlmZXNwYW5Qb2xpY3lfcHRyKTsKICAgIExpZmVzcGFuUG9s
aWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBvbGljeV92YXIgJik7CiAgICBMaWZl
c3BhblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29u
c3QgTGlmZXNwYW5Qb2xpY3lfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIExpZmVzcGFuUG9s
aWN5X3B0ciAmKCk7CgogICAgTGlmZXNwYW5Qb2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAg
IExpZmVzcGFuUG9saWN5X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRy
ICZvdXQgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIExp
ZmVzcGFuUG9saWN5X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIExpZmVzcGFu
UG9saWN5X3B0ciBkdXBsaWNhdGUgKExpZmVzcGFuUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9p
ZCByZWxlYXNlIChMaWZlc3BhblBvbGljeV9wdHIpOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5
X3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBuYXJyb3cgKENP
UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP
YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBMaWZlc3BhblBvbGljeV9w
dHIgcHRyXzsKCiAgICBMaWZlc3BhblBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhz
KTsKICAgIExpZmVzcGFuUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIg
JnJocyk7CiAgfTsKIyA2OTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3MgTGlm
ZXNwYW5Qb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIExpZmVzcGFuUG9saWN5X291dCAoTGlm
ZXNwYW5Qb2xpY3lfcHRyICYpOwogICAgTGlmZXNwYW5Qb2xpY3lfb3V0IChMaWZlc3BhblBvbGlj
eV92YXIgJik7CiAgICBMaWZlc3BhblBvbGljeV9vdXQgKGNvbnN0IExpZmVzcGFuUG9saWN5X291
dCAmKTsKICAgIExpZmVzcGFuUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBv
bGljeV9vdXQgJik7CiAgICBMaWZlc3BhblBvbGljeV9vdXQgJm9wZXJhdG9yPSAoY29uc3QgTGlm
ZXNwYW5Qb2xpY3lfdmFyICYpOwogICAgTGlmZXNwYW5Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKExp
ZmVzcGFuUG9saWN5X3B0cik7CiAgICBvcGVyYXRvciBMaWZlc3BhblBvbGljeV9wdHIgJigpOwog
ICAgTGlmZXNwYW5Qb2xpY3lfcHRyICZwdHIgKHZvaWQpOwogICAgTGlmZXNwYW5Qb2xpY3lfcHRy
IG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgTGlmZXNwYW5Qb2xpY3lfcHRyICZw
dHJfOwogIH07CiMgNzIyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBMaWZlc3Bh
blBvbGljeTogcHVibGljIHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAg
dHlwZWRlZiBMaWZlc3BhblBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBMaWZlc3Bh
blBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBf
ZHVwbGljYXRlIChMaWZlc3BhblBvbGljeV9wdHIgb2JqKTsKICAgIHN0YXRpYyBMaWZlc3BhblBv
bGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIExp
ZmVzcGFuUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj
dF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApOwogICAgc3RhdGljIExpZmVzcGFuUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAg
ICAgICAgcmV0dXJuIChMaWZlc3BhblBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg
UG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWUgdmFsdWUgKAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUlu
dGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50
ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBMaWZl
c3BhblBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5MaWZlc3BhblBvbGljeSAodm9pZCk7CiAgcHJp
dmF0ZToKICAgIExpZmVzcGFuUG9saWN5IChjb25zdCBMaWZlc3BhblBvbGljeSAmKTsKICAgIHZv
aWQgb3BlcmF0b3I9IChjb25zdCBMaWZlc3BhblBvbGljeSAmKTsKICB9OwoKCgoKICBlbnVtIElk
VW5pcXVlbmVzc1BvbGljeVZhbHVlCiAgewogICAgICAgIFVOSVFVRV9JRCwKICAgICAgICBNVUxU
SVBMRV9JRAogIH07CiAgdHlwZWRlZiBJZFVuaXF1ZW5lc3NQb2xpY3lWYWx1ZSAmSWRVbmlxdWVu
ZXNzUG9saWN5VmFsdWVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JZFVu
aXF1ZW5lc3NQb2xpY3lWYWx1ZTsKCgoKCgogIGNsYXNzIElkVW5pcXVlbmVzc1BvbGljeTsKICB0
eXBlZGVmIElkVW5pcXVlbmVzc1BvbGljeSAqSWRVbmlxdWVuZXNzUG9saWN5X3B0cjsKCgoKCgoK
CiAgY2xhc3MgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7
CiAgcHVibGljOgogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAodm9pZCk7CiAgICBJZFVuaXF1
ZW5lc3NQb2xpY3lfdmFyIChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30K
ICAgIElkVW5pcXVlbmVzc1BvbGljeV92YXIgKGNvbnN0IElkVW5pcXVlbmVzc1BvbGljeV92YXIg
Jik7CiAgICB+SWRVbmlxdWVuZXNzUG9saWN5X3ZhciAodm9pZCk7CgogICAgSWRVbmlxdWVuZXNz
UG9saWN5X3ZhciAmb3BlcmF0b3I9IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyKTsKICAgIElkVW5p
cXVlbmVzc1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgSWRVbmlxdWVuZXNzUG9saWN5X3Zh
ciAmKTsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7
CgogICAgb3BlcmF0b3IgY29uc3QgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAg
ICBvcGVyYXRvciBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICYoKTsKCiAgICBJZFVuaXF1ZW5lc3NQ
b2xpY3lfcHRyIGluICh2b2lkKSBjb25zdDsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJmlu
b3V0ICh2b2lkKTsKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJm91dCAodm9pZCk7CiAgICBJ
ZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIElkVW5pcXVlbmVzc1BvbGlj
eV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBJZFVuaXF1ZW5lc3NQb2xpY3lf
cHRyIGR1cGxpY2F0ZSAoSWRVbmlxdWVuZXNzUG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCBy
ZWxlYXNlIChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBJZFVuaXF1ZW5lc3NQ
b2xpY3lfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBu
YXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGlj
IENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJZFVuaXF1
ZW5lc3NQb2xpY3lfcHRyIHB0cl87CgogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAoY29uc3Qg
VEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAmb3BlcmF0b3I9
IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyA4MzUgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT
ZXJ2ZXJDLmgiCiAgY2xhc3MgSWRVbmlxdWVuZXNzUG9saWN5X291dAogIHsKICBwdWJsaWM6CiAg
ICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICYpOwogICAg
SWRVbmlxdWVuZXNzUG9saWN5X291dCAoSWRVbmlxdWVuZXNzUG9saWN5X3ZhciAmKTsKICAgIElk
VW5pcXVlbmVzc1BvbGljeV9vdXQgKGNvbnN0IElkVW5pcXVlbmVzc1BvbGljeV9vdXQgJik7CiAg
ICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IElkVW5pcXVlbmVzc1Bv
bGljeV9vdXQgJik7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0
IElkVW5pcXVlbmVzc1BvbGljeV92YXIgJik7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfb3V0ICZv
cGVyYXRvcj0gKElkVW5pcXVlbmVzc1BvbGljeV9wdHIpOwogICAgb3BlcmF0b3IgSWRVbmlxdWVu
ZXNzUG9saWN5X3B0ciAmKCk7CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyICZwdHIgKHZvaWQp
OwogICAgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0
ZToKICAgIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgJnB0cl87CiAgfTsKIyA4NTkgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv
UG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIElkVW5pcXVlbmVzc1BvbGljeTogcHVibGljIHZpcnR1
YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBJZFVuaXF1ZW5lc3NQ
b2xpY3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgSWRVbmlxdWVuZXNzUG9saWN5X3ZhciBf
dmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9saWN5X3B0ciBfZHVwbGljYXRl
IChJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgSWRVbmlxdWVuZXNzUG9s
aWN5X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgSWRV
bmlxdWVuZXNzUG9saWN5X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9i
amVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgICApOwogICAgc3RhdGljIElkVW5pcXVlbmVzc1BvbGljeV9wdHIgX25pbCAodm9pZCkKICAg
ICAgewogICAgICAgIHJldHVybiAoSWRVbmlxdWVuZXNzUG9saWN5X3B0cikwOwogICAgICB9Cgog
ICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUgdmFsdWUg
KAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9p
ZCAqX3Rhb19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBj
b25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90
ZWN0ZWQ6CiAgICBJZFVuaXF1ZW5lc3NQb2xpY3kgKCk7CgogICAgdmlydHVhbCB+SWRVbmlxdWVu
ZXNzUG9saWN5ICh2b2lkKTsKICBwcml2YXRlOgogICAgSWRVbmlxdWVuZXNzUG9saWN5IChjb25z
dCBJZFVuaXF1ZW5lc3NQb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgSWRVbmlx
dWVuZXNzUG9saWN5ICYpOwogIH07CgoKCgogIGVudW0gSWRBc3NpZ25tZW50UG9saWN5VmFsdWUK
ICB7CiAgICAgICAgVVNFUl9JRCwKICAgICAgICBTWVNURU1fSUQKICB9OwogIHR5cGVkZWYgSWRB
c3NpZ25tZW50UG9saWN5VmFsdWUgJklkQXNzaWdubWVudFBvbGljeVZhbHVlX291dDsKICBleHRl
cm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfSWRBc3NpZ25tZW50UG9saWN5VmFsdWU7CgoKCgoK
ICBjbGFzcyBJZEFzc2lnbm1lbnRQb2xpY3k7CiAgdHlwZWRlZiBJZEFzc2lnbm1lbnRQb2xpY3kg
KklkQXNzaWdubWVudFBvbGljeV9wdHI7CgoKCgoKCgogIGNsYXNzIElkQXNzaWdubWVudFBvbGlj
eV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAgIElkQXNzaWdubWVu
dFBvbGljeV92YXIgKHZvaWQpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X3ZhciAoSWRBc3NpZ25t
ZW50UG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfdmFy
IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICYpOwogICAgfklkQXNzaWdubWVudFBvbGlj
eV92YXIgKHZvaWQpOwoKICAgIElkQXNzaWdubWVudFBvbGljeV92YXIgJm9wZXJhdG9yPSAoSWRB
c3NpZ25tZW50UG9saWN5X3B0cik7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICZvcGVyYXRv
cj0gKGNvbnN0IElkQXNzaWdubWVudFBvbGljeV92YXIgJik7CiAgICBJZEFzc2lnbm1lbnRQb2xp
Y3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IElkQXNz
aWdubWVudFBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgSWRBc3NpZ25tZW50UG9s
aWN5X3B0ciAmKCk7CgogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7
CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyICZpbm91dCAodm9pZCk7CiAgICBJZEFzc2lnbm1l
bnRQb2xpY3lfcHRyICZvdXQgKHZvaWQpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBfcmV0
biAodm9pZCk7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoK
CiAgICBzdGF0aWMgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBkdXBsaWNhdGUgKElkQXNzaWdubWVu
dFBvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoSWRBc3NpZ25tZW50UG9saWN5
X3B0cik7CiAgICBzdGF0aWMgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBuaWwgKHZvaWQpOwogICAg
c3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENP
UkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2
b2lkICopOwoKICBwcml2YXRlOgogICAgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBwdHJfOwoKICAg
IElkQXNzaWdubWVudFBvbGljeV92YXIgKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIElk
QXNzaWdubWVudFBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMp
OwogIH07CiMgOTcyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIElkQXNzaWdu
bWVudFBvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAo
SWRBc3NpZ25tZW50UG9saWN5X3B0ciAmKTsKICAgIElkQXNzaWdubWVudFBvbGljeV9vdXQgKElk
QXNzaWdubWVudFBvbGljeV92YXIgJik7CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0IChjb25z
dCBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0ICYpOwogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAm
b3BlcmF0b3I9IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfb3V0ICYpOwogICAgSWRBc3NpZ25t
ZW50UG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBJZEFzc2lnbm1lbnRQb2xpY3lfdmFyICYp
OwogICAgSWRBc3NpZ25tZW50UG9saWN5X291dCAmb3BlcmF0b3I9IChJZEFzc2lnbm1lbnRQb2xp
Y3lfcHRyKTsKICAgIG9wZXJhdG9yIElkQXNzaWdubWVudFBvbGljeV9wdHIgJigpOwogICAgSWRB
c3NpZ25tZW50UG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIElkQXNzaWdubWVudFBvbGljeV9w
dHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJZEFzc2lnbm1lbnRQb2xpY3lf
cHRyICZwdHJfOwogIH07CiMgOTk2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBJ
ZEFzc2lnbm1lbnRQb2xpY3k6IHB1YmxpYyB2aXJ0dWFsIENPUkJBOjpQb2xpY3kKICB7CiAgcHVi
bGljOgoKICAgIHR5cGVkZWYgSWRBc3NpZ25tZW50UG9saWN5X3B0ciBfcHRyX3R5cGU7CiAgICB0
eXBlZGVmIElkQXNzaWdubWVudFBvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIElk
QXNzaWdubWVudFBvbGljeV9wdHIgX2R1cGxpY2F0ZSAoSWRBc3NpZ25tZW50UG9saWN5X3B0ciBv
YmopOwogICAgc3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwogICAgc3RhdGljIElkQXNzaWdubWVudFBvbGljeV9wdHIgX3VuY2hl
Y2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJZEFzc2ln
bm1lbnRQb2xpY3lfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKElkQXNz
aWdubWVudFBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6
OklkQXNzaWdubWVudFBvbGljeVZhbHVlIHZhbHVlICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0
cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBv
c2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgSWRBc3NpZ25tZW50UG9s
aWN5ICgpOwoKICAgIHZpcnR1YWwgfklkQXNzaWdubWVudFBvbGljeSAodm9pZCk7CiAgcHJpdmF0
ZToKICAgIElkQXNzaWdubWVudFBvbGljeSAoY29uc3QgSWRBc3NpZ25tZW50UG9saWN5ICYpOwog
ICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IElkQXNzaWdubWVudFBvbGljeSAmKTsKICB9OwoKCgoK
ICBlbnVtIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeVZhbHVlCiAgewogICAgICAgIElNUExJQ0lU
X0FDVElWQVRJT04sCiAgICAgICAgTk9fSU1QTElDSVRfQUNUSVZBVElPTgogIH07CgoKCiAgdHlw
ZWRlZiBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSAmSW1wbGljaXRBY3RpdmF0aW9uUG9s
aWN5VmFsdWVfb3V0OwogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19JbXBsaWNpdEFj
dGl2YXRpb25Qb2xpY3lWYWx1ZTsKCgoKCgogIGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGlj
eTsKICB0eXBlZGVmIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAqSW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciA6
IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgSW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5X3ZhciAodm9pZCk7CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfdmFyIChJbXBs
aWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIEltcGxpY2l0QWN0
aXZhdGlvblBvbGljeV92YXIgKGNvbnN0IEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJik7
CiAgICB+SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAodm9pZCk7CgogICAgSW1wbGljaXRB
Y3RpdmF0aW9uUG9saWN5X3ZhciAmb3BlcmF0b3I9IChJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf
cHRyKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3Qg
SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAmKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBv
bGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgSW1w
bGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBJbXBsaWNp
dEFjdGl2YXRpb25Qb2xpY3lfcHRyICYoKTsKCiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf
cHRyIGluICh2b2lkKSBjb25zdDsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJmlu
b3V0ICh2b2lkKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJm91dCAodm9pZCk7
CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIEltcGxp
Y2l0QWN0aXZhdGlvblBvbGljeV9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBJ
bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIGR1cGxpY2F0ZSAoSW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChJbXBsaWNpdEFjdGl2YXRpb25Q
b2xpY3lfcHRyKTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIG5pbCAo
dm9pZCk7CiAgICBzdGF0aWMgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBuYXJyb3cgKENP
UkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpP
YmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBJbXBsaWNpdEFjdGl2YXRp
b25Qb2xpY3lfcHRyIHB0cl87CgogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAoY29u
c3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3ZhciAm
b3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxMTEyICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy
L1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9vdXQK
ICB7CiAgcHVibGljOgogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAoSW1wbGljaXRB
Y3RpdmF0aW9uUG9saWN5X3B0ciAmKTsKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9vdXQg
KEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV92YXIgJik7CiAgICBJbXBsaWNpdEFjdGl2YXRpb25Q
b2xpY3lfb3V0IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfb3V0ICYpOwogICAgSW1w
bGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2
YXRpb25Qb2xpY3lfb3V0ICYpOwogICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3Bl
cmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfdmFyICYpOwogICAgSW1wbGlj
aXRBY3RpdmF0aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChJbXBsaWNpdEFjdGl2YXRpb25Qb2xp
Y3lfcHRyKTsKICAgIG9wZXJhdG9yIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgJigpOwog
ICAgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIEltcGxpY2l0
QWN0aXZhdGlvblBvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBJ
bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyICZwdHJfOwogIH07CiMgMTEzNiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Q
b3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OiBwdWJsaWMg
dmlydHVhbCBDT1JCQTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIEltcGxpY2l0
QWN0aXZhdGlvblBvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBJbXBsaWNpdEFjdGl2
YXRpb25Qb2xpY3lfdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRp
b25Qb2xpY3lfcHRyIF9kdXBsaWNhdGUgKEltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgb2Jq
KTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyIF9uYXJyb3cgKAogICAg
ICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf
cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0
aWMgSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAg
ICAgcmV0dXJuIChJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lfcHRyKTA7CiAgICAgIH0KCiAgICB2
aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSB2YWx1
ZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg
ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2
b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHBy
b3RlY3RlZDoKICAgIEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5J
bXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kgKHZvaWQpOwogIHByaXZhdGU6CiAgICBJbXBsaWNpdEFj
dGl2YXRpb25Qb2xpY3kgKGNvbnN0IEltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAmKTsKICAgIHZv
aWQgb3BlcmF0b3I9IChjb25zdCBJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3kgJik7CiAgfTsKCgoK
CgoKICBlbnVtIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZQogIHsKICAgICAgICBSRVRBSU4s
CiAgICAgICAgTk9OX1JFVEFJTgogIH07CgoKCiAgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9s
aWN5VmFsdWUgJlNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZV9vdXQ7CiAgZXh0ZXJuIENPUkJB
OjpUeXBlQ29kZV9wdHIgX3RjX1NlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZTsKCgoKCgogIGNs
YXNzIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3k7CiAgdHlwZWRlZiBTZXJ2YW50UmV0ZW50aW9uUG9s
aWN5ICpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cjsKCgoKCgoKCiAgY2xhc3MgU2VydmFudFJl
dGVudGlvblBvbGljeV92YXIgOiBwdWJsaWMgVEFPX0Jhc2VfdmFyCiAgewogIHB1YmxpYzoKICAg
IFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Q
b2xpY3lfdmFyIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBwKSA6IHB0cl8gKHApIHt9CiAg
ICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3ZhciAoY29uc3QgU2VydmFudFJldGVudGlvblBvbGlj
eV92YXIgJik7CiAgICB+U2VydmFudFJldGVudGlvblBvbGljeV92YXIgKHZvaWQpOwoKICAgIFNl
cnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKFNlcnZhbnRSZXRlbnRpb25Qb2xp
Y3lfcHRyKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICZvcGVyYXRvcj0gKGNvbnN0
IFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfdmFyICYpOwogICAgU2VydmFudFJldGVudGlvblBvbGlj
eV9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmFu
dFJldGVudGlvblBvbGljeV9wdHIgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgU2VydmFudFJldGVu
dGlvblBvbGljeV9wdHIgJigpOwoKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIGluICh2
b2lkKSBjb25zdDsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyICZpbm91dCAodm9pZCk7
CiAgICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFNlcnZhbnRS
ZXRlbnRpb25Qb2xpY3lfcHRyIF9yZXRuICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xp
Y3lfcHRyIHB0ciAodm9pZCkgY29uc3Q7CgoKCiAgICBzdGF0aWMgU2VydmFudFJldGVudGlvblBv
bGljeV9wdHIgZHVwbGljYXRlIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cik7CiAgICBzdGF0
aWMgdm9pZCByZWxlYXNlIChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cik7CiAgICBzdGF0aWMg
U2VydmFudFJldGVudGlvblBvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2YW50
UmV0ZW50aW9uUG9saWN5X3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmly
b25tZW50ICYpOwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7Cgog
IHByaXZhdGU6CiAgICBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciBwdHJfOwoKICAgIFNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2
YW50UmV0ZW50aW9uUG9saWN5X3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgfTsKIyAxMjU0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lfb3V0CiAgewogIHB1YmxpYzoKICAgIFNlcnZhbnRSZXRlbnRpb25Q
b2xpY3lfb3V0IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmKTsKICAgIFNlcnZhbnRSZXRl
bnRpb25Qb2xpY3lfb3V0IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3ZhciAmKTsKICAgIFNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lfb3V0IChjb25zdCBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X291dCAm
KTsKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lfb3V0ICYpOwogICAgU2VydmFudFJldGVudGlvblBvbGljeV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgU2VydmFudFJldGVudGlvblBvbGljeV92YXIgJik7CiAgICBTZXJ2
YW50UmV0ZW50aW9uUG9saWN5X291dCAmb3BlcmF0b3I9IChTZXJ2YW50UmV0ZW50aW9uUG9saWN5
X3B0cik7CiAgICBvcGVyYXRvciBTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmKCk7CiAgICBT
ZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0ciAmcHRyICh2b2lkKTsKICAgIFNlcnZhbnRSZXRlbnRp
b25Qb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgU2VydmFudFJl
dGVudGlvblBvbGljeV9wdHIgJnB0cl87CiAgfTsKIyAxMjc4ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy
dmVyQy5oIgpjbGFzcyBTZXJ2YW50UmV0ZW50aW9uUG9saWN5OiBwdWJsaWMgdmlydHVhbCBDT1JC
QTo6UG9saWN5CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFNlcnZhbnRSZXRlbnRpb25Qb2xp
Y3lfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgU2VydmFudFJldGVudGlvblBvbGljeV92YXIg
X3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIF9kdXBs
aWNhdGUgKFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIG9iaik7CiAgICBzdGF0aWMgU2VydmFu
dFJldGVudGlvblBvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwog
ICAgc3RhdGljIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcHRyIF91bmNoZWNrZWRfbmFycm93ICgK
ICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudFJldGVudGlvblBvbGlj
eV9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoU2VydmFudFJldGVudGlv
blBvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0
aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJf
YXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3Np
dG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFNlcnZhbnRSZXRlbnRpb25Q
b2xpY3kgKCk7CgogICAgdmlydHVhbCB+U2VydmFudFJldGVudGlvblBvbGljeSAodm9pZCk7CiAg
cHJpdmF0ZToKICAgIFNlcnZhbnRSZXRlbnRpb25Qb2xpY3kgKGNvbnN0IFNlcnZhbnRSZXRlbnRp
b25Qb2xpY3kgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgU2VydmFudFJldGVudGlvblBv
bGljeSAmKTsKICB9OwoKCgoKCgogIGVudW0gUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZQog
IHsKICAgICAgICBVU0VfQUNUSVZFX09CSkVDVF9NQVBfT05MWSwKICAgICAgICBVU0VfREVGQVVM
VF9TRVJWQU5ULAogICAgICAgIFVTRV9TRVJWQU5UX01BTkFHRVIKICB9OwoKCgogIHR5cGVkZWYg
UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZSAmUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1
ZV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1JlcXVlc3RQcm9jZXNzaW5n
UG9saWN5VmFsdWU7CgoKCgoKICBjbGFzcyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTsKICB0eXBl
ZGVmIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5ICpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHI7
CgoKCgoKCgogIGNsYXNzIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciA6IHB1YmxpYyBUQU9f
QmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFyICh2
b2lkKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciAoUmVxdWVzdFByb2Nlc3NpbmdQ
b2xpY3lfcHRyIHApIDogcHRyXyAocCkge30KICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3Zh
ciAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFyICYpOwogICAgflJlcXVlc3RQcm9j
ZXNzaW5nUG9saWN5X3ZhciAodm9pZCk7CgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdmFy
ICZvcGVyYXRvcj0gKFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0cik7CiAgICBSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xp
Y3lfdmFyICYpOwogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIG9wZXJhdG9yLT4gKHZv
aWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0
ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJigp
OwoKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBS
ZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcm9j
ZXNzaW5nUG9saWN5X3B0ciAmb3V0ICh2b2lkKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5
X3B0ciBfcmV0biAodm9pZCk7CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgcHRyICh2
b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgZHVw
bGljYXRlIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVs
ZWFzZSAoUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeV9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2lu
Z1BvbGljeV9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAm
KTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRl
OgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfcHRyIHB0cl87CgogICAgUmVxdWVzdFByb2Nl
c3NpbmdQb2xpY3lfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeV92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog
IH07CiMgMTM5NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeV9vdXQKICB7CiAgcHVibGljOgogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xp
Y3lfb3V0IChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJik7CiAgICBSZXF1ZXN0UHJvY2Vz
c2luZ1BvbGljeV9vdXQgKFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3ZhciAmKTsKICAgIFJlcXVl
c3RQcm9jZXNzaW5nUG9saWN5X291dCAoY29uc3QgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfb3V0
ICYpOwogICAgUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFJl
cXVlc3RQcm9jZXNzaW5nUG9saWN5X291dCAmKTsKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5
X291dCAmb3BlcmF0b3I9IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV92YXIgJik7CiAg
ICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9vdXQgJm9wZXJhdG9yPSAoUmVxdWVzdFByb2Nlc3Np
bmdQb2xpY3lfcHRyKTsKICAgIG9wZXJhdG9yIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciAm
KCk7CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJnB0ciAodm9pZCk7CiAgICBSZXF1
ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAg
ICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgJnB0cl87CiAgfTsKIyAxNDIxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy
L1BvcnRhYmxlU2VydmVyQy5oIgpjbGFzcyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeTogcHVibGlj
IHZpcnR1YWwgQ09SQkE6OlBvbGljeQogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBSZXF1ZXN0
UHJvY2Vzc2luZ1BvbGljeV9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBSZXF1ZXN0UHJvY2Vz
c2luZ1BvbGljeV92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFJlcXVlc3RQcm9jZXNzaW5n
UG9saWN5X3B0ciBfZHVwbGljYXRlIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgb2JqKTsK
ICAgIHN0YXRpYyBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIgX25hcnJvdyAoCiAgICAgICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBf
dW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgc3RhdGljIFJl
cXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0
dXJuIChSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwg
UG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5VmFsdWUgdmFsdWUgKAogICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93
ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rh
b19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBj
aGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6
CiAgICBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAoKTsKCiAgICB2aXJ0dWFsIH5SZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeSAodm9pZCk7CiAgcHJpdmF0ZToKICAgIFJlcXVlc3RQcm9jZXNzaW5nUG9s
aWN5IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAmKTsKICAgIHZvaWQgb3BlcmF0b3I9
IChjb25zdCBSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAmKTsKICB9OwojIDE0NzYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv
UG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3MgUE9BTWFuYWdlcjsKICB0eXBlZGVmIFBPQU1hbmFn
ZXIgKlBPQU1hbmFnZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBQT0FNYW5hZ2VyX3ZhciA6IHB1Ymxp
YyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUE9BTWFuYWdlcl92YXIgKHZvaWQpOwog
ICAgUE9BTWFuYWdlcl92YXIgKFBPQU1hbmFnZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIFBP
QU1hbmFnZXJfdmFyIChjb25zdCBQT0FNYW5hZ2VyX3ZhciAmKTsKICAgIH5QT0FNYW5hZ2VyX3Zh
ciAodm9pZCk7CgogICAgUE9BTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoUE9BTWFuYWdlcl9wdHIp
OwogICAgUE9BTWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUE9BTWFuYWdlcl92YXIgJik7
CiAgICBQT0FNYW5hZ2VyX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBjb25zdCBQT0FNYW5hZ2VyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQT0FNYW5hZ2Vy
X3B0ciAmKCk7CgogICAgUE9BTWFuYWdlcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUE9BTWFu
YWdlcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFBPQU1hbmFnZXJfcHRyICZvdXQgKHZvaWQpOwog
ICAgUE9BTWFuYWdlcl9wdHIgX3JldG4gKHZvaWQpOwogICAgUE9BTWFuYWdlcl9wdHIgcHRyICh2
b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKFBPQU1h
bmFnZXJfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFBPQU1hbmFnZXJfcHRyKTsKICAg
IHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFBPQU1hbmFnZXJf
cHRyIG5hcnJvdyAoQ09SQkE6Ok9iamVjdCAqLCBDT1JCQTo6RW52aXJvbm1lbnQgJik7CiAgICBz
dGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFBP
QU1hbmFnZXJfcHRyIHB0cl87CgogICAgUE9BTWFuYWdlcl92YXIgKGNvbnN0IFRBT19CYXNlX3Zh
ciAmcmhzKTsKICAgIFBPQU1hbmFnZXJfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3Zh
ciAmcmhzKTsKICB9OwojIDE1MjggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgY2xhc3Mg
UE9BTWFuYWdlcl9vdXQKICB7CiAgcHVibGljOgogICAgUE9BTWFuYWdlcl9vdXQgKFBPQU1hbmFn
ZXJfcHRyICYpOwogICAgUE9BTWFuYWdlcl9vdXQgKFBPQU1hbmFnZXJfdmFyICYpOwogICAgUE9B
TWFuYWdlcl9vdXQgKGNvbnN0IFBPQU1hbmFnZXJfb3V0ICYpOwogICAgUE9BTWFuYWdlcl9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgUE9BTWFuYWdlcl9vdXQgJik7CiAgICBQT0FNYW5hZ2VyX291dCAm
b3BlcmF0b3I9IChjb25zdCBQT0FNYW5hZ2VyX3ZhciAmKTsKICAgIFBPQU1hbmFnZXJfb3V0ICZv
cGVyYXRvcj0gKFBPQU1hbmFnZXJfcHRyKTsKICAgIG9wZXJhdG9yIFBPQU1hbmFnZXJfcHRyICYo
KTsKICAgIFBPQU1hbmFnZXJfcHRyICZwdHIgKHZvaWQpOwogICAgUE9BTWFuYWdlcl9wdHIgb3Bl
cmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQT0FNYW5hZ2VyX3B0ciAmcHRyXzsKICB9
OwojIDE1NTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCmNsYXNzIFBPQU1hbmFnZXIgOiBw
dWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUE9B
TWFuYWdlcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBQT0FNYW5hZ2VyX3ZhciBfdmFyX3R5
cGU7CgoKCiAgICBzdGF0aWMgUE9BTWFuYWdlcl9wdHIgX2R1cGxpY2F0ZSAoUE9BTWFuYWdlcl9w
dHIgb2JqKTsKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JC
QTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpCiAgICAgICk7CiAgICBzdGF0aWMgUE9BTWFuYWdlcl9wdHIgX3VuY2hlY2tlZF9uYXJyb3cg
KAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBQT0FNYW5hZ2VyX3B0ciBfbmls
ICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChQT0FNYW5hZ2VyX3B0cikwOwogICAgICB9
CgoKCgoKICAgIGNsYXNzIEFkYXB0ZXJJbmFjdGl2ZSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2Vw
dGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQWRhcHRlckluYWN0aXZlICh2b2lkKTsKCgog
ICAgICBBZGFwdGVySW5hY3RpdmUgKGNvbnN0IEFkYXB0ZXJJbmFjdGl2ZSAmKTsKCgogICAgICB+
QWRhcHRlckluYWN0aXZlICh2b2lkKTsKCgogICAgICBBZGFwdGVySW5hY3RpdmUgJm9wZXJhdG9y
PSAoY29uc3QgQWRhcHRlckluYWN0aXZlICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAo
dm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091
dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0
OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENE
UiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3Rh
dGljIEFkYXB0ZXJJbmFjdGl2ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgog
ICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgog
ICAgZW51bSBTdGF0ZQogICAgewogICAgICAgICAgICBIT0xESU5HLAogICAgICAgICAgICBBQ1RJ
VkUsCiAgICAgICAgICAgIERJU0NBUkRJTkcsCiAgICAgICAgICAgIElOQUNUSVZFCiAgICB9Owog
ICAgdHlwZWRlZiBTdGF0ZSAmU3RhdGVfb3V0OwogICAgdmlydHVhbCB2b2lkIGFjdGl2YXRlICgK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0
aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2Vy
OjpBZGFwdGVySW5hY3RpdmUgKSA9IDA7CgoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgaG9sZF9yZXF1
ZXN0cyAoCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gd2FpdF9mb3JfY29tcGxldGlvbiwKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0FNYW5hZ2VyOjpBZGFw
dGVySW5hY3RpdmUgKSA9IDA7CgoKCgogICAgdmlydHVhbCB2b2lkIGRpc2NhcmRfcmVxdWVzdHMg
KAogICAgICAgIENPUkJBOjpCb29sZWFuIHdhaXRfZm9yX2NvbXBsZXRpb24sCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6QWRhcHRlcklu
YWN0aXZlICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBkZWFjdGl2YXRlICgKICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBldGhlcmVhbGl6ZV9vYmplY3RzLAogICAgICAgIENPUkJBOjpCb29sZWFu
IHdhaXRfZm9yX2NvbXBsZXRpb24sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0
YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6QWRhcHRlckluYWN0aXZlICkgPSAwOwoKCgoKCgogICAg
dmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6U3RhdGUgZ2V0X3N0YXRlICgKICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUg
PQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90
YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVk
OgogICAgUE9BTWFuYWdlciAoKTsKCiAgICB2aXJ0dWFsIH5QT0FNYW5hZ2VyICh2b2lkKTsKICBw
cml2YXRlOgogICAgUE9BTWFuYWdlciAoY29uc3QgUE9BTWFuYWdlciAmKTsKICAgIHZvaWQgb3Bl
cmF0b3I9IChjb25zdCBQT0FNYW5hZ2VyICYpOwogIH07CiMgMTcwMCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs
ZVNlcnZlckMuaCIKICBjbGFzcyBBZGFwdGVyQWN0aXZhdG9yOwogIHR5cGVkZWYgQWRhcHRlckFj
dGl2YXRvciAqQWRhcHRlckFjdGl2YXRvcl9wdHI7CgoKCgoKCgogIGNsYXNzIEFkYXB0ZXJBY3Rp
dmF0b3JfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBBZGFwdGVy
QWN0aXZhdG9yX3ZhciAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAoQWRhcHRlckFj
dGl2YXRvcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQWRhcHRlckFjdGl2YXRvcl92YXIgKGNv
bnN0IEFkYXB0ZXJBY3RpdmF0b3JfdmFyICYpOwogICAgfkFkYXB0ZXJBY3RpdmF0b3JfdmFyICh2
b2lkKTsKCiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChBZGFwdGVyQWN0aXZh
dG9yX3B0cik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBBZGFw
dGVyQWN0aXZhdG9yX3ZhciAmKTsKICAgIEFkYXB0ZXJBY3RpdmF0b3JfcHRyIG9wZXJhdG9yLT4g
KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3JfcHRyICYo
KSBjb25zdDsKICAgIG9wZXJhdG9yIEFkYXB0ZXJBY3RpdmF0b3JfcHRyICYoKTsKCiAgICBBZGFw
dGVyQWN0aXZhdG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3B0
ciAmaW5vdXQgKHZvaWQpOwogICAgQWRhcHRlckFjdGl2YXRvcl9wdHIgJm91dCAodm9pZCk7CiAg
ICBBZGFwdGVyQWN0aXZhdG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9y
X3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRy
IGR1cGxpY2F0ZSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz
ZSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRy
IG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQWRhcHRlckFjdGl2YXRvcl9wdHIgbmFycm93IChDT1JC
QTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2Jq
ZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQWRhcHRlckFjdGl2YXRvcl9w
dHIgcHRyXzsKCiAgICBBZGFwdGVyQWN0aXZhdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZy
aHMpOwogICAgQWRhcHRlckFjdGl2YXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2Vf
dmFyICZyaHMpOwogIH07CiMgMTc1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFz
cyBBZGFwdGVyQWN0aXZhdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBBZGFwdGVyQWN0aXZhdG9y
X291dCAoQWRhcHRlckFjdGl2YXRvcl9wdHIgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAo
QWRhcHRlckFjdGl2YXRvcl92YXIgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAoY29uc3Qg
QWRhcHRlckFjdGl2YXRvcl9vdXQgJik7CiAgICBBZGFwdGVyQWN0aXZhdG9yX291dCAmb3BlcmF0
b3I9IChjb25zdCBBZGFwdGVyQWN0aXZhdG9yX291dCAmKTsKICAgIEFkYXB0ZXJBY3RpdmF0b3Jf
b3V0ICZvcGVyYXRvcj0gKGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3JfdmFyICYpOwogICAgQWRhcHRl
ckFjdGl2YXRvcl9vdXQgJm9wZXJhdG9yPSAoQWRhcHRlckFjdGl2YXRvcl9wdHIpOwogICAgb3Bl
cmF0b3IgQWRhcHRlckFjdGl2YXRvcl9wdHIgJigpOwogICAgQWRhcHRlckFjdGl2YXRvcl9wdHIg
JnB0ciAodm9pZCk7CiAgICBBZGFwdGVyQWN0aXZhdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsK
CiAgcHJpdmF0ZToKICAgIEFkYXB0ZXJBY3RpdmF0b3JfcHRyICZwdHJfOwogIH07CiMgMTc3NiAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs
ZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgQWRhcHRlckFjdGl2YXRvciA6IHB1Ymxp
YyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBBZGFwdGVy
QWN0aXZhdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIEFkYXB0ZXJBY3RpdmF0b3JfdmFy
IF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBBZGFwdGVyQWN0aXZhdG9yX3B0ciBfZHVwbGljYXRl
IChBZGFwdGVyQWN0aXZhdG9yX3B0ciBvYmopOwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3Jf
cHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0YXRpYyBBZGFwdGVy
QWN0aXZhdG9yX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9w
dHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICAp
OwogICAgc3RhdGljIEFkYXB0ZXJBY3RpdmF0b3JfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAg
ICAgICByZXR1cm4gKEFkYXB0ZXJBY3RpdmF0b3JfcHRyKTA7CiAgICAgIH0KCiAgICB2aXJ0dWFs
IENPUkJBOjpCb29sZWFuIHVua25vd25fYWRhcHRlciAoCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6
OlBPQV9wdHIgcGFyZW50LAogICAgICAgIGNvbnN0IGNoYXIgKiBuYW1lLAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6
OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rhb19RdWVyeUlu
dGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiBfaW50
ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICBBZGFw
dGVyQWN0aXZhdG9yICgpOwoKICAgIHZpcnR1YWwgfkFkYXB0ZXJBY3RpdmF0b3IgKHZvaWQpOwog
IHByaXZhdGU6CiAgICBBZGFwdGVyQWN0aXZhdG9yIChjb25zdCBBZGFwdGVyQWN0aXZhdG9yICYp
OwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IEFkYXB0ZXJBY3RpdmF0b3IgJik7CiAgfTsKIyAx
ODMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogIGNsYXNzIFNlcnZhbnRNYW5hZ2VyOwog
IHR5cGVkZWYgU2VydmFudE1hbmFnZXIgKlNlcnZhbnRNYW5hZ2VyX3B0cjsKCgoKCgoKCiAgY2xh
c3MgU2VydmFudE1hbmFnZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6
CiAgICBTZXJ2YW50TWFuYWdlcl92YXIgKHZvaWQpOwogICAgU2VydmFudE1hbmFnZXJfdmFyIChT
ZXJ2YW50TWFuYWdlcl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2VydmFudE1hbmFnZXJfdmFy
IChjb25zdCBTZXJ2YW50TWFuYWdlcl92YXIgJik7CiAgICB+U2VydmFudE1hbmFnZXJfdmFyICh2
b2lkKTsKCiAgICBTZXJ2YW50TWFuYWdlcl92YXIgJm9wZXJhdG9yPSAoU2VydmFudE1hbmFnZXJf
cHRyKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50TWFu
YWdlcl92YXIgJik7CiAgICBTZXJ2YW50TWFuYWdlcl9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29u
c3Q7CgogICAgb3BlcmF0b3IgY29uc3QgU2VydmFudE1hbmFnZXJfcHRyICYoKSBjb25zdDsKICAg
IG9wZXJhdG9yIFNlcnZhbnRNYW5hZ2VyX3B0ciAmKCk7CgogICAgU2VydmFudE1hbmFnZXJfcHRy
IGluICh2b2lkKSBjb25zdDsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciAmaW5vdXQgKHZvaWQpOwog
ICAgU2VydmFudE1hbmFnZXJfcHRyICZvdXQgKHZvaWQpOwogICAgU2VydmFudE1hbmFnZXJfcHRy
IF9yZXRuICh2b2lkKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoK
CgogICAgc3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBkdXBsaWNhdGUgKFNlcnZhbnRNYW5hZ2Vy
X3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNlIChTZXJ2YW50TWFuYWdlcl9wdHIpOwogICAg
c3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBuaWwgKHZvaWQpOwogICAgc3RhdGljIFNlcnZhbnRN
YW5hZ2VyX3B0ciBuYXJyb3cgKENPUkJBOjpPYmplY3QgKiwgQ09SQkE6OkVudmlyb25tZW50ICYp
OwogICAgc3RhdGljIENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6
CiAgICBTZXJ2YW50TWFuYWdlcl9wdHIgcHRyXzsKCiAgICBTZXJ2YW50TWFuYWdlcl92YXIgKGNv
bnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3ZhciAmb3BlcmF0b3I9
IChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgfTsKIyAxODgzICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxl
U2VydmVyQy5oIgogIGNsYXNzIFNlcnZhbnRNYW5hZ2VyX291dAogIHsKICBwdWJsaWM6CiAgICBT
ZXJ2YW50TWFuYWdlcl9vdXQgKFNlcnZhbnRNYW5hZ2VyX3B0ciAmKTsKICAgIFNlcnZhbnRNYW5h
Z2VyX291dCAoU2VydmFudE1hbmFnZXJfdmFyICYpOwogICAgU2VydmFudE1hbmFnZXJfb3V0IChj
b25zdCBTZXJ2YW50TWFuYWdlcl9vdXQgJik7CiAgICBTZXJ2YW50TWFuYWdlcl9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgU2VydmFudE1hbmFnZXJfb3V0ICYpOwogICAgU2VydmFudE1hbmFnZXJfb3V0
ICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZhbnRNYW5hZ2VyX3ZhciAmKTsKICAgIFNlcnZhbnRNYW5h
Z2VyX291dCAmb3BlcmF0b3I9IChTZXJ2YW50TWFuYWdlcl9wdHIpOwogICAgb3BlcmF0b3IgU2Vy
dmFudE1hbmFnZXJfcHRyICYoKTsKICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciAmcHRyICh2b2lkKTsK
ICAgIFNlcnZhbnRNYW5hZ2VyX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAg
IFNlcnZhbnRNYW5hZ2VyX3B0ciAmcHRyXzsKICB9OwojIDE5MDcgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT
ZXJ2ZXJDLmgiCmNsYXNzIFNlcnZhbnRNYW5hZ2VyIDogcHVibGljIHZpcnR1YWwgQ09SQkFfT2Jq
ZWN0CiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3B0ciBfcHRyX3R5
cGU7CiAgICB0eXBlZGVmIFNlcnZhbnRNYW5hZ2VyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0
aWMgU2VydmFudE1hbmFnZXJfcHRyIF9kdXBsaWNhdGUgKFNlcnZhbnRNYW5hZ2VyX3B0ciBvYmop
OwogICAgc3RhdGljIFNlcnZhbnRNYW5hZ2VyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6
T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp
CiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudE1hbmFnZXJfcHRyIF91bmNoZWNrZWRfbmFycm93
ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudE1hbmFnZXJfcHRy
IF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFNlcnZhbnRNYW5hZ2VyX3B0cikw
OwogICAgICB9CgogICAgdmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJp
dGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9y
eV9pZCAodm9pZCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgIFNlcnZhbnRNYW5hZ2VyICgpOwoK
ICAgIHZpcnR1YWwgflNlcnZhbnRNYW5hZ2VyICh2b2lkKTsKICBwcml2YXRlOgogICAgU2VydmFu
dE1hbmFnZXIgKGNvbnN0IFNlcnZhbnRNYW5hZ2VyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv
bnN0IFNlcnZhbnRNYW5hZ2VyICYpOwogIH07CiMgMTk1MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZl
ckMuaCIKICBjbGFzcyBTZXJ2YW50QWN0aXZhdG9yOwogIHR5cGVkZWYgU2VydmFudEFjdGl2YXRv
ciAqU2VydmFudEFjdGl2YXRvcl9wdHI7CgoKCgoKCgogIGNsYXNzIFNlcnZhbnRBY3RpdmF0b3Jf
dmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTZXJ2YW50QWN0aXZh
dG9yX3ZhciAodm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAoU2VydmFudEFjdGl2YXRv
cl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgU2VydmFudEFjdGl2YXRvcl92YXIgKGNvbnN0IFNl
cnZhbnRBY3RpdmF0b3JfdmFyICYpOwogICAgflNlcnZhbnRBY3RpdmF0b3JfdmFyICh2b2lkKTsK
CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChTZXJ2YW50QWN0aXZhdG9yX3B0
cik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAmb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50QWN0
aXZhdG9yX3ZhciAmKTsKICAgIFNlcnZhbnRBY3RpdmF0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQp
IGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZhbnRBY3RpdmF0b3JfcHRyICYoKSBjb25z
dDsKICAgIG9wZXJhdG9yIFNlcnZhbnRBY3RpdmF0b3JfcHRyICYoKTsKCiAgICBTZXJ2YW50QWN0
aXZhdG9yX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciAmaW5v
dXQgKHZvaWQpOwogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgJm91dCAodm9pZCk7CiAgICBTZXJ2
YW50QWN0aXZhdG9yX3B0ciBfcmV0biAodm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciBw
dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFNlcnZhbnRBY3RpdmF0b3JfcHRyIGR1cGxp
Y2F0ZSAoU2VydmFudEFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU2Vy
dmFudEFjdGl2YXRvcl9wdHIpOwogICAgc3RhdGljIFNlcnZhbnRBY3RpdmF0b3JfcHRyIG5pbCAo
dm9pZCk7CiAgICBzdGF0aWMgU2VydmFudEFjdGl2YXRvcl9wdHIgbmFycm93IChDT1JCQTo6T2Jq
ZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICog
dXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgcHRy
XzsKCiAgICBTZXJ2YW50QWN0aXZhdG9yX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog
ICAgU2VydmFudEFjdGl2YXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZy
aHMpOwogIH07CiMgMjAwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBTZXJ2
YW50QWN0aXZhdG9yX291dAogIHsKICBwdWJsaWM6CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAo
U2VydmFudEFjdGl2YXRvcl9wdHIgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAoU2VydmFu
dEFjdGl2YXRvcl92YXIgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAoY29uc3QgU2VydmFu
dEFjdGl2YXRvcl9vdXQgJik7CiAgICBTZXJ2YW50QWN0aXZhdG9yX291dCAmb3BlcmF0b3I9IChj
b25zdCBTZXJ2YW50QWN0aXZhdG9yX291dCAmKTsKICAgIFNlcnZhbnRBY3RpdmF0b3Jfb3V0ICZv
cGVyYXRvcj0gKGNvbnN0IFNlcnZhbnRBY3RpdmF0b3JfdmFyICYpOwogICAgU2VydmFudEFjdGl2
YXRvcl9vdXQgJm9wZXJhdG9yPSAoU2VydmFudEFjdGl2YXRvcl9wdHIpOwogICAgb3BlcmF0b3Ig
U2VydmFudEFjdGl2YXRvcl9wdHIgJigpOwogICAgU2VydmFudEFjdGl2YXRvcl9wdHIgJnB0ciAo
dm9pZCk7CiAgICBTZXJ2YW50QWN0aXZhdG9yX3B0ciBvcGVyYXRvci0+ICh2b2lkKTsKCiAgcHJp
dmF0ZToKICAgIFNlcnZhbnRBY3RpdmF0b3JfcHRyICZwdHJfOwogIH07CiMgMjAyOCAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZl
ci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgU2VydmFudEFjdGl2YXRvcjogcHVibGljIHZpcnR1
YWwgU2VydmFudE1hbmFnZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgU2VydmFudEFjdGl2
YXRvcl9wdHIgX3B0cl90eXBlOwogICAgdHlwZWRlZiBTZXJ2YW50QWN0aXZhdG9yX3ZhciBfdmFy
X3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmFudEFjdGl2YXRvcl9wdHIgX2R1cGxpY2F0ZSAoU2Vy
dmFudEFjdGl2YXRvcl9wdHIgb2JqKTsKICAgIHN0YXRpYyBTZXJ2YW50QWN0aXZhdG9yX3B0ciBf
bmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudEFjdGl2
YXRvcl9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9i
aiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAg
IHN0YXRpYyBTZXJ2YW50QWN0aXZhdG9yX3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAg
cmV0dXJuIChTZXJ2YW50QWN0aXZhdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBQb3J0
YWJsZVNlcnZlcjo6U2VydmFudCBpbmNhcm5hdGUgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFw
dGVyCgogICAgICApCgogICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJs
ZVNlcnZlcjo6Rm9yd2FyZFJlcXVlc3QgKSA9IDA7CiMgMjA2OSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl
cnZlckMuaCIKICAgIHZpcnR1YWwgdm9pZCBldGhlcmVhbGl6ZSAoCiAgICAgICAgY29uc3QgUG9y
dGFibGVTZXJ2ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpQT0Ff
cHRyIGFkYXB0ZXIsCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgc2VydiwKICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiBjbGVhbnVwX2luX3Byb2dyZXNzLAogICAgICAgIENPUkJBOjpCb29s
ZWFuIHJlbWFpbmluZ19hY3RpdmF0aW9ucwoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRl
cmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVy
ZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmFu
dEFjdGl2YXRvciAoKTsKCiAgICB2aXJ0dWFsIH5TZXJ2YW50QWN0aXZhdG9yICh2b2lkKTsKICBw
cml2YXRlOgogICAgU2VydmFudEFjdGl2YXRvciAoY29uc3QgU2VydmFudEFjdGl2YXRvciAmKTsK
ICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBTZXJ2YW50QWN0aXZhdG9yICYpOwogIH07CiMgMjEw
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0
YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBTZXJ2YW50TG9jYXRvcjsKICB0
eXBlZGVmIFNlcnZhbnRMb2NhdG9yICpTZXJ2YW50TG9jYXRvcl9wdHI7CgoKCgoKCgogIGNsYXNz
IFNlcnZhbnRMb2NhdG9yX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgog
ICAgU2VydmFudExvY2F0b3JfdmFyICh2b2lkKTsKICAgIFNlcnZhbnRMb2NhdG9yX3ZhciAoU2Vy
dmFudExvY2F0b3JfcHRyIHApIDogcHRyXyAocCkge30KICAgIFNlcnZhbnRMb2NhdG9yX3ZhciAo
Y29uc3QgU2VydmFudExvY2F0b3JfdmFyICYpOwogICAgflNlcnZhbnRMb2NhdG9yX3ZhciAodm9p
ZCk7CgogICAgU2VydmFudExvY2F0b3JfdmFyICZvcGVyYXRvcj0gKFNlcnZhbnRMb2NhdG9yX3B0
cik7CiAgICBTZXJ2YW50TG9jYXRvcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgU2VydmFudExvY2F0
b3JfdmFyICYpOwogICAgU2VydmFudExvY2F0b3JfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0
OwoKICAgIG9wZXJhdG9yIGNvbnN0IFNlcnZhbnRMb2NhdG9yX3B0ciAmKCkgY29uc3Q7CiAgICBv
cGVyYXRvciBTZXJ2YW50TG9jYXRvcl9wdHIgJigpOwoKICAgIFNlcnZhbnRMb2NhdG9yX3B0ciBp
biAodm9pZCkgY29uc3Q7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgJmlub3V0ICh2b2lkKTsKICAg
IFNlcnZhbnRMb2NhdG9yX3B0ciAmb3V0ICh2b2lkKTsKICAgIFNlcnZhbnRMb2NhdG9yX3B0ciBf
cmV0biAodm9pZCk7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoK
ICAgIHN0YXRpYyBTZXJ2YW50TG9jYXRvcl9wdHIgZHVwbGljYXRlIChTZXJ2YW50TG9jYXRvcl9w
dHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU2VydmFudExvY2F0b3JfcHRyKTsKICAgIHN0
YXRpYyBTZXJ2YW50TG9jYXRvcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBTZXJ2YW50TG9j
YXRvcl9wdHIgbmFycm93IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsK
ICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgog
ICAgU2VydmFudExvY2F0b3JfcHRyIHB0cl87CgogICAgU2VydmFudExvY2F0b3JfdmFyIChjb25z
dCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBTZXJ2YW50TG9jYXRvcl92YXIgJm9wZXJhdG9yPSAo
Y29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMjE1MyAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl
cnZlckMuaCIKICBjbGFzcyBTZXJ2YW50TG9jYXRvcl9vdXQKICB7CiAgcHVibGljOgogICAgU2Vy
dmFudExvY2F0b3Jfb3V0IChTZXJ2YW50TG9jYXRvcl9wdHIgJik7CiAgICBTZXJ2YW50TG9jYXRv
cl9vdXQgKFNlcnZhbnRMb2NhdG9yX3ZhciAmKTsKICAgIFNlcnZhbnRMb2NhdG9yX291dCAoY29u
c3QgU2VydmFudExvY2F0b3Jfb3V0ICYpOwogICAgU2VydmFudExvY2F0b3Jfb3V0ICZvcGVyYXRv
cj0gKGNvbnN0IFNlcnZhbnRMb2NhdG9yX291dCAmKTsKICAgIFNlcnZhbnRMb2NhdG9yX291dCAm
b3BlcmF0b3I9IChjb25zdCBTZXJ2YW50TG9jYXRvcl92YXIgJik7CiAgICBTZXJ2YW50TG9jYXRv
cl9vdXQgJm9wZXJhdG9yPSAoU2VydmFudExvY2F0b3JfcHRyKTsKICAgIG9wZXJhdG9yIFNlcnZh
bnRMb2NhdG9yX3B0ciAmKCk7CiAgICBTZXJ2YW50TG9jYXRvcl9wdHIgJnB0ciAodm9pZCk7CiAg
ICBTZXJ2YW50TG9jYXRvcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBT
ZXJ2YW50TG9jYXRvcl9wdHIgJnB0cl87CiAgfTsKIyAyMTc3ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2Vy
dmVyQy5oIgpjbGFzcyBTZXJ2YW50TG9jYXRvcjogcHVibGljIHZpcnR1YWwgU2VydmFudE1hbmFn
ZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdm9pZCAqQ29va2llOwoKCiAgICB0eXBlZGVm
IFNlcnZhbnRMb2NhdG9yX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFNlcnZhbnRMb2NhdG9y
X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgU2VydmFudExvY2F0b3JfcHRyIF9kdXBsaWNh
dGUgKFNlcnZhbnRMb2NhdG9yX3B0ciBvYmopOwogICAgc3RhdGljIFNlcnZhbnRMb2NhdG9yX3B0
ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgU2VydmFudExv
Y2F0b3JfcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBv
YmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAg
ICBzdGF0aWMgU2VydmFudExvY2F0b3JfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICBy
ZXR1cm4gKFNlcnZhbnRMb2NhdG9yX3B0cikwOwogICAgICB9CgogICAgdmlydHVhbCBQb3J0YWJs
ZVNlcnZlcjo6U2VydmFudCBwcmVpbnZva2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy
OjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFwdGVy
LAogICAgICAgIGNvbnN0IGNoYXIgKiBvcGVyYXRpb24sCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6
OlNlcnZhbnRMb2NhdG9yOjpDb29raWUgJiB0aGVfY29va2llCgogICAgICApCgogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpGb3J3YXJkUmVxdWVz
dCApID0gMDsKIyAyMjIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIgogICAgdmlydHVhbCB2
b2lkIHBvc3RpbnZva2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAm
IG9pZCwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBhZGFwdGVyLAogICAgICAgIGNv
bnN0IGNoYXIgKiBvcGVyYXRpb24sCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2Nh
dG9yOjpDb29raWUgdGhlX2Nvb2tpZSwKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCB0
aGVfc2VydmFudAoKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g
KSA9IDA7CgoKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5
X2lkICh2b2lkKSBjb25zdDsKCiAgcHJvdGVjdGVkOgogICAgU2VydmFudExvY2F0b3IgKCk7Cgog
ICAgdmlydHVhbCB+U2VydmFudExvY2F0b3IgKHZvaWQpOwogIHByaXZhdGU6CiAgICBTZXJ2YW50
TG9jYXRvciAoY29uc3QgU2VydmFudExvY2F0b3IgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29u
c3QgU2VydmFudExvY2F0b3IgJik7CiAgfTsKIyAyMjU4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVy
Qy5oIgpjbGFzcyBQT0EgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGlj
OgoKICAgIHR5cGVkZWYgUE9BX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFBPQV92YXIgX3Zh
cl90eXBlOwoKCgogICAgc3RhdGljIFBPQV9wdHIgX2R1cGxpY2F0ZSAoUE9BX3B0ciBvYmopOwog
ICAgc3RhdGljIFBPQV9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2Jq
LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAg
c3RhdGljIFBPQV9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3Rf
cHRyIG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg
KTsKICAgIHN0YXRpYyBQT0FfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4g
KFBPQV9wdHIpMDsKICAgICAgfQoKICAgIHZpcnR1YWwgVEFPX1BPQSogX3Rhb19wb2FfZG93bmNh
c3Qodm9pZCkge3JldHVybiAwO30KCgoKCiAgICBjbGFzcyBBZGFwdGVyQWxyZWFkeUV4aXN0cyA6
IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQWRh
cHRlckFscmVhZHlFeGlzdHMgKHZvaWQpOwoKCiAgICAgIEFkYXB0ZXJBbHJlYWR5RXhpc3RzIChj
b25zdCBBZGFwdGVyQWxyZWFkeUV4aXN0cyAmKTsKCgogICAgICB+QWRhcHRlckFscmVhZHlFeGlz
dHMgKHZvaWQpOwoKCiAgICAgIEFkYXB0ZXJBbHJlYWR5RXhpc3RzICZvcGVyYXRvcj0gKGNvbnN0
IEFkYXB0ZXJBbHJlYWR5RXhpc3RzICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p
ZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1
dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoK
ICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAm
LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKCiAgICAgIHN0YXRp
YyBBZGFwdGVyQWxyZWFkeUV4aXN0cyAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK
CgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMg
MjMzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIEFkYXB0ZXJOb25FeGlz
dGVudCA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAg
ICAgQWRhcHRlck5vbkV4aXN0ZW50ICh2b2lkKTsKCgogICAgICBBZGFwdGVyTm9uRXhpc3RlbnQg
KGNvbnN0IEFkYXB0ZXJOb25FeGlzdGVudCAmKTsKCgogICAgICB+QWRhcHRlck5vbkV4aXN0ZW50
ICh2b2lkKTsKCgogICAgICBBZGFwdGVyTm9uRXhpc3RlbnQgJm9wZXJhdG9yPSAoY29uc3QgQWRh
cHRlck5vbkV4aXN0ZW50ICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7Cgog
ICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAm
LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAg
dmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIEFkYXB0
ZXJOb25FeGlzdGVudCAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBz
dGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMjM3MSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl
cnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIEludmFsaWRQb2xpY3kgOiBwdWJsaWMg
Q09SQkE6OlVzZXJFeGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKICAgICAgQ09SQkE6OlVTaG9y
dCBpbmRleDsKCiAgICAgIEludmFsaWRQb2xpY3kgKHZvaWQpOwoKCiAgICAgIEludmFsaWRQb2xp
Y3kgKGNvbnN0IEludmFsaWRQb2xpY3kgJik7CgoKICAgICAgfkludmFsaWRQb2xpY3kgKHZvaWQp
OwoKCiAgICAgIEludmFsaWRQb2xpY3kgJm9wZXJhdG9yPSAoY29uc3QgSW52YWxpZFBvbGljeSAm
KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lk
IF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv
X2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBJbnZhbGlkUG9saWN5ICpfZG93bmNh
c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgogICAgICBJbnZhbGlkUG9saWN5ICgKICAgICAgICAg
IENPUkJBOjpVU2hvcnQgX3Rhb19pbmRleAogICAgICAgICk7CgoKICAgICAgc3RhdGljIENPUkJB
OjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwojIDI0MTggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFi
bGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBOb1NlcnZhbnQgOiBwdWJsaWMgQ09SQkE6OlVzZXJFeGNl
cHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIE5vU2VydmFudCAodm9pZCk7CgoKICAgICAg
Tm9TZXJ2YW50IChjb25zdCBOb1NlcnZhbnQgJik7CgoKICAgICAgfk5vU2VydmFudCAodm9pZCk7
CgoKICAgICAgTm9TZXJ2YW50ICZvcGVyYXRvcj0gKGNvbnN0IE5vU2VydmFudCAmKTsKCiAgICAg
IHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZW5j
b2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2RlY29kZSAo
CiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
CiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBOb1NlcnZhbnQgKl9kb3duY2FzdCAoQ09SQkE6OkV4
Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9p
ZCk7CiAgICB9OwojIDI0NjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBP
YmplY3RBbHJlYWR5QWN0aXZlIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAg
ICBwdWJsaWM6CgogICAgICBPYmplY3RBbHJlYWR5QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmpl
Y3RBbHJlYWR5QWN0aXZlIChjb25zdCBPYmplY3RBbHJlYWR5QWN0aXZlICYpOwoKCiAgICAgIH5P
YmplY3RBbHJlYWR5QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmplY3RBbHJlYWR5QWN0aXZlICZv
cGVyYXRvcj0gKGNvbnN0IE9iamVjdEFscmVhZHlBY3RpdmUgJik7CgogICAgICB2aXJ0dWFsIHZv
aWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAg
ICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAg
ICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAg
VEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7
CgogICAgICBzdGF0aWMgT2JqZWN0QWxyZWFkeUFjdGl2ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhj
ZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lk
KTsKICAgIH07CiMgMjUwMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNsYXNzIE9i
amVjdE5vdEFjdGl2ZSA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVi
bGljOgoKICAgICAgT2JqZWN0Tm90QWN0aXZlICh2b2lkKTsKCgogICAgICBPYmplY3ROb3RBY3Rp
dmUgKGNvbnN0IE9iamVjdE5vdEFjdGl2ZSAmKTsKCgogICAgICB+T2JqZWN0Tm90QWN0aXZlICh2
b2lkKTsKCgogICAgICBPYmplY3ROb3RBY3RpdmUgJm9wZXJhdG9yPSAoY29uc3QgT2JqZWN0Tm90
QWN0aXZlICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0
dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2
b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIE9iamVjdE5vdEFjdGl2
ZSAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6
OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgIH07CiMgMjU0MyAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJs
ZVNlcnZlckMuaCIKICAgIGNsYXNzIFNlcnZhbnRBbHJlYWR5QWN0aXZlIDogcHVibGljIENPUkJB
OjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTZXJ2YW50QWxyZWFkeUFj
dGl2ZSAodm9pZCk7CgoKICAgICAgU2VydmFudEFscmVhZHlBY3RpdmUgKGNvbnN0IFNlcnZhbnRB
bHJlYWR5QWN0aXZlICYpOwoKCiAgICAgIH5TZXJ2YW50QWxyZWFkeUFjdGl2ZSAodm9pZCk7CgoK
ICAgICAgU2VydmFudEFscmVhZHlBY3RpdmUgJm9wZXJhdG9yPSAoY29uc3QgU2VydmFudEFscmVh
ZHlBY3RpdmUgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZp
cnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgU2VydmFudEFscmVh
ZHlBY3RpdmUgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGlj
IENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICB9OwojIDI1ODQgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv
UG9ydGFibGVTZXJ2ZXJDLmgiCiAgICBjbGFzcyBTZXJ2YW50Tm90QWN0aXZlIDogcHVibGljIENP
UkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTZXJ2YW50Tm90QWN0
aXZlICh2b2lkKTsKCgogICAgICBTZXJ2YW50Tm90QWN0aXZlIChjb25zdCBTZXJ2YW50Tm90QWN0
aXZlICYpOwoKCiAgICAgIH5TZXJ2YW50Tm90QWN0aXZlICh2b2lkKTsKCgogICAgICBTZXJ2YW50
Tm90QWN0aXZlICZvcGVyYXRvcj0gKGNvbnN0IFNlcnZhbnROb3RBY3RpdmUgJik7CgogICAgICB2
aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29k
ZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAog
ICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgog
ICAgICAgICk7CgogICAgICBzdGF0aWMgU2VydmFudE5vdEFjdGl2ZSAqX2Rvd25jYXN0IChDT1JC
QTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9j
ICh2b2lkKTsKICAgIH07CiMgMjYyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNs
YXNzIFdyb25nQWRhcHRlciA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAg
cHVibGljOgoKICAgICAgV3JvbmdBZGFwdGVyICh2b2lkKTsKCgogICAgICBXcm9uZ0FkYXB0ZXIg
KGNvbnN0IFdyb25nQWRhcHRlciAmKTsKCgogICAgICB+V3JvbmdBZGFwdGVyICh2b2lkKTsKCgog
ICAgICBXcm9uZ0FkYXB0ZXIgJm9wZXJhdG9yPSAoY29uc3QgV3JvbmdBZGFwdGVyICYpOwoKICAg
ICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19l
bmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2Rl
ICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIFdyb25nQWRhcHRlciAqX2Rvd25jYXN0IChDT1JC
QTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9j
ICh2b2lkKTsKICAgIH07CiMgMjY2NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICAgIGNs
YXNzIFdyb25nUG9saWN5IDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBw
dWJsaWM6CgogICAgICBXcm9uZ1BvbGljeSAodm9pZCk7CgoKICAgICAgV3JvbmdQb2xpY3kgKGNv
bnN0IFdyb25nUG9saWN5ICYpOwoKCiAgICAgIH5Xcm9uZ1BvbGljeSAodm9pZCk7CgoKICAgICAg
V3JvbmdQb2xpY3kgJm9wZXJhdG9yPSAoY29uc3QgV3JvbmdQb2xpY3kgJik7CgogICAgICB2aXJ0
dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAo
CiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
JgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAg
ICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAg
ICAgICk7CgogICAgICBzdGF0aWMgV3JvbmdQb2xpY3kgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2Vw
dGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7
CiAgICB9OwoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgY3JlYXRlX1BP
QSAoCiAgICAgICAgY29uc3QgY2hhciAqIGFkYXB0ZXJfbmFtZSwKICAgICAgICBQb3J0YWJsZVNl
cnZlcjo6UE9BTWFuYWdlcl9wdHIgYV9QT0FNYW5hZ2VyLAogICAgICAgIGNvbnN0IENPUkJBOjpQ
b2xpY3lMaXN0ICYgcG9saWNpZXMsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpBZGFwdGVyQWxyZWFkeUV4aXN0cywgUG9ydGFibGVTZXJ2ZXI6OlBP
QTo6SW52YWxpZFBvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6
UE9BX3B0ciBmaW5kX1BPQSAoCiAgICAgICAgY29uc3QgY2hhciAqIGFkYXB0ZXJfbmFtZSwKICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBhY3RpdmF0ZV9pdCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6OkFkYXB0ZXJOb25FeGlzdGVudCApID0gMDsKCgoK
CiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gZXRoZXJl
YWxpemVfb2JqZWN0cywKICAgICAgICBDT1JCQTo6Qm9vbGVhbiB3YWl0X2Zvcl9jb21wbGV0aW9u
LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBQ
b3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5X3B0ciBjcmVhdGVfdGhyZWFkX3BvbGljeSAoCiAg
ICAgICAgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlIHZhbHVlLAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZl
cjo6TGlmZXNwYW5Qb2xpY3lfcHRyIGNyZWF0ZV9saWZlc3Bhbl9wb2xpY3kgKAogICAgICAgIFBv
cnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeVZhbHVlIHZhbHVlLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OklkVW5p
cXVlbmVzc1BvbGljeV9wdHIgY3JlYXRlX2lkX3VuaXF1ZW5lc3NfcG9saWN5ICgKICAgICAgICBQ
b3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUgdmFsdWUsCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6
SWRBc3NpZ25tZW50UG9saWN5X3B0ciBjcmVhdGVfaWRfYXNzaWdubWVudF9wb2xpY3kgKAogICAg
ICAgIFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSB2YWx1ZSwKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVT
ZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgY3JlYXRlX2ltcGxpY2l0X2FjdGl2
YXRpb25fcG9saWN5ICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9u
UG9saWN5VmFsdWUgdmFsdWUsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoK
CgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeV9wdHIg
Y3JlYXRlX3NlcnZhbnRfcmV0ZW50aW9uX3BvbGljeSAoCiAgICAgICAgUG9ydGFibGVTZXJ2ZXI6
OlNlcnZhbnRSZXRlbnRpb25Qb2xpY3lWYWx1ZSB2YWx1ZSwKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24gKSA9IDA7CgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJv
Y2Vzc2luZ1BvbGljeV9wdHIgY3JlYXRlX3JlcXVlc3RfcHJvY2Vzc2luZ19wb2xpY3kgKAogICAg
ICAgIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZhbHVlIHZhbHVlLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAgdmlydHVhbCBjaGFy
ICogdGhlX25hbWUgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAg
IHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgdGhlX3BhcmVudCAoCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6
UE9BTGlzdCAqIHRoZV9jaGlsZHJlbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkg
PSAwOwoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIgdGhlX1BP
QU1hbmFnZXIgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKCgogICAg
dmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIgdGhlX2FjdGl2YXRv
ciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg
ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCB2
b2lkIHRoZV9hY3RpdmF0b3IgKAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpBZGFwdGVyQWN0aXZh
dG9yX3B0ciB0aGVfYWN0aXZhdG9yLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0g
MDsKCgoKICAgIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyX3B0ciBnZXRf
c2VydmFudF9tYW5hZ2VyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl
U2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRf
c2VydmFudF9tYW5hZ2VyICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJf
cHRyIGltZ3IsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6
UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpT
ZXJ2YW50IGdldF9zZXJ2YW50ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l
bnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRh
YmxlU2VydmVyOjpQT0E6Ok5vU2VydmFudCwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xp
Y3kgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzZXRfc2VydmFudCAoCiAgICAgICAgUG9y
dGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVs
dF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw
dGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xpY3kgKSA9IDA7CgoKCgoKCiAgICB2
aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAqIGFjdGl2YXRlX29iamVjdCAoCiAgICAg
ICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgcF9zZXJ2YW50LAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6U2VydmFudEFscmVhZHlBY3RpdmUsIFBv
cnRhYmxlU2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIHZv
aWQgYWN0aXZhdGVfb2JqZWN0X3dpdGhfaWQgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy
OjpPYmplY3RJZCAmIGlkLAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50IHBfc2VydmFu
dCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6OlNl
cnZhbnRBbHJlYWR5QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpPYmplY3RBbHJlYWR5QWN0
aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCgoKICAgIHZp
cnR1YWwgdm9pZCBkZWFjdGl2YXRlX29iamVjdCAoCiAgICAgICAgY29uc3QgUG9ydGFibGVTZXJ2
ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUG9ydGFi
bGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9u
Z1BvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6T2JqZWN0X3B0ciBjcmVhdGVf
cmVmZXJlbmNlICgKICAgICAgICBjb25zdCBjaGFyICogaW50ZiwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25nUG9saWN5ICkgPSAwOwoKCgoK
ICAgIHZpcnR1YWwgQ09SQkE6Ok9iamVjdF9wdHIgY3JlYXRlX3JlZmVyZW5jZV93aXRoX2lkICgK
ICAgICAgICBjb25zdCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgJiBvaWQsCiAgICAgICAgY29u
c3QgY2hhciAqIGludGYsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp
CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNl
cnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCiAgICB2aXJ0dWFsIFBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZCAqIHNlcnZhbnRfdG9faWQgKAogICAgICAgIFBvcnRhYmxlU2VydmVyOjpT
ZXJ2YW50IHBfc2VydmFudCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl
U2VydmVyOjpQT0E6OlNlcnZhbnROb3RBY3RpdmUsIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n
UG9saWN5ICkgPSAwOwoKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpPYmplY3RfcHRyIHNlcnZhbnRf
dG9fcmVmZXJlbmNlICgKICAgICAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBwX3NlcnZhbnQs
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpTZXJ2
YW50Tm90QWN0aXZlLCBQb3J0YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoK
CgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudCByZWZlcmVuY2VfdG9fc2VydmFu
dCAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgcmVmZXJlbmNlLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBU
QU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5
c3RlbUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpXcm9uZ0FkYXB0ZXIsIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n
UG9saWN5ICkgPSAwOwoKCgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQg
KiByZWZlcmVuY2VfdG9faWQgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIHJlZmVyZW5jZSwK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0
aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2VydmVyOjpQT0E6Oldyb25n
QWRhcHRlciwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQb2xpY3kgKSA9IDA7CgoKCgoKICAg
IHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnQgaWRfdG9fc2VydmFudCAoCiAgICAgICAg
Y29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICYgb2lkLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6T2JqZWN0Tm90QWN0aXZlLCBQb3J0YWJs
ZVNlcnZlcjo6UE9BOjpXcm9uZ1BvbGljeSApID0gMDsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6
T2JqZWN0X3B0ciBpZF90b19yZWZlcmVuY2UgKAogICAgICAgIGNvbnN0IFBvcnRhYmxlU2VydmVy
OjpPYmplY3RJZCAmIG9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQg
KCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxl
U2VydmVyOjpQT0E6Ok9iamVjdE5vdEFjdGl2ZSwgUG9ydGFibGVTZXJ2ZXI6OlBPQTo6V3JvbmdQ
b2xpY3kgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgQ09SQkE6Ok9jdGV0U2VxICogaWQgKAogICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93
ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCAqX3Rh
b19RdWVyeUludGVyZmFjZSAocHRyX2FyaXRoX3QgdHlwZSk7CgogICAgdmlydHVhbCBjb25zdCBj
aGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6
CiAgICBQT0EgKCk7CgogICAgdmlydHVhbCB+UE9BICh2b2lkKTsKICBwcml2YXRlOgogICAgUE9B
IChjb25zdCBQT0EgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgUE9BICYpOwogIH07CiMg
MzA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Q
b3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBDdXJyZW50OwogIHR5cGVk
ZWYgQ3VycmVudCAqQ3VycmVudF9wdHI7CgoKCgoKCgogIGNsYXNzIEN1cnJlbnRfdmFyIDogcHVi
bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBDdXJyZW50X3ZhciAodm9pZCk7CiAg
ICBDdXJyZW50X3ZhciAoQ3VycmVudF9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ3VycmVudF92
YXIgKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgfkN1cnJlbnRfdmFyICh2b2lkKTsKCiAgICBD
dXJyZW50X3ZhciAmb3BlcmF0b3I9IChDdXJyZW50X3B0cik7CiAgICBDdXJyZW50X3ZhciAmb3Bl
cmF0b3I9IChjb25zdCBDdXJyZW50X3ZhciAmKTsKICAgIEN1cnJlbnRfcHRyIG9wZXJhdG9yLT4g
KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEN1cnJlbnRfcHRyICYoKSBjb25zdDsK
ICAgIG9wZXJhdG9yIEN1cnJlbnRfcHRyICYoKTsKCiAgICBDdXJyZW50X3B0ciBpbiAodm9pZCkg
Y29uc3Q7CiAgICBDdXJyZW50X3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ3VycmVudF9wdHIgJm91
dCAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBfcmV0biAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBw
dHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEN1cnJlbnRfcHRyIGR1cGxpY2F0ZSAoQ3Vy
cmVudF9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoQ3VycmVudF9wdHIpOwogICAgc3Rh
dGljIEN1cnJlbnRfcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQ3VycmVudF9wdHIgbmFycm93
IChDT1JCQTo6T2JqZWN0ICosIENPUkJBOjpFbnZpcm9ubWVudCAmKTsKICAgIHN0YXRpYyBDT1JC
QTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgQ3VycmVudF9wdHIg
cHRyXzsKCiAgICBDdXJyZW50X3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ3Vy
cmVudF92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMzEw
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0
YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKICBjbGFzcyBDdXJyZW50X291dAogIHsKICBw
dWJsaWM6CiAgICBDdXJyZW50X291dCAoQ3VycmVudF9wdHIgJik7CiAgICBDdXJyZW50X291dCAo
Q3VycmVudF92YXIgJik7CiAgICBDdXJyZW50X291dCAoY29uc3QgQ3VycmVudF9vdXQgJik7CiAg
ICBDdXJyZW50X291dCAmb3BlcmF0b3I9IChjb25zdCBDdXJyZW50X291dCAmKTsKICAgIEN1cnJl
bnRfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IEN1cnJlbnRfdmFyICYpOwogICAgQ3VycmVudF9vdXQg
Jm9wZXJhdG9yPSAoQ3VycmVudF9wdHIpOwogICAgb3BlcmF0b3IgQ3VycmVudF9wdHIgJigpOwog
ICAgQ3VycmVudF9wdHIgJnB0ciAodm9pZCk7CiAgICBDdXJyZW50X3B0ciBvcGVyYXRvci0+ICh2
b2lkKTsKCiAgcHJpdmF0ZToKICAgIEN1cnJlbnRfcHRyICZwdHJfOwogIH07CiMgMzEyNyAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl
cnZlci9Qb3J0YWJsZVNlcnZlckMuaCIKY2xhc3MgQ3VycmVudDogcHVibGljIHZpcnR1YWwgQ09S
QkE6OkN1cnJlbnQKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgQ3VycmVudF9wdHIgX3B0cl90
eXBlOwogICAgdHlwZWRlZiBDdXJyZW50X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgQ3Vy
cmVudF9wdHIgX2R1cGxpY2F0ZSAoQ3VycmVudF9wdHIgb2JqKTsKICAgIHN0YXRpYyBDdXJyZW50
X3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICBzdGF0aWMgQ3VycmVu
dF9wdHIgX3VuY2hlY2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHN0
YXRpYyBDdXJyZW50X3B0ciBfbmlsICh2b2lkKQogICAgICB7CiAgICAgICAgcmV0dXJuIChDdXJy
ZW50X3B0cikwOwogICAgICB9CgoKCgoKICAgIGNsYXNzIE5vQ29udGV4dCA6IHB1YmxpYyBDT1JC
QTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgTm9Db250ZXh0ICh2b2lk
KTsKCgogICAgICBOb0NvbnRleHQgKGNvbnN0IE5vQ29udGV4dCAmKTsKCgogICAgICB+Tm9Db250
ZXh0ICh2b2lkKTsKCgogICAgICBOb0NvbnRleHQgJm9wZXJhdG9yPSAoY29uc3QgTm9Db250ZXh0
ICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZv
aWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90
YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIE5vQ29udGV4dCAqX2Rvd25jYXN0
IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAq
X2FsbG9jICh2b2lkKTsKICAgIH07CgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9B
X3B0ciBnZXRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFBvcnRhYmxlU2Vy
dmVyOjpDdXJyZW50OjpOb0NvbnRleHQgKSA9IDA7CgoKCgogICAgdmlydHVhbCBQb3J0YWJsZVNl
cnZlcjo6T2JqZWN0SWQgKiBnZXRfb2JqZWN0X2lkICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24sIFBvcnRhYmxlU2VydmVyOjpDdXJyZW50OjpOb0NvbnRleHQgKSA9IDA7CgoKCgogICAg
dmlydHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29u
c3Q7CgogIHByb3RlY3RlZDoKICAgIEN1cnJlbnQgKCk7CgogICAgdmlydHVhbCB+Q3VycmVudCAo
dm9pZCk7CiAgcHJpdmF0ZToKICAgIEN1cnJlbnQgKGNvbnN0IEN1cnJlbnQgJik7CiAgICB2b2lk
IG9wZXJhdG9yPSAoY29uc3QgQ3VycmVudCAmKTsKICB9OwoKCgoKCiAgZXh0ZXJuIGNoYXIgKk9i
amVjdElkX3RvX3N0cmluZyAoY29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICZpZCk7CiAg
ZXh0ZXJuIENPUkJBOjpXQ2hhciAqT2JqZWN0SWRfdG9fd3N0cmluZyAoY29uc3QgUG9ydGFibGVT
ZXJ2ZXI6Ok9iamVjdElkICZpZCk7CiAgZXh0ZXJuIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAq
c3RyaW5nX3RvX09iamVjdElkIChjb25zdCBjaGFyICppZCk7CiAgZXh0ZXJuIFBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZCAqd3N0cmluZ190b19PYmplY3RJZCAoY29uc3QgQ09SQkE6OldDaGFyICpp
ZCk7Cgp9CgoKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZCopOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpPYmplY3RJ
ZCAqJik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICom
KTsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6
QW55ICYsIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpGb3J3YXJkUmVxdWVzdCAmKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxl
U2VydmVyOjpGb3J3YXJkUmVxdWVzdCopOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVy
OjpGb3J3YXJkUmVxdWVzdCAqJik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUG9ydGFibGVTZXJ2
ZXI6OkZvcndhcmRSZXF1ZXN0IComKTsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGlj
eVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5VmFs
dWUgJik7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09S
QkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lWYWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJB
OjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWUgJik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJs
ZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRh
YmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lWYWx1ZSAmKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpJ
ZEFzc2lnbm1lbnRQb2xpY3lWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6
OklkQXNzaWdubWVudFBvbGljeVZhbHVlICYpOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0
QWN0aXZhdGlvblBvbGljeVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6
SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5VmFsdWUgJik7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6U2VydmFu
dFJldGVudGlvblBvbGljeVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudFJldGVudGlvblBvbGljeVZhbHVlICYpOwogICAgICAgICAgICAgICAgICAgICAgICAg
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQ
cm9jZXNzaW5nUG9saWN5VmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFBvcnRhYmxlU2VydmVyOjpS
ZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZhbHVlICYpOwojIDMzMjggIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVT
ZXJ2ZXJDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIgMQojIDI4ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVy
L1BvcnRhYmxlU2VydmVyQy5pIgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BICoqCiAgUG9y
dGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZl
cl9QT0FMaXN0OjphbGxvY2J1ZiAoQ09SQkE6OlVMb25nIG5lbGVtcykKICB7CiAgICBQb3J0YWJs
ZVNlcnZlcjo6UE9BICoqYnVmID0gMDsKCiAgICBkbyB7IHRyeSB7IGJ1ZiA9IG5ldyBQb3J0YWJs
ZVNlcnZlcjo6UE9BKltuZWxlbXNdOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybiAwOyB9IH0gd2hpbGUgKDApOwoKICAgIGZvciAo
Q09SQkE6OlVMb25nIGkgPSAwOyBpIDwgbmVsZW1zOyBpKyspCiAgICAgIHsKICAgICAgICBidWZb
aV0gPSBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgpOwogICAgICB9CgogICAgcmV0dXJuIGJ1
ZjsKICB9CgogIGlubGluZSB2b2lkCiAgUG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09i
amVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpmcmVlYnVmIChQb3J0YWJsZVNl
cnZlcjo6UE9BICoqYnVmZmVyKQogIHsKICAgIGlmIChidWZmZXIgPT0gMCkKICAgICAgcmV0dXJu
OwogICAgZGVsZXRlW10gYnVmZmVyOwogIH0KCiAgaW5saW5lCiAgUG9ydGFibGVTZXJ2ZXI6Ol9U
QU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpfVEFP
X1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdCAodm9pZCkK
ICB7CiAgfQoKICBpbmxpbmUKICBQb3J0YWJsZVNlcnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9T
ZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0IChDT1JCQTo6VUxvbmcgbWF4aW11bSkKICAg
IDogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBfVEFPX1VuYm91bmRlZF9P
YmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6YWxsb2NidWYgKG1heGltdW0p
KQogIHsKICB9CgogIGlubGluZQogIFBvcnRhYmxlU2VydmVyOjpfVEFPX1VuYm91bmRlZF9PYmpl
Y3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6X1RBT19VbmJvdW5kZWRfT2JqZWN0
X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3QgKENPUkJBOjpVTG9uZyBtYXhpbXVtLAog
ICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgIFBvcnRhYmxlU2VydmVyOjpQT0EqICp2YWx1ZSwK
ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVu
Y2UgKG1heGltdW0sIGxlbmd0aCwgdmFsdWUsIHJlbGVhc2UpCiAgewogIH0KCiAgaW5saW5lCiAg
UG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNl
cnZlcl9QT0FMaXN0OjpfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2
ZXJfUE9BTGlzdChjb25zdCBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVT
ZXJ2ZXJfUE9BTGlzdCAmcmhzKQogICAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJo
cykKICB7CiAgICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkKICAgIHsKICAgICAgUG9ydGFibGVTZXJ2
ZXI6OlBPQSAqKnRtcDEgPSBfVEFPX1VuYm91bmRlZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVT
ZXJ2ZXJfUE9BTGlzdDo6YWxsb2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgICAgUG9ydGFibGVT
ZXJ2ZXI6OlBPQSAqKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZl
cjo6UE9BICoqPiAocmhzLmJ1ZmZlcl8pOwoKICAgICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7
IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICAgIHsKICAgICAgICAgIHRtcDFbaV0gPSBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0bXAyW2ldKTsKICAgICAgICB9CgogICAgICB0
aGlzLT5idWZmZXJfID0gdG1wMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgdGhpcy0+YnVm
ZmVyXyA9IDA7CiAgICB9CiAgfQoKICBpbmxpbmUgUG9ydGFibGVTZXJ2ZXI6Ol9UQU9fVW5ib3Vu
ZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0ICYKICBQb3J0YWJsZVNl
cnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxp
c3Q6Om9wZXJhdG9yPSAoY29uc3QgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRh
YmxlU2VydmVyX1BPQUxpc3QgJnJocykKICB7CiAgICBpZiAodGhpcyA9PSAmcmhzKQogICAgICBy
ZXR1cm4gKnRoaXM7CgogICAgaWYgKHRoaXMtPnJlbGVhc2VfKQogICAgewogICAgICBQb3J0YWJs
ZVNlcnZlcjo6UE9BICoqdG1wID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9B
ICoqPiAodGhpcy0+YnVmZmVyXyk7CgogICAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8
IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgewogICAgICAgIENPUkJBOjpyZWxlYXNlICh0bXBb
aV0pOwogICAgICAgIHRtcFtpXSA9IFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCk7CiAgICAg
IH0KICAgICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1heGltdW1fKQogICAgICB7CiAgICAg
ICAgX1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6
OmZyZWVidWYgKHRtcCk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX09i
amVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjphbGxvY2J1ZiAocmhzLm1heGlt
dW1fKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgICB0aGlzLT5idWZmZXJfID0gX1RBT19V
bmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6OmFsbG9jYnVm
IChyaHMubWF4aW11bV8pOwoKICAgIFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0
b3I9IChyaHMpOwoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0EgKip0bXAxID0gcmVpbnRlcnByZXRf
Y2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BICoqPiAodGhpcy0+YnVmZmVyXyk7CiAgICBQb3J0YWJs
ZVNlcnZlcjo6UE9BICoqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFBvcnRhYmxlU2Vy
dmVyOjpQT0EgKio+IChyaHMuYnVmZmVyXyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7
IGkgPCByaHMubGVuZ3RoXzsgKytpKQogICAgICB7CiAgICAgICAgdG1wMVtpXSA9IFBvcnRhYmxl
U2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRtcDJbaV0pOwogICAgICB9CgogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgaW5saW5lIFRBT19PYmplY3RfTWFuYWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9B
LFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyPgogIFBvcnRhYmxlU2VydmVyOjpfVEFPX1VuYm91bmRl
ZF9PYmplY3RfU2VxdWVuY2VfUG9ydGFibGVTZXJ2ZXJfUE9BTGlzdDo6b3BlcmF0b3JbXSAoQ09S
QkE6OlVMb25nIGluZGV4KSBjb25zdAoKICB7CiAgICBkbyB7IGlmKCEoaW5kZXggPCB0aGlzLT5t
YXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0Vf
TG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAo
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi
bGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiLCAxMzQsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f
LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj
ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg
JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImluZGV4IDwgdGhpcy0+bWF4aW11
bV8iLCAtMSk7IH0gfSB3aGlsZSAoMCk7CiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BICoqIGNvbnN0
IHRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlBPQSAqKj4gKHRoaXMtPmJ1
ZmZlcl8pOwogICAgcmV0dXJuIFRBT19PYmplY3RfTWFuYWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9B
LFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyPiAodG1wICsgaW5kZXgsIHRoaXMtPnJlbGVhc2VfKTsK
ICB9CgogIGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BKiAqCiAgUG9ydGFibGVTZXJ2ZXI6Ol9U
QU9fVW5ib3VuZGVkX09iamVjdF9TZXF1ZW5jZV9Qb3J0YWJsZVNlcnZlcl9QT0FMaXN0OjpnZXRf
YnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCiAgewogICAgUG9ydGFibGVTZXJ2ZXI6OlBP
QSAqKnJlc3VsdCA9IDA7CiAgICBpZiAob3JwaGFuID09IDApCiAgICB7CgogICAgICBpZiAodGhp
cy0+YnVmZmVyXyA9PSAwKQogICAgICB7CiAgICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5kZWRf
T2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxpc3Q6OmFsbG9jYnVmICh0aGlzLT5t
YXhpbXVtXyk7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgICB0aGlzLT5y
ZWxlYXNlXyA9IDE7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmVzdWx0ID0g
cmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BKio+ICh0aGlzLT5idWZmZXJfKTsK
ICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICBpZiAodGhpcy0+cmVsZWFzZV8gIT0g
MCkKICAgICAgewoKCiAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxQb3J0YWJsZVNl
cnZlcjo6UE9BKio+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgICB0aGlzLT5tYXhpbXVtXyA9IDA7
CiAgICAgICAgdGhpcy0+bGVuZ3RoXyA9IDA7CiAgICAgICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAg
ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0
OwogIH0KCiAgaW5saW5lIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpQT0EqICoKICBQb3J0YWJsZVNl
cnZlcjo6X1RBT19VbmJvdW5kZWRfT2JqZWN0X1NlcXVlbmNlX1BvcnRhYmxlU2VydmVyX1BPQUxp
c3Q6OmdldF9idWZmZXIgKHZvaWQpIGNvbnN0CiAgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgUG9ydGFibGVTZXJ2ZXI6OlBPQSAqKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIH0KIyAx
OTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9y
dGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6UE9B
TGlzdF92YXI6OlBPQUxpc3RfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpQb3J0
YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6OlBPQUxpc3RfdmFyIChQT0FMaXN0ICpwKQogIDogcHRy
XyAocCkKe30KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6OlBPQUxpc3RfdmFy
IChjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3ZhciAmcCkKewogIGlmIChwLnB0cl8p
CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlz
dCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlv
biAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMtPnB0cl8g
PSAwOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjp+UE9BTGlzdF92YXIg
KHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpQ
T0FMaXN0X3ZhciAmClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3I9IChQT0FM
aXN0ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJu
ICp0aGlzOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXIgJgpQb3J0YWJs
ZVNlcnZlcjo6UE9BTGlzdF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6
UE9BTGlzdF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRy
XyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAg
dGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
UE9BTGlzdCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IFBPQUxpc3QgKCpwLnB0cl8pOwoK
ICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IFBPQUxpc3QgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlz
LT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVs
ZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAqClBvcnRhYmxl
U2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAqClBvcnRhYmxl
U2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciBjb25z
dCA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciA6OlBv
cnRhYmxlU2VydmVyOjpQT0FMaXN0ICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp
bmUKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvciA6OlBvcnRhYmxlU2VydmVy
OjpQT0FMaXN0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lClBv
cnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3BlcmF0b3IgOjpQb3J0YWJsZVNlcnZlcjo6UE9B
TGlzdCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFRBT19PYmplY3RfTWFu
YWdlcjxQb3J0YWJsZVNlcnZlcjo6UE9BLCBQb3J0YWJsZVNlcnZlcjo6UE9BX3Zhcj4KUG9ydGFi
bGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsK
ICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3Qg
OjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdCAmClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6
aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRh
YmxlU2VydmVyOjpQT0FMaXN0ICYKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3RfdmFyOjppbm91dCAo
dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlBvcnRhYmxlU2VydmVy
OjpQT0FMaXN0IComClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X3Zhcjo6b3V0ICh2b2lkKQp7CiAg
ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0ICoKUG9ydGFibGVTZXJ2ZXI6OlBP
QUxpc3RfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3QgKnRt
cCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5l
IDo6UG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3QgKgpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF92YXI6
OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClBv
cnRhYmxlU2VydmVyOjpQT0FMaXN0X291dDo6UE9BTGlzdF9vdXQgKFBPQUxpc3QgKiZwKQogIDog
cHRyXyAocCkKewogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6OlBP
QUxpc3Rfb3V0OjpQT0FMaXN0X291dCAoUE9BTGlzdF92YXIgJnApCiAgOiBwdHJfIChwLm91dCAo
KSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUG9y
dGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpQT0FMaXN0X291dCAoY29uc3QgOjpQb3J0YWJsZVNl
cnZlcjo6UE9BTGlzdF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9jYXN0PFBPQUxpc3Rfb3V0Jj4g
KHApLnB0cl8pCnt9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQgJgpQb3J0
YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpQb3J0YWJsZVNlcnZl
cjo6UE9BTGlzdF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxQT0FMaXN0X291
dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2ZXI6
OlBPQUxpc3Rfb3V0ICYKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpvcGVyYXRvcj0gKFBP
QUxpc3QgKnApCnsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpQ
b3J0YWJsZVNlcnZlcjo6UE9BTGlzdF9vdXQ6Om9wZXJhdG9yIDo6UG9ydGFibGVTZXJ2ZXI6OlBP
QUxpc3QgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRhYmxlU2Vy
dmVyOjpQT0FMaXN0IComClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0X291dDo6cHRyICh2b2lkKQp7
CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpQT0FMaXN0
ICoKUG9ydGFibGVTZXJ2ZXI6OlBPQUxpc3Rfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0
dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBUQU9fT2JqZWN0X01hbmFnZXI8UG9ydGFibGVTZXJ2
ZXI6OlBPQSwgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXI+ClBvcnRhYmxlU2VydmVyOjpQT0FMaXN0
X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDQwNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMu
aSIKaW5saW5lClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Ok9iamVjdElkX3ZhciAodm9p
ZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6
T2JqZWN0SWRfdmFyIChPYmplY3RJZCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKUG9ydGFi
bGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6T2JqZWN0SWRfdmFyIChjb25zdCA6OlBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlz
LT5wdHJfID0gbmV3IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICgqcC5wdHJfKTsgfSBjYXRj
aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47
IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0KCgppbmxpbmUKUG9y
dGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6T2JqZWN0SWRfdmFyIChjb25zdCA6OlBvcnRhYmxl
U2VydmVyOjpPYmplY3RJZCAmcCkKewogIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlBv
cnRhYmxlU2VydmVyOjpPYmplY3RJZCAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwp9Cgppbmxp
bmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6fk9iamVjdElkX3ZhciAodm9pZCkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zh
ciAmClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Om9wZXJhdG9yPSAoT2JqZWN0SWQgKnAp
CnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7
Cn0KCmlubGluZSA6OlBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXIgJgpQb3J0YWJsZVNlcnZl
cjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVj
dElkX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09
IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlz
LT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBPYmpl
Y3RJZCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IE9iamVjdElkICgqcC5wdHJfKTsKCiAg
ICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBP
YmplY3RJZCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMt
PnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxl
dGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRo
aXM7Cn0KCgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyICYKUG9ydGFibGVT
ZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpP
YmplY3RJZCAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlz
LT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UG9ydGFibGVTZXJ2ZXI6
Ok9iamVjdElkIChwKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0
aW9uICgpKSA9IDEyOyByZXR1cm4gKnRoaXM7IH0gfSB3aGlsZSAoMCk7CiAgfQogIHJldHVybiAq
dGhpczsKfQoKaW5saW5lIGNvbnN0IDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICoKUG9ydGFi
bGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKgpQb3J0
YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRo
aXMtPnB0cl87Cn0KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVyYXRv
ciBjb25zdCA6OlBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmKCkgY29uc3QKewogIHJldHVybiAq
dGhpcy0+cHRyXzsKfQoKaW5saW5lClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Om9wZXJh
dG9yIDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgppbmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3IgOjpQb3J0
YWJsZVNlcnZlcjo6T2JqZWN0SWQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0K
CmlubGluZSBDT1JCQTo6T2N0ZXQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjpvcGVy
YXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0
b3JbXSAoaW5kZXgpOwp9CgppbmxpbmUgY29uc3QgQ09SQkE6Ok9jdGV0ICYKUG9ydGFibGVTZXJ2
ZXI6Ok9iamVjdElkX3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBjb25zdAp7
CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgQ09SQkE6Ok9jdGV0ICY+ICh0aGlzLT5wdHJfLT5v
cGVyYXRvcltdIChpbmRleCkpOwp9CgppbmxpbmUgY29uc3QgOjpQb3J0YWJsZVNlcnZlcjo6T2Jq
ZWN0SWQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfdmFyOjppbiAodm9pZCkgY29uc3QKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElk
ICYKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6aW5vdXQgKHZvaWQpCnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKiYKUG9y
dGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0
cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBv
cnRhYmxlU2VydmVyOjpPYmplY3RJZCAqClBvcnRhYmxlU2VydmVyOjpPYmplY3RJZF92YXI6Ol9y
ZXRuICh2b2lkKQp7CiAgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWQgKnRtcCA9IHRoaXMtPnB0
cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6UG9ydGFibGVT
ZXJ2ZXI6Ok9iamVjdElkICoKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX3Zhcjo6cHRyICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKUG9ydGFibGVTZXJ2
ZXI6Ok9iamVjdElkX291dDo6T2JqZWN0SWRfb3V0IChPYmplY3RJZCAqJnApCiAgOiBwdHJfIChw
KQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRf
b3V0OjpPYmplY3RJZF9vdXQgKE9iamVjdElkX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7
CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpQb3J0YWJs
ZVNlcnZlcjo6T2JqZWN0SWRfb3V0OjpPYmplY3RJZF9vdXQgKGNvbnN0IDo6UG9ydGFibGVTZXJ2
ZXI6Ok9iamVjdElkX291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8T2JqZWN0SWRfb3V0Jj4g
KHApLnB0cl8pCnt9CgppbmxpbmUgOjpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0ICYKUG9y
dGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3I9IChjb25zdCA6OlBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZF9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29uc3RfY2FzdDxPYmplY3RJ
ZF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlBvcnRhYmxlU2Vy
dmVyOjpPYmplY3RJZF9vdXQgJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0OjpvcGVyYXRv
cj0gKE9iamVjdElkICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3IgOjpQb3J0YWJsZVNl
cnZlcjo6T2JqZWN0SWQgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlBv
cnRhYmxlU2VydmVyOjpPYmplY3RJZCAqJgpQb3J0YWJsZVNlcnZlcjo6T2JqZWN0SWRfb3V0Ojpw
dHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UG9ydGFibGVTZXJ2
ZXI6Ok9iamVjdElkICoKUG9ydGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3ItPiAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgQ09SQkE6Ok9jdGV0ICYKUG9y
dGFibGVTZXJ2ZXI6Ok9iamVjdElkX291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4
KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDYzNiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl
cnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xp
Y3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9UaHJlYWRQb2xpY3lfZHVwbGljYXRlICgKICAgIFBv
cnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVT
ZXJ2ZXI6OlRocmVhZFBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Q
b3J0YWJsZVNlcnZlcl9UaHJlYWRQb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6
VGhyZWFkUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9CgppbmxpbmUg
UG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1RocmVh
ZFBvbGljeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6VGhy
ZWFkUG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGlj
eV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1RocmVhZFBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6
Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5Ojpf
bmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENP
UkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVTZXJ2ZXJfVGhyZWFkUG9saWN5X3VwY2FzdCAoCiAg
ICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6VGhyZWFkUG9saWN5ICoqdG1wID0K
ICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpUaHJlYWRQb2xpY3kgKio+IChzcmMpOwog
IHJldHVybiAqdG1wOwp9CiMgNjg4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUg
UG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfTGlm
ZXNwYW5Qb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGlj
eV9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9k
dXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfTGlmZXNwYW5Q
b2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lfcHRyIHAK
ICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6TGlm
ZXNwYW5Qb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV9uaWwgKAog
ICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9u
aWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lfcHRyCnRhb19Q
b3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAq
cCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3k6Ol9uYXJyb3cg
KHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9i
amVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9MaWZlc3BhblBvbGljeV91cGNhc3QgKAogICAgdm9p
ZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5ICoqdG1wID0KICAg
IHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGljeSAqKj4gKHNyYyk7CiAg
cmV0dXJuICp0bXA7Cn0KIyA3MzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZSBQ
b3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJf
SWRVbmlxdWVuZXNzUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6SWRVbmlx
dWVuZXNzUG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1
ZW5lc3NQb2xpY3k6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVT
ZXJ2ZXJfSWRVbmlxdWVuZXNzUG9saWN5X3JlbGVhc2UgKAogICAgUG9ydGFibGVTZXJ2ZXI6Oklk
VW5pcXVlbmVzc1BvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsKfQoKaW5s
aW5lIFBvcnRhYmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNl
cnZlcl9JZFVuaXF1ZW5lc3NQb2xpY3lfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9y
dGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6X25pbCAoKTsKfQoKaW5saW5lIFBvcnRh
YmxlU2VydmVyOjpJZFVuaXF1ZW5lc3NQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9JZFVu
aXF1ZW5lc3NQb2xpY3lfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1
cm4gUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeTo6X25hcnJvdyAocCwgX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFv
X1BvcnRhYmxlU2VydmVyX0lkVW5pcXVlbmVzc1BvbGljeV91cGNhc3QgKAogICAgdm9pZCAqc3Jj
CiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OklkVW5pcXVlbmVzc1BvbGljeSAqKnRtcCA9CiAgICBz
dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5ICoqPiAoc3JjKTsK
ICByZXR1cm4gKnRtcDsKfQojIDc4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5l
IFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3lfcHRyCnRhb19Qb3J0YWJsZVNlcnZl
cl9JZEFzc2lnbm1lbnRQb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpJZEFz
c2lnbm1lbnRQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OklkQXNz
aWdubWVudFBvbGljeTo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJs
ZVNlcnZlcl9JZEFzc2lnbm1lbnRQb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6
SWRBc3NpZ25tZW50UG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJlbGVhc2UgKHApOwp9Cgpp
bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeV9wdHIKdGFvX1BvcnRhYmxl
U2VydmVyX0lkQXNzaWdubWVudFBvbGljeV9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQ
b3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9y
dGFibGVTZXJ2ZXI6OklkQXNzaWdubWVudFBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0lk
QXNzaWdubWVudFBvbGljeV9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJl
dHVybiBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5OjpfbmFycm93IChwLCBfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0
YW9fUG9ydGFibGVTZXJ2ZXJfSWRBc3NpZ25tZW50UG9saWN5X3VwY2FzdCAoCiAgICB2b2lkICpz
cmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5ICoqdG1wID0KICAg
IHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpJZEFzc2lnbm1lbnRQb2xpY3kgKio+IChzcmMp
OwogIHJldHVybiAqdG1wOwp9CiMgODQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxp
bmUgUG9ydGFibGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIKdGFvX1BvcnRh
YmxlU2VydmVyX0ltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9kdXBsaWNhdGUgKAogICAgUG9ydGFi
bGVTZXJ2ZXI6OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeV9wdHIgcAogICkKewogIHJldHVybiBQ
b3J0YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5OjpfZHVwbGljYXRlIChwKTsK
fQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlU2VydmVyX0ltcGxpY2l0QWN0aXZhdGlvblBvbGlj
eV9yZWxlYXNlICgKICAgIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lf
cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl
cjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfSW1wbGlj
aXRBY3RpdmF0aW9uUG9saWN5X25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxl
U2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0
YWJsZVNlcnZlcjo6SW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2
ZXJfSW1wbGljaXRBY3RpdmF0aW9uUG9saWN5X25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpw
LAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3k6
Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUg
Q09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9JbXBsaWNpdEFjdGl2YXRpb25Qb2xp
Y3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNp
dEFjdGl2YXRpb25Qb2xpY3kgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6
OkltcGxpY2l0QWN0aXZhdGlvblBvbGljeSAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyA4
OTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9y
dGFibGVTZXJ2ZXIvUG9ydGFibGVTZXJ2ZXJDLmkiCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2Vy
dmFudFJldGVudGlvblBvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRSZXRlbnRp
b25Qb2xpY3lfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9u
UG9saWN5X3B0ciBwCiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50
aW9uUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRhYmxlU2Vy
dmVyX1NlcnZhbnRSZXRlbnRpb25Qb2xpY3lfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6
U2VydmFudFJldGVudGlvblBvbGljeV9wdHIgcAogICkKewogIENPUkJBOjpyZWxlYXNlIChwKTsK
fQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cgp0YW9f
UG9ydGFibGVTZXJ2ZXJfU2VydmFudFJldGVudGlvblBvbGljeV9uaWwgKAogICAgdm9pZAogICkK
ewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeTo6X25pbCAo
KTsKfQoKaW5saW5lIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5X3B0cgp0
YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudFJldGVudGlvblBvbGljeV9uYXJyb3cgKAogICAgQ09S
QkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVu
dGlvblBvbGljeTo6X25hcnJvdyAocCwgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7
Cn0KCmlubGluZSBDT1JCQTo6T2JqZWN0ICoKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRSZXRl
bnRpb25Qb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxlU2VydmVy
OjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5ICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxl
U2VydmVyOjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5ICoqPiAoc3JjKTsKICByZXR1cm4gKnRtcDsK
fQojIDk0MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNlcnZlckMuaSIKaW5saW5lIFBvcnRhYmxlU2VydmVy
OjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1JlcXVlc3RQ
cm9jZXNzaW5nUG9saWN5X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFBy
b2Nlc3NpbmdQb2xpY3lfcHRyIHAKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlJlcXVl
c3RQcm9jZXNzaW5nUG9saWN5OjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1Bv
cnRhYmxlU2VydmVyX1JlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3JlbGVhc2UgKAogICAgUG9ydGFi
bGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5X3B0ciBwCiAgKQp7CiAgQ09SQkE6OnJl
bGVhc2UgKHApOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9s
aWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfbmlsICgK
ICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNzaW5n
UG9saWN5OjpfbmlsICgpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQcm9jZXNz
aW5nUG9saWN5X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lf
bmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2
ZXI6OlJlcXVlc3RQcm9jZXNzaW5nUG9saWN5OjpfbmFycm93IChwLCBfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlKTsKfQoKaW5saW5lIENPUkJBOjpPYmplY3QgKgp0YW9fUG9ydGFibGVT
ZXJ2ZXJfUmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkK
ewogIFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeSAqKnRtcCA9CiAgICBz
dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3kgKio+IChz
cmMpOwogIHJldHVybiAqdG1wOwp9CiMgOTk2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp
bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9Q
T0FNYW5hZ2VyX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIg
cAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcjo6X2R1cGxpY2F0ZSAo
cCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9QT0FNYW5hZ2VyX3JlbGVhc2Ug
KAogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVs
ZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlcl9wdHIKdGFvX1Bv
cnRhYmxlU2VydmVyX1BPQU1hbmFnZXJfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9y
dGFibGVTZXJ2ZXI6OlBPQU1hbmFnZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl
cjo6UE9BTWFuYWdlcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1BPQU1hbmFnZXJfbmFycm93ICgK
ICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQU1h
bmFnZXI6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgpp
bmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9QT0FNYW5hZ2VyX3VwY2Fz
dCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlciAqKnRt
cCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UE9BTWFuYWdlciAqKj4gKHNyYyk7
CiAgcmV0dXJuICp0bXA7Cn0KIyAxMDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxp
bmUgUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJBY3RpdmF0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZl
cl9BZGFwdGVyQWN0aXZhdG9yX2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6QWRhcHRl
ckFjdGl2YXRvcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6QWRhcHRlckFj
dGl2YXRvcjo6X2R1cGxpY2F0ZSAocCk7Cn0KCmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZl
cl9BZGFwdGVyQWN0aXZhdG9yX3JlbGVhc2UgKAogICAgUG9ydGFibGVTZXJ2ZXI6OkFkYXB0ZXJB
Y3RpdmF0b3JfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0
YWJsZVNlcnZlcjo6QWRhcHRlckFjdGl2YXRvcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0FkYXB0
ZXJBY3RpdmF0b3JfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6
OkFkYXB0ZXJBY3RpdmF0b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6QWRh
cHRlckFjdGl2YXRvcl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0FkYXB0ZXJBY3RpdmF0b3JfbmFy
cm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6
OkFkYXB0ZXJBY3RpdmF0b3I6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9BZGFw
dGVyQWN0aXZhdG9yX3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZl
cjo6QWRhcHRlckFjdGl2YXRvciAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZl
cjo6QWRhcHRlckFjdGl2YXRvciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMDk4ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
U2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRN
YW5hZ2VyX3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudE1hbmFnZXJfZHVwbGljYXRlICgK
ICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TWFuYWdlcl9wdHIgcAogICkKewogIHJldHVybiBQ
b3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUg
dm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfU2VydmFudE1hbmFnZXJfcmVsZWFzZSAoCiAgICBQb3J0
YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAo
cCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyCnRhb19Qb3J0
YWJsZVNlcnZlcl9TZXJ2YW50TWFuYWdlcl9uaWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQ
b3J0YWJsZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJs
ZVNlcnZlcjo6U2VydmFudE1hbmFnZXJfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TWFu
YWdlcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9iamVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJs
ZVNlcnZlcjo6U2VydmFudE1hbmFnZXI6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZl
cl9TZXJ2YW50TWFuYWdlcl91cGNhc3QgKAogICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVT
ZXJ2ZXI6OlNlcnZhbnRNYW5hZ2VyICoqdG1wID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2Vy
dmVyOjpTZXJ2YW50TWFuYWdlciAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMTQ4ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
U2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRB
Y3RpdmF0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX2R1cGxpY2F0
ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIgcAogICkKewogIHJl
dHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcjo6X2R1cGxpY2F0ZSAocCk7Cn0K
CmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX3JlbGVhc2Ug
KAogICAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3JfcHRyIHAKICApCnsKICBDT1JC
QTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRv
cl9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1NlcnZhbnRBY3RpdmF0b3JfbmlsICgKICAgIHZvaWQK
ICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9uaWwgKCk7
Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvcl9wdHIKdGFvX1BvcnRh
YmxlU2VydmVyX1NlcnZhbnRBY3RpdmF0b3JfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAs
CiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK
ICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRBY3RpdmF0b3I6Ol9uYXJyb3cg
KHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9i
amVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50QWN0aXZhdG9yX3VwY2FzdCAoCiAgICB2
b2lkICpzcmMKICApCnsKICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvciAqKnRtcCA9
CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6U2VydmFudEFjdGl2YXRvciAqKj4gKHNy
Yyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMTk4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp
bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yX3B0cgp0YW9fUG9ydGFibGVTZXJ2
ZXJfU2VydmFudExvY2F0b3JfZHVwbGljYXRlICgKICAgIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50
TG9jYXRvcl9wdHIgcAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0
b3I6Ol9kdXBsaWNhdGUgKHApOwp9CgppbmxpbmUgdm9pZAp0YW9fUG9ydGFibGVTZXJ2ZXJfU2Vy
dmFudExvY2F0b3JfcmVsZWFzZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3Jf
cHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZl
cjo6U2VydmFudExvY2F0b3JfcHRyCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl9u
aWwgKAogICAgdm9pZAogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0
b3I6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3JfcHRy
CnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl9uYXJyb3cgKAogICAgQ09SQkE6Ok9i
amVjdCAqcCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZQogICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6U2VydmFudExvY2F0b3I6Ol9u
YXJyb3cgKHAsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09S
QkE6Ok9iamVjdCAqCnRhb19Qb3J0YWJsZVNlcnZlcl9TZXJ2YW50TG9jYXRvcl91cGNhc3QgKAog
ICAgdm9pZCAqc3JjCiAgKQp7CiAgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRMb2NhdG9yICoqdG1w
ID0KICAgIHN0YXRpY19jYXN0PFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50TG9jYXRvciAqKj4gKHNy
Yyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMjkwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5pIgpp
bmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX1BPQV9kdXBs
aWNhdGUgKAogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcAogICkKewogIHJldHVybiBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlIChwKTsKfQoKaW5saW5lIHZvaWQKdGFvX1BvcnRh
YmxlU2VydmVyX1BPQV9yZWxlYXNlICgKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHAKICAp
CnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0
cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUE9BX25pbCAoCiAgICB2b2lkCiAgKQp7CiAgcmV0dXJuIFBv
cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9B
X3B0cgp0YW9fUG9ydGFibGVTZXJ2ZXJfUE9BX25hcnJvdyAoCiAgICBDT1JCQTo6T2JqZWN0ICpw
LAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Q
b3J0YWJsZVNlcnZlcl9QT0FfdXBjYXN0ICgKICAgIHZvaWQgKnNyYwogICkKewogIFBvcnRhYmxl
U2VydmVyOjpQT0EgKip0bXAgPQogICAgc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlBPQSAq
Kj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzQ0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVy
Qy5pIgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OkN1cnJlbnRfcHRyCnRhb19Qb3J0YWJsZVNlcnZl
cl9DdXJyZW50X2R1cGxpY2F0ZSAoCiAgICBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIgcAog
ICkKewogIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudDo6X2R1cGxpY2F0ZSAocCk7Cn0K
CmlubGluZSB2b2lkCnRhb19Qb3J0YWJsZVNlcnZlcl9DdXJyZW50X3JlbGVhc2UgKAogICAgUG9y
dGFibGVTZXJ2ZXI6OkN1cnJlbnRfcHRyIHAKICApCnsKICBDT1JCQTo6cmVsZWFzZSAocCk7Cn0K
CmlubGluZSBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIKdGFvX1BvcnRhYmxlU2VydmVyX0N1
cnJlbnRfbmlsICgKICAgIHZvaWQKICApCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OkN1cnJl
bnQ6Ol9uaWwgKCk7Cn0KCmlubGluZSBQb3J0YWJsZVNlcnZlcjo6Q3VycmVudF9wdHIKdGFvX1Bv
cnRhYmxlU2VydmVyX0N1cnJlbnRfbmFycm93ICgKICAgIENPUkJBOjpPYmplY3QgKnAsCiAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCnsK
ICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OkN1cnJlbnQ6Ol9uYXJyb3cgKHAsIF9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdCAqCnRhb19Qb3J0
YWJsZVNlcnZlcl9DdXJyZW50X3VwY2FzdCAoCiAgICB2b2lkICpzcmMKICApCnsKICBQb3J0YWJs
ZVNlcnZlcjo6Q3VycmVudCAqKnRtcCA9CiAgICBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6
Q3VycmVudCAqKj4gKHNyYyk7CiAgcmV0dXJuICp0bXA7Cn0KIyAxMzk0ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRh
YmxlU2VydmVyQy5pIgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRD
RFIgJiwKICAgIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpPYmplY3RJZCAmCiAgKTsKQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFBvcnRhYmxlU2VydmVy
OjpPYmplY3RJZCAmCiAgKTsKCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo
VEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6OkZvcndhcmRSZXF1ZXN0
ICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkp
CiAgewoKICAgIGlmICgKICAgICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuZm9yd2FyZF9yZWZl
cmVuY2UuaW4gKCkpCiAgICApCiAgICAgIHJldHVybiAxOwogICAgZWxzZQogICAgICByZXR1cm4g
MDsKICB9CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sUG9ydGFibGVTZXJ2ZXI6OkZvcndhcmRSZXF1ZXN0
ICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5m
b3J3YXJkX3JlZmVyZW5jZS5vdXQgKCkpCiAgKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0
dXJuIDA7Cn0KCgoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1
dENEUiAmc3RybSwgY29uc3QgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlICZfdGFv
X2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVtdmFsOwogIHJl
dHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj4gKFRBT19JbnB1dENEUiAmc3RybSwgUG9ydGFibGVTZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVl
ICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBDT1JCQTo6
Qm9vbGVhbiBfdGFvX3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rhb19yZXN1
bHQgPT0gMSkKICAgIHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9ydGFibGVT
ZXJ2ZXI6OlRocmVhZFBvbGljeVZhbHVlPiAoX3Rhb190ZW1wKTsKICAgIH0KCiAgcmV0dXJuIF90
YW9fcmVzdWx0Owp9CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0
cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZlcjo6TGlmZXNwYW5Qb2xpY3lWYWx1ZSAm
X3Rhb19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsK
ICByZXR1cm4gc3RybSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFBvcnRhYmxlU2VydmVyOjpMaWZlc3BhblBvbGlj
eVZhbHVlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBD
T1JCQTo6Qm9vbGVhbiBfdGFvX3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rh
b19yZXN1bHQgPT0gMSkKICAgIHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9y
dGFibGVTZXJ2ZXI6OkxpZmVzcGFuUG9saWN5VmFsdWU+IChfdGFvX3RlbXApOwogICAgfQoKICBy
ZXR1cm4gX3Rhb19yZXN1bHQ7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChU
QU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9s
aWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSBfdGFv
X2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1wOwp9CgppbmxpbmUgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBQb3J0YWJsZVNlcnZlcjo6SWRV
bmlxdWVuZXNzUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFv
X3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3Rl
bXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBz
dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRVbmlxdWVuZXNzUG9saWN5VmFsdWU+IChfdGFv
X3RlbXApOwogICAgfQoKICByZXR1cm4gX3Rhb19yZXN1bHQ7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBQb3J0YWJsZVNlcnZl
cjo6SWRBc3NpZ25tZW50UG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9u
ZyBfdGFvX3RlbXAgPSBfdGFvX2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1wOwp9
CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBQ
b3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50UG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewog
IENPUkJBOjpVTG9uZyBfdGFvX3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0
ID0gc3RybSA+PiBfdGFvX3RlbXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAg
ICBfdGFvX2VudW12YWwgPSBzdGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6SWRBc3NpZ25tZW50
UG9saWN5VmFsdWU+IChfdGFvX3RlbXApOwogICAgfQoKICByZXR1cm4gX3Rhb19yZXN1bHQ7Cn0K
CgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0s
IGNvbnN0IFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZSAmX3Rh
b19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICBy
ZXR1cm4gc3RybSA8PCBfdGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRp
b25Qb2xpY3lWYWx1ZSAmX3Rhb19lbnVtdmFsKQp7CiAgQ09SQkE6OlVMb25nIF90YW9fdGVtcCA9
IDA7CiAgQ09SQkE6OkJvb2xlYW4gX3Rhb19yZXN1bHQgPSBzdHJtID4+IF90YW9fdGVtcDsKCiAg
aWYgKF90YW9fcmVzdWx0ID09IDEpCiAgICB7CiAgICAgIF90YW9fZW51bXZhbCA9IHN0YXRpY19j
YXN0PFBvcnRhYmxlU2VydmVyOjpJbXBsaWNpdEFjdGl2YXRpb25Qb2xpY3lWYWx1ZT4gKF90YW9f
dGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQoKaW5saW5lIENPUkJBOjpCb29s
ZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFBvcnRhYmxlU2VydmVy
OjpTZXJ2YW50UmV0ZW50aW9uUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpV
TG9uZyBfdGFvX3RlbXAgPSBfdGFvX2VudW12YWw7CiAgcmV0dXJuIHN0cm0gPDwgX3Rhb190ZW1w
Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJt
LCBQb3J0YWJsZVNlcnZlcjo6U2VydmFudFJldGVudGlvblBvbGljeVZhbHVlICZfdGFvX2VudW12
YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gMDsKICBDT1JCQTo6Qm9vbGVhbiBfdGFv
X3Jlc3VsdCA9IHN0cm0gPj4gX3Rhb190ZW1wOwoKICBpZiAoX3Rhb19yZXN1bHQgPT0gMSkKICAg
IHsKICAgICAgX3Rhb19lbnVtdmFsID0gc3RhdGljX2Nhc3Q8UG9ydGFibGVTZXJ2ZXI6OlNlcnZh
bnRSZXRlbnRpb25Qb2xpY3lWYWx1ZT4gKF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFv
X3Jlc3VsdDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRD
RFIgJnN0cm0sIGNvbnN0IFBvcnRhYmxlU2VydmVyOjpSZXF1ZXN0UHJvY2Vzc2luZ1BvbGljeVZh
bHVlICZfdGFvX2VudW12YWwpCnsKICBDT1JCQTo6VUxvbmcgX3Rhb190ZW1wID0gX3Rhb19lbnVt
dmFsOwogIHJldHVybiBzdHJtIDw8IF90YW9fdGVtcDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgUG9ydGFibGVTZXJ2ZXI6OlJlcXVlc3RQ
cm9jZXNzaW5nUG9saWN5VmFsdWUgJl90YW9fZW51bXZhbCkKewogIENPUkJBOjpVTG9uZyBfdGFv
X3RlbXAgPSAwOwogIENPUkJBOjpCb29sZWFuIF90YW9fcmVzdWx0ID0gc3RybSA+PiBfdGFvX3Rl
bXA7CgogIGlmIChfdGFvX3Jlc3VsdCA9PSAxKQogICAgewogICAgICBfdGFvX2VudW12YWwgPSBz
dGF0aWNfY2FzdDxQb3J0YWJsZVNlcnZlcjo6UmVxdWVzdFByb2Nlc3NpbmdQb2xpY3lWYWx1ZT4g
KF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQojIDMzMjkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2
ZXIvUG9ydGFibGVTZXJ2ZXJDLmgiIDIKIyAzMzM5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5o
IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0
LmgiIDEKIyAzMzQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAyCiMgNTIgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIv
UG9ydGFibGVTZXJ2ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyLmgi
IDIKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgi
IDEKIyAxOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyMCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50
X0Jhc2UuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyQy5oIiAxCiMgMjIgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2
ZXIvU2VydmFudF9CYXNlLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL0Fic3RyYWN0X1NlcnZhbnRfQmFzZS5oIiAxCiMgMjMgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2Vy
dmFudF9CYXNlLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3ByZS5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2VydmFudF9CYXNlLmgiIDIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhZndkLmgiIDEKIyAy
NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9BYnN0
cmFjdF9TZXJ2YW50X0Jhc2UuaCIgMgoKCgoKCmNsYXNzIFRBT19TZXJ2ZXJSZXF1ZXN0OwoKY2xh
c3MgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fQWJz
dHJhY3RfU2VydmFudEJhc2UgKHZvaWQpOwoKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNf
YSAoY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpKSA9IDA7CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENP
UkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l
bnQgKCkpID0gMDsKCgogIHZpcnR1YWwgQ09SQkFfSW50ZXJmYWNlRGVmX3B0ciBfZ2V0X2ludGVy
ZmFjZSAoCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICkgPSAwOwoKCgogIHZpcnR1
YWwgdm9pZCBfYWRkX3JlZiAoQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkpOwogIHZpcnR1YWwgdm9pZCBfcmVtb3ZlX3JlZiAoQ09SQkFfRW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkpOwoKCgogIHZpcnR1YWwgdm9pZCAqX2Rv
d25jYXN0IChjb25zdCBjaGFyICpyZXBvc2l0b3J5X2lkKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19T
dHViICpfY3JlYXRlX3N0dWIgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlKSA9IDA7Cgpwcm90ZWN0ZWQ6CgogIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFz
ZSAodm9pZCk7CgoKICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKGNvbnN0IFRBT19BYnN0cmFj
dF9TZXJ2YW50QmFzZSAmKTsKCgogIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAmb3BlcmF0b3I9
IChjb25zdCBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgJik7CiMgODMgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vQWJzdHJhY3RfU2VydmFudF9CYXNl
LmgiCiAgdmlydHVhbCB2b2lkIF9kaXNwYXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcXVlc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUpID0gMDsKCiAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3VzX3VwY2FsbF9kaXNw
YXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXJpdmVkX3RoaXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSA9IDA7CgoKICB2aXJ0dWFsIGludCBfZmluZCAo
Y29uc3QgY2hhciAqb3BuYW1lLAogICAgICAgICAgICAgICAgICAgICBUQU9fU2tlbGV0b24gJnNr
ZWxmdW5jLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbGVuZ3RoID0g
MCkgPSAwOwoKCiAgdmlydHVhbCBpbnQgX2JpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVEFPX1NrZWxldG9uIHNrZWxfcHRyKSA9IDA7CgoKICB2aXJ0
dWFsIGNvbnN0IGNoYXIgKl9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3QgPSAw
Owp9OwoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cG9zdC5oIiAxCiMgMTA2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL0Fic3RyYWN0X1NlcnZhbnRfQmFzZS5oIiAyCiMgMjMgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFu
dF9CYXNlLmgiIDIKCgoKCgpjbGFzcyBUQU9fT3BlcmF0aW9uX1RhYmxlOwoKY2xhc3MgVEFPX1Nl
cnZhbnRCYXNlCiAgOiBwdWJsaWMgdmlydHVhbCBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UKewoK
CgoKCgpwdWJsaWM6CiAgZnJpZW5kIGNsYXNzIFRBT19QT0E7CiAgZnJpZW5kIGNsYXNzIFRBT19P
YmplY3RfQWRhcHRlcjsKICBmcmllbmQgY2xhc3MgQ09SQkFfT2JqZWN0OwogIGZyaWVuZCBjbGFz
cyBUQU9fTG9jYWxfU2VydmFudEJhc2U7CgogIHZpcnR1YWwgflRBT19TZXJ2YW50QmFzZSAodm9p
ZCk7CgoKICB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0X1BPQSAoCiAg
ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgKTsKCgogIHZpcnR1YWwgQ09S
QkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25f
ZXhpc3RlbnQgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkpOwoKCiAgdmlydHVhbCBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIF9n
ZXRfaW50ZXJmYWNlICgKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAp
OwoKICB2aXJ0dWFsIHZvaWQgKl9kb3duY2FzdCAoY29uc3QgY2hhciAqcmVwb3NpdG9yeV9pZCkg
PSAwOwoKCiAgdmlydHVhbCBUQU9fU3R1YiAqX2NyZWF0ZV9zdHViIChDT1JCQV9FbnZpcm9ubWVu
dCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKICB2aXJ0dWFsIHZvaWQgX2Rp
c3BhdGNoIChUQU9fU2VydmVyUmVxdWVzdCAmcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JC
QV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkgPSAwOwoKCgoK
Cgpwcm90ZWN0ZWQ6CgogIFRBT19TZXJ2YW50QmFzZSAodm9pZCk7CgoKICBUQU9fU2VydmFudEJh
c2UgKGNvbnN0IFRBT19TZXJ2YW50QmFzZSAmKTsKCgogIFRBT19TZXJ2YW50QmFzZSAmb3BlcmF0
b3I9IChjb25zdCBUQU9fU2VydmFudEJhc2UgJik7CgoKCiAgdmlydHVhbCB2b2lkIHN5bmNocm9u
b3VzX3VwY2FsbF9kaXNwYXRjaCAoVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkZXJpdmVkX3Ro
aXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCiAgdmlydHVhbCBp
bnQgX2ZpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwKICAgICAgICAgICAgICAgICAgICAgVEFPX1Nr
ZWxldG9uICZza2VsZnVuYywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IGxlbmd0aCA9IDApOwoKCiAgdmlydHVhbCBpbnQgX2JpbmQgKGNvbnN0IGNoYXIgKm9wbmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVEFPX1NrZWxldG9uIHNrZWxfcHRyKTsKCgogIHZp
cnR1YWwgY29uc3QgY2hhciAqX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdCA9
IDA7CgoKcHJvdGVjdGVkOgogIFRBT19PcGVyYXRpb25fVGFibGUgKm9wdGFibGVfOwoKCn07Cgpj
bGFzcyBUQU9fUmVmQ291bnRTZXJ2YW50QmFzZQogIDogcHVibGljIHZpcnR1YWwgVEFPX1NlcnZh
bnRCYXNlCnsKIyAxNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnB1YmxpYzoKCiAgflRBT19S
ZWZDb3VudFNlcnZhbnRCYXNlICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCBfYWRkX3JlZiAoQ09S
QkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoKICB2aXJ0
dWFsIHZvaWQgX3JlbW92ZV9yZWYgKENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkpOwoKCgoKcHJvdGVjdGVkOgoKICBUQU9fUmVmQ291bnRTZXJ2YW50
QmFzZSAodm9pZCk7CgoKICBUQU9fUmVmQ291bnRTZXJ2YW50QmFzZSAoY29uc3QgVEFPX1JlZkNv
dW50U2VydmFudEJhc2UgJik7CgoKCiAgVEFPX1JlZkNvdW50U2VydmFudEJhc2UgJm9wZXJhdG9y
PSAoY29uc3QgVEFPX1JlZkNvdW50U2VydmFudEJhc2UgJik7CgoKCnByaXZhdGU6CgogIEFDRV9B
dG9taWNfT3A8QUNFX01UX1NZTkNIOjpNVVRFWCwgbG9uZz4gcmVmX2NvdW50XzsKCn07CgpjbGFz
cyBUQU9fU2VydmFudEJhc2VfdmFyCnsKIyAxOTIgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnB1
YmxpYzoKICBUQU9fU2VydmFudEJhc2VfdmFyICh2b2lkKTsKCiAgVEFPX1NlcnZhbnRCYXNlX3Zh
ciAoVEFPX1NlcnZhbnRCYXNlICpwKTsKCiAgVEFPX1NlcnZhbnRCYXNlX3ZhciAoY29uc3QgVEFP
X1NlcnZhbnRCYXNlX3ZhciAmYik7CgogIH5UQU9fU2VydmFudEJhc2VfdmFyICh2b2lkKTsKCiAg
VEFPX1NlcnZhbnRCYXNlX3ZhciAmb3BlcmF0b3I9IChUQU9fU2VydmFudEJhc2UgKnApOwoKICBU
QU9fU2VydmFudEJhc2VfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19TZXJ2YW50QmFzZV92YXIg
JmIpOwoKICBUQU9fU2VydmFudEJhc2UgKm9wZXJhdG9yLT4gKCkgY29uc3Q7CgogIFRBT19TZXJ2
YW50QmFzZSAqaW4gKHZvaWQpIGNvbnN0OwoKICBUQU9fU2VydmFudEJhc2UgKiZpbm91dCAodm9p
ZCk7CgogIFRBT19TZXJ2YW50QmFzZSAqJm91dCAodm9pZCk7CgogIFRBT19TZXJ2YW50QmFzZSAq
X3JldG4gKHZvaWQpOwoKcHJpdmF0ZToKCiAgVEFPX1NlcnZhbnRCYXNlICpwdHJfOwp9OwoKY2xh
c3MgVEFPX1NlcnZhbnRfSGFzaAp7CnB1YmxpYzoKICB1X2xvbmcgb3BlcmF0b3IgKCkgKFBvcnRh
YmxlU2VydmVyOjpTZXJ2YW50IHNlcnZhbnQpIGNvbnN0OwoKfTsKCmNsYXNzIFRBT19Mb2NhbF9T
ZXJ2YW50QmFzZQogIDogcHVibGljIHZpcnR1YWwgVEFPX1NlcnZhbnRCYXNlCnsKIyAyNDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVT
ZXJ2ZXIvU2VydmFudF9CYXNlLmgiCnByb3RlY3RlZDoKICBUQU9fU3R1YiAqX2NyZWF0ZV9zdHVi
IChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CgoK
CiAgdm9pZCBfZGlzcGF0Y2ggKFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXF1ZXN0LAogICAgICAgICAg
ICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICAgICAgICAgICAgQ09SQkFfRW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKfTsKCgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVT
ZXJ2ZXIvU2VydmFudF9CYXNlLmkiIDEKCgppbmxpbmUgdV9sb25nClRBT19TZXJ2YW50X0hhc2g6
Om9wZXJhdG9yICgpIChQb3J0YWJsZVNlcnZlcjo6U2VydmFudCBzZXJ2YW50KSBjb25zdAp7CiAg
cmV0dXJuIHVfbG9uZyAoc2VydmFudCk7Cn0KCmlubGluZSBUQU9fU3R1YiAqClRBT19Mb2NhbF9T
ZXJ2YW50QmFzZTo6X2NyZWF0ZV9zdHViIChDT1JCQV9FbnZpcm9ubWVudCAmICkKewojIDMzICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
U2VydmVyL1NlcnZhbnRfQmFzZS5pIgogIHJldHVybiAwOwoKfQojIDI1NSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2
YW50X0Jhc2UuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIgMgojIDM2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAx
CiMgMTggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8v
UG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAxOSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xs
b2NhdGVkX09iamVjdC5oIiAyCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvcG9ydGFibGVzZXJ2ZXJfZXhwb3J0Lmgi
IDEKIyAyMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rh
by9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9PYmplY3QuaCIgMQoj
IDI4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1NlcnZhbnRf
QmFzZS5oIiAxCiMgMjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIgMgoKCmNsYXNzIFRB
T19Db2xsb2NhdGVkX09iamVjdCA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAp7CnB1Ymxp
YzoKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgKFRBT19TdHViICpwID0gMCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIGNvbGxvY2F0ZWQgPSAwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgVEFPX1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMCk7CgoKICB2aXJ0dWFsIH5U
QU9fQ29sbG9jYXRlZF9PYmplY3QgKHZvaWQpOwoKCgoKCgogIHN0YXRpYyBUQU9fQ29sbG9jYXRl
ZF9PYmplY3QgKl9uYXJyb3cgKENPUkJBOjpPYmplY3RfcHRyIG9iamVjdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgoKICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIF9pc19hIChjb25zdCBDT1JCQTo6Q2hhciAqbG9naWNhbF90eXBlX2lkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IF9pc19lcXVpdmFsZW50IChDT1JCQV9PYmplY3RfcHRyIG90aGVyX29iaiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikKICAgIHRo
cm93ICgpOwoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKENPUkJBX0Vu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkp
OwoKICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UocHRyX2FyaXRoX3QgdHlwZSk7
Cgpwcml2YXRlOgoKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgKGNvbnN0IFRBT19Db2xsb2NhdGVk
X09iamVjdCAmKTsKICBUQU9fQ29sbG9jYXRlZF9PYmplY3QgJm9wZXJhdG9yID0gKGNvbnN0IFRB
T19Db2xsb2NhdGVkX09iamVjdCAmKTsKIyA3NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5o
Igp9OwoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5pIiAxCgoKCgoKaW5saW5lClRB
T19Db2xsb2NhdGVkX09iamVjdDo6VEFPX0NvbGxvY2F0ZWRfT2JqZWN0IChUQU9fU3R1YiAqcCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29s
ZWFuIGNvbGxvY2F0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUQU9fU2VydmFudEJhc2UgKnNlcnZhbnQpCiAgOiBDT1JCQV9PYmplY3QgKHAsIGNvbGxv
Y2F0ZWQsIHNlcnZhbnQpCnsKfQojIDgwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDIK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0
LmgiIDEKIyA4MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZVNlcnZlci9Db2xsb2NhdGVkX09iamVjdC5oIiAyCiMgMzcgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGlt
ZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQoj
IDIzICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwuaCIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL3Bv
cnRhYmxlc2VydmVyX2V4cG9ydC5oIiAxCiMgMjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJv
eHlfSW1wbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvcHJlLmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBs
LmgiIDIKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vY29yYmFmd2QuaCIgMQojIDMwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0X1Byb3h5X0lt
cGwuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty90YW8vT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDMxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL1RocnVQT0FfT2JqZWN0
X1Byb3h5X0ltcGwuaCIgMgoKCgoKCgpjbGFzcyBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1w
bCA6IHB1YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAp7CgoKCgoKcHVibGljOgoK
ICBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbCAodm9pZCk7CgogIHZpcnR1YWwgflRBT19U
aHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsICh2b2lkKTsKCiAgdmlydHVhbCBDT1JCQTo6Qm9vbGVh
biBfaXNfYSAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IENPUkJBOjpDaGFyICpsb2dpY2FsX3R5cGVfaWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX25vbl9l
eGlzdGVudCAoY29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUpOwoKICB2aXJ0dWFsIENPUkJBX0ludGVyZmFjZURlZl9wdHIgX2dl
dF9pbnRlcmZhY2UgKAogICAgICBjb25zdCBDT1JCQTo6T2JqZWN0X3B0ciB0YXJnZXQsCiAgICAg
IENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAp
OwoKCgp9OwoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcG9zdC5oIiAxCiMgNjkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbC5oIiAy
CiMgMzggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJv
eHlfSW1wbC5oIiAxCiMgMjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvRGlyZWN0X09iamVjdF9Qcm94eV9JbXBsLmgiCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0
YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9leHBvcnQuaCIgMQojIDI0ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVj
dF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9EaXJlY3RfT2JqZWN0
X1Byb3h5X0ltcGwuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL3Rhby9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzAgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvRGly
ZWN0X09iamVjdF9Qcm94eV9JbXBsLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9wb3J0YWJsZXNlcnZlcl9l
eHBvcnQuaCIgMQojIDMyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCgoK
CgoKY2xhc3MgVEFPX0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbCA6CiAgcHVibGljIHZpcnR1YWwg
VEFPX09iamVjdF9Qcm94eV9JbXBsCnsKCgoKCgoKcHVibGljOgoKICBUQU9fRGlyZWN0X09iamVj
dF9Qcm94eV9JbXBsICh2b2lkKTsKCiAgdmlydHVhbCB+VEFPX0RpcmVjdF9PYmplY3RfUHJveHlf
SW1wbCAodm9pZCk7CgogIHZpcnR1YWwgQ09SQkE6OkJvb2xlYW4gX2lzX2EgKGNvbnN0IENPUkJB
OjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBDT1JCQTo6Q2hhciAqbG9naWNhbF90eXBlX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
KTsKCgoKICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9ub25fZXhpc3RlbnQgKGNvbnN0IENPUkJB
OjpPYmplY3RfcHRyIHRhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK
CiAgdmlydHVhbCBDT1JCQV9JbnRlcmZhY2VEZWZfcHRyIF9nZXRfaW50ZXJmYWNlICgKICAgICAg
Y29uc3QgQ09SQkE6Ok9iamVjdF9wdHIgdGFyZ2V0LAogICAgICBDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKTsKCgoKfTsKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDcxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxl
U2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAyCiMgMzkgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VT
LmgiIDIKIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDEK
IyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDIK
IyAzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTX1QuaSIgMQojIDM5
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1RpbWVCYXNlU19ULmgiIDIKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5jcHAiIDEK
IyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5jcHAiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVNfVC5oIiAxCiMg
MjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz
L29yYnN2Y3MvVGltZUJhc2VTX1QuY3BwIiAyCiMgNDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTX1QuaCIgMgoj
IDU1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj
cy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1RpbWVCYXNlU19ULmgiIDIK
IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9UaW1lQmFzZVMuaSIgMQojIDU0
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1RpbWVCYXNlUy5oIiAyCiMgNjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvVGltZUJhc2VTLmgiCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDY1ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz
dmNzL1RpbWVCYXNlUy5oIiAyCiMgMjcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIgMgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50
RGF0YVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIgMgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmgiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50
RGF0YUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9h
Y2UvcHJlLmgiIDEKIyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIgMgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIg
MQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji
c3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhQy5oIiAyCgoKCgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2
ZW50L2V2ZW50X2V4cG9ydC5oIiAxCiMgMTAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvZXZlbnRfZXhwb3J0LmgiCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL2NvbmZpZy1h
bGwuaCIgMQojIDExICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L2V2ZW50X2V4cG9ydC5oIiAyCiMgMzMgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0RlZmF1bHRFdmVudERhdGFDLmgiIDIKIyA2MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMu
aCIKY2xhc3MgRXZlbnRQYXlsb2FkOwpjbGFzcyBFdmVudFBheWxvYWRfdmFyOwoKCgoKCmNsYXNz
IEV2ZW50UGF5bG9hZCA6IHB1YmxpYwoKVEFPX1VuYm91bmRlZF9TZXF1ZW5jZTxDT1JCQTo6T2N0
ZXQ+CgoKCnsKcHVibGljOgogIEV2ZW50UGF5bG9hZCAodm9pZCk7CiAgRXZlbnRQYXlsb2FkIChD
T1JCQTo6VUxvbmcgbWF4KTsKICBFdmVudFBheWxvYWQgKAogICAgICBDT1JCQTo6VUxvbmcgbWF4
LAogICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICBDT1JCQTo6T2N0ZXQgKmJ1ZmZlciwK
ICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICk7CiAgRXZlbnRQYXlsb2FkIChj
b25zdCBFdmVudFBheWxvYWQgJik7CiAgfkV2ZW50UGF5bG9hZCAodm9pZCk7CiAgc3RhdGljIHZv
aWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKCiAgdHlwZWRlZiBFdmVudFBheWxvYWRf
dmFyIF92YXJfdHlwZTsKCgoKCiAgRXZlbnRQYXlsb2FkICgKICAgICAgQ09SQkE6OlVMb25nIGxl
bmd0aCwKICAgICAgY29uc3QgQUNFX01lc3NhZ2VfQmxvY2sqIG1iCiAgICApCiAgICA6IFRBT19V
bmJvdW5kZWRfU2VxdWVuY2U8Q09SQkE6Ok9jdGV0PiAobGVuZ3RoLCBtYikge30KCgp9OwojIDEx
MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv
b3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKY2xhc3MgRXZlbnRQYXlsb2FkX3Zhcgp7
CnB1YmxpYzoKICBFdmVudFBheWxvYWRfdmFyICh2b2lkKTsKICBFdmVudFBheWxvYWRfdmFyIChF
dmVudFBheWxvYWQgKik7CiAgRXZlbnRQYXlsb2FkX3ZhciAoY29uc3QgRXZlbnRQYXlsb2FkX3Zh
ciAmKTsKCiAgRXZlbnRQYXlsb2FkX3ZhciAoY29uc3QgRXZlbnRQYXlsb2FkICYpOwogIH5FdmVu
dFBheWxvYWRfdmFyICh2b2lkKTsKCiAgRXZlbnRQYXlsb2FkX3ZhciAmb3BlcmF0b3I9IChFdmVu
dFBheWxvYWQgKik7CiAgRXZlbnRQYXlsb2FkX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFdmVudFBh
eWxvYWRfdmFyICYpOwoKICBFdmVudFBheWxvYWRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50
UGF5bG9hZCAmKTsKICBFdmVudFBheWxvYWQgKm9wZXJhdG9yLT4gKHZvaWQpOwogIGNvbnN0IEV2
ZW50UGF5bG9hZCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogIG9wZXJhdG9yIGNvbnN0IEV2
ZW50UGF5bG9hZCAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgRXZlbnRQYXlsb2FkICYoKTsKICBvcGVy
YXRvciBFdmVudFBheWxvYWQgJigpIGNvbnN0OwoKICBDT1JCQTo6T2N0ZXQgJiBvcGVyYXRvcltd
IChDT1JCQTo6VUxvbmcgaW5kZXgpOwogIGNvbnN0IENPUkJBOjpPY3RldCAmIG9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBpbmRleCkgY29uc3Q7CgoKICBjb25zdCBFdmVudFBheWxvYWQgJmluICh2
b2lkKSBjb25zdDsKICBFdmVudFBheWxvYWQgJmlub3V0ICh2b2lkKTsKICBFdmVudFBheWxvYWQg
KiZvdXQgKHZvaWQpOwogIEV2ZW50UGF5bG9hZCAqX3JldG4gKHZvaWQpOwogIEV2ZW50UGF5bG9h
ZCAqcHRyICh2b2lkKSBjb25zdDsKCnByaXZhdGU6CiAgRXZlbnRQYXlsb2FkICpwdHJfOwp9Owoj
IDE1NSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKY2xhc3MgRXZlbnRQYXlsb2FkX291
dAp7CnB1YmxpYzoKICBFdmVudFBheWxvYWRfb3V0IChFdmVudFBheWxvYWQgKiYpOwogIEV2ZW50
UGF5bG9hZF9vdXQgKEV2ZW50UGF5bG9hZF92YXIgJik7CiAgRXZlbnRQYXlsb2FkX291dCAoY29u
c3QgRXZlbnRQYXlsb2FkX291dCAmKTsKICBFdmVudFBheWxvYWRfb3V0ICZvcGVyYXRvcj0gKGNv
bnN0IEV2ZW50UGF5bG9hZF9vdXQgJik7CiAgRXZlbnRQYXlsb2FkX291dCAmb3BlcmF0b3I9IChF
dmVudFBheWxvYWQgKik7CiAgb3BlcmF0b3IgRXZlbnRQYXlsb2FkIComKCk7CiAgRXZlbnRQYXls
b2FkIComcHRyICh2b2lkKTsKICBFdmVudFBheWxvYWQgKm9wZXJhdG9yLT4gKHZvaWQpOwogIENP
UkJBOjpPY3RldCAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7Cgpwcml2YXRlOgog
IEV2ZW50UGF5bG9hZCAqJnB0cl87CgogIHZvaWQgb3BlcmF0b3I9IChjb25zdCBFdmVudFBheWxv
YWRfdmFyICYpOwp9OwoKCgoKZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0V2ZW50UGF5
bG9hZDsKCnN0cnVjdCBSdGVjRXZlbnREYXRhOwpjbGFzcyBSdGVjRXZlbnREYXRhX3ZhcjsKCnN0
cnVjdCBSdGVjRXZlbnREYXRhCnsKCgogIHR5cGVkZWYgUnRlY0V2ZW50RGF0YV92YXIgX3Zhcl90
eXBlOwoKCiAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICBDT1JC
QTo6TG9uZyBwYWQxOwogIEV2ZW50UGF5bG9hZCBwYXlsb2FkOwogIENPUkJBOjpBbnkgYW55X3Zh
bHVlOwoKfTsKCmNsYXNzIFJ0ZWNFdmVudERhdGFfdmFyCnsKcHVibGljOgogIFJ0ZWNFdmVudERh
dGFfdmFyICh2b2lkKTsKICBSdGVjRXZlbnREYXRhX3ZhciAoUnRlY0V2ZW50RGF0YSAqKTsKICBS
dGVjRXZlbnREYXRhX3ZhciAoY29uc3QgUnRlY0V2ZW50RGF0YV92YXIgJik7CiAgflJ0ZWNFdmVu
dERhdGFfdmFyICh2b2lkKTsKCiAgUnRlY0V2ZW50RGF0YV92YXIgJm9wZXJhdG9yPSAoUnRlY0V2
ZW50RGF0YSAqKTsKICBSdGVjRXZlbnREYXRhX3ZhciAmb3BlcmF0b3I9IChjb25zdCBSdGVjRXZl
bnREYXRhX3ZhciAmKTsKICBSdGVjRXZlbnREYXRhICpvcGVyYXRvci0+ICh2b2lkKTsKICBjb25z
dCBSdGVjRXZlbnREYXRhICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgb3BlcmF0b3IgY29u
c3QgUnRlY0V2ZW50RGF0YSAmKCkgY29uc3Q7CiAgb3BlcmF0b3IgUnRlY0V2ZW50RGF0YSAmKCk7
CiAgb3BlcmF0b3IgUnRlY0V2ZW50RGF0YSAmKCkgY29uc3Q7CgogIG9wZXJhdG9yIFJ0ZWNFdmVu
dERhdGEgKiYoKTsKCgogIGNvbnN0IFJ0ZWNFdmVudERhdGEgJmluICh2b2lkKSBjb25zdDsKICBS
dGVjRXZlbnREYXRhICZpbm91dCAodm9pZCk7CiAgUnRlY0V2ZW50RGF0YSAqJm91dCAodm9pZCk7
CiAgUnRlY0V2ZW50RGF0YSAqX3JldG4gKHZvaWQpOwogIFJ0ZWNFdmVudERhdGEgKnB0ciAodm9p
ZCkgY29uc3Q7Cgpwcml2YXRlOgogIFJ0ZWNFdmVudERhdGEgKnB0cl87Cn07CgpjbGFzcyBSdGVj
RXZlbnREYXRhX291dAp7CnB1YmxpYzoKICBSdGVjRXZlbnREYXRhX291dCAoUnRlY0V2ZW50RGF0
YSAqJik7CiAgUnRlY0V2ZW50RGF0YV9vdXQgKFJ0ZWNFdmVudERhdGFfdmFyICYpOwogIFJ0ZWNF
dmVudERhdGFfb3V0IChjb25zdCBSdGVjRXZlbnREYXRhX291dCAmKTsKICBSdGVjRXZlbnREYXRh
X291dCAmb3BlcmF0b3I9IChjb25zdCBSdGVjRXZlbnREYXRhX291dCAmKTsKICBSdGVjRXZlbnRE
YXRhX291dCAmb3BlcmF0b3I9IChSdGVjRXZlbnREYXRhICopOwogIG9wZXJhdG9yIFJ0ZWNFdmVu
dERhdGEgKiYoKTsKICBSdGVjRXZlbnREYXRhIComcHRyICh2b2lkKTsKICBSdGVjRXZlbnREYXRh
ICpvcGVyYXRvci0+ICh2b2lkKTsKCnByaXZhdGU6CiAgUnRlY0V2ZW50RGF0YSAqJnB0cl87Cgog
IHZvaWQgb3BlcmF0b3I9IChjb25zdCBSdGVjRXZlbnREYXRhX3ZhciAmKTsKfTsKCmV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19SdGVjRXZlbnREYXRhOwoKICAgICAgICAgICAgICAgICAg
IHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgRXZlbnRQYXlsb2FkICYpOwog
ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBFdmVudFBh
eWxvYWQqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChj
b25zdCBDT1JCQTo6QW55ICYsIEV2ZW50UGF5bG9hZCAqJik7CiAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBFdmVu
dFBheWxvYWQgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6
OkFueSAmLCBjb25zdCBSdGVjRXZlbnREYXRhICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBv
cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnREYXRhKik7CiAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVj
RXZlbnREYXRhIComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9y
Pj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudERhdGEgKiYpOwojIDI4MCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji
c3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YUMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnRE
YXRhQy5pIiAxCiMgMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmkiCmlubGluZQpFdmVu
dFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlu
bGluZQpFdmVudFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyIChFdmVudFBheWxvYWQgKnAp
CiAgOiBwdHJfIChwKQp7fQoKaW5saW5lCkV2ZW50UGF5bG9hZF92YXI6OkV2ZW50UGF5bG9hZF92
YXIgKGNvbnN0IDo6RXZlbnRQYXlsb2FkX3ZhciAmcCkKewogIGlmIChwLnB0cl8pCiAgICBkbyB7
IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpFdmVudFBheWxvYWQgKCpwLnB0cl8pOyB9IGNhdGNo
IChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsg
fSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKCmlubGluZQpFdmVu
dFBheWxvYWRfdmFyOjpFdmVudFBheWxvYWRfdmFyIChjb25zdCA6OkV2ZW50UGF5bG9hZCAmcCkK
ewogIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OkV2ZW50UGF5bG9hZCAocCk7IH0gY2F0
Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJu
OyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKRXZlbnRQYXlsb2FkX3Zhcjo6fkV2ZW50UGF5bG9h
ZF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIEV2ZW50UGF5bG9h
ZF92YXIgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcj0gKEV2ZW50UGF5bG9hZCAqcCkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lIDo6RXZlbnRQYXlsb2FkX3ZhciAmCkV2ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yPSAo
Y29uc3QgOjpFdmVudFBheWxvYWRfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAg
ICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRy
XzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIEV2ZW50UGF5bG9hZCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IEV2
ZW50UGF5bG9hZCAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgRXZlbnRQYXlsb2FkICp0bXAgPSBkZWVwX2NvcHk7CiAg
ICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5w
dHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSA6OkV2ZW50UGF5bG9h
ZF92YXIgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6RXZlbnRQYXlsb2Fk
ICZwKQp7CiAgaWYgKHRoaXMtPnB0cl8gIT0gJnApCiAgewogICAgZGVsZXRlIHRoaXMtPnB0cl87
CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpFdmVudFBheWxvYWQgKHApOyB9IGNh
dGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVy
biAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29u
c3QgOjpFdmVudFBheWxvYWQgKgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBj
b25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZCAqCkV2
ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lCkV2ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6RXZlbnRQYXlsb2Fk
ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKRXZlbnRQYXlsb2Fk
X3Zhcjo6b3BlcmF0b3IgOjpFdmVudFBheWxvYWQgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87
Cn0KCmlubGluZQpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvciA6OkV2ZW50UGF5bG9hZCAmKCkg
Y29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJBOjpPY3RldCAmCkV2
ZW50UGF5bG9hZF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVy
biB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBDT1JCQTo6
T2N0ZXQgJgpFdmVudFBheWxvYWRfdmFyOjpvcGVyYXRvcltdIChDT1JCQTo6VUxvbmcgaW5kZXgp
IGNvbnN0CnsKICByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBDT1JCQTo6T2N0ZXQgJj4gKHRoaXMt
PnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6OkV2ZW50UGF5bG9h
ZCAmCkV2ZW50UGF5bG9hZF92YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgppbmxpbmUgOjpFdmVudFBheWxvYWQgJgpFdmVudFBheWxvYWRfdmFyOjppbm91dCAo
dm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OkV2ZW50UGF5bG9hZCAq
JgpFdmVudFBheWxvYWRfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0
aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6RXZlbnRQYXls
b2FkICoKRXZlbnRQYXlsb2FkX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OkV2ZW50UGF5bG9hZCAq
dG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9Cgppbmxp
bmUgOjpFdmVudFBheWxvYWQgKgpFdmVudFBheWxvYWRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsK
ICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpFdmVudFBheWxvYWRfb3V0OjpFdmVu
dFBheWxvYWRfb3V0IChFdmVudFBheWxvYWQgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMtPnB0
cl8gPSAwOwp9CgppbmxpbmUKRXZlbnRQYXlsb2FkX291dDo6RXZlbnRQYXlsb2FkX291dCAoRXZl
bnRQYXlsb2FkX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0
cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpFdmVudFBheWxvYWRfb3V0OjpFdmVudFBh
eWxvYWRfb3V0IChjb25zdCA6OkV2ZW50UGF5bG9hZF9vdXQgJnApCiAgOiBwdHJfIChjb25zdF9j
YXN0PEV2ZW50UGF5bG9hZF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OkV2ZW50UGF5bG9h
ZF9vdXQgJgpFdmVudFBheWxvYWRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6RXZlbnRQYXlsb2Fk
X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PEV2ZW50UGF5bG9hZF9vdXQmPiAo
cCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZF9vdXQgJgpF
dmVudFBheWxvYWRfb3V0OjpvcGVyYXRvcj0gKEV2ZW50UGF5bG9hZCAqcCkKewogIHRoaXMtPnB0
cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lCkV2ZW50UGF5bG9hZF9vdXQ6Om9wZXJh
dG9yIDo6RXZlbnRQYXlsb2FkIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
OjpFdmVudFBheWxvYWQgKiYKRXZlbnRQYXlsb2FkX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OkV2ZW50UGF5bG9hZCAqCkV2ZW50UGF5bG9hZF9vdXQ6
Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIENPUkJB
OjpPY3RldCAmCkV2ZW50UGF5bG9hZF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl
eCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyAyNTYgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmkiCmlubGluZQpSdGVjRXZlbnREYXRhX3Zhcjo6UnRl
Y0V2ZW50RGF0YV92YXIgKHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudERh
dGFfdmFyOjpSdGVjRXZlbnREYXRhX3ZhciAoUnRlY0V2ZW50RGF0YSAqcCkKICA6IHB0cl8gKHAp
Cnt9CgppbmxpbmUKUnRlY0V2ZW50RGF0YV92YXI6OlJ0ZWNFdmVudERhdGFfdmFyIChjb25zdCA6
OlJ0ZWNFdmVudERhdGFfdmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhp
cy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudERhdGEgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJh
ZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxl
ICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudERhdGFf
dmFyOjp+UnRlY0V2ZW50RGF0YV92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoK
aW5saW5lIFJ0ZWNFdmVudERhdGFfdmFyICYKUnRlY0V2ZW50RGF0YV92YXI6Om9wZXJhdG9yPSAo
UnRlY0V2ZW50RGF0YSAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBw
OwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50RGF0YV92YXIgJgpSdGVjRXZl
bnREYXRhX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVudERhdGFfdmFyICZwKQp7CiAg
aWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFJ0ZWNFdmVudERhdGEgKmRlZXBf
Y29weSA9CiAgICAgICAgICAgIG5ldyBSdGVjRXZlbnREYXRhICgqcC5wdHJfKTsKCiAgICAgICAg
ICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBSdGVjRXZl
bnREYXRhICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+
cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0
ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhp
czsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50RGF0YSAqClJ0ZWNFdmVudERhdGFfdmFyOjpv
cGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6
OlJ0ZWNFdmVudERhdGEgKgpSdGVjRXZlbnREYXRhX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewog
IHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50RGF0YV92YXI6Om9wZXJhdG9y
IGNvbnN0IDo6UnRlY0V2ZW50RGF0YSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK
fQoKaW5saW5lClJ0ZWNFdmVudERhdGFfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudERhdGEgJigp
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnREYXRhX3Zhcjo6b3Bl
cmF0b3IgOjpSdGVjRXZlbnREYXRhICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9
CgoKaW5saW5lClJ0ZWNFdmVudERhdGFfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudERhdGEgKiYo
KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNFdmVudERhdGEg
JgpSdGVjRXZlbnREYXRhX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0
cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudERhdGEgJgpSdGVjRXZlbnREYXRhX3Zhcjo6aW5vdXQg
KHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZlbnREYXRh
IComClJ0ZWNFdmVudERhdGFfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsK
ICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2
ZW50RGF0YSAqClJ0ZWNFdmVudERhdGFfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50
RGF0YSAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9
CgppbmxpbmUgOjpSdGVjRXZlbnREYXRhICoKUnRlY0V2ZW50RGF0YV92YXI6OnB0ciAodm9pZCkg
Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudERhdGFf
b3V0OjpSdGVjRXZlbnREYXRhX291dCAoOjpSdGVjRXZlbnREYXRhIComcCkKICA6IHB0cl8gKHAp
CnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudERhdGFfb3V0OjpSdGVjRXZl
bnREYXRhX291dCAoUnRlY0V2ZW50RGF0YV92YXIgJnApCiAgOiBwdHJfIChwLm91dCAoKSkKewog
IGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50
RGF0YV9vdXQ6OlJ0ZWNFdmVudERhdGFfb3V0IChjb25zdCA6OlJ0ZWNFdmVudERhdGFfb3V0ICZw
KQogIDogcHRyXyAoY29uc3RfY2FzdDxSdGVjRXZlbnREYXRhX291dCY+IChwKS5wdHJfKQp7fQoK
aW5saW5lIFJ0ZWNFdmVudERhdGFfb3V0ICYKUnRlY0V2ZW50RGF0YV9vdXQ6Om9wZXJhdG9yPSAo
Y29uc3QgOjpSdGVjRXZlbnREYXRhX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0
PFJ0ZWNFdmVudERhdGFfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUg
UnRlY0V2ZW50RGF0YV9vdXQgJgpSdGVjRXZlbnREYXRhX291dDo6b3BlcmF0b3I9IChSdGVjRXZl
bnREYXRhICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUK
UnRlY0V2ZW50RGF0YV9vdXQ6Om9wZXJhdG9yIDo6UnRlY0V2ZW50RGF0YSAqJigpCnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50RGF0YSAqJgpSdGVjRXZlbnREYXRh
X291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNF
dmVudERhdGEgKgpSdGVjRXZlbnREYXRhX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CgoKCgoKQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9f
T3V0cHV0Q0RSICYsCiAgICBjb25zdCBFdmVudFBheWxvYWQgJgogICk7CkNPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBFdmVudFBheWxvYWQgJgogICk7
CgoKCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJt
LCBjb25zdCBSdGVjRXZlbnREYXRhICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJt
IDw8IF90YW9fYWdncmVnYXRlLnBhZDEpICYmCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5w
YXlsb2FkKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuYW55X3ZhbHVlKQogICkKICAg
IHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFu
IG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwgUnRlY0V2ZW50RGF0YSAmX3Rhb19hZ2dy
ZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5wYWQxKSAmJgogICAg
KHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucGF5bG9hZCkgJiYKICAgIChzdHJtID4+IF90YW9fYWdn
cmVnYXRlLmFueV92YWx1ZSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsK
Cn0KIyAyODEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9v
cmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFDLmgiIDIKIyAyOTEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0RlZmF1bHRFdmVudERhdGFDLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDI5MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0
YUMuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhUy5oIiAyCgoKCgoKCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJs
ZVNlcnZlci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERh
dGFTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlU2VydmVyL1NlcnZhbnRfQmFzZS5oIiAxCiMgMzUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Rl
ZmF1bHRFdmVudERhdGFTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEK
IyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBP
QV9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFT
LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
dGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzggIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50
RGF0YVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhU19ULmgiIDEKIyAyNSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZl
bnREYXRhU19ULmgiIDIKIyAzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTX1QuaSIgMQojIDM5ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0
RXZlbnREYXRhU19ULmgiIDIKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5j
cHAiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5jcHAiCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S
dGVjRGVmYXVsdEV2ZW50RGF0YVNfVC5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERh
dGFTX1QuY3BwIiAyCiMgNDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTX1QuaCIgMgojIDU1
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDU2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZh
dWx0RXZlbnREYXRhU19ULmgiIDIKIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaCIg
MgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9SdGVjRGVmYXVsdEV2ZW50RGF0YVMuaSIgMQojIDUzICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNE
ZWZhdWx0RXZlbnREYXRhUy5oIiAyCiMgNjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0RlZmF1bHRFdmVudERhdGFTLmgi
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3Qu
aCIgMQojIDY0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
b3Jic3Zjcy9vcmJzdmNzL1J0ZWNEZWZhdWx0RXZlbnREYXRhUy5oIiAyCiMgMjggIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q29tbVMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIgMQojIDI1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNFdmVudENvbW1DLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEu
aCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiIDIKCgoKCgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQv
ZXZlbnRfZXhwb3J0LmgiIDEKIyAzMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIiAyCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9UaW1lQmFzZUMuaCIgMQojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiIDIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNEZWZhdWx0RXZlbnREYXRhQy5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIg
MgojIDU5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji
c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCm5hbWVzcGFjZSBSdGVjRXZlbnRDb21tCnsK
ICB0eXBlZGVmIFJ0ZWNFdmVudERhdGEgRXZlbnREYXRhOwogIHR5cGVkZWYgUnRlY0V2ZW50RGF0
YV92YXIgRXZlbnREYXRhX3ZhcjsKICB0eXBlZGVmIFJ0ZWNFdmVudERhdGFfb3V0IEV2ZW50RGF0
YV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0V2ZW50RGF0YTsKCiAgdHlw
ZWRlZiBUaW1lQmFzZTo6VGltZVQgVGltZTsKICB0eXBlZGVmIFRpbWVCYXNlOjpUaW1lVF9vdXQg
VGltZV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX1RpbWU7CgogIHR5cGVk
ZWYgQ09SQkE6OkxvbmcgRXZlbnRTb3VyY2VJRDsKICB0eXBlZGVmIENPUkJBOjpMb25nX291dCBF
dmVudFNvdXJjZUlEX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfRXZlbnRT
b3VyY2VJRDsKCiAgdHlwZWRlZiBDT1JCQTo6TG9uZyBFdmVudFR5cGU7CiAgdHlwZWRlZiBDT1JC
QTo6TG9uZ19vdXQgRXZlbnRUeXBlX291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBf
dGNfRXZlbnRUeXBlOwoKICBzdHJ1Y3QgRXZlbnRIZWFkZXI7CiAgY2xhc3MgRXZlbnRIZWFkZXJf
dmFyOwoKICBzdHJ1Y3QgRXZlbnRIZWFkZXIKICB7CgoKICAgIHR5cGVkZWYgRXZlbnRIZWFkZXJf
dmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9p
ZCopOwoKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50VHlwZSB0eXBlOwogICAgUnRlY0V2ZW50Q29t
bTo6RXZlbnRTb3VyY2VJRCBzb3VyY2U7CiAgICBDT1JCQTo6TG9uZyB0dGw7CiAgICBSdGVjRXZl
bnRDb21tOjpUaW1lIGNyZWF0aW9uX3RpbWU7CiAgICBSdGVjRXZlbnRDb21tOjpUaW1lIGVjX3Jl
Y3ZfdGltZTsKICAgIFJ0ZWNFdmVudENvbW06OlRpbWUgZWNfc2VuZF90aW1lOwoKICB9OwoKICBj
bGFzcyBFdmVudEhlYWRlcl92YXIKICB7CiAgcHVibGljOgogICAgRXZlbnRIZWFkZXJfdmFyICh2
b2lkKTsKICAgIEV2ZW50SGVhZGVyX3ZhciAoRXZlbnRIZWFkZXIgKik7CiAgICBFdmVudEhlYWRl
cl92YXIgKGNvbnN0IEV2ZW50SGVhZGVyX3ZhciAmKTsKCiAgICBFdmVudEhlYWRlcl92YXIgKGNv
bnN0IEV2ZW50SGVhZGVyICYpOwogICAgfkV2ZW50SGVhZGVyX3ZhciAodm9pZCk7CgogICAgRXZl
bnRIZWFkZXJfdmFyICZvcGVyYXRvcj0gKEV2ZW50SGVhZGVyICopOwogICAgRXZlbnRIZWFkZXJf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50SGVhZGVyX3ZhciAmKTsKCiAgICBFdmVudEhlYWRl
cl92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXZlbnRIZWFkZXIgJik7CiAgICBFdmVudEhlYWRlciAq
b3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBFdmVudEhlYWRlciAqb3BlcmF0b3ItPiAodm9p
ZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgRXZlbnRIZWFkZXIgJigpIGNvbnN0OwogICAg
b3BlcmF0b3IgRXZlbnRIZWFkZXIgJigpOwogICAgb3BlcmF0b3IgRXZlbnRIZWFkZXIgJigpIGNv
bnN0OwoKCiAgICBjb25zdCBFdmVudEhlYWRlciAmaW4gKHZvaWQpIGNvbnN0OwogICAgRXZlbnRI
ZWFkZXIgJmlub3V0ICh2b2lkKTsKICAgIEV2ZW50SGVhZGVyICZvdXQgKHZvaWQpOwogICAgRXZl
bnRIZWFkZXIgX3JldG4gKHZvaWQpOwogICAgRXZlbnRIZWFkZXIgKnB0ciAodm9pZCkgY29uc3Q7
CgogIHByaXZhdGU6CiAgICBFdmVudEhlYWRlciAqcHRyXzsKICB9OwoKICB0eXBlZGVmIEV2ZW50
SGVhZGVyICZFdmVudEhlYWRlcl9vdXQ7CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90
Y19FdmVudEhlYWRlcjsKCiAgc3RydWN0IEV2ZW50OwogIGNsYXNzIEV2ZW50X3ZhcjsKCiAgc3Ry
dWN0IEV2ZW50CiAgewoKCiAgICB0eXBlZGVmIEV2ZW50X3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0
YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBSdGVjRXZlbnRDb21t
OjpFdmVudEhlYWRlciBoZWFkZXI7CiAgICBSdGVjRXZlbnRDb21tOjpFdmVudERhdGEgZGF0YTsK
CiAgfTsKCiAgY2xhc3MgRXZlbnRfdmFyCiAgewogIHB1YmxpYzoKICAgIEV2ZW50X3ZhciAodm9p
ZCk7CiAgICBFdmVudF92YXIgKEV2ZW50ICopOwogICAgRXZlbnRfdmFyIChjb25zdCBFdmVudF92
YXIgJik7CiAgICB+RXZlbnRfdmFyICh2b2lkKTsKCiAgICBFdmVudF92YXIgJm9wZXJhdG9yPSAo
RXZlbnQgKik7CiAgICBFdmVudF92YXIgJm9wZXJhdG9yPSAoY29uc3QgRXZlbnRfdmFyICYpOwog
ICAgRXZlbnQgKm9wZXJhdG9yLT4gKHZvaWQpOwogICAgY29uc3QgRXZlbnQgKm9wZXJhdG9yLT4g
KHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IEV2ZW50ICYoKSBjb25zdDsKICAgIG9w
ZXJhdG9yIEV2ZW50ICYoKTsKICAgIG9wZXJhdG9yIEV2ZW50ICYoKSBjb25zdDsKCiAgICBvcGVy
YXRvciBFdmVudCAqJigpOwoKCiAgICBjb25zdCBFdmVudCAmaW4gKHZvaWQpIGNvbnN0OwogICAg
RXZlbnQgJmlub3V0ICh2b2lkKTsKICAgIEV2ZW50IComb3V0ICh2b2lkKTsKICAgIEV2ZW50ICpf
cmV0biAodm9pZCk7CiAgICBFdmVudCAqcHRyICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg
IEV2ZW50ICpwdHJfOwogIH07CgogIGNsYXNzIEV2ZW50X291dAogIHsKICBwdWJsaWM6CiAgICBF
dmVudF9vdXQgKEV2ZW50IComKTsKICAgIEV2ZW50X291dCAoRXZlbnRfdmFyICYpOwogICAgRXZl
bnRfb3V0IChjb25zdCBFdmVudF9vdXQgJik7CiAgICBFdmVudF9vdXQgJm9wZXJhdG9yPSAoY29u
c3QgRXZlbnRfb3V0ICYpOwogICAgRXZlbnRfb3V0ICZvcGVyYXRvcj0gKEV2ZW50ICopOwogICAg
b3BlcmF0b3IgRXZlbnQgKiYoKTsKICAgIEV2ZW50IComcHRyICh2b2lkKTsKICAgIEV2ZW50ICpv
cGVyYXRvci0+ICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50IComcHRyXzsKCiAgICB2b2lk
IG9wZXJhdG9yPSAoY29uc3QgRXZlbnRfdmFyICYpOwogIH07CgogIGV4dGVybiBDT1JCQTo6VHlw
ZUNvZGVfcHRyIF90Y19FdmVudDsKCgoKCgoKCiAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldAogICAgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNl
X1NlcXVlbmNlCiAgewogIHB1YmxpYzoKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVj
RXZlbnRDb21tX0V2ZW50U2V0ICh2b2lkKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0
ZWNFdmVudENvbW1fRXZlbnRTZXQgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgIF9UQU9fVW5i
b3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKAogICAgICAgIENPUkJBOjpV
TG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgRXZlbnQg
KmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsKICAgIF9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKAogICAgICAgIGNv
bnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgJnJocwog
ICAgICApOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNl
dCAmb3BlcmF0b3I9ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVj
RXZlbnRDb21tX0V2ZW50U2V0ICZyaHMKICAgICAgKTsKICAgIHZpcnR1YWwgfl9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQgKHZvaWQpOwoKCiAgICBFdmVudCAm
b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpOwogICAgY29uc3QgRXZlbnQgJm9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCgogICAgc3RhdGljIEV2ZW50ICphbGxvY2J1ZiAoQ09S
QkE6OlVMb25nIHNpemUpOwogICAgc3RhdGljIHZvaWQgZnJlZWJ1ZiAoRXZlbnQgKmJ1ZmZlcik7
CgoKICAgIHZpcnR1YWwgdm9pZCBfYWxsb2NhdGVfYnVmZmVyIChDT1JCQTo6VUxvbmcgbGVuZ3Ro
KTsKICAgIHZpcnR1YWwgdm9pZCBfZGVhbGxvY2F0ZV9idWZmZXIgKHZvaWQpOwogICAgRXZlbnQg
KmdldF9idWZmZXIgKENPUkJBOjpCb29sZWFuIG9ycGhhbiA9IDApOwogICAgY29uc3QgRXZlbnQg
KmdldF9idWZmZXIgKHZvaWQpIGNvbnN0OwogICAgdm9pZCByZXBsYWNlICgKICAgICAgICBDT1JC
QTo6VUxvbmcgbWF4LAogICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgRXZlbnQg
KmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZQogICAgICApOwogIH07CiMgMjU4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgY2xhc3MgRXZlbnRTZXQ7CiAgY2xhc3MgRXZlbnRT
ZXRfdmFyOwoKCgoKCiAgY2xhc3MgRXZlbnRTZXQgOiBwdWJsaWMKCiAgX1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldAoKCgogIHsKICBwdWJsaWM6CiAgICBFdmVu
dFNldCAodm9pZCk7CiAgICBFdmVudFNldCAoQ09SQkE6OlVMb25nIG1heCk7CiAgICBFdmVudFNl
dCAoCiAgICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogICAgICAgIEV2ZW50ICpidWZmZXIsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9
IDAKICAgICAgKTsKICAgIEV2ZW50U2V0IChjb25zdCBFdmVudFNldCAmKTsKICAgIH5FdmVudFNl
dCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgoK
ICAgIHR5cGVkZWYgRXZlbnRTZXRfdmFyIF92YXJfdHlwZTsKCgoKICB9OwojIDMwMiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S
dGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIEV2ZW50U2V0X3ZhcgogIHsKICBwdWJsaWM6CiAgICBF
dmVudFNldF92YXIgKHZvaWQpOwogICAgRXZlbnRTZXRfdmFyIChFdmVudFNldCAqKTsKICAgIEV2
ZW50U2V0X3ZhciAoY29uc3QgRXZlbnRTZXRfdmFyICYpOwogICAgfkV2ZW50U2V0X3ZhciAodm9p
ZCk7CgogICAgRXZlbnRTZXRfdmFyICZvcGVyYXRvcj0gKEV2ZW50U2V0ICopOwogICAgRXZlbnRT
ZXRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IEV2ZW50U2V0X3ZhciAmKTsKICAgIEV2ZW50U2V0ICpv
cGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IEV2ZW50U2V0ICpvcGVyYXRvci0+ICh2b2lkKSBj
b25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBFdmVudFNldCAmKCkgY29uc3Q7CiAgICBvcGVyYXRv
ciBFdmVudFNldCAmKCk7CiAgICBvcGVyYXRvciBFdmVudFNldCAmKCkgY29uc3Q7CiAgICBvcGVy
YXRvciBFdmVudFNldCAqJigpOwoKICAgIEV2ZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25n
IGluZGV4KTsKICAgIGNvbnN0IEV2ZW50ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4
KSBjb25zdDsKCgogICAgY29uc3QgRXZlbnRTZXQgJmluICh2b2lkKSBjb25zdDsKICAgIEV2ZW50
U2V0ICZpbm91dCAodm9pZCk7CiAgICBFdmVudFNldCAqJm91dCAodm9pZCk7CiAgICBFdmVudFNl
dCAqX3JldG4gKHZvaWQpOwogICAgRXZlbnRTZXQgKnB0ciAodm9pZCkgY29uc3Q7CgogIHByaXZh
dGU6CiAgICBFdmVudFNldCAqcHRyXzsKICB9OwojIDM0MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5o
IgogIGNsYXNzIEV2ZW50U2V0X291dAogIHsKICBwdWJsaWM6CiAgICBFdmVudFNldF9vdXQgKEV2
ZW50U2V0IComKTsKICAgIEV2ZW50U2V0X291dCAoRXZlbnRTZXRfdmFyICYpOwogICAgRXZlbnRT
ZXRfb3V0IChjb25zdCBFdmVudFNldF9vdXQgJik7CiAgICBFdmVudFNldF9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgRXZlbnRTZXRfb3V0ICYpOwogICAgRXZlbnRTZXRfb3V0ICZvcGVyYXRvcj0gKEV2
ZW50U2V0ICopOwogICAgb3BlcmF0b3IgRXZlbnRTZXQgKiYoKTsKICAgIEV2ZW50U2V0IComcHRy
ICh2b2lkKTsKICAgIEV2ZW50U2V0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIEV2ZW50ICYgb3Bl
cmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50U2V0ICom
cHRyXzsKCiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgRXZlbnRTZXRfdmFyICYpOwogIH07CgoK
CgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FdmVudFNldDsKCgoKCgogIGNsYXNz
IFB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFB1c2hDb25zdW1lciAqUHVzaENvbnN1bWVyX3B0cjsK
CgoKCgoKCiAgY2xhc3MgUHVzaENvbnN1bWVyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7
CiAgcHVibGljOgogICAgUHVzaENvbnN1bWVyX3ZhciAodm9pZCk7CiAgICBQdXNoQ29uc3VtZXJf
dmFyIChQdXNoQ29uc3VtZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIFB1c2hDb25zdW1lcl92
YXIgKGNvbnN0IFB1c2hDb25zdW1lcl92YXIgJik7CiAgICB+UHVzaENvbnN1bWVyX3ZhciAodm9p
ZCk7CgogICAgUHVzaENvbnN1bWVyX3ZhciAmb3BlcmF0b3I9IChQdXNoQ29uc3VtZXJfcHRyKTsK
ICAgIFB1c2hDb25zdW1lcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX3ZhciAm
KTsKICAgIFB1c2hDb25zdW1lcl9wdHIgb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3Bl
cmF0b3IgY29uc3QgUHVzaENvbnN1bWVyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQdXNo
Q29uc3VtZXJfcHRyICYoKTsKCiAgICBQdXNoQ29uc3VtZXJfcHRyIGluICh2b2lkKSBjb25zdDsK
ICAgIFB1c2hDb25zdW1lcl9wdHIgJmlub3V0ICh2b2lkKTsKICAgIFB1c2hDb25zdW1lcl9wdHIg
Jm91dCAodm9pZCk7CiAgICBQdXNoQ29uc3VtZXJfcHRyIF9yZXRuICh2b2lkKTsKICAgIFB1c2hD
b25zdW1lcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJf
cHRyIGR1cGxpY2F0ZSAoUHVzaENvbnN1bWVyX3B0cik7CiAgICBzdGF0aWMgdm9pZCByZWxlYXNl
IChQdXNoQ29uc3VtZXJfcHRyKTsKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJfcHRyIG5pbCAodm9p
ZCk7CiAgICBzdGF0aWMgUHVzaENvbnN1bWVyX3B0ciBuYXJyb3cgKAogICAgICAgIENPUkJBOjpP
YmplY3QgKiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICApOwogICAgc3RhdGlj
IENPUkJBOjpPYmplY3QgKiB1cGNhc3QgKHZvaWQgKik7CgogIHByaXZhdGU6CiAgICBQdXNoQ29u
c3VtZXJfcHRyIHB0cl87CgogICAgUHVzaENvbnN1bWVyX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFy
ICZyaHMpOwogICAgUHVzaENvbnN1bWVyX3ZhciAmb3BlcmF0b3I9IChjb25zdCBUQU9fQmFzZV92
YXIgJnJocyk7CiAgfTsKIyA0MjQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIKICBjbGFzcyBQdXNo
Q29uc3VtZXJfb3V0CiAgewogIHB1YmxpYzoKICAgIFB1c2hDb25zdW1lcl9vdXQgKFB1c2hDb25z
dW1lcl9wdHIgJik7CiAgICBQdXNoQ29uc3VtZXJfb3V0IChQdXNoQ29uc3VtZXJfdmFyICYpOwog
ICAgUHVzaENvbnN1bWVyX291dCAoY29uc3QgUHVzaENvbnN1bWVyX291dCAmKTsKICAgIFB1c2hD
b25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX291dCAmKTsKICAgIFB1
c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVzaENvbnN1bWVyX3ZhciAmKTsKICAg
IFB1c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9yPSAoUHVzaENvbnN1bWVyX3B0cik7CiAgICBvcGVy
YXRvciBQdXNoQ29uc3VtZXJfcHRyICYoKTsKICAgIFB1c2hDb25zdW1lcl9wdHIgJnB0ciAodm9p
ZCk7CiAgICBQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgog
ICAgUHVzaENvbnN1bWVyX3B0ciAmcHRyXzsKICB9OwojIDQ0OSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t
Qy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19Q
dXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19QdXNoQ29uc3VtZXJf
UHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9r
ZXI7CgogIGNsYXNzIFB1c2hDb25zdW1lcgogICAgOiBwdWJsaWMgdmlydHVhbCBDT1JCQV9PYmpl
Y3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUHVzaENvbnN1bWVyX3B0ciBfcHRyX3R5cGU7
CiAgICB0eXBlZGVmIFB1c2hDb25zdW1lcl92YXIgX3Zhcl90eXBlOwoKCgogICAgc3RhdGljIFB1
c2hDb25zdW1lcl9wdHIgX2R1cGxpY2F0ZSAoUHVzaENvbnN1bWVyX3B0ciBvYmopOwoKICAgIHN0
YXRpYyBQdXNoQ29uc3VtZXJfcHRyIF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRy
IG9iaiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsK
CiAgICBzdGF0aWMgUHVzaENvbnN1bWVyX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQdXNoQ29uc3VtZXJfcHRyIF9uaWwgKHZvaWQp
CiAgICAgIHsKICAgICAgICByZXR1cm4gKFB1c2hDb25zdW1lcl9wdHIpMDsKICAgICAgfQoKICAg
IHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICB2aXJ0dWFsIHZv
aWQgcHVzaCAoCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJiBkYXRhLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRpc2Nv
bm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK
CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6
Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5
X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5
X0Jyb2tlciAqdGhlX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyXzsKCiAgcHJvdGVjdGVk
OgogICAgUHVzaENvbnN1bWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2
b2lkIFJ0ZWNFdmVudENvbW1fUHVzaENvbnN1bWVyX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29s
bG9jYXRlZCk7CgogICAgUHVzaENvbnN1bWVyICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAog
ICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fi
c3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFz
cyBfVEFPX1B1c2hDb25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBf
VEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RB
T19QdXNoQ29uc3VtZXJfRGlyZWN0X1Byb3h5X0ltcGw7CgogICAgdmlydHVhbCB+UHVzaENvbnN1
bWVyICh2b2lkKTsKCiAgcHJpdmF0ZToKICAgIFB1c2hDb25zdW1lciAoY29uc3QgUHVzaENvbnN1
bWVyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFB1c2hDb25zdW1lciAmKTsKICB9Owoj
IDU0OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1By
b3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewog
IHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgKHZvaWQp
IHsgfQogICAgdmlydHVhbCB2b2lkIHB1c2ggKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxv
Y2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg
JiBkYXRhLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiAp
ID0gMDsKCgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAg
ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAg
ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6
CiAgICBfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDU4NCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94
eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIF9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGws
CiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAg
cHVibGljOgogICAgX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoK
ICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKSB7
IH0KICAgIHZpcnR1YWwgdm9pZCBwdXNoICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2Nh
dGVkX3Rhb190YXJnZXRfLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYg
ZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsK
CgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgICAgIENP
UkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07CiMgNjI2ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF
dmVudENvbW1DLmgiCiAgICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9Ccm9rZXIKICB7
CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICh2
b2lkKTsKICAgIHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfSW1wbCAmc2VsZWN0X3By
b3h5ICgKICAgICAgICBQdXNoQ29uc3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpCiAgICAgICkgPSAwOwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hDb25zdW1l
cl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDY0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5o
IgogIGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIKICAgIDogcHVi
bGljIHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoK
ICAgIF9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZp
cnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAg
IHZpcnR1YWwgX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAg
ICAgICBQdXNoQ29uc3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RB
T19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKICBw
dWJsaWM6CgoKCiAgICBzdGF0aWMgX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tl
ciAqdGhlX1RBT19QdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsK
IyA2NzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0
ciBfdGNfUHVzaENvbnN1bWVyOwoKCgoKCiAgY2xhc3MgUHVzaFN1cHBsaWVyOwogIHR5cGVkZWYg
UHVzaFN1cHBsaWVyICpQdXNoU3VwcGxpZXJfcHRyOwoKCgoKCgoKICBjbGFzcyBQdXNoU3VwcGxp
ZXJfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBQdXNoU3VwcGxp
ZXJfdmFyICh2b2lkKTsKICAgIFB1c2hTdXBwbGllcl92YXIgKFB1c2hTdXBwbGllcl9wdHIgcCkg
OiBwdHJfIChwKSB7fQogICAgUHVzaFN1cHBsaWVyX3ZhciAoY29uc3QgUHVzaFN1cHBsaWVyX3Zh
ciAmKTsKICAgIH5QdXNoU3VwcGxpZXJfdmFyICh2b2lkKTsKCiAgICBQdXNoU3VwcGxpZXJfdmFy
ICZvcGVyYXRvcj0gKFB1c2hTdXBwbGllcl9wdHIpOwogICAgUHVzaFN1cHBsaWVyX3ZhciAmb3Bl
cmF0b3I9IChjb25zdCBQdXNoU3VwcGxpZXJfdmFyICYpOwogICAgUHVzaFN1cHBsaWVyX3B0ciBv
cGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBQdXNoU3VwcGxpZXJf
cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFB1c2hTdXBwbGllcl9wdHIgJigpOwoKICAgIFB1
c2hTdXBwbGllcl9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAgUHVzaFN1cHBsaWVyX3B0ciAmaW5v
dXQgKHZvaWQpOwogICAgUHVzaFN1cHBsaWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFB1c2hTdXBw
bGllcl9wdHIgX3JldG4gKHZvaWQpOwogICAgUHVzaFN1cHBsaWVyX3B0ciBwdHIgKHZvaWQpIGNv
bnN0OwoKCgogICAgc3RhdGljIFB1c2hTdXBwbGllcl9wdHIgZHVwbGljYXRlIChQdXNoU3VwcGxp
ZXJfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKFB1c2hTdXBwbGllcl9wdHIpOwogICAg
c3RhdGljIFB1c2hTdXBwbGllcl9wdHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBQdXNoU3VwcGxp
ZXJfcHRyIG5hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdCAqLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmCiAgICAgICk7CiAgICBzdGF0aWMgQ09SQkE6Ok9iamVjdCAqIHVwY2FzdCAo
dm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIFB1c2hTdXBwbGllcl9wdHIgcHRyXzsKCiAgICBQdXNo
U3VwcGxpZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQdXNoU3VwcGxpZXJf
dmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAmcmhzKTsKICB9OwojIDc0MCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIFB1c2hTdXBwbGllcl9vdXQKICB7CiAgcHVibGlj
OgogICAgUHVzaFN1cHBsaWVyX291dCAoUHVzaFN1cHBsaWVyX3B0ciAmKTsKICAgIFB1c2hTdXBw
bGllcl9vdXQgKFB1c2hTdXBwbGllcl92YXIgJik7CiAgICBQdXNoU3VwcGxpZXJfb3V0IChjb25z
dCBQdXNoU3VwcGxpZXJfb3V0ICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9IChj
b25zdCBQdXNoU3VwcGxpZXJfb3V0ICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9
IChjb25zdCBQdXNoU3VwcGxpZXJfdmFyICYpOwogICAgUHVzaFN1cHBsaWVyX291dCAmb3BlcmF0
b3I9IChQdXNoU3VwcGxpZXJfcHRyKTsKICAgIG9wZXJhdG9yIFB1c2hTdXBwbGllcl9wdHIgJigp
OwogICAgUHVzaFN1cHBsaWVyX3B0ciAmcHRyICh2b2lkKTsKICAgIFB1c2hTdXBwbGllcl9wdHIg
b3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQdXNoU3VwcGxpZXJfcHRyICZwdHJf
OwogIH07CiMgNzY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgY2xhc3MgX1RBT19QdXNoU3Vw
cGxpZXJfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9SZW1vdGVfUHJveHlf
SW1wbDsKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RB
T19QdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHVzaFN1cHBsaWVy
CiAgICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlw
ZWRlZiBQdXNoU3VwcGxpZXJfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgUHVzaFN1cHBsaWVy
X3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMgUHVzaFN1cHBsaWVyX3B0ciBfZHVwbGljYXRl
IChQdXNoU3VwcGxpZXJfcHRyIG9iaik7CgogICAgc3RhdGljIFB1c2hTdXBwbGllcl9wdHIgX25h
cnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQdXNoU3VwcGxpZXJf
cHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3Rh
dGljIFB1c2hTdXBwbGllcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAo
UHVzaFN1cHBsaWVyX3B0cikwOwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz
dHJ1Y3RvciAodm9pZCopOwoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxp
ZXIgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg
ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCBDT1JC
QTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmly
dHVhbCB2b2lkICpfdGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7
CgogIHByaXZhdGU6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f
UHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFB1c2hTdXBwbGll
ciAoaW50IGNvbGxvY2F0ZWQgPSAwKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBSdGVjRXZlbnRDb21t
X1B1c2hTdXBwbGllcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQpOwoKICAgIFB1
c2hTdXBwbGllciAoCiAgICAgICAgVEFPX1N0dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9v
bGVhbiBfdGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFz
ZSAqc2VydmFudCA9IDAKICAgICAgKTsKCiAgICBmcmllbmQgY2xhc3MgX1RBT19QdXNoU3VwcGxp
ZXJfUmVtb3RlX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19QdXNoU3VwcGxpZXJf
VGhydVBPQV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fUHVzaFN1cHBsaWVyX0Rp
cmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgflB1c2hTdXBwbGllciAodm9pZCk7CgogIHBy
aXZhdGU6CiAgICBQdXNoU3VwcGxpZXIgKGNvbnN0IFB1c2hTdXBwbGllciAmKTsKICAgIHZvaWQg
b3BlcmF0b3I9IChjb25zdCBQdXNoU3VwcGxpZXIgJik7CiAgfTsKIyA4NTUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2
ZW50Q29tbUMuaCIKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9JbXBsCiAgICA6IHB1
YmxpYyB2aXJ0dWFsIFRBT19PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0
dWFsIH5fVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwg
dm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2Nv
bGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hTdXBwbGll
cl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDg4MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgog
IGNsYXNzIF9UQU9fUHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2
aXJ0dWFsIF9UQU9fUHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFs
IFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNo
U3VwcGxpZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVz
aFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCBk
aXNjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICk7CgoKCgogIH07CiMgOTE1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiAgICBjbGFz
cyBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVh
bCB+X1RBT19QdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAgIHZpcnR1YWwgX1RB
T19QdXNoU3VwcGxpZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBQdXNoU3Vw
cGxpZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAw
OwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKHZvaWQp
OwoKICB9OwojIDkzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgogIGNsYXNzIF9UQU9fUHVzaFN1
cHBsaWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIKICAgIDogcHVibGljIHZpcnR1YWwgX1RBT19QdXNo
U3VwcGxpZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHVzaFN1cHBsaWVy
X1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaFN1cHBs
aWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgX1RBT19QdXNoU3Vw
cGxpZXJfUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBQdXNoU3VwcGxpZXIgKm9i
amVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19QdXNoU3VwcGxpZXJfUmVtb3Rl
X1Byb3h5X0ltcGwgcmVtb3RlX3Byb3h5X2ltcGxfOwoKICBwdWJsaWM6CgoKCiAgICBzdGF0aWMg
X1RBT19QdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19QdXNoU3VwcGxp
ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyA5NjggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q29tbUMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHVzaFN1cHBsaWVyOwoK
Cn0KCgoKCmV4dGVybgpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hDb25zdW1lcl9Qcm94eV9Ccm9r
ZXIgKgooKlJ0ZWNFdmVudENvbW1fX1RBT19QdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyX0ZhY3Rv
cnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4
dGVybgpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKgooKlJ0
ZWNFdmVudENvbW1fX1RBT19QdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rp
b25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCiAgICAgICAgICAg
ICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENv
bW06OkV2ZW50SGVhZGVyICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciopOwogICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRl
Y0V2ZW50Q29tbTo6RXZlbnRIZWFkZXIgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q29t
bTo6RXZlbnRIZWFkZXIgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAmKTsKICAgICAgICAgICAg
ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q29tbTo6RXZl
bnQqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z
dCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06OkV2ZW50IComKTsKICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0
IFJ0ZWNFdmVudENvbW06OkV2ZW50IComKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0
b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJik7CiAg
ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu
dENvbW06OkV2ZW50U2V0Kik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqJik7
CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqJik7CgogICAgICAgICAg
ICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDb21tOjpQ
dXNoQ29uc3VtZXJfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lciAq
Jik7CgogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBS
dGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENvbW06
OlB1c2hTdXBwbGllciAqJik7CiMgMTAzNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0V2ZW50Q29tbUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiCmlubGlu
ZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3ZhciAodm9pZCkK
ICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpF
dmVudEhlYWRlcl92YXIgKEV2ZW50SGVhZGVyICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpS
dGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3ZhciAoY29uc3QgOjpS
dGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8g
eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXIgKCpw
LnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsK
fQoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6OkV2ZW50SGVhZGVyX3Zh
ciAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAmcCkKewogIGRvIHsgdHJ5IHsg
dGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyIChwKTsgfSBjYXRj
aCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47
IH0gfSB3aGlsZSAoMCk7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXI6
On5FdmVudEhlYWRlcl92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5l
IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3ZhciAmClJ0ZWNFdmVudENvbW06OkV2ZW50SGVh
ZGVyX3Zhcjo6b3BlcmF0b3I9IChFdmVudEhlYWRlciAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50
Q29tbTo6RXZlbnRIZWFkZXJfdmFyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpv
cGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyICZwKQp7CiAg
aWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8gPSAwOwogICAg
ICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIEV2ZW50SGVhZGVyICpkZWVwX2Nv
cHkgPQogICAgICAgICAgICBuZXcgRXZlbnRIZWFkZXIgKCpwLnB0cl8pOwoKICAgICAgICAgIGlm
IChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIEV2ZW50SGVhZGVy
ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsK
ICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVw
X2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoK
CmlubGluZSBSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlcl92YXIgJgpSdGVjRXZlbnRDb21tOjpF
dmVudEhlYWRlcl92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhl
YWRlciAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsKICAgIGRlbGV0ZSB0aGlzLT5w
dHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q29tbTo6RXZl
bnRIZWFkZXIgKHApOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMTI7IHJldHVybiAqdGhpczsgfSB9IHdoaWxlICgwKTsKICB9CiAgcmV0dXJuICp0
aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAqClJ0ZWNF
dmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhlYWRlciAq
ClJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJl
dHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFy
OjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKSBjb25zdAp7
CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFk
ZXJfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKQp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFy
OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICYoKSBjb25zdAp7CiAgcmV0
dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudEhl
YWRlciAmClJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsK
ICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVh
ZGVyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjppbm91dCAodm9pZCkKewogIHJl
dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVy
ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpvdXQgKHZvaWQpCnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyClJ0ZWNF
dmVudENvbW06OkV2ZW50SGVhZGVyX3Zhcjo6X3JldG4gKHZvaWQpCnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyICoKUnRlY0V2ZW50
Q29tbTo6RXZlbnRIZWFkZXJfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+
cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF92YXI6OkV2ZW50X3ZhciAo
dm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpF
dmVudF92YXIgKEV2ZW50ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpSdGVjRXZlbnRDb21t
OjpFdmVudF92YXI6OkV2ZW50X3ZhciAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudF92YXIg
JnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRl
Y0V2ZW50Q29tbTo6RXZlbnQgKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNl
CiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6
fkV2ZW50X3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2
ZW50Q29tbTo6RXZlbnRfdmFyICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRvcj0g
KEV2ZW50ICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudF92YXIgJgpSdGVjRXZl
bnRDb21tOjpFdmVudF92YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVu
dF92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAw
KQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+
cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgRXZlbnQg
KmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBFdmVudCAoKnAucHRyXyk7CgogICAgICAgICAg
aWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRXZlbnQgKnRt
cCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAg
ICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29w
eTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUgY29uc3QgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zh
cjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6b3Bl
cmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50
Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYo
KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6
RXZlbnRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYoKQp7CiAgcmV0dXJu
ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpvcGVyYXRv
ciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZl
bnRDb21tOjpFdmVudCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0
IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpSdGVjRXZlbnRDb21tOjpFdmVudF92YXI6OmluICh2
b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRD
b21tOjpFdmVudCAmClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6aW5vdXQgKHZvaWQpCnsKICBy
ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqJgpS
dGVjRXZlbnRDb21tOjpFdmVudF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVj
RXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2ZW50X3Zhcjo6X3JldG4gKHZvaWQp
CnsKICA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50ICoK
UnRlY0V2ZW50Q29tbTo6RXZlbnRfdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OkV2ZW50X291
dCAoOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqJnApCiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRy
XyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OkV2ZW50X291dCAoRXZl
bnRfdmFyICZwKQogIDogcHRyXyAocC5vdXQgKCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0
aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50X291dDo6RXZlbnRf
b3V0IChjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50X291dCAmcCkKICA6IHB0cl8gKGNvbnN0
X2Nhc3Q8RXZlbnRfb3V0Jj4gKHApLnB0cl8pCnt9CgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZl
bnRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl
Y0V2ZW50Q29tbTo6RXZlbnRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8RXZl
bnRfb3V0Jj4gKHApLnB0cl87CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgUnRlY0V2ZW50Q29t
bTo6RXZlbnRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvcj0gKEV2ZW50
ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKUnRlY0V2
ZW50Q29tbTo6RXZlbnRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENvbW06OkV2ZW50IComKCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAq
JgpSdGVjRXZlbnRDb21tOjpFdmVudF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0ZWNFdmVudENvbW06OkV2
ZW50X291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CiMgMzY3
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiCmlubGluZSBSdGVjRXZlbnRDb21tOjpFdmVudCAqClJ0
ZWNFdmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRT
ZXQ6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCnsKICBSdGVjRXZlbnRDb21tOjpFdmVu
dCAqcmV0dmFsID0gMDsKICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBSdGVjRXZlbnRDb21tOjpF
dmVudFtzaXplXTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9u
ICgpKSA9IDEyOyByZXR1cm4gMDsgfSB9IHdoaWxlICgwKTsKICByZXR1cm4gcmV0dmFsOwp9Cgpp
bmxpbmUgdm9pZCBSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZl
bnRDb21tX0V2ZW50U2V0OjpmcmVlYnVmIChSdGVjRXZlbnRDb21tOjpFdmVudCAqYnVmZmVyKQoK
ewogIGRlbGV0ZSBbXSBidWZmZXI7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0ICh2b2lkKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRD
b21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0IChDT1JCQTo6VUxvbmcg
bWF4aW11bSkKICA6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6YWxsb2NidWYgKG1heGlt
dW0pKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9S
dGVjRXZlbnRDb21tX0V2ZW50U2V0OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD
b21tX0V2ZW50U2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogIFJ0ZWNFdmVudENvbW06OkV2ZW50ICpkYXRhLAogIENPUkJBOjpCb29sZWFuIHJlbGVhc2Up
CjogVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChtYXhpbXVtLCBsZW5ndGgsIGRhdGEsIHJl
bGVhc2UpCnsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu
dENvbW1fRXZlbnRTZXQgKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENv
bW1fRXZlbnRTZXQgJnJocykKCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJocykK
ewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogIHsKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICp0
bXAxID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6YWxs
b2NidWYgKHRoaXMtPm1heGltdW1fKTsKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICogY29uc3Qg
dG1wMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHJocy5idWZm
ZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsr
aSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07CgogICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAg
fQogIGVsc2UKICB7CiAgICB0aGlzLT5idWZmZXJfID0gMDsKICB9Cn0KCmlubGluZSBSdGVjRXZl
bnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0ICYK
UnRlY0V2ZW50Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVu
dFNldDo6b3BlcmF0b3I9IChjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD
b21tX0V2ZW50U2V0ICZyaHMpCgp7CiAgaWYgKHRoaXMgPT0gJnJocykKICAgIHJldHVybiAqdGhp
czsKCiAgaWYgKHRoaXMtPnJlbGVhc2VfKQogIHsKICAgIGlmICh0aGlzLT5tYXhpbXVtXyA8IHJo
cy5tYXhpbXVtXykKICAgIHsKCiAgICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50ICp0bXAgPSByZWlu
dGVycHJldF9jYXN0PFJ0ZWNFdmVudENvbW06OkV2ZW50ICo+ICh0aGlzLT5idWZmZXJfKTsKICAg
ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6ZnJlZWJ1
ZiAodG1wKTsKICAgICAgdGhpcy0+YnVmZmVyXyA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0
ZWNFdmVudENvbW1fRXZlbnRTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0K
ICBlbHNlCiAgICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2
ZW50Q29tbV9FdmVudFNldDo6YWxsb2NidWYgKHJocy5tYXhpbXVtXyk7CgogIFRBT19VbmJvdW5k
ZWRfQmFzZV9TZXF1ZW5jZTo6b3BlcmF0b3I9IChyaHMpOwoKICBSdGVjRXZlbnRDb21tOjpFdmVu
dCAqdG1wMSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHRoaXMt
PmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENvbW06OkV2ZW50ICogY29uc3QgdG1wMiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQgKj4gKHJocy5idWZmZXJfKTsKCiAgZm9yIChD
T1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kpCiAgICB0bXAxW2ldID0g
dG1wMltpXTsKCiAgcmV0dXJuICp0aGlzOwp9CgoKaW5saW5lIFJ0ZWNFdmVudENvbW06OkV2ZW50
ICYKUnRlY0V2ZW50Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9F
dmVudFNldDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGkpCgp7CiAgZG8geyBpZighKGkgPCB0
aGlzLT5tYXhpbXVtXykpIHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgp
OyBBQ0VfTG9nX01zZyAqYWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18t
PnNldCAoIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIsIDQ1OSwgLTEsIF9fYWNlX2Vycm9yLCBhY2Vf
X18tPnJlc3RhcnQgKCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxi
YWNrICgpKTsgYWNlX19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGlu
ZSAlbCBhc3NlcnRpb24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1f
IiwgLTEpOyB9IH0gd2hpbGUgKDApOwogIFJ0ZWNFdmVudENvbW06OkV2ZW50KiB0bXAgPSByZWlu
dGVycHJldF9jYXN0PFJ0ZWNFdmVudENvbW06OkV2ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogIHJl
dHVybiB0bXBbaV07Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAmClJ0ZWNF
dmVudENvbW06Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6
Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdAoKewogIGRvIHsgaWYoIShpIDwgdGhp
cy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsg
QUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNnOjppbnN0YW5jZSAoKTsgYWNlX19fLT5z
ZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj
cy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmkiLCA0NjgsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19f
LT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1zZ19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFj
ayAoKSk7IGFjZV9fXy0+bG9nIChMTV9FUlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUg
JWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3IgJyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIs
IC0xKTsgfSB9IHdoaWxlICgwKTsKICBSdGVjRXZlbnRDb21tOjpFdmVudCAqIGNvbnN0IHRtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQqPiAodGhpcy0+YnVmZmVyXyk7
CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgKgpSdGVj
RXZlbnRDb21tOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0
OjpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBSdGVjRXZlbnRDb21tOjpF
dmVudCAqcmVzdWx0ID0gMDsKICBpZiAob3JwaGFuID09IDApCiAgewoKICAgIGlmICh0aGlzLT5i
dWZmZXJfID09IDApCiAgICB7CiAgICAgIHJlc3VsdCA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X1J0ZWNFdmVudENvbW1fRXZlbnRTZXQ6OmFsbG9jYnVmICh0aGlzLT5sZW5ndGhfKTsKICAgICAg
dGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgdGhpcy0+cmVsZWFzZV8gPSAxOwogICAgfQog
ICAgZWxzZQogICAgewogICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENv
bW06OkV2ZW50Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgfQogIH0KICBlbHNlCiAgewogICAgaWYg
KHRoaXMtPnJlbGVhc2VfICE9IDApCiAgICB7CgoKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxSdGVjRXZlbnRDb21tOjpFdmVudCo+ICh0aGlzLT5idWZmZXJfKTsKICAgICAgdGhpcy0+
bWF4aW11bV8gPSAwOwogICAgICB0aGlzLT5sZW5ndGhfID0gMDsKICAgICAgdGhpcy0+YnVmZmVy
XyA9IDA7CiAgICAgIHRoaXMtPnJlbGVhc2VfID0gMDsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3Vs
dDsKfQoKaW5saW5lIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50ICoKUnRlY0V2ZW50Q29tbTo6
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6Z2V0X2J1ZmZl
ciAodm9pZCkgY29uc3QKewogIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IFJ0ZWNFdmVu
dENvbW06OkV2ZW50ICo+ICh0aGlzLT5idWZmZXJfKTsKfQoKaW5saW5lIHZvaWQKUnRlY0V2ZW50
Q29tbTo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q29tbV9FdmVudFNldDo6cmVw
bGFjZSAoQ09SQkE6OlVMb25nIG1heCwKQ09SQkE6OlVMb25nIGxlbmd0aCwKUnRlY0V2ZW50Q29t
bTo6RXZlbnQgKmRhdGEsCkNPUkJBOjpCb29sZWFuIHJlbGVhc2UpCnsKICB0aGlzLT5tYXhpbXVt
XyA9IG1heDsKICB0aGlzLT5sZW5ndGhfID0gbGVuZ3RoOwogIGlmICh0aGlzLT5idWZmZXJfICYm
IHRoaXMtPnJlbGVhc2VfID09IDEpCiAgewogICAgUnRlY0V2ZW50Q29tbTo6RXZlbnQgKnRtcCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q29tbTo6RXZlbnQqPiAodGhpcy0+YnVmZmVyXyk7
CiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDb21tX0V2ZW50U2V0OjpmcmVl
YnVmICh0bXApOwogIH0KICB0aGlzLT5idWZmZXJfID0gZGF0YTsKICB0aGlzLT5yZWxlYXNlXyA9
IHJlbGVhc2U7Cn0KIyA1NDQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNFdmVu
dENvbW06OkV2ZW50U2V0X3Zhcjo6RXZlbnRTZXRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30K
CmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6OkV2ZW50U2V0X3ZhciAoRXZlbnRT
ZXQgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zh
cjo6RXZlbnRTZXRfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3ZhciAmcCkK
ewogIGlmIChwLnB0cl8pCiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpSdGVjRXZl
bnRDb21tOjpFdmVudFNldCAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UK
ICAgIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFy
Ojp+RXZlbnRTZXRfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBS
dGVjRXZlbnRDb21tOjpFdmVudFNldF92YXIgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6
Om9wZXJhdG9yPSAoRXZlbnRTZXQgKnApCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5w
dHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50
U2V0X3ZhciAmClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6
OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZwKQogICAg
ewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIHRoaXMt
PnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBFdmVudFNldCAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IEV2
ZW50U2V0ICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9IDApCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBFdmVudFNldCAqdG1wID0gZGVlcF9jb3B5OwogICAgICAgICAg
ICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAgdGhpcy0+cHRyXyA9IHRt
cDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNFdmVudENvbW06
OkV2ZW50U2V0ICoKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06
OkV2ZW50U2V0ICoKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lk
KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNl
dF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpIGNvbnN0
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNl
dF92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpCnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6Om9wZXJh
dG9yIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMt
PnB0cl87Cn0KCgppbmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvcGVyYXRvciA6
OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgpp
bmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6
Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5v
cGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudCAm
ClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGlu
ZGV4KSBjb25zdAp7CiAgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgUnRlY0V2ZW50Q29tbTo6RXZl
bnQgJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGluZSBjb25zdCA6
OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpp
biAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2
ZW50Q29tbTo6RXZlbnRTZXQgJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF92YXI6Omlub3V0ICh2
b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2ZW50Q29tbTo6
RXZlbnRTZXQgKiYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIDo6UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQgKgpSdGVjRXZlbnRDb21tOjpFdmVu
dFNldF92YXI6Ol9yZXRuICh2b2lkKQp7CiAgOjpSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqdG1w
ID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdG1wOwp9CgppbmxpbmUg
OjpSdGVjRXZlbnRDb21tOjpFdmVudFNldCAqClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X3Zhcjo6
cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgppbmxpbmUKUnRl
Y0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpFdmVudFNldF9vdXQgKEV2ZW50U2V0IComcCkKICA6
IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENvbW06OkV2
ZW50U2V0X291dDo6RXZlbnRTZXRfb3V0IChFdmVudFNldF92YXIgJnApCiAgOiBwdHJfIChwLm91
dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwp9CgppbmxpbmUK
UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpFdmVudFNldF9vdXQgKGNvbnN0IDo6UnRlY0V2
ZW50Q29tbTo6RXZlbnRTZXRfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxFdmVudFNldF9v
dXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OlJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dCAm
ClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dDo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVu
dENvbW06OkV2ZW50U2V0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PEV2ZW50
U2V0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50
Q29tbTo6RXZlbnRTZXRfb3V0ICYKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpvcGVyYXRv
cj0gKEV2ZW50U2V0ICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUKUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENv
bW06OkV2ZW50U2V0IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVj
RXZlbnRDb21tOjpFdmVudFNldCAqJgpSdGVjRXZlbnRDb21tOjpFdmVudFNldF9vdXQ6OnB0ciAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDb21tOjpF
dmVudFNldCAqClJ0ZWNFdmVudENvbW06OkV2ZW50U2V0X291dDo6b3BlcmF0b3ItPiAodm9pZCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q29tbTo6RXZlbnQgJgpS
dGVjRXZlbnRDb21tOjpFdmVudFNldF9vdXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRl
eCkKewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KIyA3NTggIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcjo6
UHVzaENvbnN1bWVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBf
dGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICAp
CiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAg
dGhpcy0+UnRlY0V2ZW50Q29tbV9QdXNoQ29uc3VtZXJfc2V0dXBfY29sbG9jYXRpb24gKF90YW9f
Y29sbG9jYXRlZCk7Cn0KIyA3NzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbUMuaSIKaW5saW5lClJ0ZWNF
dmVudENvbW06OlB1c2hTdXBwbGllcjo6UHVzaFN1cHBsaWVyICgKICAgIFRBT19TdHViICpvYmpy
ZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3Rf
U2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19j
b2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q29tbV9QdXNoU3VwcGxpZXJf
c2V0dXBfY29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KCgoKCmlubGluZSBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRD
b21tOjpFdmVudEhlYWRlciAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBf
dGFvX2FnZ3JlZ2F0ZS50eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuc291cmNl
KSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUudHRsKSAmJgogICAgKHN0cm0gPDwgX3Rh
b19hZ2dyZWdhdGUuY3JlYXRpb25fdGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRl
LmVjX3JlY3ZfdGltZSkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmVjX3NlbmRfdGlt
ZSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFJ0ZWNFdmVudENvbW06
OkV2ZW50SGVhZGVyICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtID4+IF90YW9f
YWdncmVnYXRlLnR5cGUpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5zb3VyY2UpICYm
CiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS50dGwpICYmCiAgICAoc3RybSA+PiBfdGFvX2Fn
Z3JlZ2F0ZS5jcmVhdGlvbl90aW1lKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZWNf
cmVjdl90aW1lKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUuZWNfc2VuZF90aW1lKQog
ICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNFdmVudENv
bW06OkV2ZW50ICZfdGFvX2FnZ3JlZ2F0ZSkKewogIGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdn
cmVnYXRlLmhlYWRlcikgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmRhdGEpCiAgKQog
ICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBSdGVjRXZlbnRDb21tOjpFdmVudCAm
X3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5oZWFk
ZXIpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5kYXRhKQogICkKICAgIHJldHVybiAx
OwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwg
KAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg
JgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAg
ICBSdGVjRXZlbnRDb21tOjpFdmVudFNldCAmCiAgKTsKCgoKICAgICAgICAgICAgICAgICAgIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3Qg
UnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0cgogICk7CgogICAgICAgICAgICAgICAgICAg
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFJ0ZWNF
dmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBS
dGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyCiAgKTsKCiAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2
ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciAmCiAgKTsKIyAxMDM4ICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENv
bW1DLmgiIDIKIyAxMDQ4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1DLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEwNDkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0V2ZW50Q29tbUMuaCIgMgojIDI5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIKCgoKCgoK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1Bv
cnRhYmxlU2VydmVyL1BvcnRhYmxlU2VydmVyLmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t
Uy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L3Rhby9Qb3J0YWJsZVNlcnZlci9TZXJ2YW50X0Jhc2UuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu
dENvbW1TLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vdGFvL1BvcnRhYmxlU2VydmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEKIyAzOCAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjRXZlbnRDb21tUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9UaHJ1UE9BX09iamVjdF9Qcm94eV9J
bXBsLmgiIDEKIyAzOSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIiAyCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9EaXJl
Y3RfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIK
IyA1MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tUy5oIgpuYW1lc3BhY2UgUE9BX1J0ZWNFdmVudENvbW0K
ewogIGNsYXNzIFB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFB1c2hDb25zdW1lciAqUHVzaENvbnN1
bWVyX3B0cjsKCiAgY2xhc3MgX1RBT19QdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBsOwog
IGNsYXNzIF9UQU9fUHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xh
c3MgUHVzaENvbnN1bWVyIDogcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZhbnRC
YXNlCiAgewogIHByb3RlY3RlZDoKICAgIFB1c2hDb25zdW1lciAodm9pZCk7CgogIHB1YmxpYzoK
ICAgIFB1c2hDb25zdW1lciAoY29uc3QgUHVzaENvbnN1bWVyJiByaHMpOwogICAgdmlydHVhbCB+
UHVzaENvbnN1bWVyICh2b2lkKTsKCgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAo
CiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCogX2Rvd25j
YXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQKICAgICAgKTsKCiAgICBz
dGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAog
ICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAg
KTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4aXN0ZW50X3NrZWwgKAogICAgICAgIFRBT19TZXJ2
ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRf
dXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pbnRlcmZhY2Vfc2tlbCAoCiAg
ICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAg
dm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkIF9kaXNw
YXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpfc2Vy
dmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgOjpSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3Vt
ZXIgKl90aGlzICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg
ICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAo
dm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0IFJ0ZWNF
dmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g
KSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgcHVzaF9za2VsICgKICAgICAgICBUQU9fU2Vy
dmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAgdm9p
ZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgZGlz
Y29ubmVjdF9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJv
bm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9
IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyX3NrZWwg
KAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFv
X29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAg
fTsKCgoKCgoKICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r
ZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaENvbnN1bWVyX1By
b3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXpl
ZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaENvbnN1bWVyX1N0
cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENv
bW06Ol9UQU9fUHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6
UnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoK
CiAgICB2b2lkIGNyZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwK
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgICApOwoKCgoKICAgIDo6UnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoQ29uc3VtZXJfUHJveHlf
SW1wbAogICAgKnByb3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFT
VF07CgogICAgQUNFX01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0
YXRpYyBfVEFPX1B1c2hDb25zdW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f
UHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAxOTcg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKICBjbGFzcyBfVEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9B
X1Byb3h5X0ltcGwgOgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVjRXZlbnRDb21tOjpfVEFPX1B1
c2hDb25zdW1lcl9Qcm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1YWwgVEFPX1RocnVQT0FfT2Jq
ZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNoQ29uc3VtZXJfVGhydVBP
QV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1B1c2hDb25zdW1lcl9UaHJ1
UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBwdXNoICgKICAgICAg
ICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIGNvbnN0IFJ0
ZWNFdmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENP
UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1
c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rhcmdl
dF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK
CgogIH07CgoKCgoKCiAgY2xhc3MgUHVzaFN1cHBsaWVyOwogIHR5cGVkZWYgUHVzaFN1cHBsaWVy
ICpQdXNoU3VwcGxpZXJfcHRyOwoKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1By
b3h5X0ltcGw7CiAgY2xhc3MgX1RBT19QdXNoU3VwcGxpZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJv
a2VyOwoKICBjbGFzcyBQdXNoU3VwcGxpZXIgOiBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZl
cjo6U2VydmFudEJhc2UKICB7CiAgcHJvdGVjdGVkOgogICAgUHVzaFN1cHBsaWVyICh2b2lkKTsK
CiAgcHVibGljOgogICAgUHVzaFN1cHBsaWVyIChjb25zdCBQdXNoU3VwcGxpZXImIHJocyk7CiAg
ICB2aXJ0dWFsIH5QdXNoU3VwcGxpZXIgKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29s
ZWFuIF9pc19hICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2
b2lkKiBfZG93bmNhc3QgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAg
ICApOwoKICAgIHN0YXRpYyB2b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1
ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxs
LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAg
ICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9p
ZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFj
ZV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9i
aiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFs
IHZvaWQgX2Rpc3BhdGNoICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAg
IHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENvbW06
OlB1c2hTdXBwbGllciAqX3RoaXMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBv
c2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdF9wdXNo
X3N1cHBsaWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAg
ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAg
ICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyX3NrZWwgKAogICAgICAgIFRB
T19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAg
ICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAgfTsKCgoKCgoKICBj
bGFzcyBfVEFPX1B1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMg
dmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcgog
IHsKICBwdWJsaWM6CiAgICBfVEFPX1B1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r
ZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHVzaFN1cHBsaWVyX1N0cmF0ZWdpemVkX1By
b3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENvbW06Ol9UQU9fUHVz
aFN1cHBsaWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6UnRlY0V2ZW50Q29t
bTo6UHVzaFN1cHBsaWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNy
ZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoK
ICAgIDo6UnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxpZXJfUHJveHlfSW1wbAogICAgKnBy
b3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNF
X01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1B1
c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fUHVzaFN1cHBsaWVy
X1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAzNTkgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2
ZW50Q29tbVMuaCIKICBjbGFzcyBfVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGwg
OgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hTdXBwbGllcl9Q
cm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1YWwgVEFPX1RocnVQT0FfT2JqZWN0X1Byb3h5X0lt
cGwKICB7CiAgcHVibGljOgogICAgX1RBT19QdXNoU3VwcGxpZXJfVGhydVBPQV9Qcm94eV9JbXBs
ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1B1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0lt
cGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXIg
KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07CgoKCgoK
Cn0KCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9v
cmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q29tbVNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1QuaCIgMgojIDM1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNFdmVudENvbW1TX1QuaCIKbmFtZXNwYWNlIFBPQV9SdGVjRXZlbnRDb21tCnsKCiAgdGVt
cGxhdGUgPGNsYXNzIFQ+CiAgY2xhc3MgUHVzaENvbnN1bWVyX3RpZSA6IHB1YmxpYyBQdXNoQ29u
c3VtZXIKICB7CiAgcHVibGljOgogICAgUHVzaENvbnN1bWVyX3RpZSAoVCAmdCk7CgogICAgUHVz
aENvbnN1bWVyX3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBQ
dXNoQ29uc3VtZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBQ
dXNoQ29uc3VtZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JC
QTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5QdXNoQ29uc3VtZXJfdGllICh2b2lkKTsKCgoK
ICAgIFQgKl90aWVkX29iamVjdCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9i
aik7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFz
ZT0xKTsKCiAgICBDT1JCQTo6Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lz
X293bmVyIChDT1JCQTo6Qm9vbGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRy
IF9kZWZhdWx0X1BPQSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp
CiAgICAgICk7CiAgICB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2
ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAg
ICB2b2lkIGRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2
ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFB1c2hDb25z
dW1lcl90aWUgKGNvbnN0IFB1c2hDb25zdW1lcl90aWUgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAo
Y29uc3QgUHVzaENvbnN1bWVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAg
Y2xhc3MgUHVzaFN1cHBsaWVyX3RpZSA6IHB1YmxpYyBQdXNoU3VwcGxpZXIKICB7CiAgcHVibGlj
OgogICAgUHVzaFN1cHBsaWVyX3RpZSAoVCAmdCk7CgogICAgUHVzaFN1cHBsaWVyX3RpZSAoVCAm
dCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBQdXNoU3VwcGxpZXJfdGllIChU
ICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBQdXNoU3VwcGxpZXJfdGllIChU
ICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNl
PTEpOwoKICAgIH5QdXNoU3VwcGxpZXJfdGllICh2b2lkKTsKCgoKICAgIFQgKl90aWVkX29iamVj
dCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9iaik7CgogICAgdm9pZCBfdGll
ZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBDT1JCQTo6
Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lzX293bmVyIChDT1JCQTo6Qm9v
bGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0X1BPQSAoCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CiAgICB2b2lk
IGRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
ICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBP
QV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFB1c2hTdXBwbGllcl90
aWUgKGNvbnN0IFB1c2hTdXBwbGllcl90aWUgJik7CiAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3Qg
UHVzaFN1cHBsaWVyX3RpZSAmKTsKICB9OwoKfQoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21t
U19ULmkiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tU19ULmkiCnRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46OlB1c2hDb25z
dW1lcl90aWUgKFQgJnQpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0
YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+
OjpQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpCiAg
ICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpf
ZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpQdXNoQ29u
c3VtZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8g
KHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAg
ICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0
ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46OlB1c2hDb25zdW1lcl90aWUgKFQgKnRw
LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAg
ICAgICAgOiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpf
ZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+Ojp+
UHVzaENvbnN1bWVyX3RpZSAodm9pZCkKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+
cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKUE9BX1J0ZWNFdmVudENvbW06
OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlz
LT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENv
bW06OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAmb2JqKQp7CiAgaWYgKHRo
aXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAmb2JqOwogIHRoaXMt
PnJlbF8gPSAwOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVu
dENvbW06OlB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6
Qm9vbGVhbiByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwog
IHRoaXMtPnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBUPiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25z
dW1lcl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxfOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25z
dW1lcl90aWU8VD46Ol9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYikKewogIHRoaXMtPnJlbF8g
PSBiOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRy
ClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpfZGVmYXVsdF9QT0EgKENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIGlm
ICghQ09SQkE6OmlzX25pbCAodGhpcy0+cG9hXy5pbiAoKSkpCiAgICByZXR1cm4gUG9ydGFibGVT
ZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAodGhpcy0+cG9hXy5pbiAoKSk7CgogIHJldHVybiB0aGlz
LT5QdXNoQ29uc3VtZXI6Ol9kZWZhdWx0X1BPQSAoX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0FfUnRlY0V2ZW50Q29t
bTo6UHVzaENvbnN1bWVyX3RpZTxUPjo6cHVzaCAoCiAgICBjb25zdCBSdGVjRXZlbnRDb21tOjpF
dmVudFNldCAmIGRhdGEsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7
CiAgdGhpcy0+cHRyXy0+cHVzaCAoCmRhdGEsCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZl
bnRDb21tOjpQdXNoQ29uc3VtZXJfdGllPFQ+OjpkaXNjb25uZWN0X3B1c2hfY29uc3VtZXIgKAog
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
KQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRoaXMtPnB0cl8tPmRp
c2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK
ICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNo
U3VwcGxpZXJfdGllPFQ+OjpQdXNoU3VwcGxpZXJfdGllIChUICZ0KQogICAgICAgIDogcHRyXyAo
JnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAg
ICAgICByZWxfICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50
Q29tbTo6UHVzaFN1cHBsaWVyX3RpZTxUPjo6UHVzaFN1cHBsaWVyX3RpZSAoVCAmdCwgUG9ydGFi
bGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9h
XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxf
ICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q29tbTo6UHVz
aFN1cHBsaWVyX3RpZTxUPjo6UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFu
IHJlbGVhc2UpCiAgICAgICAgOiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNl
cnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+
OjpQdXNoU3VwcGxpZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9h
XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxf
IChyZWxlYXNlKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q29t
bTo6UHVzaFN1cHBsaWVyX3RpZTxUPjo6flB1c2hTdXBwbGllcl90aWUgKHZvaWQpCnsKICBpZiAo
dGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp
bmUgVCAqClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGllZF9vYmpl
Y3QgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu
bGluZSB2b2lkClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGllZF9v
YmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKICB0
aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfdGll
ZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKewogIGlmICh0aGlzLT5y
ZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gb2JqOwogIHRoaXMtPnJlbF8g
PSByZWxlYXNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIENPUkJBOjpCb29sZWFuClBP
QV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKHZvaWQpCnsK
ICByZXR1cm4gdGhpcy0+cmVsXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBP
QV9SdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpC
b29sZWFuIGIpCnsKICB0aGlzLT5yZWxfID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGlu
ZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0cgpQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy
X3RpZTxUPjo6X2RlZmF1bHRfUE9BIChDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUpCnsKICBpZiAoIUNPUkJBOjppc19uaWwgKHRoaXMtPnBvYV8uaW4g
KCkpKQogICAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMtPnBv
YV8uaW4gKCkpOwoKICByZXR1cm4gdGhpcy0+UHVzaFN1cHBsaWVyOjpfZGVmYXVsdF9QT0EgKF9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lCnZvaWQgUE9BX1J0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl90aWU8VD46OmRpc2Nvbm5l
Y3RfcHVzaF9zdXBwbGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkK
Cgp7CiAgdGhpcy0+cHRyXy0+ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9F
bnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KIyAxNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5o
IiAyCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVNfVC5jcHAiIDEKIyAyNSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDb21tU19ULmNwcCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1QuaCIgMQojIDI2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz
dmNzL1J0ZWNFdmVudENvbW1TX1QuY3BwIiAyCiMgMTYwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TX1Qu
aCIgMgojIDE3MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE3MiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDb21tU19ULmgiIDIKIyAzODggIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIgMgoKCiMgMSAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji
c3Zjcy9SdGVjRXZlbnRDb21tUy5pIiAxCiMgMzkxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1TLmgiIDIK
IyA0MDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29tbVMuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgNDAyICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENv
bW1TLmgiIDIKIyAyNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiIDIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNCYXNlUy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0Jhc2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VD
LmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3By
ZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL2NvcmJhLmgiIDEKIyAyNyAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
QmFzZUMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9zdmNfdXRpbHNfZXhwb3J0LmgiIDEKIyAzMyAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjQmFzZUMuaCIgMgojIDU3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5oIgpuYW1lc3BhY2UgUnRlY0Jh
c2UKewogIGVudW0gRGVwZW5kZW5jeV9UeXBlX3QKICB7CiAgICBPTkVfV0FZX0NBTEwsCiAgICBU
V09fV0FZX0NBTEwKICB9OwoKICB0eXBlZGVmIERlcGVuZGVuY3lfVHlwZV90ICZEZXBlbmRlbmN5
X1R5cGVfdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlcGVuZGVuY3lf
VHlwZV90OwoKICB0eXBlZGVmIENPUkJBOjpMb25nIGhhbmRsZV90OwogIHR5cGVkZWYgQ09SQkE6
Okxvbmdfb3V0IGhhbmRsZV90X291dDsKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNf
aGFuZGxlX3Q7CgogIHN0cnVjdCBEZXBlbmRlbmN5X0luZm87CiAgY2xhc3MgRGVwZW5kZW5jeV9J
bmZvX3ZhcjsKCiAgc3RydWN0IERlcGVuZGVuY3lfSW5mbwogIHsKCgogICAgdHlwZWRlZiBEZXBl
bmRlbmN5X0luZm9fdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz
dHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCBkZXBlbmRl
bmN5X3R5cGU7CiAgICBDT1JCQTo6TG9uZyBudW1iZXJfb2ZfY2FsbHM7CiAgICBSdGVjQmFzZTo6
aGFuZGxlX3QgcnRfaW5mbzsKCiAgfTsKCiAgY2xhc3MgRGVwZW5kZW5jeV9JbmZvX3ZhcgogIHsK
ICBwdWJsaWM6CiAgICBEZXBlbmRlbmN5X0luZm9fdmFyICh2b2lkKTsKICAgIERlcGVuZGVuY3lf
SW5mb192YXIgKERlcGVuZGVuY3lfSW5mbyAqKTsKICAgIERlcGVuZGVuY3lfSW5mb192YXIgKGNv
bnN0IERlcGVuZGVuY3lfSW5mb192YXIgJik7CgogICAgRGVwZW5kZW5jeV9JbmZvX3ZhciAoY29u
c3QgRGVwZW5kZW5jeV9JbmZvICYpOwogICAgfkRlcGVuZGVuY3lfSW5mb192YXIgKHZvaWQpOwoK
ICAgIERlcGVuZGVuY3lfSW5mb192YXIgJm9wZXJhdG9yPSAoRGVwZW5kZW5jeV9JbmZvICopOwog
ICAgRGVwZW5kZW5jeV9JbmZvX3ZhciAmb3BlcmF0b3I9IChjb25zdCBEZXBlbmRlbmN5X0luZm9f
dmFyICYpOwoKICAgIERlcGVuZGVuY3lfSW5mb192YXIgJm9wZXJhdG9yPSAoY29uc3QgRGVwZW5k
ZW5jeV9JbmZvICYpOwogICAgRGVwZW5kZW5jeV9JbmZvICpvcGVyYXRvci0+ICh2b2lkKTsKICAg
IGNvbnN0IERlcGVuZGVuY3lfSW5mbyAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3Bl
cmF0b3IgY29uc3QgRGVwZW5kZW5jeV9JbmZvICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIERlcGVu
ZGVuY3lfSW5mbyAmKCk7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5X0luZm8gJigpIGNvbnN0OwoK
CiAgICBjb25zdCBEZXBlbmRlbmN5X0luZm8gJmluICh2b2lkKSBjb25zdDsKICAgIERlcGVuZGVu
Y3lfSW5mbyAmaW5vdXQgKHZvaWQpOwogICAgRGVwZW5kZW5jeV9JbmZvICZvdXQgKHZvaWQpOwog
ICAgRGVwZW5kZW5jeV9JbmZvIF9yZXRuICh2b2lkKTsKICAgIERlcGVuZGVuY3lfSW5mbyAqcHRy
ICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3lfSW5mbyAqcHRyXzsKICB9
OwoKICB0eXBlZGVmIERlcGVuZGVuY3lfSW5mbyAmRGVwZW5kZW5jeV9JbmZvX291dDsKCiAgZXh0
ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RlcGVuZGVuY3lfSW5mbzsKCiAgdHlwZWRlZiBD
T1JCQTo6TG9uZyBPU19Qcmlvcml0eTsKICB0eXBlZGVmIENPUkJBOjpMb25nX291dCBPU19Qcmlv
cml0eV9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX09TX1ByaW9yaXR5OwoK
ICB0eXBlZGVmIENPUkJBOjpMb25nIFByZWVtcHRpb25fU3VicHJpb3JpdHlfdDsKICB0eXBlZGVm
IENPUkJBOjpMb25nX291dCBQcmVlbXB0aW9uX1N1YnByaW9yaXR5X3Rfb3V0OwogIGV4dGVybiBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19QcmVlbXB0aW9uX1N1YnByaW9yaXR5X3Q7CgogIHR5cGVk
ZWYgQ09SQkE6OkxvbmcgUHJlZW1wdGlvbl9Qcmlvcml0eV90OwogIHR5cGVkZWYgQ09SQkE6Okxv
bmdfb3V0IFByZWVtcHRpb25fUHJpb3JpdHlfdF9vdXQ7CiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29k
ZV9wdHIgX3RjX1ByZWVtcHRpb25fUHJpb3JpdHlfdDsKCgp9CgoKICAgICAgICAgICAgICAgICAg
ICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9U
eXBlX3QpOwogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAo
Y29uc3QgQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9UeXBlX3QgJik7CiAgICAg
ICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRl
Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmKTsKICAgICAgICAgICAgICAgICAgICAgdm9pZCBvcGVy
YXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvKik7CiAgICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm8gKiYpOwogICAgICAgICAgICAgICAgICAg
ICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBS
dGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvIComKTsKIyAxNjAgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiCiMg
MSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv
b3Jic3Zjcy9SdGVjQmFzZUMuaSIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlQy5pIgppbmxpbmUKUnRl
Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXI6OkRlcGVuZGVuY3lfSW5mb192YXIgKHZvaWQpCiAg
OiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpEZXBl
bmRlbmN5X0luZm9fdmFyIChEZXBlbmRlbmN5X0luZm8gKnApCiAgOiBwdHJfIChwKQp7fQoKaW5s
aW5lClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpEZXBlbmRlbmN5X0luZm9fdmFyIChj
b25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyICZwKQp7CiAgaWYgKHAucHRyXykK
ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0lu
Zm8gKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJf
ID0gMDsKfQoKCmlubGluZQpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6RGVwZW5kZW5j
eV9JbmZvX3ZhciAoY29uc3QgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvICZwKQp7CiAgZG8g
eyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAocCk7
IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsg
cmV0dXJuOyB9IH0gd2hpbGUgKDApOwp9CgppbmxpbmUKUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5m
b192YXI6On5EZXBlbmRlbmN5X0luZm9fdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87
Cn0KCmlubGluZSBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3ZhciAmClJ0ZWNCYXNlOjpEZXBl
bmRlbmN5X0luZm9fdmFyOjpvcGVyYXRvcj0gKERlcGVuZGVuY3lfSW5mbyAqcCkKewogIGRlbGV0
ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
IDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXIgJgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9J
bmZvX3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFy
ICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8gPT0gMCkKICAg
ICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRoaXMtPnB0cl8g
PSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIERlcGVuZGVuY3lf
SW5mbyAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3IERlcGVuZGVuY3lfSW5mbyAoKnAucHRy
Xyk7CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgRGVwZW5kZW5jeV9JbmZvICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAgICAgZGVl
cF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1wOwogICAg
ICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9
CgogIHJldHVybiAqdGhpczsKfQoKCmlubGluZSBSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zh
ciAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl
Y0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmcCkKewogIGlmICh0aGlzLT5wdHJfICE9ICZwKQogIHsK
ICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6
UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAocCk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7
ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuICp0aGlzOyB9IH0gd2hpbGUgKDAp
OwogIH0KICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRl
bmN5X0luZm8gKgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6b3BlcmF0b3ItPiAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjQmFzZTo6RGVw
ZW5kZW5jeV9JbmZvICoKUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mb192YXI6Om9wZXJhdG9yLT4g
KHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNCYXNlOjpEZXBlbmRl
bmN5X0luZm9fdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm8g
JigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjQmFzZTo6RGVw
ZW5kZW5jeV9JbmZvX3Zhcjo6b3BlcmF0b3IgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvICYo
KQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0Jhc2U6OkRlcGVuZGVuY3lf
SW5mb192YXI6Om9wZXJhdG9yIDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAmKCkgY29uc3QK
ewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0Jhc2U6OkRlcGVu
ZGVuY3lfSW5mbyAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjppbiAodm9pZCkgY29u
c3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0Jhc2U6OkRlcGVuZGVu
Y3lfSW5mbyAmClJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjppbm91dCAodm9pZCkKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNCYXNlOjpEZXBlbmRlbmN5X0lu
Zm8gJgpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvX3Zhcjo6b3V0ICh2b2lkKQp7CiAgcmV0dXJu
ICp0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjQmFzZTo6RGVwZW5kZW5jeV9JbmZvClJ0ZWNC
YXNlOjpEZXBlbmRlbmN5X0luZm9fdmFyOjpfcmV0biAodm9pZCkKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lIDo6UnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyAqClJ0ZWNCYXNlOjpE
ZXBlbmRlbmN5X0luZm9fdmFyOjpwdHIgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0
cm0sIGNvbnN0IFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCAmX3Rhb19lbnVtdmFsKQp7CiAg
Q09SQkE6OlVMb25nIF90YW9fdGVtcCA9IF90YW9fZW51bXZhbDsKICByZXR1cm4gc3RybSA8PCBf
dGFvX3RlbXA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRD
RFIgJnN0cm0sIFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdCAmX3Rhb19lbnVtdmFsKQp7CiAg
Q09SQkE6OlVMb25nIF90YW9fdGVtcCA9IDA7CiAgQ09SQkE6OkJvb2xlYW4gX3Rhb19yZXN1bHQg
PSBzdHJtID4+IF90YW9fdGVtcDsKCiAgaWYgKF90YW9fcmVzdWx0ID09IDEpCiAgICB7CiAgICAg
IF90YW9fZW51bXZhbCA9IHN0YXRpY19jYXN0PFJ0ZWNCYXNlOjpEZXBlbmRlbmN5X1R5cGVfdD4g
KF90YW9fdGVtcCk7CiAgICB9CgogIHJldHVybiBfdGFvX3Jlc3VsdDsKfQoKaW5saW5lIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNCYXNl
OjpEZXBlbmRlbmN5X0luZm8gJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPDwg
X3Rhb19hZ2dyZWdhdGUuZGVwZW5kZW5jeV90eXBlKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dy
ZWdhdGUubnVtYmVyX29mX2NhbGxzKSAmJgogICAgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUucnRf
aW5mbykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlubGluZSBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJnN0cm0sIFJ0ZWNCYXNlOjpE
ZXBlbmRlbmN5X0luZm8gJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rh
b19hZ2dyZWdhdGUuZGVwZW5kZW5jeV90eXBlKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdh
dGUubnVtYmVyX29mX2NhbGxzKSAmJgogICAgKHN0cm0gPj4gX3Rhb19hZ2dyZWdhdGUucnRfaW5m
bykKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KIyAxNjEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0Jhc2VDLmgiIDIKIyAxNzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VDLmgiCiMgMSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDE3MiAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S
dGVjQmFzZUMuaCIgMgojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZl
ci9Qb3J0YWJsZVNlcnZlci5oIiAxCiMgMzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2Vy
dmVyL1NlcnZhbnRfQmFzZS5oIiAxCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vdGFvL1BvcnRhYmxlU2Vy
dmVyL0NvbGxvY2F0ZWRfT2JqZWN0LmgiIDEKIyAzNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFi
bGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzcgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jh
c2VTLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vdGFvL1BvcnRhYmxlU2VydmVyL0RpcmVjdF9PYmplY3RfUHJveHlfSW1wbC5oIiAxCiMgMzgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvUnRlY0Jhc2VTLmgiIDIKIyA0OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIKbmFtZXNwYWNlIFBP
QV9SdGVjQmFzZQp7Cn0KCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuaCIgMQojIDI1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNCYXNlU19ULmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL3ByZS5oIiAxCiMgMjYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuaCIgMgojIDM1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNCYXNlU19ULmgiCm5hbWVzcGFjZSBQT0FfUnRlY0Jhc2UKewp9CgoKCgoKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNCYXNlU19ULmkiIDEKIyA0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVNfVC5oIiAyCgoKCgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0Jhc2VTX1QuY3BwIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTX1QuY3BwIgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0Jhc2VTX1QuaCIgMQojIDI2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNCYXNlU19ULmNwcCIgMgojIDQ5ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNCYXNlU19ULmgiIDIKIyA2MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVNfVC5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyA2MSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjQmFzZVNfVC5oIiAyCiMgNTUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0Jhc2VTLmgiIDIKCgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0Jhc2VTLmkiIDEKIyA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDY4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNC
YXNlUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2Fj
ZS9wb3N0LmgiIDEKIyA2OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjQmFzZVMuaCIgMgojIDI4ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu
dENoYW5uZWxBZG1pblMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIiAx
CiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF
dmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDI3ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5u
ZWxBZG1pbkMuaCIgMgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9ldmVudF9leHBvcnQuaCIgMQojIDMz
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q29t
bUMuaCIgMQojIDM0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMgojIDEgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0Jhc2VDLmgiIDEKIyAzNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiIDIKIyA1
OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv
b3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCm5hbWVzcGFjZSBSdGVjRXZlbnRDaGFu
bmVsQWRtaW4KewoKCgoKICBjbGFzcyBBbHJlYWR5Q29ubmVjdGVkIDogcHVibGljIENPUkJBOjpV
c2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAgICBBbHJlYWR5Q29ubmVjdGVkICh2b2lkKTsK
CgogICAgQWxyZWFkeUNvbm5lY3RlZCAoY29uc3QgQWxyZWFkeUNvbm5lY3RlZCAmKTsKCgogICAg
fkFscmVhZHlDb25uZWN0ZWQgKHZvaWQpOwoKCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0
cnVjdG9yICh2b2lkKik7CgogICAgQWxyZWFkeUNvbm5lY3RlZCAmb3BlcmF0b3I9IChjb25zdCBB
bHJlYWR5Q29ubmVjdGVkICYpOwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAg
IHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lk
IF90YW9fZGVjb2RlICgKICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJgogICAgICApOwoKICAgIHN0YXRpYyBBbHJlYWR5Q29ubmVjdGVkICpfZG93bmNh
c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAq
X2FsbG9jICh2b2lkKTsKICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9p
ZCkgY29uc3Q7CiAgfTsKCmV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19BbHJlYWR5Q29u
bmVjdGVkOwojIDExMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgVHlw
ZUVycm9yIDogcHVibGljIENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgewogIHB1YmxpYzoKCiAgICBU
eXBlRXJyb3IgKHZvaWQpOwoKCiAgICBUeXBlRXJyb3IgKGNvbnN0IFR5cGVFcnJvciAmKTsKCgog
ICAgflR5cGVFcnJvciAodm9pZCk7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0
b3IgKHZvaWQqKTsKCiAgICBUeXBlRXJyb3IgJm9wZXJhdG9yPSAoY29uc3QgVHlwZUVycm9yICYp
OwoKICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgIHZpcnR1YWwgdm9pZCBfdGFv
X2VuY29kZSAoCiAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmCiAgICAgICkgY29uc3Q7CgogICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAg
ICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAp
OwoKICAgIHN0YXRpYyBUeXBlRXJyb3IgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsK
CgoKICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgdmlydHVh
bCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICB9OwoKZXh0ZXJuIENP
UkJBOjpUeXBlQ29kZV9wdHIgX3RjX1R5cGVFcnJvcjsKCgoKCiAgc3RydWN0IERlcGVuZGVuY3k7
CiAgY2xhc3MgRGVwZW5kZW5jeV92YXI7CgogIHN0cnVjdCBEZXBlbmRlbmN5CiAgewoKCiAgICB0
eXBlZGVmIERlcGVuZGVuY3lfdmFyIF92YXJfdHlwZTsKCgogICAgc3RhdGljIHZvaWQgX3Rhb19h
bnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNFdmVudENvbW06OkV2ZW50IGV2ZW50Owog
ICAgUnRlY0Jhc2U6OmhhbmRsZV90IHJ0X2luZm87CgogIH07CgogIGNsYXNzIERlcGVuZGVuY3lf
dmFyCiAgewogIHB1YmxpYzoKICAgIERlcGVuZGVuY3lfdmFyICh2b2lkKTsKICAgIERlcGVuZGVu
Y3lfdmFyIChEZXBlbmRlbmN5ICopOwogICAgRGVwZW5kZW5jeV92YXIgKGNvbnN0IERlcGVuZGVu
Y3lfdmFyICYpOwogICAgfkRlcGVuZGVuY3lfdmFyICh2b2lkKTsKCiAgICBEZXBlbmRlbmN5X3Zh
ciAmb3BlcmF0b3I9IChEZXBlbmRlbmN5ICopOwogICAgRGVwZW5kZW5jeV92YXIgJm9wZXJhdG9y
PSAoY29uc3QgRGVwZW5kZW5jeV92YXIgJik7CiAgICBEZXBlbmRlbmN5ICpvcGVyYXRvci0+ICh2
b2lkKTsKICAgIGNvbnN0IERlcGVuZGVuY3kgKm9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAg
IG9wZXJhdG9yIGNvbnN0IERlcGVuZGVuY3kgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgRGVwZW5k
ZW5jeSAmKCk7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5ICYoKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBEZXBlbmRlbmN5IComKCk7CgoKICAgIGNvbnN0IERlcGVuZGVuY3kgJmluICh2b2lkKSBjb25z
dDsKICAgIERlcGVuZGVuY3kgJmlub3V0ICh2b2lkKTsKICAgIERlcGVuZGVuY3kgKiZvdXQgKHZv
aWQpOwogICAgRGVwZW5kZW5jeSAqX3JldG4gKHZvaWQpOwogICAgRGVwZW5kZW5jeSAqcHRyICh2
b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3kgKnB0cl87CiAgfTsKCiAgY2xh
c3MgRGVwZW5kZW5jeV9vdXQKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeV9vdXQgKERlcGVu
ZGVuY3kgKiYpOwogICAgRGVwZW5kZW5jeV9vdXQgKERlcGVuZGVuY3lfdmFyICYpOwogICAgRGVw
ZW5kZW5jeV9vdXQgKGNvbnN0IERlcGVuZGVuY3lfb3V0ICYpOwogICAgRGVwZW5kZW5jeV9vdXQg
Jm9wZXJhdG9yPSAoY29uc3QgRGVwZW5kZW5jeV9vdXQgJik7CiAgICBEZXBlbmRlbmN5X291dCAm
b3BlcmF0b3I9IChEZXBlbmRlbmN5ICopOwogICAgb3BlcmF0b3IgRGVwZW5kZW5jeSAqJigpOwog
ICAgRGVwZW5kZW5jeSAqJnB0ciAodm9pZCk7CiAgICBEZXBlbmRlbmN5ICpvcGVyYXRvci0+ICh2
b2lkKTsKCiAgcHJpdmF0ZToKICAgIERlcGVuZGVuY3kgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0
b3I9IChjb25zdCBEZXBlbmRlbmN5X3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6OlR5cGVD
b2RlX3B0ciBfdGNfRGVwZW5kZW5jeTsKCgoKCgoKCiAgY2xhc3MgX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQKICAgIDogcHVibGljIFRB
T19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZQogIHsKICBwdWJsaWM6CgogICAgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQgKHZvaWQpOwog
ICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVu
Y3lTZXQgKENPUkJBOjpVTG9uZyBtYXhpbXVtKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0ICgKICAgICAgICBDT1JCQTo6VUxv
bmcgbWF4aW11bSwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogICAgICAgIERlcGVuZGVu
Y3kgKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsKICAg
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5
U2V0ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFu
bmVsQWRtaW5fRGVwZW5kZW5jeVNldCAmcmhzCiAgICAgICk7CiAgICBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAmb3BlcmF0b3I9ICgK
ICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt
aW5fRGVwZW5kZW5jeVNldCAmcmhzCiAgICAgICk7CiAgICB2aXJ0dWFsIH5fVEFPX1VuYm91bmRl
ZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAodm9pZCk7CgoK
ICAgIERlcGVuZGVuY3kgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKTsKICAgIGNvbnN0IERl
cGVuZGVuY3kgJm9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpKSBjb25zdDsKCgogICAgc3RhdGlj
IERlcGVuZGVuY3kgKmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSk7CiAgICBzdGF0aWMgdm9p
ZCBmcmVlYnVmIChEZXBlbmRlbmN5ICpidWZmZXIpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX2FsbG9j
YXRlX2J1ZmZlciAoQ09SQkE6OlVMb25nIGxlbmd0aCk7CiAgICB2aXJ0dWFsIHZvaWQgX2RlYWxs
b2NhdGVfYnVmZmVyICh2b2lkKTsKICAgIERlcGVuZGVuY3kgKmdldF9idWZmZXIgKENPUkJBOjpC
b29sZWFuIG9ycGhhbiA9IDApOwogICAgY29uc3QgRGVwZW5kZW5jeSAqZ2V0X2J1ZmZlciAodm9p
ZCkgY29uc3Q7CiAgICB2b2lkIHJlcGxhY2UgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXgsCiAg
ICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBEZXBlbmRlbmN5ICpkYXRhLAogICAg
ICAgIENPUkJBOjpCb29sZWFuIHJlbGVhc2UKICAgICAgKTsKICB9OwojIDI3NiAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgRGVwZW5kZW5jeVNldDsKICBjbGFzcyBEZXBl
bmRlbmN5U2V0X3ZhcjsKCgoKCgogIGNsYXNzIERlcGVuZGVuY3lTZXQgOiBwdWJsaWMKCiAgX1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQK
CgoKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeVNldCAodm9pZCk7CiAgICBEZXBlbmRlbmN5
U2V0IChDT1JCQTo6VUxvbmcgbWF4KTsKICAgIERlcGVuZGVuY3lTZXQgKAogICAgICAgIENPUkJB
OjpVTG9uZyBtYXgsCiAgICAgICAgQ09SQkE6OlVMb25nIGxlbmd0aCwKICAgICAgICBEZXBlbmRl
bmN5ICpidWZmZXIsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSA9IDAKICAgICAgKTsK
ICAgIERlcGVuZGVuY3lTZXQgKGNvbnN0IERlcGVuZGVuY3lTZXQgJik7CiAgICB+RGVwZW5kZW5j
eVNldCAodm9pZCk7CiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7
CgoKICAgIHR5cGVkZWYgRGVwZW5kZW5jeVNldF92YXIgX3Zhcl90eXBlOwoKCgogIH07CiMgMzIw
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBEZXBlbmRlbmN5U2V0X3Zh
cgogIHsKICBwdWJsaWM6CiAgICBEZXBlbmRlbmN5U2V0X3ZhciAodm9pZCk7CiAgICBEZXBlbmRl
bmN5U2V0X3ZhciAoRGVwZW5kZW5jeVNldCAqKTsKICAgIERlcGVuZGVuY3lTZXRfdmFyIChjb25z
dCBEZXBlbmRlbmN5U2V0X3ZhciAmKTsKICAgIH5EZXBlbmRlbmN5U2V0X3ZhciAodm9pZCk7Cgog
ICAgRGVwZW5kZW5jeVNldF92YXIgJm9wZXJhdG9yPSAoRGVwZW5kZW5jeVNldCAqKTsKICAgIERl
cGVuZGVuY3lTZXRfdmFyICZvcGVyYXRvcj0gKGNvbnN0IERlcGVuZGVuY3lTZXRfdmFyICYpOwog
ICAgRGVwZW5kZW5jeVNldCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBEZXBlbmRlbmN5
U2V0ICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBEZXBlbmRl
bmN5U2V0ICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIERlcGVuZGVuY3lTZXQgJigpOwogICAgb3Bl
cmF0b3IgRGVwZW5kZW5jeVNldCAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBEZXBlbmRlbmN5U2V0
IComKCk7CgogICAgRGVwZW5kZW5jeSAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCk7
CiAgICBjb25zdCBEZXBlbmRlbmN5ICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KSBj
b25zdDsKCgogICAgY29uc3QgRGVwZW5kZW5jeVNldCAmaW4gKHZvaWQpIGNvbnN0OwogICAgRGVw
ZW5kZW5jeVNldCAmaW5vdXQgKHZvaWQpOwogICAgRGVwZW5kZW5jeVNldCAqJm91dCAodm9pZCk7
CiAgICBEZXBlbmRlbmN5U2V0ICpfcmV0biAodm9pZCk7CiAgICBEZXBlbmRlbmN5U2V0ICpwdHIg
KHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgRGVwZW5kZW5jeVNldCAqcHRyXzsKICB9Owoj
IDM1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgRGVwZW5kZW5jeVNl
dF9vdXQKICB7CiAgcHVibGljOgogICAgRGVwZW5kZW5jeVNldF9vdXQgKERlcGVuZGVuY3lTZXQg
KiYpOwogICAgRGVwZW5kZW5jeVNldF9vdXQgKERlcGVuZGVuY3lTZXRfdmFyICYpOwogICAgRGVw
ZW5kZW5jeVNldF9vdXQgKGNvbnN0IERlcGVuZGVuY3lTZXRfb3V0ICYpOwogICAgRGVwZW5kZW5j
eVNldF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgRGVwZW5kZW5jeVNldF9vdXQgJik7CiAgICBEZXBl
bmRlbmN5U2V0X291dCAmb3BlcmF0b3I9IChEZXBlbmRlbmN5U2V0ICopOwogICAgb3BlcmF0b3Ig
RGVwZW5kZW5jeVNldCAqJigpOwogICAgRGVwZW5kZW5jeVNldCAqJnB0ciAodm9pZCk7CiAgICBE
ZXBlbmRlbmN5U2V0ICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIERlcGVuZGVuY3kgJiBvcGVyYXRv
cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpOwoKICBwcml2YXRlOgogICAgRGVwZW5kZW5jeVNldCAq
JnB0cl87CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IERlcGVuZGVuY3lTZXRfdmFyICYpOwog
IH07CgoKCgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19EZXBlbmRlbmN5U2V0OwoK
ICBzdHJ1Y3QgQ29uc3VtZXJRT1M7CiAgY2xhc3MgQ29uc3VtZXJRT1NfdmFyOwoKICBzdHJ1Y3Qg
Q29uc3VtZXJRT1MKICB7CgoKICAgIHR5cGVkZWYgQ29uc3VtZXJRT1NfdmFyIF92YXJfdHlwZTsK
CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCBkZXBlbmRlbmNpZXM7CiAgICBDT1JCQTo6
Qm9vbGVhbiBpc19nYXRld2F5OwoKICB9OwoKICBjbGFzcyBDb25zdW1lclFPU192YXIKICB7CiAg
cHVibGljOgogICAgQ29uc3VtZXJRT1NfdmFyICh2b2lkKTsKICAgIENvbnN1bWVyUU9TX3ZhciAo
Q29uc3VtZXJRT1MgKik7CiAgICBDb25zdW1lclFPU192YXIgKGNvbnN0IENvbnN1bWVyUU9TX3Zh
ciAmKTsKICAgIH5Db25zdW1lclFPU192YXIgKHZvaWQpOwoKICAgIENvbnN1bWVyUU9TX3ZhciAm
b3BlcmF0b3I9IChDb25zdW1lclFPUyAqKTsKICAgIENvbnN1bWVyUU9TX3ZhciAmb3BlcmF0b3I9
IChjb25zdCBDb25zdW1lclFPU192YXIgJik7CiAgICBDb25zdW1lclFPUyAqb3BlcmF0b3ItPiAo
dm9pZCk7CiAgICBjb25zdCBDb25zdW1lclFPUyAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7Cgog
ICAgb3BlcmF0b3IgY29uc3QgQ29uc3VtZXJRT1MgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgQ29u
c3VtZXJRT1MgJigpOwogICAgb3BlcmF0b3IgQ29uc3VtZXJRT1MgJigpIGNvbnN0OwoKICAgIG9w
ZXJhdG9yIENvbnN1bWVyUU9TIComKCk7CgoKICAgIGNvbnN0IENvbnN1bWVyUU9TICZpbiAodm9p
ZCkgY29uc3Q7CiAgICBDb25zdW1lclFPUyAmaW5vdXQgKHZvaWQpOwogICAgQ29uc3VtZXJRT1Mg
KiZvdXQgKHZvaWQpOwogICAgQ29uc3VtZXJRT1MgKl9yZXRuICh2b2lkKTsKICAgIENvbnN1bWVy
UU9TICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJRT1MgKnB0cl87
CiAgfTsKCiAgY2xhc3MgQ29uc3VtZXJRT1Nfb3V0CiAgewogIHB1YmxpYzoKICAgIENvbnN1bWVy
UU9TX291dCAoQ29uc3VtZXJRT1MgKiYpOwogICAgQ29uc3VtZXJRT1Nfb3V0IChDb25zdW1lclFP
U192YXIgJik7CiAgICBDb25zdW1lclFPU19vdXQgKGNvbnN0IENvbnN1bWVyUU9TX291dCAmKTsK
ICAgIENvbnN1bWVyUU9TX291dCAmb3BlcmF0b3I9IChjb25zdCBDb25zdW1lclFPU19vdXQgJik7
CiAgICBDb25zdW1lclFPU19vdXQgJm9wZXJhdG9yPSAoQ29uc3VtZXJRT1MgKik7CiAgICBvcGVy
YXRvciBDb25zdW1lclFPUyAqJigpOwogICAgQ29uc3VtZXJRT1MgKiZwdHIgKHZvaWQpOwogICAg
Q29uc3VtZXJRT1MgKm9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJR
T1MgKiZwdHJfOwoKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDb25zdW1lclFPU192YXIgJik7
CiAgfTsKCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnN1bWVyUU9TOwoKICBz
dHJ1Y3QgUHVibGljYXRpb247CiAgY2xhc3MgUHVibGljYXRpb25fdmFyOwoKICBzdHJ1Y3QgUHVi
bGljYXRpb24KICB7CgoKICAgIHR5cGVkZWYgUHVibGljYXRpb25fdmFyIF92YXJfdHlwZTsKCgog
ICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgIFJ0ZWNFdmVu
dENvbW06OkV2ZW50IGV2ZW50OwogICAgUnRlY0Jhc2U6OkRlcGVuZGVuY3lfSW5mbyBkZXBlbmRl
bmN5X2luZm87CgogIH07CgogIGNsYXNzIFB1YmxpY2F0aW9uX3ZhcgogIHsKICBwdWJsaWM6CiAg
ICBQdWJsaWNhdGlvbl92YXIgKHZvaWQpOwogICAgUHVibGljYXRpb25fdmFyIChQdWJsaWNhdGlv
biAqKTsKICAgIFB1YmxpY2F0aW9uX3ZhciAoY29uc3QgUHVibGljYXRpb25fdmFyICYpOwogICAg
flB1YmxpY2F0aW9uX3ZhciAodm9pZCk7CgogICAgUHVibGljYXRpb25fdmFyICZvcGVyYXRvcj0g
KFB1YmxpY2F0aW9uICopOwogICAgUHVibGljYXRpb25fdmFyICZvcGVyYXRvcj0gKGNvbnN0IFB1
YmxpY2F0aW9uX3ZhciAmKTsKICAgIFB1YmxpY2F0aW9uICpvcGVyYXRvci0+ICh2b2lkKTsKICAg
IGNvbnN0IFB1YmxpY2F0aW9uICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBjb25zdCBQdWJsaWNhdGlvbiAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBQdWJsaWNhdGlvbiAm
KCk7CiAgICBvcGVyYXRvciBQdWJsaWNhdGlvbiAmKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgUHVi
bGljYXRpb24gKiYoKTsKCgogICAgY29uc3QgUHVibGljYXRpb24gJmluICh2b2lkKSBjb25zdDsK
ICAgIFB1YmxpY2F0aW9uICZpbm91dCAodm9pZCk7CiAgICBQdWJsaWNhdGlvbiAqJm91dCAodm9p
ZCk7CiAgICBQdWJsaWNhdGlvbiAqX3JldG4gKHZvaWQpOwogICAgUHVibGljYXRpb24gKnB0ciAo
dm9pZCkgY29uc3Q7CgogIHByaXZhdGU6CiAgICBQdWJsaWNhdGlvbiAqcHRyXzsKICB9OwoKICBj
bGFzcyBQdWJsaWNhdGlvbl9vdXQKICB7CiAgcHVibGljOgogICAgUHVibGljYXRpb25fb3V0IChQ
dWJsaWNhdGlvbiAqJik7CiAgICBQdWJsaWNhdGlvbl9vdXQgKFB1YmxpY2F0aW9uX3ZhciAmKTsK
ICAgIFB1YmxpY2F0aW9uX291dCAoY29uc3QgUHVibGljYXRpb25fb3V0ICYpOwogICAgUHVibGlj
YXRpb25fb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFB1YmxpY2F0aW9uX291dCAmKTsKICAgIFB1Ymxp
Y2F0aW9uX291dCAmb3BlcmF0b3I9IChQdWJsaWNhdGlvbiAqKTsKICAgIG9wZXJhdG9yIFB1Ymxp
Y2F0aW9uIComKCk7CiAgICBQdWJsaWNhdGlvbiAqJnB0ciAodm9pZCk7CiAgICBQdWJsaWNhdGlv
biAqb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQdWJsaWNhdGlvbiAqJnB0cl87
CgogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFB1YmxpY2F0aW9uX3ZhciAmKTsKICB9OwoKICBl
eHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUHVibGljYXRpb247CgoKCgoKCgogIGNsYXNz
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlv
blNldAogICAgOiBwdWJsaWMgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlCiAgewogIHB1Ymxp
YzoKCiAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi
bGljYXRpb25TZXQgKHZvaWQpOwogICAgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50
Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSk7CiAgICBf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25T
ZXQgKAogICAgICAgIENPUkJBOjpVTG9uZyBtYXhpbXVtLAogICAgICAgIENPUkJBOjpVTG9uZyBs
ZW5ndGgsCiAgICAgICAgUHVibGljYXRpb24gKmRhdGEsCiAgICAgICAgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZSA9IDAKICAgICAgKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAoCiAgICAgICAgY29uc3QgX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0ICZyaHMKICAg
ICAgKTsKICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9Q
dWJsaWNhdGlvblNldCAmb3BlcmF0b3I9ICgKICAgICAgICBjb25zdCBfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQgJnJocwogICAgICAp
OwogICAgdmlydHVhbCB+X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFk
bWluX1B1YmxpY2F0aW9uU2V0ICh2b2lkKTsKCgogICAgUHVibGljYXRpb24gJm9wZXJhdG9yW10g
KENPUkJBOjpVTG9uZyBpKTsKICAgIGNvbnN0IFB1YmxpY2F0aW9uICZvcGVyYXRvcltdIChDT1JC
QTo6VUxvbmcgaSkgY29uc3Q7CgoKICAgIHN0YXRpYyBQdWJsaWNhdGlvbiAqYWxsb2NidWYgKENP
UkJBOjpVTG9uZyBzaXplKTsKICAgIHN0YXRpYyB2b2lkIGZyZWVidWYgKFB1YmxpY2F0aW9uICpi
dWZmZXIpOwoKCiAgICB2aXJ0dWFsIHZvaWQgX2FsbG9jYXRlX2J1ZmZlciAoQ09SQkE6OlVMb25n
IGxlbmd0aCk7CiAgICB2aXJ0dWFsIHZvaWQgX2RlYWxsb2NhdGVfYnVmZmVyICh2b2lkKTsKICAg
IFB1YmxpY2F0aW9uICpnZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4gPSAwKTsKICAg
IGNvbnN0IFB1YmxpY2F0aW9uICpnZXRfYnVmZmVyICh2b2lkKSBjb25zdDsKICAgIHZvaWQgcmVw
bGFjZSAoCiAgICAgICAgQ09SQkE6OlVMb25nIG1heCwKICAgICAgICBDT1JCQTo6VUxvbmcgbGVu
Z3RoLAogICAgICAgIFB1YmxpY2F0aW9uICpkYXRhLAogICAgICAgIENPUkJBOjpCb29sZWFuIHJl
bGVhc2UKICAgICAgKTsKICB9OwojIDU3MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi
CiAgY2xhc3MgUHVibGljYXRpb25TZXQ7CiAgY2xhc3MgUHVibGljYXRpb25TZXRfdmFyOwoKCgoK
CiAgY2xhc3MgUHVibGljYXRpb25TZXQgOiBwdWJsaWMKCiAgX1RBT19VbmJvdW5kZWRfU2VxdWVu
Y2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0CgoKCiAgewogIHB1YmxpYzoK
ICAgIFB1YmxpY2F0aW9uU2V0ICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxv
bmcgbWF4KTsKICAgIFB1YmxpY2F0aW9uU2V0ICgKICAgICAgICBDT1JCQTo6VUxvbmcgbWF4LAog
ICAgICAgIENPUkJBOjpVTG9uZyBsZW5ndGgsCiAgICAgICAgUHVibGljYXRpb24gKmJ1ZmZlciwK
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlID0gMAogICAgICApOwogICAgUHVibGljYXRp
b25TZXQgKGNvbnN0IFB1YmxpY2F0aW9uU2V0ICYpOwogICAgflB1YmxpY2F0aW9uU2V0ICh2b2lk
KTsKICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCgogICAgdHlw
ZWRlZiBQdWJsaWNhdGlvblNldF92YXIgX3Zhcl90eXBlOwoKCgogIH07CiMgNjE3ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBQdWJsaWNhdGlvblNldF92YXIKICB7CiAg
cHVibGljOgogICAgUHVibGljYXRpb25TZXRfdmFyICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0
X3ZhciAoUHVibGljYXRpb25TZXQgKik7CiAgICBQdWJsaWNhdGlvblNldF92YXIgKGNvbnN0IFB1
YmxpY2F0aW9uU2V0X3ZhciAmKTsKICAgIH5QdWJsaWNhdGlvblNldF92YXIgKHZvaWQpOwoKICAg
IFB1YmxpY2F0aW9uU2V0X3ZhciAmb3BlcmF0b3I9IChQdWJsaWNhdGlvblNldCAqKTsKICAgIFB1
YmxpY2F0aW9uU2V0X3ZhciAmb3BlcmF0b3I9IChjb25zdCBQdWJsaWNhdGlvblNldF92YXIgJik7
CiAgICBQdWJsaWNhdGlvblNldCAqb3BlcmF0b3ItPiAodm9pZCk7CiAgICBjb25zdCBQdWJsaWNh
dGlvblNldCAqb3BlcmF0b3ItPiAodm9pZCkgY29uc3Q7CgogICAgb3BlcmF0b3IgY29uc3QgUHVi
bGljYXRpb25TZXQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgJigpOwog
ICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgJigpIGNvbnN0OwogICAgb3BlcmF0b3IgUHVibGlj
YXRpb25TZXQgKiYoKTsKCiAgICBQdWJsaWNhdGlvbiAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpbmRleCk7CiAgICBjb25zdCBQdWJsaWNhdGlvbiAmIG9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpbmRleCkgY29uc3Q7CgoKICAgIGNvbnN0IFB1YmxpY2F0aW9uU2V0ICZpbiAodm9pZCkgY29u
c3Q7CiAgICBQdWJsaWNhdGlvblNldCAmaW5vdXQgKHZvaWQpOwogICAgUHVibGljYXRpb25TZXQg
KiZvdXQgKHZvaWQpOwogICAgUHVibGljYXRpb25TZXQgKl9yZXRuICh2b2lkKTsKICAgIFB1Ymxp
Y2F0aW9uU2V0ICpwdHIgKHZvaWQpIGNvbnN0OwoKICBwcml2YXRlOgogICAgUHVibGljYXRpb25T
ZXQgKnB0cl87CiAgfTsKIyA2NTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNs
YXNzIFB1YmxpY2F0aW9uU2V0X291dAogIHsKICBwdWJsaWM6CiAgICBQdWJsaWNhdGlvblNldF9v
dXQgKFB1YmxpY2F0aW9uU2V0IComKTsKICAgIFB1YmxpY2F0aW9uU2V0X291dCAoUHVibGljYXRp
b25TZXRfdmFyICYpOwogICAgUHVibGljYXRpb25TZXRfb3V0IChjb25zdCBQdWJsaWNhdGlvblNl
dF9vdXQgJik7CiAgICBQdWJsaWNhdGlvblNldF9vdXQgJm9wZXJhdG9yPSAoY29uc3QgUHVibGlj
YXRpb25TZXRfb3V0ICYpOwogICAgUHVibGljYXRpb25TZXRfb3V0ICZvcGVyYXRvcj0gKFB1Ymxp
Y2F0aW9uU2V0ICopOwogICAgb3BlcmF0b3IgUHVibGljYXRpb25TZXQgKiYoKTsKICAgIFB1Ymxp
Y2F0aW9uU2V0IComcHRyICh2b2lkKTsKICAgIFB1YmxpY2F0aW9uU2V0ICpvcGVyYXRvci0+ICh2
b2lkKTsKICAgIFB1YmxpY2F0aW9uICYgb3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KTsK
CiAgcHJpdmF0ZToKICAgIFB1YmxpY2F0aW9uU2V0IComcHRyXzsKCiAgICB2b2lkIG9wZXJhdG9y
PSAoY29uc3QgUHVibGljYXRpb25TZXRfdmFyICYpOwogIH07CgoKCgogIGV4dGVybiBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90Y19QdWJsaWNhdGlvblNldDsKCiAgc3RydWN0IFN1cHBsaWVyUU9TOwog
IGNsYXNzIFN1cHBsaWVyUU9TX3ZhcjsKCiAgc3RydWN0IFN1cHBsaWVyUU9TCiAgewoKCiAgICB0
eXBlZGVmIFN1cHBsaWVyUU9TX3ZhciBfdmFyX3R5cGU7CgoKICAgIHN0YXRpYyB2b2lkIF90YW9f
YW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1Ymxp
Y2F0aW9uU2V0IHB1YmxpY2F0aW9uczsKICAgIENPUkJBOjpCb29sZWFuIGlzX2dhdGV3YXk7Cgog
IH07CgogIGNsYXNzIFN1cHBsaWVyUU9TX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTdXBwbGllclFP
U192YXIgKHZvaWQpOwogICAgU3VwcGxpZXJRT1NfdmFyIChTdXBwbGllclFPUyAqKTsKICAgIFN1
cHBsaWVyUU9TX3ZhciAoY29uc3QgU3VwcGxpZXJRT1NfdmFyICYpOwogICAgflN1cHBsaWVyUU9T
X3ZhciAodm9pZCk7CgogICAgU3VwcGxpZXJRT1NfdmFyICZvcGVyYXRvcj0gKFN1cHBsaWVyUU9T
ICopOwogICAgU3VwcGxpZXJRT1NfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX3Zh
ciAmKTsKICAgIFN1cHBsaWVyUU9TICpvcGVyYXRvci0+ICh2b2lkKTsKICAgIGNvbnN0IFN1cHBs
aWVyUU9TICpvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRvciBjb25zdCBTdXBw
bGllclFPUyAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBTdXBwbGllclFPUyAmKCk7CiAgICBvcGVy
YXRvciBTdXBwbGllclFPUyAmKCkgY29uc3Q7CgogICAgb3BlcmF0b3IgU3VwcGxpZXJRT1MgKiYo
KTsKCgogICAgY29uc3QgU3VwcGxpZXJRT1MgJmluICh2b2lkKSBjb25zdDsKICAgIFN1cHBsaWVy
UU9TICZpbm91dCAodm9pZCk7CiAgICBTdXBwbGllclFPUyAqJm91dCAodm9pZCk7CiAgICBTdXBw
bGllclFPUyAqX3JldG4gKHZvaWQpOwogICAgU3VwcGxpZXJRT1MgKnB0ciAodm9pZCkgY29uc3Q7
CgogIHByaXZhdGU6CiAgICBTdXBwbGllclFPUyAqcHRyXzsKICB9OwoKICBjbGFzcyBTdXBwbGll
clFPU19vdXQKICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJRT1Nfb3V0IChTdXBwbGllclFPUyAq
Jik7CiAgICBTdXBwbGllclFPU19vdXQgKFN1cHBsaWVyUU9TX3ZhciAmKTsKICAgIFN1cHBsaWVy
UU9TX291dCAoY29uc3QgU3VwcGxpZXJRT1Nfb3V0ICYpOwogICAgU3VwcGxpZXJRT1Nfb3V0ICZv
cGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX291dCAmKTsKICAgIFN1cHBsaWVyUU9TX291dCAm
b3BlcmF0b3I9IChTdXBwbGllclFPUyAqKTsKICAgIG9wZXJhdG9yIFN1cHBsaWVyUU9TIComKCk7
CiAgICBTdXBwbGllclFPUyAqJnB0ciAodm9pZCk7CiAgICBTdXBwbGllclFPUyAqb3BlcmF0b3It
PiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBTdXBwbGllclFPUyAqJnB0cl87CgogICAgdm9pZCBv
cGVyYXRvcj0gKGNvbnN0IFN1cHBsaWVyUU9TX3ZhciAmKTsKICB9OwoKICBleHRlcm4gQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfU3VwcGxpZXJRT1M7CgoKCgoKICBjbGFzcyBQcm94eVB1c2hTdXBw
bGllcjsKICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyICpQcm94eVB1c2hTdXBwbGllcl9wdHI7
CgoKCgoKCgogIGNsYXNzIFByb3h5UHVzaFN1cHBsaWVyX3ZhciA6IHB1YmxpYyBUQU9fQmFzZV92
YXIKICB7CiAgcHVibGljOgogICAgUHJveHlQdXNoU3VwcGxpZXJfdmFyICh2b2lkKTsKICAgIFBy
b3h5UHVzaFN1cHBsaWVyX3ZhciAoUHJveHlQdXNoU3VwcGxpZXJfcHRyIHApIDogcHRyXyAocCkg
e30KICAgIFByb3h5UHVzaFN1cHBsaWVyX3ZhciAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdmFy
ICYpOwogICAgflByb3h5UHVzaFN1cHBsaWVyX3ZhciAodm9pZCk7CgogICAgUHJveHlQdXNoU3Vw
cGxpZXJfdmFyICZvcGVyYXRvcj0gKFByb3h5UHVzaFN1cHBsaWVyX3B0cik7CiAgICBQcm94eVB1
c2hTdXBwbGllcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdmFyICYp
OwogICAgUHJveHlQdXNoU3VwcGxpZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAg
IG9wZXJhdG9yIGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyX3B0ciAmKCkgY29uc3Q7CiAgICBvcGVy
YXRvciBQcm94eVB1c2hTdXBwbGllcl9wdHIgJigpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3B0
ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgJmlub3V0ICh2b2lk
KTsKICAgIFByb3h5UHVzaFN1cHBsaWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFByb3h5UHVzaFN1
cHBsaWVyX3B0ciBfcmV0biAodm9pZCk7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgcHRyICh2
b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgZHVwbGljYXRl
IChQcm94eVB1c2hTdXBwbGllcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoUHJveHlQ
dXNoU3VwcGxpZXJfcHRyKTsKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgbmlsICh2
b2lkKTsKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgbmFycm93ICgKICAgICAgICBD
T1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAg
IHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAg
UHJveHlQdXNoU3VwcGxpZXJfcHRyIHB0cl87CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdmFyIChj
b25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQcm94eVB1c2hTdXBwbGllcl92YXIgJm9wZXJh
dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgODA2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVu
dENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBQcm94eVB1c2hTdXBwbGllcl9vdXQKICB7CiAgcHVi
bGljOgogICAgUHJveHlQdXNoU3VwcGxpZXJfb3V0IChQcm94eVB1c2hTdXBwbGllcl9wdHIgJik7
CiAgICBQcm94eVB1c2hTdXBwbGllcl9vdXQgKFByb3h5UHVzaFN1cHBsaWVyX3ZhciAmKTsKICAg
IFByb3h5UHVzaFN1cHBsaWVyX291dCAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfb3V0ICYpOwog
ICAgUHJveHlQdXNoU3VwcGxpZXJfb3V0ICZvcGVyYXRvcj0gKGNvbnN0IFByb3h5UHVzaFN1cHBs
aWVyX291dCAmKTsKICAgIFByb3h5UHVzaFN1cHBsaWVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQ
cm94eVB1c2hTdXBwbGllcl92YXIgJik7CiAgICBQcm94eVB1c2hTdXBwbGllcl9vdXQgJm9wZXJh
dG9yPSAoUHJveHlQdXNoU3VwcGxpZXJfcHRyKTsKICAgIG9wZXJhdG9yIFByb3h5UHVzaFN1cHBs
aWVyX3B0ciAmKCk7CiAgICBQcm94eVB1c2hTdXBwbGllcl9wdHIgJnB0ciAodm9pZCk7CiAgICBQ
cm94eVB1c2hTdXBwbGllcl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBQ
cm94eVB1c2hTdXBwbGllcl9wdHIgJnB0cl87CiAgfTsKIyA4MzEgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hh
bm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1wbDsK
ICBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogIGNsYXNz
IF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fUHJveHlQ
dXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHJveHlQdXNoU3VwcGxp
ZXIKICAgIDogcHVibGljIHZpcnR1YWwgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyCiAgewog
IHB1YmxpYzoKCiAgICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyX3B0ciBfcHRyX3R5cGU7CiAg
ICB0eXBlZGVmIFByb3h5UHVzaFN1cHBsaWVyX3ZhciBfdmFyX3R5cGU7CgoKCiAgICBzdGF0aWMg
UHJveHlQdXNoU3VwcGxpZXJfcHRyIF9kdXBsaWNhdGUgKFByb3h5UHVzaFN1cHBsaWVyX3B0ciBv
YmopOwoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgX25hcnJvdyAoCiAgICAgICAg
Q09SQkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9u
bWVudCAoKQogICAgICApOwoKICAgIHN0YXRpYyBQcm94eVB1c2hTdXBwbGllcl9wdHIgX3VuY2hl
Y2tlZF9uYXJyb3cgKAogICAgICAgIENPUkJBOjpPYmplY3RfcHRyIG9iaiwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICBzdGF0aWMgUHJveHlQ
dXNoU3VwcGxpZXJfcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKFByb3h5
UHVzaFN1cHBsaWVyX3B0cikwOwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVz
dHJ1Y3RvciAodm9pZCopOwoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1c2hfY29uc3VtZXIg
KAogICAgICAgIFJ0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIgcHVzaF9jb25zdW1lciwK
ICAgICAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgcW9zLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJl
YWR5Q29ubmVjdGVkLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciApOwoKCgoKCiAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9pZCByZXN1bWVfY29ubmVjdGlvbiAoCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cg
KCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQg
Kl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29u
c3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0
ZToKICAgIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICp0aGVfVEFPX1Byb3h5
UHVzaFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaFN1
cHBsaWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbl9Qcm94eVB1c2hTdXBwbGllcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNv
bGxvY2F0ZWQpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyICgKICAgICAgICBUQU9fU3R1YiAqb2Jq
cmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAg
VEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVu
ZCBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJp
ZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfVGhydVBPQV9Qcm94eV9JbXBsOwogICAg
ZnJpZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfRGlyZWN0X1Byb3h5X0ltcGw7Cgog
ICAgdmlydHVhbCB+UHJveHlQdXNoU3VwcGxpZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAgUHJv
eHlQdXNoU3VwcGxpZXIgKGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyICYpOwogICAgdm9pZCBvcGVy
YXRvcj0gKGNvbnN0IFByb3h5UHVzaFN1cHBsaWVyICYpOwogIH07CiMgOTQxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF
dmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5
X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgUnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxp
ZXJfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaFN1
cHBsaWVyX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz
aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0
XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIHB1c2hfY29uc3VtZXIs
CiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpU
eXBlRXJyb3IgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kX2Nvbm5lY3Rpb24g
KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgdmly
dHVhbCB2b2lkIHJlc3VtZV9jb25uZWN0aW9uICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xs
b2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiApID0gMDsKCgoKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1c2hTdXBw
bGllcl9Qcm94eV9JbXBsICh2b2lkKTsKICB9OwojIDk4OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVz
aXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVs
QWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9SZW1vdGVfUHJveHlfSW1w
bAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGws
CiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwsCiAgICAg
IHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaFN1cHBsaWVyX1JlbW90ZV9Q
cm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3Rl
X1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3VwcGxpZXJf
UmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz
aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0
XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIHB1c2hfY29uc3VtZXIs
CiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpU
eXBlRXJyb3IgKTsKCgoKCgogICAgdmlydHVhbCB2b2lkIHN1c3BlbmRfY29ubmVjdGlvbiAoCiAg
ICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQog
ICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWVfY29ubmVjdGlvbiAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90
YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJv
bm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24gKTsKCgoKCiAgfTsKIyAxMDQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAg
IGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoK
ICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfQnJva2VyICh2b2lkKTsK
ICAgIHZpcnR1YWwgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJv
eHkgKAogICAgICAgIFByb3h5UHVzaFN1cHBsaWVyICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1
c2hTdXBwbGllcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDEwNjUgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2
ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3Rl
X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaFN1cHBsaWVy
X1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Jl
bW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoU3Vw
cGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX1Byb3h5
UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgICAgUHJveHlQdXNo
U3VwcGxpZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F
bnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19Qcm94eVB1
c2hTdXBwbGllcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1Ymxp
YzoKCgoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1JlbW90ZV9Qcm94eV9Ccm9r
ZXIgKnRoZV9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7
CiAgfTsKIyAxMDk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09S
QkE6OlR5cGVDb2RlX3B0ciBfdGNfUHJveHlQdXNoU3VwcGxpZXI7CgoKCgoKICBjbGFzcyBQcm94
eVB1c2hDb25zdW1lcjsKICB0eXBlZGVmIFByb3h5UHVzaENvbnN1bWVyICpQcm94eVB1c2hDb25z
dW1lcl9wdHI7CgoKCgoKCgogIGNsYXNzIFByb3h5UHVzaENvbnN1bWVyX3ZhciA6IHB1YmxpYyBU
QU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgUHJveHlQdXNoQ29uc3VtZXJfdmFyICh2b2lk
KTsKICAgIFByb3h5UHVzaENvbnN1bWVyX3ZhciAoUHJveHlQdXNoQ29uc3VtZXJfcHRyIHApIDog
cHRyXyAocCkge30KICAgIFByb3h5UHVzaENvbnN1bWVyX3ZhciAoY29uc3QgUHJveHlQdXNoQ29u
c3VtZXJfdmFyICYpOwogICAgflByb3h5UHVzaENvbnN1bWVyX3ZhciAodm9pZCk7CgogICAgUHJv
eHlQdXNoQ29uc3VtZXJfdmFyICZvcGVyYXRvcj0gKFByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAg
ICBQcm94eVB1c2hDb25zdW1lcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgUHJveHlQdXNoQ29uc3Vt
ZXJfdmFyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNv
bnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFByb3h5UHVzaENvbnN1bWVyX3B0ciAmKCkgY29uc3Q7
CiAgICBvcGVyYXRvciBQcm94eVB1c2hDb25zdW1lcl9wdHIgJigpOwoKICAgIFByb3h5UHVzaENv
bnN1bWVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBQcm94eVB1c2hDb25zdW1lcl9wdHIgJmlu
b3V0ICh2b2lkKTsKICAgIFByb3h5UHVzaENvbnN1bWVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIFBy
b3h5UHVzaENvbnN1bWVyX3B0ciBfcmV0biAodm9pZCk7CiAgICBQcm94eVB1c2hDb25zdW1lcl9w
dHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIg
ZHVwbGljYXRlIChQcm94eVB1c2hDb25zdW1lcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz
ZSAoUHJveHlQdXNoQ29uc3VtZXJfcHRyKTsKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9w
dHIgbmlsICh2b2lkKTsKICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgbmFycm93ICgK
ICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAg
ICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2
YXRlOgogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIHB0cl87CgogICAgUHJveHlQdXNoQ29uc3Vt
ZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBQcm94eVB1c2hDb25zdW1lcl92
YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTE1NiAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zj
cy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXJfb3V0
CiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaENvbnN1bWVyX291dCAoUHJveHlQdXNoQ29uc3Vt
ZXJfcHRyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfb3V0IChQcm94eVB1c2hDb25zdW1lcl92
YXIgJik7CiAgICBQcm94eVB1c2hDb25zdW1lcl9vdXQgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVy
X291dCAmKTsKICAgIFByb3h5UHVzaENvbnN1bWVyX291dCAmb3BlcmF0b3I9IChjb25zdCBQcm94
eVB1c2hDb25zdW1lcl9vdXQgJik7CiAgICBQcm94eVB1c2hDb25zdW1lcl9vdXQgJm9wZXJhdG9y
PSAoY29uc3QgUHJveHlQdXNoQ29uc3VtZXJfdmFyICYpOwogICAgUHJveHlQdXNoQ29uc3VtZXJf
b3V0ICZvcGVyYXRvcj0gKFByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAgICBvcGVyYXRvciBQcm94
eVB1c2hDb25zdW1lcl9wdHIgJigpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyICZwdHIgKHZv
aWQpOwogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2
YXRlOgogICAgUHJveHlQdXNoQ29uc3VtZXJfcHRyICZwdHJfOwogIH07CiMgMTE4MSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S
dGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Q
cm94eV9JbXBsOwogIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0lt
cGw7CiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3Mg
X1RBT19Qcm94eVB1c2hDb25zdW1lcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBQcm94
eVB1c2hDb25zdW1lcgogICAgOiBwdWJsaWMgdmlydHVhbCBSdGVjRXZlbnRDb21tOjpQdXNoQ29u
c3VtZXIKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgUHJveHlQdXNoQ29uc3VtZXJfcHRyIF9w
dHJfdHlwZTsKICAgIHR5cGVkZWYgUHJveHlQdXNoQ29uc3VtZXJfdmFyIF92YXJfdHlwZTsKCgoK
ICAgIHN0YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgX2R1cGxpY2F0ZSAoUHJveHlQdXNoQ29u
c3VtZXJfcHRyIG9iaik7CgogICAgc3RhdGljIFByb3h5UHVzaENvbnN1bWVyX3B0ciBfbmFycm93
ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIFByb3h5UHVzaENvbnN1bWVy
X3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqLAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHN0
YXRpYyBQcm94eVB1c2hDb25zdW1lcl9wdHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJl
dHVybiAoUHJveHlQdXNoQ29uc3VtZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBf
dGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVz
aF9zdXBwbGllciAoCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciBwdXNo
X3N1cHBsaWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJR
T1MgJiBxb3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKTsKCgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFu
IF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQg
Kl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29u
c3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0
ZToKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICp0aGVfVEFPX1Byb3h5
UHVzaENvbnN1bWVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaENv
bnN1bWVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbl9Qcm94eVB1c2hDb25zdW1lcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNv
bGxvY2F0ZWQpOwoKICAgIFByb3h5UHVzaENvbnN1bWVyICgKICAgICAgICBUQU9fU3R1YiAqb2Jq
cmVmLAogICAgICAgIENPUkJBOjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAg
VEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVu
ZCBjbGFzcyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJp
ZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBsOwogICAg
ZnJpZW5kIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfRGlyZWN0X1Byb3h5X0ltcGw7Cgog
ICAgdmlydHVhbCB+UHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAgUHJv
eHlQdXNoQ29uc3VtZXIgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyICYpOwogICAgdm9pZCBvcGVy
YXRvcj0gKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyICYpOwogIH07CiMgMTI3NCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94
eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9UQU9fUHVzaENvbnN1
bWVyX1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1c2hD
b25zdW1lcl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1
c2hfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rhcmdl
dF8sCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0ciBwdXNoX3N1cHBsaWVy
LAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3Ms
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKSA9IDA7CgoKCgoKICBwcm90ZWN0ZWQ6
CiAgICBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1Byb3h5X0ltcGwgKHZvaWQpOwogIH07CiMgMTMw
NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mv
b3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1c2hD
b25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5
UHVzaENvbnN1bWVyX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVf
T2JqZWN0X1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFJ0ZWNFdmVudENvbW06Ol9U
QU9fUHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9f
UHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwg
fl9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAg
dmlydHVhbCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkFfT2JqZWN0
ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3Vw
cGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpTdXBwbGllclFPUyAmIHFvcywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpT
eXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAp
OwoKCgoKCiAgfTsKIyAxMzQxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNs
YXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAg
IHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAg
IHZpcnR1YWwgX1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkg
KAogICAgICAgIFByb3h5UHVzaENvbnN1bWVyICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPSBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVkOgogICAgX1RBT19Qcm94eVB1c2hD
b25zdW1lcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDEzNjQgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1By
b3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1By
b3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90
ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fUHJveHlQdXNoQ29uc3Vt
ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX1Byb3h5UHVz
aENvbnN1bWVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgICAgUHJveHlQdXNoQ29u
c3VtZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAgX1RBT19Qcm94eVB1c2hD
b25zdW1lcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoK
CgoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIg
KnRoZV9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAg
fTsKIyAxMzk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09SQkE6
OlR5cGVDb2RlX3B0ciBfdGNfUHJveHlQdXNoQ29uc3VtZXI7CgoKCgoKICBjbGFzcyBDb25zdW1l
ckFkbWluOwogIHR5cGVkZWYgQ29uc3VtZXJBZG1pbiAqQ29uc3VtZXJBZG1pbl9wdHI7CgoKCgoK
CgogIGNsYXNzIENvbnN1bWVyQWRtaW5fdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw
dWJsaWM6CiAgICBDb25zdW1lckFkbWluX3ZhciAodm9pZCk7CiAgICBDb25zdW1lckFkbWluX3Zh
ciAoQ29uc3VtZXJBZG1pbl9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgQ29uc3VtZXJBZG1pbl92
YXIgKGNvbnN0IENvbnN1bWVyQWRtaW5fdmFyICYpOwogICAgfkNvbnN1bWVyQWRtaW5fdmFyICh2
b2lkKTsKCiAgICBDb25zdW1lckFkbWluX3ZhciAmb3BlcmF0b3I9IChDb25zdW1lckFkbWluX3B0
cik7CiAgICBDb25zdW1lckFkbWluX3ZhciAmb3BlcmF0b3I9IChjb25zdCBDb25zdW1lckFkbWlu
X3ZhciAmKTsKICAgIENvbnN1bWVyQWRtaW5fcHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoK
ICAgIG9wZXJhdG9yIGNvbnN0IENvbnN1bWVyQWRtaW5fcHRyICYoKSBjb25zdDsKICAgIG9wZXJh
dG9yIENvbnN1bWVyQWRtaW5fcHRyICYoKTsKCiAgICBDb25zdW1lckFkbWluX3B0ciBpbiAodm9p
ZCkgY29uc3Q7CiAgICBDb25zdW1lckFkbWluX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgQ29uc3Vt
ZXJBZG1pbl9wdHIgJm91dCAodm9pZCk7CiAgICBDb25zdW1lckFkbWluX3B0ciBfcmV0biAodm9p
ZCk7CiAgICBDb25zdW1lckFkbWluX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGlj
IENvbnN1bWVyQWRtaW5fcHRyIGR1cGxpY2F0ZSAoQ29uc3VtZXJBZG1pbl9wdHIpOwogICAgc3Rh
dGljIHZvaWQgcmVsZWFzZSAoQ29uc3VtZXJBZG1pbl9wdHIpOwogICAgc3RhdGljIENvbnN1bWVy
QWRtaW5fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMgQ29uc3VtZXJBZG1pbl9wdHIgbmFycm93
ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYK
ICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBw
cml2YXRlOgogICAgQ29uc3VtZXJBZG1pbl9wdHIgcHRyXzsKCiAgICBDb25zdW1lckFkbWluX3Zh
ciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAgQ29uc3VtZXJBZG1pbl92YXIgJm9wZXJh
dG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMTQ1NSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl
bnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgQ29uc3VtZXJBZG1pbl9vdXQKICB7CiAgcHVibGlj
OgogICAgQ29uc3VtZXJBZG1pbl9vdXQgKENvbnN1bWVyQWRtaW5fcHRyICYpOwogICAgQ29uc3Vt
ZXJBZG1pbl9vdXQgKENvbnN1bWVyQWRtaW5fdmFyICYpOwogICAgQ29uc3VtZXJBZG1pbl9vdXQg
KGNvbnN0IENvbnN1bWVyQWRtaW5fb3V0ICYpOwogICAgQ29uc3VtZXJBZG1pbl9vdXQgJm9wZXJh
dG9yPSAoY29uc3QgQ29uc3VtZXJBZG1pbl9vdXQgJik7CiAgICBDb25zdW1lckFkbWluX291dCAm
b3BlcmF0b3I9IChjb25zdCBDb25zdW1lckFkbWluX3ZhciAmKTsKICAgIENvbnN1bWVyQWRtaW5f
b3V0ICZvcGVyYXRvcj0gKENvbnN1bWVyQWRtaW5fcHRyKTsKICAgIG9wZXJhdG9yIENvbnN1bWVy
QWRtaW5fcHRyICYoKTsKICAgIENvbnN1bWVyQWRtaW5fcHRyICZwdHIgKHZvaWQpOwogICAgQ29u
c3VtZXJBZG1pbl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZhdGU6CiAgICBDb25zdW1l
ckFkbWluX3B0ciAmcHRyXzsKICB9OwojIDE0ODAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
Qy5oIgogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9f
Q29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRt
aW5fUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlf
QnJva2VyOwoKICBjbGFzcyBDb25zdW1lckFkbWluCiAgICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJB
X09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBDb25zdW1lckFkbWluX3B0ciBfcHRy
X3R5cGU7CiAgICB0eXBlZGVmIENvbnN1bWVyQWRtaW5fdmFyIF92YXJfdHlwZTsKCgoKICAgIHN0
YXRpYyBDb25zdW1lckFkbWluX3B0ciBfZHVwbGljYXRlIChDb25zdW1lckFkbWluX3B0ciBvYmop
OwoKICAgIHN0YXRpYyBDb25zdW1lckFkbWluX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6
T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgp
CiAgICAgICk7CgogICAgc3RhdGljIENvbnN1bWVyQWRtaW5fcHRyIF91bmNoZWNrZWRfbmFycm93
ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZh
dWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIENvbnN1bWVyQWRtaW5fcHRy
IF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1cm4gKENvbnN1bWVyQWRtaW5fcHRyKTA7
CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7Cgog
ICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3B0ciBv
YnRhaW5fcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK
CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6
Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5
X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94
eV9Ccm9rZXIgKnRoZV9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9Ccm9rZXJfOwoKICBwcm90ZWN0
ZWQ6CiAgICBDb25zdW1lckFkbWluIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVh
bCB2b2lkIFJ0ZWNFdmVudENoYW5uZWxBZG1pbl9Db25zdW1lckFkbWluX3NldHVwX2NvbGxvY2F0
aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgQ29uc3VtZXJBZG1pbiAoCiAgICAgICAgVEFPX1N0
dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQgPSAwLAog
ICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFudCA9IDAKICAgICAgKTsKCiAg
ICBmcmllbmQgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX1JlbW90ZV9Qcm94eV9JbXBsOwogICAg
ZnJpZW5kIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBm
cmllbmQgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX0RpcmVjdF9Qcm94eV9JbXBsOwoKICAgIHZp
cnR1YWwgfkNvbnN1bWVyQWRtaW4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgQ29uc3VtZXJBZG1p
biAoY29uc3QgQ29uc3VtZXJBZG1pbiAmKTsKICAgIHZvaWQgb3BlcmF0b3I9IChjb25zdCBDb25z
dW1lckFkbWluICYpOwogIH07CiMgMTU3MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi
CiAgY2xhc3MgX1RBT19Db25zdW1lckFkbWluX1Byb3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1
YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9f
Q29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3VwcGxpZXIg
KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgoKICBwcm90
ZWN0ZWQ6CiAgICBfVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfSW1wbCAodm9pZCk7CiAgfTsKIyAx
NTk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zj
cy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVy
QWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgX1RBT19Db25zdW1l
ckFkbWluX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0
X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RBT19Db25zdW1lckFkbWluX1JlbW90ZV9Q
cm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl
X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlByb3h5UHVzaFN1cHBsaWVyX3B0ciBvYnRhaW5fcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09S
QkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJv
dyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKCiAgfTsKIyAxNjMwICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF
dmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9C
cm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+X1RBT19Db25zdW1lckFkbWluX1Byb3h5
X0Jyb2tlciAodm9pZCk7CiAgICB2aXJ0dWFsIF9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBs
ICZzZWxlY3RfcHJveHkgKAogICAgICAgIENvbnN1bWVyQWRtaW4gKm9iamVjdCwKICAgICAgICBD
T1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9IFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAwOwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFP
X0NvbnN1bWVyQWRtaW5fUHJveHlfQnJva2VyICh2b2lkKTsKCiAgfTsKIyAxNjUzICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl
X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0NvbnN1bWVyQWRtaW5fUHJv
eHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJv
eHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0NvbnN1bWVyQWRtaW5fUmVtb3Rl
X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX0NvbnN1bWVyQWRtaW5fUHJv
eHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBDb25zdW1lckFkbWluICpvYmplY3QsCiAg
ICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUK
ICAgICAgKTsKCiAgcHJpdmF0ZToKICAgIF9UQU9fQ29uc3VtZXJBZG1pbl9SZW1vdGVfUHJveHlf
SW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX0Nv
bnN1bWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19Db25zdW1lckFkbWluX1Jl
bW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgMTY4MyAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu
bmVsQWRtaW5DLmgiCiAgZXh0ZXJuIENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0NvbnN1bWVyQWRt
aW47CgoKCgoKICBjbGFzcyBTdXBwbGllckFkbWluOwogIHR5cGVkZWYgU3VwcGxpZXJBZG1pbiAq
U3VwcGxpZXJBZG1pbl9wdHI7CgoKCgoKCgogIGNsYXNzIFN1cHBsaWVyQWRtaW5fdmFyIDogcHVi
bGljIFRBT19CYXNlX3ZhcgogIHsKICBwdWJsaWM6CiAgICBTdXBwbGllckFkbWluX3ZhciAodm9p
ZCk7CiAgICBTdXBwbGllckFkbWluX3ZhciAoU3VwcGxpZXJBZG1pbl9wdHIgcCkgOiBwdHJfIChw
KSB7fQogICAgU3VwcGxpZXJBZG1pbl92YXIgKGNvbnN0IFN1cHBsaWVyQWRtaW5fdmFyICYpOwog
ICAgflN1cHBsaWVyQWRtaW5fdmFyICh2b2lkKTsKCiAgICBTdXBwbGllckFkbWluX3ZhciAmb3Bl
cmF0b3I9IChTdXBwbGllckFkbWluX3B0cik7CiAgICBTdXBwbGllckFkbWluX3ZhciAmb3BlcmF0
b3I9IChjb25zdCBTdXBwbGllckFkbWluX3ZhciAmKTsKICAgIFN1cHBsaWVyQWRtaW5fcHRyIG9w
ZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IFN1cHBsaWVyQWRtaW5f
cHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIFN1cHBsaWVyQWRtaW5fcHRyICYoKTsKCiAgICBT
dXBwbGllckFkbWluX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBTdXBwbGllckFkbWluX3B0ciAm
aW5vdXQgKHZvaWQpOwogICAgU3VwcGxpZXJBZG1pbl9wdHIgJm91dCAodm9pZCk7CiAgICBTdXBw
bGllckFkbWluX3B0ciBfcmV0biAodm9pZCk7CiAgICBTdXBwbGllckFkbWluX3B0ciBwdHIgKHZv
aWQpIGNvbnN0OwoKCgogICAgc3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIGR1cGxpY2F0ZSAoU3Vw
cGxpZXJBZG1pbl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFzZSAoU3VwcGxpZXJBZG1pbl9w
dHIpOwogICAgc3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIG5pbCAodm9pZCk7CiAgICBzdGF0aWMg
U3VwcGxpZXJBZG1pbl9wdHIgbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2JqZWN0
ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgU3VwcGxpZXJBZG1pbl9wdHIgcHRy
XzsKCiAgICBTdXBwbGllckFkbWluX3ZhciAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogICAg
U3VwcGxpZXJBZG1pbl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwog
IH07CiMgMTc0NCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFP
L29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgU3VwcGxp
ZXJBZG1pbl9vdXQKICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJBZG1pbl9vdXQgKFN1cHBsaWVy
QWRtaW5fcHRyICYpOwogICAgU3VwcGxpZXJBZG1pbl9vdXQgKFN1cHBsaWVyQWRtaW5fdmFyICYp
OwogICAgU3VwcGxpZXJBZG1pbl9vdXQgKGNvbnN0IFN1cHBsaWVyQWRtaW5fb3V0ICYpOwogICAg
U3VwcGxpZXJBZG1pbl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgU3VwcGxpZXJBZG1pbl9vdXQgJik7
CiAgICBTdXBwbGllckFkbWluX291dCAmb3BlcmF0b3I9IChjb25zdCBTdXBwbGllckFkbWluX3Zh
ciAmKTsKICAgIFN1cHBsaWVyQWRtaW5fb3V0ICZvcGVyYXRvcj0gKFN1cHBsaWVyQWRtaW5fcHRy
KTsKICAgIG9wZXJhdG9yIFN1cHBsaWVyQWRtaW5fcHRyICYoKTsKICAgIFN1cHBsaWVyQWRtaW5f
cHRyICZwdHIgKHZvaWQpOwogICAgU3VwcGxpZXJBZG1pbl9wdHIgb3BlcmF0b3ItPiAodm9pZCk7
CgogIHByaXZhdGU6CiAgICBTdXBwbGllckFkbWluX3B0ciAmcHRyXzsKICB9OwojIDE3NjkgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9Q
cm94eV9JbXBsOwogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbDsK
ICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyOwogIGNsYXNzIF9UQU9fU3Vw
cGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBTdXBwbGllckFkbWluCiAg
ICA6IHB1YmxpYyB2aXJ0dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRl
ZiBTdXBwbGllckFkbWluX3B0ciBfcHRyX3R5cGU7CiAgICB0eXBlZGVmIFN1cHBsaWVyQWRtaW5f
dmFyIF92YXJfdHlwZTsKCgoKICAgIHN0YXRpYyBTdXBwbGllckFkbWluX3B0ciBfZHVwbGljYXRl
IChTdXBwbGllckFkbWluX3B0ciBvYmopOwoKICAgIHN0YXRpYyBTdXBwbGllckFkbWluX3B0ciBf
bmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIFN1cHBsaWVyQWRt
aW5fcHRyIF91bmNoZWNrZWRfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmos
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAg
c3RhdGljIFN1cHBsaWVyQWRtaW5fcHRyIF9uaWwgKHZvaWQpCiAgICAgIHsKICAgICAgICByZXR1
cm4gKFN1cHBsaWVyQWRtaW5fcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9pZCBfdGFvX2Fu
eV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVzaF9jb25zdW1lciAoCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19h
ICgKICAgICAgICBjb25zdCBDT1JCQTo6Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9f
UXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAg
IF9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fU3VwcGxpZXJBZG1pbl9Q
cm94eV9Ccm9rZXJfOwoKICBwcm90ZWN0ZWQ6CiAgICBTdXBwbGllckFkbWluIChpbnQgY29sbG9j
YXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVudENoYW5uZWxBZG1pbl9TdXBw
bGllckFkbWluX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgU3VwcGxp
ZXJBZG1pbiAoCiAgICAgICAgVEFPX1N0dWIgKm9ianJlZiwKICAgICAgICBDT1JCQTo6Qm9vbGVh
biBfdGFvX2NvbGxvY2F0ZWQgPSAwLAogICAgICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAq
c2VydmFudCA9IDAKICAgICAgKTsKCiAgICBmcmllbmQgY2xhc3MgX1RBT19TdXBwbGllckFkbWlu
X1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9U
aHJ1UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19TdXBwbGllckFkbWluX0Rp
cmVjdF9Qcm94eV9JbXBsOwoKICAgIHZpcnR1YWwgflN1cHBsaWVyQWRtaW4gKHZvaWQpOwoKICBw
cml2YXRlOgogICAgU3VwcGxpZXJBZG1pbiAoY29uc3QgU3VwcGxpZXJBZG1pbiAmKTsKICAgIHZv
aWQgb3BlcmF0b3I9IChjb25zdCBTdXBwbGllckFkbWluICYpOwogIH07CiMgMTg1OSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9S
dGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19TdXBwbGllckFkbWluX1Byb3h5
X0ltcGwKICAgIDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1
YmxpYzoKICAgIHZpcnR1YWwgfl9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9JbXBsICh2b2lkKSB7
IH0KICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hDb25zdW1lcl9w
dHIgb2J0YWluX3B1c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICkgPSAwOwoKCgoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fUHJv
eHlfSW1wbCAodm9pZCk7CiAgfTsKIyAxODg2ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMu
aCIKICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwKICAgIDogcHVi
bGljIHZpcnR1YWwgX1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGwsCiAgICAgIHB1YmxpYyB2
aXJ0dWFsIFRBT19SZW1vdGVfT2JqZWN0X1Byb3h5X0ltcGwKICB7CiAgcHVibGljOgogICAgX1RB
T19TdXBwbGllckFkbWluX1JlbW90ZV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5f
VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVh
bCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVz
aF9jb25zdW1lciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0
XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoK
CiAgfTsKIyAxOTE5ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9U
QU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9U
QU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+
X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgICB2aXJ0dWFsIF9UQU9f
U3VwcGxpZXJBZG1pbl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIFN1cHBsaWVy
QWRtaW4gKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkgPSAw
OwoKICBwcm90ZWN0ZWQ6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyICh2b2lk
KTsKCiAgfTsKIyAxOTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVy
cy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBf
VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVh
bCBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9f
U3VwcGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5f
VEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVh
bCBfVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgICBT
dXBwbGllckFkbWluICpvYmplY3QsCiAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgcHJpdmF0ZToKICAgIF9UQU9fU3Vw
cGxpZXJBZG1pbl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1Ymxp
YzoKCgoKICAgIHN0YXRpYyBfVEFPX1N1cHBsaWVyQWRtaW5fUmVtb3RlX1Byb3h5X0Jyb2tlciAq
dGhlX1RBT19TdXBwbGllckFkbWluX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMg
MTk3MiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgZXh0ZXJuIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3RjX1N1cHBsaWVyQWRtaW47CgoKCgoKICBjbGFzcyBPYnNlcnZlcjsKICB0eXBl
ZGVmIE9ic2VydmVyICpPYnNlcnZlcl9wdHI7CgoKCgoKCgogIGNsYXNzIE9ic2VydmVyX3ZhciA6
IHB1YmxpYyBUQU9fQmFzZV92YXIKICB7CiAgcHVibGljOgogICAgT2JzZXJ2ZXJfdmFyICh2b2lk
KTsKICAgIE9ic2VydmVyX3ZhciAoT2JzZXJ2ZXJfcHRyIHApIDogcHRyXyAocCkge30KICAgIE9i
c2VydmVyX3ZhciAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAgfk9ic2VydmVyX3ZhciAodm9p
ZCk7CgogICAgT2JzZXJ2ZXJfdmFyICZvcGVyYXRvcj0gKE9ic2VydmVyX3B0cik7CiAgICBPYnNl
cnZlcl92YXIgJm9wZXJhdG9yPSAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAgT2JzZXJ2ZXJf
cHRyIG9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0OwoKICAgIG9wZXJhdG9yIGNvbnN0IE9ic2VydmVy
X3B0ciAmKCkgY29uc3Q7CiAgICBvcGVyYXRvciBPYnNlcnZlcl9wdHIgJigpOwoKICAgIE9ic2Vy
dmVyX3B0ciBpbiAodm9pZCkgY29uc3Q7CiAgICBPYnNlcnZlcl9wdHIgJmlub3V0ICh2b2lkKTsK
ICAgIE9ic2VydmVyX3B0ciAmb3V0ICh2b2lkKTsKICAgIE9ic2VydmVyX3B0ciBfcmV0biAodm9p
ZCk7CiAgICBPYnNlcnZlcl9wdHIgcHRyICh2b2lkKSBjb25zdDsKCgoKICAgIHN0YXRpYyBPYnNl
cnZlcl9wdHIgZHVwbGljYXRlIChPYnNlcnZlcl9wdHIpOwogICAgc3RhdGljIHZvaWQgcmVsZWFz
ZSAoT2JzZXJ2ZXJfcHRyKTsKICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgbmlsICh2b2lkKTsKICAg
IHN0YXRpYyBPYnNlcnZlcl9wdHIgbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0ICosCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgKTsKICAgIHN0YXRpYyBDT1JCQTo6T2Jq
ZWN0ICogdXBjYXN0ICh2b2lkICopOwoKICBwcml2YXRlOgogICAgT2JzZXJ2ZXJfcHRyIHB0cl87
CgogICAgT2JzZXJ2ZXJfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJocyk7CiAgICBPYnNlcnZl
cl92YXIgJm9wZXJhdG9yPSAoY29uc3QgVEFPX0Jhc2VfdmFyICZyaHMpOwogIH07CiMgMjAzMyAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji
c3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgT2JzZXJ2ZXJfb3V0CiAgewog
IHB1YmxpYzoKICAgIE9ic2VydmVyX291dCAoT2JzZXJ2ZXJfcHRyICYpOwogICAgT2JzZXJ2ZXJf
b3V0IChPYnNlcnZlcl92YXIgJik7CiAgICBPYnNlcnZlcl9vdXQgKGNvbnN0IE9ic2VydmVyX291
dCAmKTsKICAgIE9ic2VydmVyX291dCAmb3BlcmF0b3I9IChjb25zdCBPYnNlcnZlcl9vdXQgJik7
CiAgICBPYnNlcnZlcl9vdXQgJm9wZXJhdG9yPSAoY29uc3QgT2JzZXJ2ZXJfdmFyICYpOwogICAg
T2JzZXJ2ZXJfb3V0ICZvcGVyYXRvcj0gKE9ic2VydmVyX3B0cik7CiAgICBvcGVyYXRvciBPYnNl
cnZlcl9wdHIgJigpOwogICAgT2JzZXJ2ZXJfcHRyICZwdHIgKHZvaWQpOwogICAgT2JzZXJ2ZXJf
cHRyIG9wZXJhdG9yLT4gKHZvaWQpOwoKICBwcml2YXRlOgogICAgT2JzZXJ2ZXJfcHRyICZwdHJf
OwogIH07CiMgMjA1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMv
VEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RB
T19PYnNlcnZlcl9Qcm94eV9JbXBsOwogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5
X0ltcGw7CiAgY2xhc3MgX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RBT19P
YnNlcnZlcl9SZW1vdGVfUHJveHlfQnJva2VyOwoKICBjbGFzcyBPYnNlcnZlcgogICAgOiBwdWJs
aWMgdmlydHVhbCBDT1JCQV9PYmplY3QKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgT2JzZXJ2
ZXJfcHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgT2JzZXJ2ZXJfdmFyIF92YXJfdHlwZTsKCgoK
ICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgX2R1cGxpY2F0ZSAoT2JzZXJ2ZXJfcHRyIG9iaik7Cgog
ICAgc3RhdGljIE9ic2VydmVyX3B0ciBfbmFycm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0
ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7
CgogICAgc3RhdGljIE9ic2VydmVyX3B0ciBfdW5jaGVja2VkX25hcnJvdyAoCiAgICAgICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApOwoKICAgIHN0YXRpYyBPYnNlcnZlcl9wdHIgX25pbCAodm9pZCkKICAgICAg
ewogICAgICAgIHJldHVybiAoT2JzZXJ2ZXJfcHRyKTA7CiAgICAgIH0KCiAgICBzdGF0aWMgdm9p
ZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9j
b25zdW1lciAoCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP
UyAmIHN1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg
KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK
CiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBDT1JCQTo6
Q2hhciAqdHlwZV9pZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgKl90YW9fUXVlcnlJbnRlcmZhY2UgKHB0cl9hcml0
aF90IHR5cGUpOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5
X2lkICh2b2lkKSBjb25zdDsKCiAgcHJpdmF0ZToKICAgIF9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJv
a2VyICp0aGVfVEFPX09ic2VydmVyX1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIE9i
c2VydmVyIChpbnQgY29sbG9jYXRlZCA9IDApOwoKCgogICAgdmlydHVhbCB2b2lkIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbl9PYnNlcnZlcl9zZXR1cF9jb2xsb2NhdGlvbiAoaW50IGNvbGxvY2F0ZWQp
OwoKICAgIE9ic2VydmVyICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJB
OjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZh
bnRCYXNlICpzZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFzcyBfVEFPX09ic2Vy
dmVyX1JlbW90ZV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfVGhy
dVBPQV9Qcm94eV9JbXBsOwogICAgZnJpZW5kIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfRGlyZWN0X1By
b3h5X0ltcGw7CgogICAgdmlydHVhbCB+T2JzZXJ2ZXIgKHZvaWQpOwoKICBwcml2YXRlOgogICAg
T2JzZXJ2ZXIgKGNvbnN0IE9ic2VydmVyICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IE9i
c2VydmVyICYpOwogIH07CiMgMjE1OCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAg
Y2xhc3MgX1RBT19PYnNlcnZlcl9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFsIFRBT19P
YmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX09ic2VydmVy
X1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9jb25zdW1lciAo
CiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBj
b25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgc3ViLAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICAp
CiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw
bGllclFPUyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKSA9IDA7CgoKCgogIHByb3RlY3RlZDoKICAgIF9UQU9fT2JzZXJ2ZXJfUHJveHlfSW1w
bCAodm9pZCk7CiAgfTsKIyAyMTk1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBj
bGFzcyBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9JbXBsCiAgICA6IHB1YmxpYyB2aXJ0dWFs
IF9UQU9fT2JzZXJ2ZXJfUHJveHlfSW1wbCwKICAgICAgcHVibGljIHZpcnR1YWwgVEFPX1JlbW90
ZV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1JlbW90
ZV9Qcm94eV9JbXBsICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX09ic2VydmVyX1JlbW90ZV9Q
cm94eV9JbXBsICh2b2lkKSB7IH0KICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfY29uc3VtZXIgKAog
ICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29u
c3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQog
ICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFv
X3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFP
UyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24g
KTsKCgoKCiAgfTsKIyAyMjM4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNs
YXNzIF9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIHZpcnR1YWwg
fl9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJva2VyICh2b2lkKTsKICAgIHZpcnR1YWwgX1RBT19PYnNl
cnZlcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIE9ic2VydmVyICpvYmplY3Qs
CiAgICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApID0gMDsKCiAgcHJvdGVjdGVk
OgogICAgX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICB9OwojIDIyNjEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2
Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfUmVtb3Rl
X1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX09ic2VydmVyX1Byb3h5X0Jy
b2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIg
KHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAo
dm9pZCk7CgogICAgdmlydHVhbCBfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94
eSAoCiAgICAgICAgT2JzZXJ2ZXIgKm9iamVjdCwKICAgICAgICBDT1JCQV9FbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICBwcml2YXRlOgogICAg
X1RBT19PYnNlcnZlcl9SZW1vdGVfUHJveHlfSW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1
YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX09ic2VydmVyX1JlbW90ZV9Qcm94eV9Ccm9rZXIgKnRo
ZV9UQU9fT2JzZXJ2ZXJfUmVtb3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyAyMjkxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz
dmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBleHRlcm4gQ09SQkE6OlR5cGVDb2RlX3B0
ciBfdGNfT2JzZXJ2ZXI7CgogIHR5cGVkZWYgQ09SQkE6OlVMb25nIE9ic2VydmVyX0hhbmRsZTsK
ICB0eXBlZGVmIENPUkJBOjpVTG9uZ19vdXQgT2JzZXJ2ZXJfSGFuZGxlX291dDsKICBleHRlcm4g
Q09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfT2JzZXJ2ZXJfSGFuZGxlOwoKCgoKCiAgY2xhc3MgRXZl
bnRDaGFubmVsOwogIHR5cGVkZWYgRXZlbnRDaGFubmVsICpFdmVudENoYW5uZWxfcHRyOwoKCgoK
CgoKICBjbGFzcyBFdmVudENoYW5uZWxfdmFyIDogcHVibGljIFRBT19CYXNlX3ZhcgogIHsKICBw
dWJsaWM6CiAgICBFdmVudENoYW5uZWxfdmFyICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF92YXIg
KEV2ZW50Q2hhbm5lbF9wdHIgcCkgOiBwdHJfIChwKSB7fQogICAgRXZlbnRDaGFubmVsX3ZhciAo
Y29uc3QgRXZlbnRDaGFubmVsX3ZhciAmKTsKICAgIH5FdmVudENoYW5uZWxfdmFyICh2b2lkKTsK
CiAgICBFdmVudENoYW5uZWxfdmFyICZvcGVyYXRvcj0gKEV2ZW50Q2hhbm5lbF9wdHIpOwogICAg
RXZlbnRDaGFubmVsX3ZhciAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfdmFyICYpOwog
ICAgRXZlbnRDaGFubmVsX3B0ciBvcGVyYXRvci0+ICh2b2lkKSBjb25zdDsKCiAgICBvcGVyYXRv
ciBjb25zdCBFdmVudENoYW5uZWxfcHRyICYoKSBjb25zdDsKICAgIG9wZXJhdG9yIEV2ZW50Q2hh
bm5lbF9wdHIgJigpOwoKICAgIEV2ZW50Q2hhbm5lbF9wdHIgaW4gKHZvaWQpIGNvbnN0OwogICAg
RXZlbnRDaGFubmVsX3B0ciAmaW5vdXQgKHZvaWQpOwogICAgRXZlbnRDaGFubmVsX3B0ciAmb3V0
ICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF9wdHIgX3JldG4gKHZvaWQpOwogICAgRXZlbnRDaGFu
bmVsX3B0ciBwdHIgKHZvaWQpIGNvbnN0OwoKCgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIg
ZHVwbGljYXRlIChFdmVudENoYW5uZWxfcHRyKTsKICAgIHN0YXRpYyB2b2lkIHJlbGVhc2UgKEV2
ZW50Q2hhbm5lbF9wdHIpOwogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIgbmlsICh2b2lkKTsK
ICAgIHN0YXRpYyBFdmVudENoYW5uZWxfcHRyIG5hcnJvdyAoCiAgICAgICAgQ09SQkE6Ok9iamVj
dCAqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICk7CiAgICBzdGF0aWMgQ09S
QkE6Ok9iamVjdCAqIHVwY2FzdCAodm9pZCAqKTsKCiAgcHJpdmF0ZToKICAgIEV2ZW50Q2hhbm5l
bF9wdHIgcHRyXzsKCiAgICBFdmVudENoYW5uZWxfdmFyIChjb25zdCBUQU9fQmFzZV92YXIgJnJo
cyk7CiAgICBFdmVudENoYW5uZWxfdmFyICZvcGVyYXRvcj0gKGNvbnN0IFRBT19CYXNlX3ZhciAm
cmhzKTsKICB9OwojIDIzNTYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNz
IEV2ZW50Q2hhbm5lbF9vdXQKICB7CiAgcHVibGljOgogICAgRXZlbnRDaGFubmVsX291dCAoRXZl
bnRDaGFubmVsX3B0ciAmKTsKICAgIEV2ZW50Q2hhbm5lbF9vdXQgKEV2ZW50Q2hhbm5lbF92YXIg
Jik7CiAgICBFdmVudENoYW5uZWxfb3V0IChjb25zdCBFdmVudENoYW5uZWxfb3V0ICYpOwogICAg
RXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfb3V0ICYpOwog
ICAgRXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChjb25zdCBFdmVudENoYW5uZWxfdmFyICYp
OwogICAgRXZlbnRDaGFubmVsX291dCAmb3BlcmF0b3I9IChFdmVudENoYW5uZWxfcHRyKTsKICAg
IG9wZXJhdG9yIEV2ZW50Q2hhbm5lbF9wdHIgJigpOwogICAgRXZlbnRDaGFubmVsX3B0ciAmcHRy
ICh2b2lkKTsKICAgIEV2ZW50Q2hhbm5lbF9wdHIgb3BlcmF0b3ItPiAodm9pZCk7CgogIHByaXZh
dGU6CiAgICBFdmVudENoYW5uZWxfcHRyICZwdHJfOwogIH07CiMgMjM4MSAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl
bnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfUHJveHlfSW1wbDsK
ICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFP
X0V2ZW50Q2hhbm5lbF9Qcm94eV9Ccm9rZXI7CiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfUmVt
b3RlX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgRXZlbnRDaGFubmVsCiAgICA6IHB1YmxpYyB2aXJ0
dWFsIENPUkJBX09iamVjdAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiBFdmVudENoYW5uZWxf
cHRyIF9wdHJfdHlwZTsKICAgIHR5cGVkZWYgRXZlbnRDaGFubmVsX3ZhciBfdmFyX3R5cGU7CgoK
CiAgICBzdGF0aWMgRXZlbnRDaGFubmVsX3B0ciBfZHVwbGljYXRlIChFdmVudENoYW5uZWxfcHRy
IG9iaik7CgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9wdHIgX25hcnJvdyAoCiAgICAgICAgQ09S
QkE6Ok9iamVjdF9wdHIgb2JqLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKQogICAgICApOwoKICAgIHN0YXRpYyBFdmVudENoYW5uZWxfcHRyIF91bmNoZWNrZWRfbmFy
cm93ICgKICAgICAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmosCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIEV2ZW50Q2hhbm5lbF9w
dHIgX25pbCAodm9pZCkKICAgICAgewogICAgICAgIHJldHVybiAoRXZlbnRDaGFubmVsX3B0cikw
OwogICAgICB9CgogICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoK
CgoKCiAgICBjbGFzcyBTWU5DSFJPTklaQVRJT05fRVJST1IgOiBwdWJsaWMgQ09SQkE6OlVzZXJF
eGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIFNZTkNIUk9OSVpBVElPTl9FUlJPUiAo
dm9pZCk7CgoKICAgICAgU1lOQ0hST05JWkFUSU9OX0VSUk9SIChjb25zdCBTWU5DSFJPTklaQVRJ
T05fRVJST1IgJik7CgoKICAgICAgflNZTkNIUk9OSVpBVElPTl9FUlJPUiAodm9pZCk7CgoKICAg
ICAgc3RhdGljIHZvaWQgX3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgICAgU1lOQ0hS
T05JWkFUSU9OX0VSUk9SICZvcGVyYXRvcj0gKGNvbnN0IFNZTkNIUk9OSVpBVElPTl9FUlJPUiAm
KTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAgdmlydHVhbCB2b2lk
IF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAgICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv
X2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBTWU5DSFJPTklaQVRJT05fRVJST1Ig
Kl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoKICAgICAgc3RhdGljIENPUkJBOjpF
eGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICAgIHZpcnR1YWwgQ09SQkE6OlR5cGVDb2RlX3B0
ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgICB9OwoKc3RhdGljIENPUkJBOjpUeXBlQ29kZV9wdHIg
X3RjX1NZTkNIUk9OSVpBVElPTl9FUlJPUjsKIyAyNDY3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB
ZG1pbkMuaCIKICAgIGNsYXNzIFFPU19FUlJPUiA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlv
bgogICAgewogICAgcHVibGljOgoKICAgICAgUU9TX0VSUk9SICh2b2lkKTsKCgogICAgICBRT1Nf
RVJST1IgKGNvbnN0IFFPU19FUlJPUiAmKTsKCgogICAgICB+UU9TX0VSUk9SICh2b2lkKTsKCgog
ICAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7CgogICAgICBRT1Nf
RVJST1IgJm9wZXJhdG9yPSAoY29uc3QgUU9TX0VSUk9SICYpOwoKICAgICAgdmlydHVhbCB2b2lk
IF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAg
ICAgVEFPX091dHB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAg
ICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRB
T19JbnB1dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoK
ICAgICAgc3RhdGljIFFPU19FUlJPUiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoK
CgogICAgICBzdGF0aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgICAgdmly
dHVhbCBDT1JCQTo6VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICAgIH07CgpzdGF0
aWMgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdGNfUU9TX0VSUk9SOwojIDI1MTMgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2
ZW50Q2hhbm5lbEFkbWluQy5oIgogICAgY2xhc3MgU1VCU0NSSVBUSU9OX0VSUk9SIDogcHVibGlj
IENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBTVUJTQ1JJUFRJ
T05fRVJST1IgKHZvaWQpOwoKCiAgICAgIFNVQlNDUklQVElPTl9FUlJPUiAoY29uc3QgU1VCU0NS
SVBUSU9OX0VSUk9SICYpOwoKCiAgICAgIH5TVUJTQ1JJUFRJT05fRVJST1IgKHZvaWQpOwoKCiAg
ICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAgICAgIFNVQlND
UklQVElPTl9FUlJPUiAmb3BlcmF0b3I9IChjb25zdCBTVUJTQ1JJUFRJT05fRVJST1IgJik7Cgog
ICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNlICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFv
X2VuY29kZSAoCiAgICAgICAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJgogICAgICAgICkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNv
ZGUgKAogICAgICAgICAgVEFPX0lucHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJgogICAgICAgICk7CgogICAgICBzdGF0aWMgU1VCU0NSSVBUSU9OX0VSUk9SICpfZG93bmNh
c3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9u
ICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFsIENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUg
KHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19TVUJT
Q1JJUFRJT05fRVJST1I7CiMgMjU1OSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAg
ICBjbGFzcyBDT1JSRUxBVElPTl9FUlJPUiA6IHB1YmxpYyBDT1JCQTo6VXNlckV4Y2VwdGlvbgog
ICAgewogICAgcHVibGljOgoKICAgICAgQ09SUkVMQVRJT05fRVJST1IgKHZvaWQpOwoKCiAgICAg
IENPUlJFTEFUSU9OX0VSUk9SIChjb25zdCBDT1JSRUxBVElPTl9FUlJPUiAmKTsKCgogICAgICB+
Q09SUkVMQVRJT05fRVJST1IgKHZvaWQpOwoKCiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rl
c3RydWN0b3IgKHZvaWQqKTsKCiAgICAgIENPUlJFTEFUSU9OX0VSUk9SICZvcGVyYXRvcj0gKGNv
bnN0IENPUlJFTEFUSU9OX0VSUk9SICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9p
ZCk7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1
dENEUiAmLAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoK
ICAgICAgdmlydHVhbCB2b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAm
LAogICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGlj
IENPUlJFTEFUSU9OX0VSUk9SICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAg
ICAgIHN0YXRpYyBDT1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFs
IENPUkJBOjpUeXBlQ29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBD
T1JCQTo6VHlwZUNvZGVfcHRyIF90Y19DT1JSRUxBVElPTl9FUlJPUjsKIyAyNjA1ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIERJU1BBVENIX0VSUk9SIDogcHVibGlj
IENPUkJBOjpVc2VyRXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgogICAgICBESVNQQVRDSF9F
UlJPUiAodm9pZCk7CgoKICAgICAgRElTUEFUQ0hfRVJST1IgKGNvbnN0IERJU1BBVENIX0VSUk9S
ICYpOwoKCiAgICAgIH5ESVNQQVRDSF9FUlJPUiAodm9pZCk7CgoKICAgICAgc3RhdGljIHZvaWQg
X3Rhb19hbnlfZGVzdHJ1Y3RvciAodm9pZCopOwoKICAgICAgRElTUEFUQ0hfRVJST1IgJm9wZXJh
dG9yPSAoY29uc3QgRElTUEFUQ0hfRVJST1IgJik7CgogICAgICB2aXJ0dWFsIHZvaWQgX3JhaXNl
ICh2b2lkKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfdGFvX2VuY29kZSAoCiAgICAgICAgICBUQU9f
T3V0cHV0Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHZvaWQgX3Rhb19kZWNvZGUgKAogICAgICAgICAgVEFPX0lucHV0
Q0RSICYsCiAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJgogICAgICAgICk7CgogICAgICBz
dGF0aWMgRElTUEFUQ0hfRVJST1IgKl9kb3duY2FzdCAoQ09SQkE6OkV4Y2VwdGlvbiAqKTsKCgoK
ICAgICAgc3RhdGljIENPUkJBOjpFeGNlcHRpb24gKl9hbGxvYyAodm9pZCk7CiAgICAgIHZpcnR1
YWwgQ09SQkE6OlR5cGVDb2RlX3B0ciBfdHlwZSAodm9pZCkgY29uc3Q7CiAgICB9OwoKc3RhdGlj
IENPUkJBOjpUeXBlQ29kZV9wdHIgX3RjX0RJU1BBVENIX0VSUk9SOwojIDI2NTEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluQy5oIgogICAgY2xhc3MgQ0FOVF9BUFBFTkRfT0JTRVJWRVIgOiBw
dWJsaWMgQ09SQkE6OlVzZXJFeGNlcHRpb24KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIENBTlRf
QVBQRU5EX09CU0VSVkVSICh2b2lkKTsKCgogICAgICBDQU5UX0FQUEVORF9PQlNFUlZFUiAoY29u
c3QgQ0FOVF9BUFBFTkRfT0JTRVJWRVIgJik7CgoKICAgICAgfkNBTlRfQVBQRU5EX09CU0VSVkVS
ICh2b2lkKTsKCgogICAgICBzdGF0aWMgdm9pZCBfdGFvX2FueV9kZXN0cnVjdG9yICh2b2lkKik7
CgogICAgICBDQU5UX0FQUEVORF9PQlNFUlZFUiAmb3BlcmF0b3I9IChjb25zdCBDQU5UX0FQUEVO
RF9PQlNFUlZFUiAmKTsKCiAgICAgIHZpcnR1YWwgdm9pZCBfcmFpc2UgKHZvaWQpOwoKICAgICAg
dmlydHVhbCB2b2lkIF90YW9fZW5jb2RlICgKICAgICAgICAgIFRBT19PdXRwdXRDRFIgJiwKICAg
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICAgKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgdm9pZCBfdGFvX2RlY29kZSAoCiAgICAgICAgICBUQU9fSW5wdXRDRFIgJiwKICAgICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmCiAgICAgICAgKTsKCiAgICAgIHN0YXRpYyBDQU5UX0FQUEVO
RF9PQlNFUlZFUiAqX2Rvd25jYXN0IChDT1JCQTo6RXhjZXB0aW9uICopOwoKCgogICAgICBzdGF0
aWMgQ09SQkE6OkV4Y2VwdGlvbiAqX2FsbG9jICh2b2lkKTsKICAgICAgdmlydHVhbCBDT1JCQTo6
VHlwZUNvZGVfcHRyIF90eXBlICh2b2lkKSBjb25zdDsKICAgIH07CgpzdGF0aWMgQ09SQkE6OlR5
cGVDb2RlX3B0ciBfdGNfQ0FOVF9BUFBFTkRfT0JTRVJWRVI7CiMgMjY5NyAiL2hvbWUvcnJwL3Nj
aG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZl
bnRDaGFubmVsQWRtaW5DLmgiCiAgICBjbGFzcyBDQU5UX1JFTU9WRV9PQlNFUlZFUiA6IHB1Ymxp
YyBDT1JCQTo6VXNlckV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKICAgICAgQ0FOVF9SRU1P
VkVfT0JTRVJWRVIgKHZvaWQpOwoKCiAgICAgIENBTlRfUkVNT1ZFX09CU0VSVkVSIChjb25zdCBD
QU5UX1JFTU9WRV9PQlNFUlZFUiAmKTsKCgogICAgICB+Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKHZv
aWQpOwoKCiAgICAgIHN0YXRpYyB2b2lkIF90YW9fYW55X2Rlc3RydWN0b3IgKHZvaWQqKTsKCiAg
ICAgIENBTlRfUkVNT1ZFX09CU0VSVkVSICZvcGVyYXRvcj0gKGNvbnN0IENBTlRfUkVNT1ZFX09C
U0VSVkVSICYpOwoKICAgICAgdmlydHVhbCB2b2lkIF9yYWlzZSAodm9pZCk7CgogICAgICB2aXJ0
dWFsIHZvaWQgX3Rhb19lbmNvZGUgKAogICAgICAgICAgVEFPX091dHB1dENEUiAmLAogICAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICYKICAgICAgICApIGNvbnN0OwoKICAgICAgdmlydHVhbCB2
b2lkIF90YW9fZGVjb2RlICgKICAgICAgICAgIFRBT19JbnB1dENEUiAmLAogICAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICYKICAgICAgICApOwoKICAgICAgc3RhdGljIENBTlRfUkVNT1ZFX09C
U0VSVkVSICpfZG93bmNhc3QgKENPUkJBOjpFeGNlcHRpb24gKik7CgoKCiAgICAgIHN0YXRpYyBD
T1JCQTo6RXhjZXB0aW9uICpfYWxsb2MgKHZvaWQpOwogICAgICB2aXJ0dWFsIENPUkJBOjpUeXBl
Q29kZV9wdHIgX3R5cGUgKHZvaWQpIGNvbnN0OwogICAgfTsKCnN0YXRpYyBDT1JCQTo6VHlwZUNv
ZGVfcHRyIF90Y19DQU5UX1JFTU9WRV9PQlNFUlZFUjsKCgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6U3VwcGxpZXJBZG1pbl9wdHIgZm9yX3N1cHBsaWVycyAoCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAgICAgUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpPYnNlcnZlcl9wdHIgZ3csCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VS
Uk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JT
RVJWRVIgKTsKCgoKCgogICAgdmlydHVhbCB2b2lkIHJlbW92ZV9vYnNlcnZlciAoCiAgICAgICAg
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6
U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lO
Q0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6
Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKTsKCgoKCgogICAgdmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBf
aXNfYSAoCiAgICAgICAgY29uc3QgQ09SQkE6OkNoYXIgKnR5cGVfaWQsCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAg
IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkICpf
dGFvX1F1ZXJ5SW50ZXJmYWNlIChwdHJfYXJpdGhfdCB0eXBlKTsKCiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogIHByaXZhdGU6
CiAgICBfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fRXZlbnRDaGFubmVs
X1Byb3h5X0Jyb2tlcl87CgogIHByb3RlY3RlZDoKICAgIEV2ZW50Q2hhbm5lbCAoaW50IGNvbGxv
Y2F0ZWQgPSAwKTsKCgoKICAgIHZpcnR1YWwgdm9pZCBSdGVjRXZlbnRDaGFubmVsQWRtaW5fRXZl
bnRDaGFubmVsX3NldHVwX2NvbGxvY2F0aW9uIChpbnQgY29sbG9jYXRlZCk7CgogICAgRXZlbnRD
aGFubmVsICgKICAgICAgICBUQU9fU3R1YiAqb2JqcmVmLAogICAgICAgIENPUkJBOjpCb29sZWFu
IF90YW9fY29sbG9jYXRlZCA9IDAsCiAgICAgICAgVEFPX0Fic3RyYWN0X1NlcnZhbnRCYXNlICpz
ZXJ2YW50ID0gMAogICAgICApOwoKICAgIGZyaWVuZCBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9S
ZW1vdGVfUHJveHlfSW1wbDsKICAgIGZyaWVuZCBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9UaHJ1
UE9BX1Byb3h5X0ltcGw7CiAgICBmcmllbmQgY2xhc3MgX1RBT19FdmVudENoYW5uZWxfRGlyZWN0
X1Byb3h5X0ltcGw7CgogICAgdmlydHVhbCB+RXZlbnRDaGFubmVsICh2b2lkKTsKCiAgcHJpdmF0
ZToKICAgIEV2ZW50Q2hhbm5lbCAoY29uc3QgRXZlbnRDaGFubmVsICYpOwogICAgdm9pZCBvcGVy
YXRvcj0gKGNvbnN0IEV2ZW50Q2hhbm5lbCAmKTsKICB9OwojIDI4MzEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5oIgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0ltcGwKICAg
IDogcHVibGljIHZpcnR1YWwgVEFPX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAg
IHZpcnR1YWwgfl9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQogICAgdmly
dHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1l
cnMgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg
dmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW5fcHRyIGZvcl9zdXBw
bGllcnMgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgog
ICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICkgPSAwOwoKCgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2Vy
dmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxv
Y2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZl
cl9wdHIgZ3csCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VS
Uk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JT
RVJWRVIgKSA9IDA7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVfb2JzZXJ2ZXIgKAogICAg
ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50
Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2
ZW50Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKSA9IDA7CgoKCgoKCiAgcHJvdGVjdGVk
OgogICAgX1RBT19FdmVudENoYW5uZWxfUHJveHlfSW1wbCAodm9pZCk7CiAgfTsKIyAyODk2ICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJz
dmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9S
ZW1vdGVfUHJveHlfSW1wbAogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q
cm94eV9JbXBsLAogICAgICBwdWJsaWMgdmlydHVhbCBUQU9fUmVtb3RlX09iamVjdF9Qcm94eV9J
bXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRDaGFubmVsX1JlbW90ZV9Qcm94eV9JbXBs
ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfSW1w
bCAodm9pZCkgeyB9CiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB
ZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRl
ZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKTsKCgoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFk
bWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVk
X3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2Vw
dGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAgICAgIENPUkJBX09iamVj
dCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAgICAgQ09SQkFfT2JqZWN0
ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46
Ok9ic2VydmVyX3B0ciBndywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpTWU5DSFJPTkla
QVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX0FQ
UEVORF9PQlNFUlZFUiApOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlX29ic2VydmVyICgK
ICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIFJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAg
IHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpF
dmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICk7CgoKCgoKCiAgfTsKIyAyOTY3
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIKICAgIGNsYXNzIF9UQU9fRXZlbnRDaGFu
bmVsX1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIH5fVEFPX0V2ZW50Q2hh
bm5lbF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogICAgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q
cm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIEV2ZW50Q2hhbm5lbCAqb2JqZWN0LAog
ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0gVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKSA9IDA7CgogIHByb3RlY3RlZDoK
ICAgIF9UQU9fRXZlbnRDaGFubmVsX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogIH07CiMgMjk5MCAi
L2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Ji
c3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgiCiAgY2xhc3MgX1RBT19FdmVudENoYW5uZWxf
UmVtb3RlX1Byb3h5X0Jyb2tlcgogICAgOiBwdWJsaWMgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5l
bF9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgX1RBT19FdmVudENoYW5uZWxfUmVtb3Rl
X1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19FdmVudENoYW5uZWxfUmVt
b3RlX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCBfVEFPX0V2ZW50Q2hhbm5lbF9Q
cm94eV9JbXBsICZzZWxlY3RfcHJveHkgKAogICAgICAgIEV2ZW50Q2hhbm5lbCAqb2JqZWN0LAog
ICAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgICAgICk7CgogIHByaXZhdGU6CiAgICBfVEFPX0V2ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlf
SW1wbCByZW1vdGVfcHJveHlfaW1wbF87CgogIHB1YmxpYzoKCgoKICAgIHN0YXRpYyBfVEFPX0V2
ZW50Q2hhbm5lbF9SZW1vdGVfUHJveHlfQnJva2VyICp0aGVfVEFPX0V2ZW50Q2hhbm5lbF9SZW1v
dGVfUHJveHlfQnJva2VyICh2b2lkKTsKICB9OwojIDMwMjAgIi9ob21lL3JycC9zY2hvb2wvdGhl
c2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5l
bEFkbWluQy5oIgogIGV4dGVybiBDT1JCQTo6VHlwZUNvZGVfcHRyIF90Y19FdmVudENoYW5uZWw7
CgoKfQoKCgoKZXh0ZXJuClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19Qcm94eVB1c2hTdXBw
bGllcl9Qcm94eV9Ccm9rZXIgKgooKlJ0ZWNFdmVudENoYW5uZWxBZG1pbl9fVEFPX1Byb3h5UHVz
aFN1cHBsaWVyX1Byb3h5X0Jyb2tlcl9GYWN0b3J5X2Z1bmN0aW9uX3BvaW50ZXIpICgKICAgIENP
UkJBOjpPYmplY3RfcHRyIG9iagogICk7CgpleHRlcm4KUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpf
VEFPX1Byb3h5UHVzaENvbnN1bWVyX1Byb3h5X0Jyb2tlciAqCigqUnRlY0V2ZW50Q2hhbm5lbEFk
bWluX19UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25f
cG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4dGVybgpSdGVjRXZl
bnRDaGFubmVsQWRtaW46Ol9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9Ccm9rZXIgKgooKlJ0ZWNF
dmVudENoYW5uZWxBZG1pbl9fVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfQnJva2VyX0ZhY3Rvcnlf
ZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAgKTsKCmV4dGVy
bgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIg
KgooKlJ0ZWNFdmVudENoYW5uZWxBZG1pbl9fVEFPX1N1cHBsaWVyQWRtaW5fUHJveHlfQnJva2Vy
X0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIgb2JqCiAg
KTsKCmV4dGVybgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fT2JzZXJ2ZXJfUHJveHlfQnJv
a2VyICoKKCpSdGVjRXZlbnRDaGFubmVsQWRtaW5fX1RBT19PYnNlcnZlcl9Qcm94eV9Ccm9rZXJf
RmFjdG9yeV9mdW5jdGlvbl9wb2ludGVyKSAoCiAgICBDT1JCQTo6T2JqZWN0X3B0ciBvYmoKICAp
OwoKZXh0ZXJuClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19FdmVudENoYW5uZWxfUHJveHlf
QnJva2VyICoKKCpSdGVjRXZlbnRDaGFubmVsQWRtaW5fX1RBT19FdmVudENoYW5uZWxfUHJveHlf
QnJva2VyX0ZhY3RvcnlfZnVuY3Rpb25fcG9pbnRlcikgKAogICAgQ09SQkE6Ok9iamVjdF9wdHIg
b2JqCiAgKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55
ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAmKTsKICAg
ICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkKik7CiAgICAgICAgICAgICAgICAgICBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6
OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkIComKTsKICAgICAgICAgICAgICAgICAgIHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpUeXBlRXJyb3IgJik7CiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JC
QTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6VHlwZUVycm9yKik7CiAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciAqJik7CiAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciAqJik7CiAgICAgICAgICAgICAgICAgICB2b2lk
IG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeSAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB
OjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5Kik7CiAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKiYpOwogICAgICAgICAgICAgICAgICAg
Q09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComKTsKICAgICAgICAgICAgICAgICAgIHZv
aWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpEZXBlbmRlbmN5U2V0ICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAo
Q09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQqKTsKICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAqJik7CiAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAm
LCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKiYpOwogICAgICAg
ICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBv
cGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVy
UU9TKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29u
c3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TIComKTsK
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JC
QTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKiYpOwog
ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYpOwogICAgICAgICAgICAgICAgICAg
dm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1
YmxpY2F0aW9uKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u
IComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25z
dCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24g
KiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBj
b25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0ICYpOwogICAgICAgICAg
ICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OlB1YmxpY2F0aW9uU2V0Kik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlB1YmxpY2F0aW9uU2V0IComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9w
ZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6UHVibGljYXRpb25TZXQgKiYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T
ICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TKik7CiAgICAgICAgICAgICAgICAgICBD
T1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TIComKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIGNvbnN0IFJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKiYpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgb3Bl
cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT
dXBwbGllcl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT
dXBwbGllciAqJik7CgogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6
OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0cik7CiAg
ICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6
OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyIComKTsKCiAg
ICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09S
QkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpDb25zdW1lckFkbWluIComKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9w
ZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJB
ZG1pbl9wdHIpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0g
KGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu
IComKTsKCiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYs
IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyKTsKICAgICAgICAgICAgICAgICAg
IENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXIgKiYpOwoKICAgICAgICAgICAgICAgICAgIHZvaWQgb3Bl
cmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5u
ZWxfcHRyKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChj
b25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsICom
KTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29u
c3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F
UlJPUiAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkg
JiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F
UlJPUiopOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNv
bnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZ
TkNIUk9OSVpBVElPTl9FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVh
biBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SIComKTsKICAgICAgICAg
ICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAmKTsKICAgICAgICAgICAgICAg
ICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiopOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JC
QTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6UU9TX0VSUk9SIComKTsKICAgICAgICAgICAg
ICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiAmKTsKICAgICAgICAg
ICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiopOwogICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlNDUklQVElPTl9FUlJPUiAqJik7
CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09S
QkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1VC
U0NSSVBUSU9OX0VSUk9SIComKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0g
KENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6
OkNPUlJFTEFUSU9OX0VSUk9SICYpOwogICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8
PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q09S
UkVMQVRJT05fRVJST1IqKTsKICAgICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPj49IChjb25zdCBDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD
aGFubmVsOjpDT1JSRUxBVElPTl9FUlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRD
aGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q09SUkVMQVRJT05fRVJST1IgKiYpOwogICAgICAg
ICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6RElTUEFUQ0hfRVJST1IgJik7CiAgICAgICAg
ICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55ICYsIFJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9FUlJPUiopOwogICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkRJU1BBVENIX0VSUk9SIComKTsKICAgICAg
ICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6QW55
ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9F
UlJPUiAqJik7CiAgICAgICAgICAgICAgICAgICB2b2lkIG9wZXJhdG9yPDw9IChDT1JCQTo6QW55
ICYsIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX0FQUEVO
RF9PQlNFUlZFUiAmKTsKICAgICAgICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJB
OjpBbnkgJiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5E
X09CU0VSVkVSKik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5l
bDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIgKiYpOwogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+Pj0gKGNvbnN0IENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09CU0VSVkVSIComKTsKICAgICAg
ICAgICAgICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKENPUkJBOjpBbnkgJiwgY29uc3QgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICYpOwog
ICAgICAgICAgICAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoQ09SQkE6OkFueSAmLCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIqKTsKICAg
ICAgICAgICAgICAgICAgIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj49IChjb25zdCBDT1JCQTo6
QW55ICYsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5UX1JFTU9WRV9P
QlNFUlZFUiAqJik7CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+
PSAoY29uc3QgQ09SQkE6OkFueSAmLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50
Q2hhbm5lbDo6Q0FOVF9SRU1PVkVfT0JTRVJWRVIgKiYpOwojIDMyMjcgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIiAxCiMg
MzQgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz
L29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6RGVwZW5kZW5jeV92YXIgKHZvaWQpCiAgOiBwdHJfICgw
KQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6OkRlcGVu
ZGVuY3lfdmFyIChEZXBlbmRlbmN5ICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpEZXBlbmRlbmN5X3ZhciAoY29uc3QgOjpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICZwKQp7CiAgaWYgKHAucHRyXykK
ICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeSAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJu
b19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRo
aXMtPnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5
X3Zhcjo6fkRlcGVuZGVuY3lfdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlu
bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICYKUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3I9IChEZXBlbmRlbmN5ICpwKQp7CiAg
ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyICYKUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAg
IHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlz
LT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAg
ICAgICAgewogICAgICAgICAgRGVwZW5kZW5jeSAqZGVlcF9jb3B5ID0KICAgICAgICAgICAgbmV3
IERlcGVuZGVuY3kgKCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIERlcGVuZGVuY3kgKnRtcCA9IGRlZXBfY29weTsKICAg
ICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0
cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVu
ZGVuY3lfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1
cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5j
eV92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5
ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkRlcGVuZGVuY3kgJigpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsK
fQoKCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFyOjpvcGVyYXRv
ciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqJigpCnsKICByZXR1cm4gdGhp
cy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRl
bmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X3Zhcjo6aW4gKHZvaWQpIGNv
bnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6RGVwZW5kZW5jeSAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV92YXI6
Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVw
ZW5kZW5jeV92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfdmFy
OjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICp0
bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGlu
ZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqClJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6RGVwZW5kZW5jeV92YXI6OnB0ciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQ6
OkRlcGVuZGVuY3lfb3V0ICg6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqJnAp
CiAgOiBwdHJfIChwKQp7CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0OjpEZXBlbmRlbmN5X291dCAoRGVwZW5kZW5jeV92YXIg
JnApCiAgOiBwdHJfIChwLm91dCAoKSkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0
cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X291dDo6
RGVwZW5kZW5jeV9vdXQgKGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5
X291dCAmcCkKICA6IHB0cl8gKGNvbnN0X2Nhc3Q8RGVwZW5kZW5jeV9vdXQmPiAocCkucHRyXykK
e30KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0ICYKUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5X291dDo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29u
c3RfY2FzdDxEZXBlbmRlbmN5X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5s
aW5lIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeV9vdXQgJgpSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvcj0gKERlcGVuZGVuY3kgKnApCnsKICB0
aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeSAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVw
ZW5kZW5jeV9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUg
OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKgpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkRlcGVuZGVuY3lfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0
cl87Cn0KIyAyMzAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6
YWxsb2NidWYgKENPUkJBOjpVTG9uZyBzaXplKQoKewogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeSAqcmV0dmFsID0gMDsKICBkbyB7IHRyeSB7IHJldHZhbCA9IG5ldyBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lbc2l6ZV07IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9j
KSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7IH0gfSB3aGlsZSAoMCk7
CiAgcmV0dXJuIHJldHZhbDsKfQoKaW5saW5lIHZvaWQgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpf
VEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNl
dDo6ZnJlZWJ1ZiAoUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICpidWZmZXIpCgp7
CiAgZGVsZXRlIFtdIGJ1ZmZlcjsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6
Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5
U2V0ICh2b2lkKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjpfVEFPX1Vu
Ym91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldCAoQ09S
QkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKG1heGlt
dW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRl
bmN5U2V0OjphbGxvY2J1ZiAobWF4aW11bSkpCnsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVu
ZGVuY3lTZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9E
ZXBlbmRlbmN5U2V0IChDT1JCQTo6VUxvbmcgbWF4aW11bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3Ro
LAogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqZGF0YSwKICBDT1JCQTo6Qm9v
bGVhbiByZWxlYXNlKQo6IFRBT19VbmJvdW5kZWRfQmFzZV9TZXF1ZW5jZSAobWF4aW11bSwgbGVu
Z3RoLCBkYXRhLCByZWxlYXNlKQp7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9U
QU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0
OjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5j
eVNldCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
X0RlcGVuZGVuY3lTZXQgJnJocykKCiAgOiBUQU9fVW5ib3VuZGVkX0Jhc2VfU2VxdWVuY2UgKHJo
cykKewogIGlmIChyaHMuYnVmZmVyXyAhPSAwKQogIHsKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RGVwZW5kZW5jeSAqdG1wMSA9IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENo
YW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjphbGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAg
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICogY29uc3QgdG1wMiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICo+IChyaHMuYnVmZmVy
Xyk7CgogICAgZm9yIChDT1JCQTo6VUxvbmcgaSA9IDA7IGkgPCB0aGlzLT5sZW5ndGhfOyArK2kp
CiAgICAgIHRtcDFbaV0gPSB0bXAyW2ldOwoKICAgIHRoaXMtPmJ1ZmZlcl8gPSB0bXAxOwogIH0K
ICBlbHNlCiAgewogICAgdGhpcy0+YnVmZmVyXyA9IDA7CiAgfQp9CgppbmxpbmUgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt
aW5fRGVwZW5kZW5jeVNldCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRf
U2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6Om9wZXJhdG9yPSAo
Y29uc3QgX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVu
ZGVuY3lTZXQgJnJocykKCnsKICBpZiAodGhpcyA9PSAmcmhzKQogICAgcmV0dXJuICp0aGlzOwoK
ICBpZiAodGhpcy0+cmVsZWFzZV8pCiAgewogICAgaWYgKHRoaXMtPm1heGltdW1fIDwgcmhzLm1h
eGltdW1fKQogICAgewoKICAgICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICp0
bXAgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAq
PiAodGhpcy0+YnVmZmVyXyk7CiAgICAgIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbl9EZXBlbmRlbmN5U2V0OjpmcmVlYnVmICh0bXApOwogICAgICB0aGlzLT5i
dWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0Rl
cGVuZGVuY3lTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0KICBlbHNlCiAg
ICB0aGlzLT5idWZmZXJfID0gX1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l
bEFkbWluX0RlcGVuZGVuY3lTZXQ6OmFsbG9jYnVmIChyaHMubWF4aW11bV8pOwoKICBUQU9fVW5i
b3VuZGVkX0Jhc2VfU2VxdWVuY2U6Om9wZXJhdG9yPSAocmhzKTsKCiAgUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpEZXBlbmRlbmN5ICp0bXAxID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkRlcGVuZGVuY3kgKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6RGVwZW5kZW5jeSAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqPiAocmhzLmJ1ZmZlcl8pOwoKICBmb3IgKENP
UkJBOjpVTG9uZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgIHRtcDFbaV0gPSB0
bXAyW2ldOwoKICByZXR1cm4gKnRoaXM7Cn0KCgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpEZXBlbmRlbmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1
ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6b3BlcmF0b3JbXSAoQ09S
QkE6OlVMb25nIGkpCgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50IF9f
YWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19fID0g
QUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hh
bm5lbEFkbWluQy5pIiwgMzIyLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVzdGFydCAoKSwg
YWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkpOyBhY2VfX18t
PmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFzc2VydGlvbiBm
YWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7IH0gfSB3aGls
ZSAoMCk7CiAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5KiB0bXAgPSByZWludGVy
cHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSo+ICh0aGlzLT5idWZm
ZXJfKTsKICByZXR1cm4gdG1wW2ldOwp9CgppbmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpEZXBlbmRlbmN5ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9T
ZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6b3BlcmF0b3JbXSAo
Q09SQkE6OlVMb25nIGkpIGNvbnN0Cgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykp
IHsgaW50IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAq
YWNlX19fID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluQy5pIiwgMzMxLCAtMSwgX19hY2VfZXJyb3IsIGFjZV9fXy0+cmVz
dGFydCAoKSwgYWNlX19fLT5tc2dfb3N0cmVhbSAoKSwgYWNlX19fLT5tc2dfY2FsbGJhY2sgKCkp
OyBhY2VfX18tPmxvZyAoTE1fRVJST1IsICJBQ0VfQVNTRVJUOiBmaWxlICVOLCBsaW5lICVsIGFz
c2VydGlvbiBmYWlsZWQgZm9yICclcycuJWFcbiIsICJpIDwgdGhpcy0+bWF4aW11bV8iLCAtMSk7
IH0gfSB3aGlsZSAoMCk7CiAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICogY29u
c3QgdG1wID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVu
Y3kqPiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFP
X1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fRGVwZW5kZW5jeVNldDo6
Z2V0X2J1ZmZlciAoQ09SQkE6OkJvb2xlYW4gb3JwaGFuKQp7CiAgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpEZXBlbmRlbmN5ICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICB7CgogICAg
aWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgIHsKICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6OmFsbG9jYnVm
ICh0aGlzLT5sZW5ndGhfKTsKICAgICAgdGhpcy0+YnVmZmVyXyA9IHJlc3VsdDsKICAgICAgdGhp
cy0+cmVsZWFzZV8gPSAxOwogICAgfQogICAgZWxzZQogICAgewogICAgICByZXN1bHQgPSByZWlu
dGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSo+ICh0aGlzLT5i
dWZmZXJfKTsKICAgIH0KICB9CiAgZWxzZQogIHsKICAgIGlmICh0aGlzLT5yZWxlYXNlXyAhPSAw
KQogICAgewoKCiAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpEZXBlbmRlbmN5Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB0aGlzLT5tYXhpbXVt
XyA9IDA7CiAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICB0aGlzLT5idWZmZXJfID0gMDsK
ICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9Cgpp
bmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICoKUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt
aW5fRGVwZW5kZW5jeVNldDo6Z2V0X2J1ZmZlciAodm9pZCkgY29uc3QKewogIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqPiAo
dGhpcy0+YnVmZmVyXyk7Cn0KCmlubGluZSB2b2lkClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB
T19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6
OnJlcGxhY2UgKENPUkJBOjpVTG9uZyBtYXgsCkNPUkJBOjpVTG9uZyBsZW5ndGgsClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAqZGF0YSwKQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkK
ewogIHRoaXMtPm1heGltdW1fID0gbWF4OwogIHRoaXMtPmxlbmd0aF8gPSBsZW5ndGg7CiAgaWYg
KHRoaXMtPmJ1ZmZlcl8gJiYgdGhpcy0+cmVsZWFzZV8gPT0gMSkKICB7CiAgICBSdGVjRXZlbnRD
aGFubmVsQWRtaW46OkRlcGVuZGVuY3kgKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5Kj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgX1RBT19VbmJv
dW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX0RlcGVuZGVuY3lTZXQ6OmZyZWVi
dWYgKHRtcCk7CiAgfQogIHRoaXMtPmJ1ZmZlcl8gPSBkYXRhOwogIHRoaXMtPnJlbGVhc2VfID0g
cmVsZWFzZTsKfQojIDQwNyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjpEZXBlbmRlbmN5U2V0X3Zh
ciAodm9pZCkKICA6IHB0cl8gKDApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE
ZXBlbmRlbmN5U2V0X3Zhcjo6RGVwZW5kZW5jeVNldF92YXIgKERlcGVuZGVuY3lTZXQgKnApCiAg
OiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNl
dF92YXI6OkRlcGVuZGVuY3lTZXRfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeVNldF92YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAgZG8geyB0cnkgeyB0aGlz
LT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICgqcC5w
dHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9
IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQogICAgdGhpcy0+cHRyXyA9IDA7Cn0K
CmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjp+RGVwZW5k
ZW5jeVNldF92YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5saW5lIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkRlcGVuZGVuY3lTZXRfdmFyOjpvcGVyYXRvcj0gKERlcGVuZGVuY3lTZXQgKnApCnsKICBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlu
bGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXIgJgpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfdmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3ZhciAmcCkKewogIGlmICh0aGlzICE9
ICZwKQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVs
ZXRlIHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBEZXBlbmRlbmN5U2V0ICpkZWVwX2NvcHkgPQogICAg
ICAgICAgICBuZXcgRGVwZW5kZW5jeVNldCAoKnAucHRyXyk7CgogICAgICAgICAgaWYgKGRlZXBf
Y29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgRGVwZW5kZW5jeVNldCAqdG1w
ID0gZGVlcF9jb3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAg
ICAgICAgICAgdGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGlu
ZSBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAqClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpEZXBlbmRlbmN5U2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zh
cjo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgJigpIGNvbnN0CnsKICByZXR1cm4g
KnRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lT
ZXRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldCAm
KCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE
ZXBlbmRlbmN5U2V0ICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5l
ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComKCkKewogIHJldHVybiB0aGlzLT5w
dHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5ICYKUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6b3BlcmF0b3JbXSAoQ09SQkE6OlVM
b25nIGluZGV4KQp7CiAgcmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQoK
aW5saW5lIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeSAmClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9u
ZyBpbmRleCkgY29uc3QKewogIHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6RGVwZW5kZW5jeSAmPiAodGhpcy0+cHRyXy0+b3BlcmF0b3JbXSAoaW5kZXgpKTsK
fQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICYK
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0
CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RGVwZW5kZW5jeVNldCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92
YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RGVwZW5kZW5jeVNldF92YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwog
IHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRl
cGVuZGVuY3lTZXRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpEZXBlbmRlbmN5U2V0ICp0bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJl
dHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNl
dCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF92YXI6OnB0ciAodm9pZCkg
Y29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQ6OkRlcGVuZGVuY3lTZXRfb3V0IChEZXBlbmRlbmN5
U2V0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQ6OkRlcGVuZGVuY3lTZXRfb3V0IChE
ZXBlbmRlbmN5U2V0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMt
PnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46
OkRlcGVuZGVuY3lTZXRfb3V0OjpEZXBlbmRlbmN5U2V0X291dCAoY29uc3QgOjpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxE
ZXBlbmRlbmN5U2V0X291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpEZXBlbmRlbmN5U2V0X291dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RGVwZW5k
ZW5jeVNldF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRl
cGVuZGVuY3lTZXRfb3V0ICZwKQp7CiAgdGhpcy0+cHRyXyA9IGNvbnN0X2Nhc3Q8RGVwZW5kZW5j
eVNldF9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSA6OlJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RGVwZW5kZW5jeVNldF9vdXQgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46
OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvcj0gKERlcGVuZGVuY3lTZXQgKnApCnsKICB0aGlz
LT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeVNldCAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RGVwZW5kZW5jeVNldF9vdXQ6OnB0ciAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9
CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXQgKgpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVu
ZGVuY3kgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkRlcGVuZGVuY3lTZXRfb3V0OjpvcGVyYXRv
cltdIChDT1JCQTo6VUxvbmcgaW5kZXgpCnsKICByZXR1cm4gdGhpcy0+cHRyXy0+b3BlcmF0b3Jb
XSAoaW5kZXgpOwp9CiMgNjIxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaSIKaW5saW5l
ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpDb25zdW1lclFPU192YXIg
KHZvaWQpCiAgOiBwdHJfICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u
c3VtZXJRT1NfdmFyOjpDb25zdW1lclFPU192YXIgKENvbnN1bWVyUU9TICpwKQogIDogcHRyXyAo
cCkKe30KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6Q29u
c3VtZXJRT1NfdmFyIChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nf
dmFyICZwKQp7CiAgaWYgKHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6
OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKCpwLnB0cl8pOyB9IGNhdGNoIChz
dGQ6OmJhZF9hbGxvYykgeyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9
IHdoaWxlICgwKTsKICBlbHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjp+Q29uc3VtZXJRT1NfdmFyICh2b2lkKQp7
CiAgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNv
bnN1bWVyUU9TX3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpv
cGVyYXRvcj0gKENvbnN1bWVyUU9TICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkNvbnN1bWVyUU9TX3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nf
dmFyOjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP
U192YXIgJnApCnsKICBpZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAw
KQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+
cHRyXyA9IDA7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgQ29uc3Vt
ZXJRT1MgKmRlZXBfY29weSA9CiAgICAgICAgICAgIG5ldyBDb25zdW1lclFPUyAoKnAucHRyXyk7
CgogICAgICAgICAgaWYgKGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgQ29uc3VtZXJRT1MgKnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkg
PSB0aGlzLT5wdHJfOwogICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAg
ICAgZGVsZXRlIGRlZXBfY29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1
bWVyUU9TICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6Om9wZXJhdG9y
LT4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u
c3VtZXJRT1NfdmFyOjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K
CmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6b3BlcmF0b3Ig
Y29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYoKSBjb25zdAp7CiAg
cmV0dXJuICp0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25z
dW1lclFPU192YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFP
UyAmKCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
Q29uc3VtZXJRT1MgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUK
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6Om9wZXJhdG9yIDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsK
fQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmClJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjppbiAodm9pZCkgY29uc3QKewog
IHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpD
b25zdW1lclFPUyAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1NfdmFyOjppbm91
dCAodm9pZCkKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1l
clFPU192YXI6Om91dCAodm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g
PSAwOwogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkNvbnN1bWVyUU9TICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU192YXI6
Ol9yZXRuICh2b2lkKQp7CiAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICp0
bXAgPSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGlu
ZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgKgpSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkNvbnN1bWVyUU9TX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCgoKCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19v
dXQ6OkNvbnN1bWVyUU9TX291dCAoOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9T
IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpDb25zdW1lclFPU19vdXQgKENvbnN1bWVy
UU9TX3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAg
dGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVy
UU9TX291dDo6Q29uc3VtZXJRT1Nfb3V0IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
Q29uc3VtZXJRT1Nfb3V0ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxDb25zdW1lclFPU19vdXQm
PiAocCkucHRyXykKe30KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9T
X291dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpvcGVyYXRvcj0g
KGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19vdXQgJnApCnsKICB0
aGlzLT5wdHJfID0gY29uc3RfY2FzdDxDb25zdW1lclFPU19vdXQmPiAocCkucHRyXzsKICByZXR1
cm4gKnRoaXM7Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291
dCAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1Nfb3V0OjpvcGVyYXRvcj0gKENv
bnN1bWVyUU9TICpwKQp7CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9Cgppbmxp
bmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPU19vdXQ6Om9wZXJhdG9yIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRy
XzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAqJgpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJu
IHRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJR
T1MgKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TX291dDo6b3BlcmF0b3ItPiAo
dm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpQdWJsaWNhdGlvbl92YXIgKHZvaWQpCiAgOiBwdHJf
ICgwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpQ
dWJsaWNhdGlvbl92YXIgKFB1YmxpY2F0aW9uICpwKQogIDogcHRyXyAocCkKe30KCmlubGluZQpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3Zhcjo6UHVibGljYXRpb25fdmFyIChj
b25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyICZwKQp7CiAgaWYg
KHAucHRyXykKICAgIGRvIHsgdHJ5IHsgdGhpcy0+cHRyXyA9IG5ldyA6OlJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6UHVibGljYXRpb24gKCpwLnB0cl8pOyB9IGNhdGNoIChzdGQ6OmJhZF9hbGxvYykg
eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMTI7IHJldHVybjsgfSB9IHdoaWxlICgwKTsKICBl
bHNlCiAgICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHVibGljYXRpb25fdmFyOjp+UHVibGljYXRpb25fdmFyICh2b2lkKQp7CiAgZGVsZXRlIHRoaXMt
PnB0cl87Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3ZhciAm
ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpvcGVyYXRvcj0gKFB1Ymxp
Y2F0aW9uICpwKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0
dXJuICp0aGlzOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u
X3ZhciAmClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpvcGVyYXRvcj0g
KGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXIgJnApCnsKICBp
ZiAodGhpcyAhPSAmcCkKICAgIHsKICAgICAgaWYgKHAucHRyXyA9PSAwKQogICAgICAgIHsKICAg
ICAgICAgIGRlbGV0ZSB0aGlzLT5wdHJfOwogICAgICAgICAgdGhpcy0+cHRyXyA9IDA7CiAgICAg
ICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgUHVibGljYXRpb24gKmRlZXBfY29w
eSA9CiAgICAgICAgICAgIG5ldyBQdWJsaWNhdGlvbiAoKnAucHRyXyk7CgogICAgICAgICAgaWYg
KGRlZXBfY29weSAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgUHVibGljYXRpb24g
KnRtcCA9IGRlZXBfY29weTsKICAgICAgICAgICAgICBkZWVwX2NvcHkgPSB0aGlzLT5wdHJfOwog
ICAgICAgICAgICAgIHRoaXMtPnB0cl8gPSB0bXA7CiAgICAgICAgICAgICAgZGVsZXRlIGRlZXBf
Y29weTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgcmV0dXJuICp0aGlzOwp9Cgpp
bmxpbmUgY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICoKUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9wZXJhdG9yLT4gKHZvaWQpIGNvbnN0
CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQdWJsaWNhdGlvbiAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjpv
cGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX3Zhcjo6b3BlcmF0b3IgY29uc3QgOjpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYoKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9w
ZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmKCkKewogIHJldHVy
biAqdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp
b25fdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gJigp
IGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQdWJsaWNhdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIGNvbnN0
IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmClJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHVibGljYXRpb25fdmFyOjppbiAodm9pZCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+
cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmClJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fdmFyOjppbm91dCAodm9pZCkKewogIHJl
dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi
bGljYXRpb24gKiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Om91dCAo
dm9pZCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u
ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl92YXI6Ol9yZXRuICh2b2lkKQp7
CiAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAgPSB0aGlzLT5wdHJf
OwogIHRoaXMtPnB0cl8gPSAwOwogIHJldHVybiB0bXA7Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6UHVibGljYXRpb24gKgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0
aW9uX3Zhcjo6cHRyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCgoKCgpp
bmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQ6OlB1YmxpY2F0aW9u
X291dCAoOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uIComcCkKICA6IHB0cl8g
KHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHVibGljYXRpb25fb3V0OjpQdWJsaWNhdGlvbl9vdXQgKFB1YmxpY2F0aW9uX3ZhciAmcCkKICA6
IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7
Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dDo6UHVibGlj
YXRpb25fb3V0IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0
ICZwKQogIDogcHRyXyAoY29uc3RfY2FzdDxQdWJsaWNhdGlvbl9vdXQmPiAocCkucHRyXykKe30K
CmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dCAmClJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0OjpvcGVyYXRvcj0gKGNvbnN0IDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQgJnApCnsKICB0aGlzLT5wdHJfID0gY29u
c3RfY2FzdDxQdWJsaWNhdGlvbl9vdXQmPiAocCkucHRyXzsKICByZXR1cm4gKnRoaXM7Cn0KCmlu
bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dCAmClJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6UHVibGljYXRpb25fb3V0OjpvcGVyYXRvcj0gKFB1YmxpY2F0aW9uICpwKQp7
CiAgdGhpcy0+cHRyXyA9IHA7CiAgcmV0dXJuICp0aGlzOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpQdWJsaWNhdGlvbl9vdXQ6Om9wZXJhdG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpQdWJsaWNhdGlvbiAqJigpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqJgpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OlB1YmxpY2F0aW9uX291dDo6cHRyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K
CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKgpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uX291dDo6b3BlcmF0b3ItPiAodm9pZCkKewogIHJldHVy
biB0aGlzLT5wdHJfOwp9CiMgMTAxMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlu
bGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICoKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi
bGljYXRpb25TZXQ6OmFsbG9jYnVmIChDT1JCQTo6VUxvbmcgc2l6ZSkKCnsKICBSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICpyZXR2YWwgPSAwOwogIGRvIHsgdHJ5IHsgcmV0dmFs
ID0gbmV3IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25bc2l6ZV07IH0gY2F0Y2gg
KHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuIDA7
IH0gfSB3aGlsZSAoMCk7CiAgcmV0dXJuIHJldHZhbDsKfQoKaW5saW5lIHZvaWQgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt
aW5fUHVibGljYXRpb25TZXQ6OmZyZWVidWYgKFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj
YXRpb24gKmJ1ZmZlcikKCnsKICBkZWxldGUgW10gYnVmZmVyOwp9CgppbmxpbmUKUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRt
aW5fUHVibGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5u
ZWxBZG1pbl9QdWJsaWNhdGlvblNldCAodm9pZCkKewp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVi
bGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1p
bl9QdWJsaWNhdGlvblNldCAoQ09SQkE6OlVMb25nIG1heGltdW0pCiAgOiBUQU9fVW5ib3VuZGVk
X0Jhc2VfU2VxdWVuY2UgKG1heGltdW0sIF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6YWxsb2NidWYgKG1heGltdW0pKQp7Cn0KCmlu
bGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNF
dmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2Vf
UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0IChDT1JCQTo6VUxvbmcgbWF4aW11
bSwKICBDT1JCQTo6VUxvbmcgbGVuZ3RoLAogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj
YXRpb24gKmRhdGEsCiAgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKOiBUQU9fVW5ib3VuZGVkX0Jh
c2VfU2VxdWVuY2UgKG1heGltdW0sIGxlbmd0aCwgZGF0YSwgcmVsZWFzZSkKewp9CgppbmxpbmUK
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRD
aGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNF
dmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAoY29uc3QgX1RBT19VbmJvdW5kZWRfU2Vx
dWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0ICZyaHMpCgogIDogVEFP
X1VuYm91bmRlZF9CYXNlX1NlcXVlbmNlIChyaHMpCnsKICBpZiAocmhzLmJ1ZmZlcl8gIT0gMCkK
ICB7CiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAxID0gX1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0Ojph
bGxvY2J1ZiAodGhpcy0+bWF4aW11bV8pOwogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJs
aWNhdGlvbiAqIGNvbnN0IHRtcDIgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHVibGljYXRpb24gKj4gKHJocy5idWZmZXJfKTsKCiAgICBmb3IgKENPUkJBOjpVTG9u
ZyBpID0gMDsgaSA8IHRoaXMtPmxlbmd0aF87ICsraSkKICAgICAgdG1wMVtpXSA9IHRtcDJbaV07
CgogICAgdGhpcy0+YnVmZmVyXyA9IHRtcDE7CiAgfQogIGVsc2UKICB7CiAgICB0aGlzLT5idWZm
ZXJfID0gMDsKICB9Cn0KCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3Vu
ZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAmClJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l
bEFkbWluX1B1YmxpY2F0aW9uU2V0OjpvcGVyYXRvcj0gKGNvbnN0IF9UQU9fVW5ib3VuZGVkX1Nl
cXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldCAmcmhzKQoKewogIGlm
ICh0aGlzID09ICZyaHMpCiAgICByZXR1cm4gKnRoaXM7CgogIGlmICh0aGlzLT5yZWxlYXNlXykK
ICB7CiAgICBpZiAodGhpcy0+bWF4aW11bV8gPCByaHMubWF4aW11bV8pCiAgICB7CgogICAgICBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICp0bXAgPSByZWludGVycHJldF9jYXN0
PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKj4gKHRoaXMtPmJ1ZmZlcl8pOwog
ICAgICBfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGlj
YXRpb25TZXQ6OmZyZWVidWYgKHRtcCk7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSBfVEFPX1VuYm91
bmRlZF9TZXF1ZW5jZV9SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6OmFsbG9j
YnVmIChyaHMubWF4aW11bV8pOwogICAgfQogIH0KICBlbHNlCiAgICB0aGlzLT5idWZmZXJfID0g
X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9u
U2V0OjphbGxvY2J1ZiAocmhzLm1heGltdW1fKTsKCiAgVEFPX1VuYm91bmRlZF9CYXNlX1NlcXVl
bmNlOjpvcGVyYXRvcj0gKHJocyk7CgogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp
b24gKnRtcDEgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj
YXRpb24gKj4gKHRoaXMtPmJ1ZmZlcl8pOwogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGlj
YXRpb24gKiBjb25zdCB0bXAyID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRt
aW46OlB1YmxpY2F0aW9uICo+IChyaHMuYnVmZmVyXyk7CgogIGZvciAoQ09SQkE6OlVMb25nIGkg
PSAwOyBpIDwgdGhpcy0+bGVuZ3RoXzsgKytpKQogICAgdG1wMVtpXSA9IHRtcDJbaV07CgogIHJl
dHVybiAqdGhpczsKfQoKCmlubGluZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u
ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1VuYm91bmRlZF9TZXF1ZW5jZV9SdGVjRXZl
bnRDaGFubmVsQWRtaW5fUHVibGljYXRpb25TZXQ6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBp
KQoKewogIGRvIHsgaWYoIShpIDwgdGhpcy0+bWF4aW11bV8pKSB7IGludCBfX2FjZV9lcnJvciA9
IEFDRV9PUzo6bGFzdF9lcnJvciAoKTsgQUNFX0xvZ19Nc2cgKmFjZV9fXyA9IEFDRV9Mb2dfTXNn
OjppbnN0YW5jZSAoKTsgYWNlX19fLT5zZXQgKCIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMu
aSIsIDExMDIsIC0xLCBfX2FjZV9lcnJvciwgYWNlX19fLT5yZXN0YXJ0ICgpLCBhY2VfX18tPm1z
Z19vc3RyZWFtICgpLCBhY2VfX18tPm1zZ19jYWxsYmFjayAoKSk7IGFjZV9fXy0+bG9nIChMTV9F
UlJPUiwgIkFDRV9BU1NFUlQ6IGZpbGUgJU4sIGxpbmUgJWwgYXNzZXJ0aW9uIGZhaWxlZCBmb3Ig
JyVzJy4lYVxuIiwgImkgPCB0aGlzLT5tYXhpbXVtXyIsIC0xKTsgfSB9IHdoaWxlICgwKTsKICBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uKiB0bXAgPSByZWludGVycHJldF9jYXN0
PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24qPiAodGhpcy0+YnVmZmVyXyk7CiAg
cmV0dXJuIHRtcFtpXTsKfQoKaW5saW5lIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi
bGljYXRpb24gJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fVW5ib3VuZGVkX1NlcXVlbmNl
X1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlvblNldDo6b3BlcmF0b3JbXSAoQ09SQkE6
OlVMb25nIGkpIGNvbnN0Cgp7CiAgZG8geyBpZighKGkgPCB0aGlzLT5tYXhpbXVtXykpIHsgaW50
IF9fYWNlX2Vycm9yID0gQUNFX09TOjpsYXN0X2Vycm9yICgpOyBBQ0VfTG9nX01zZyAqYWNlX19f
ID0gQUNFX0xvZ19Nc2c6Omluc3RhbmNlICgpOyBhY2VfX18tPnNldCAoIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5pIiwgMTExMSwgLTEsIF9fYWNlX2Vycm9yLCBhY2VfX18tPnJlc3RhcnQg
KCksIGFjZV9fXy0+bXNnX29zdHJlYW0gKCksIGFjZV9fXy0+bXNnX2NhbGxiYWNrICgpKTsgYWNl
X19fLT5sb2cgKExNX0VSUk9SLCAiQUNFX0FTU0VSVDogZmlsZSAlTiwgbGluZSAlbCBhc3NlcnRp
b24gZmFpbGVkIGZvciAnJXMnLiVhXG4iLCAiaSA8IHRoaXMtPm1heGltdW1fIiwgLTEpOyB9IH0g
d2hpbGUgKDApOwogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKiBjb25zdCB0
bXAgPSByZWludGVycHJldF9jYXN0PFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24q
PiAodGhpcy0+YnVmZmVyXyk7CiAgcmV0dXJuIHRtcFtpXTsKfQoKCgppbmxpbmUgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19V
bmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0Ojpn
ZXRfYnVmZmVyIChDT1JCQTo6Qm9vbGVhbiBvcnBoYW4pCnsKICBSdGVjRXZlbnRDaGFubmVsQWRt
aW46OlB1YmxpY2F0aW9uICpyZXN1bHQgPSAwOwogIGlmIChvcnBoYW4gPT0gMCkKICB7CgogICAg
aWYgKHRoaXMtPmJ1ZmZlcl8gPT0gMCkKICAgIHsKICAgICAgcmVzdWx0ID0gX1RBT19VbmJvdW5k
ZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0aW9uU2V0OjphbGxvY2J1
ZiAodGhpcy0+bGVuZ3RoXyk7CiAgICAgIHRoaXMtPmJ1ZmZlcl8gPSByZXN1bHQ7CiAgICAgIHRo
aXMtPnJlbGVhc2VfID0gMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgcmVzdWx0ID0gcmVp
bnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uKj4gKHRoaXMt
PmJ1ZmZlcl8pOwogICAgfQogIH0KICBlbHNlCiAgewogICAgaWYgKHRoaXMtPnJlbGVhc2VfICE9
IDApCiAgICB7CgoKICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OlB1YmxpY2F0aW9uKj4gKHRoaXMtPmJ1ZmZlcl8pOwogICAgICB0aGlzLT5tYXhp
bXVtXyA9IDA7CiAgICAgIHRoaXMtPmxlbmd0aF8gPSAwOwogICAgICB0aGlzLT5idWZmZXJfID0g
MDsKICAgICAgdGhpcy0+cmVsZWFzZV8gPSAwOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9
CgppbmxpbmUgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAqClJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5l
bEFkbWluX1B1YmxpY2F0aW9uU2V0OjpnZXRfYnVmZmVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlv
biAqPiAodGhpcy0+YnVmZmVyXyk7Cn0KCmlubGluZSB2b2lkClJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6X1RBT19VbmJvdW5kZWRfU2VxdWVuY2VfUnRlY0V2ZW50Q2hhbm5lbEFkbWluX1B1YmxpY2F0
aW9uU2V0OjpyZXBsYWNlIChDT1JCQTo6VUxvbmcgbWF4LApDT1JCQTo6VUxvbmcgbGVuZ3RoLApS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICpkYXRhLApDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlKQp7CiAgdGhpcy0+bWF4aW11bV8gPSBtYXg7CiAgdGhpcy0+bGVuZ3RoXyA9IGxlbmd0
aDsKICBpZiAodGhpcy0+YnVmZmVyXyAmJiB0aGlzLT5yZWxlYXNlXyA9PSAxKQogIHsKICAgIFJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gKnRtcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbio+ICh0aGlzLT5idWZmZXJfKTsKICAg
IF9UQU9fVW5ib3VuZGVkX1NlcXVlbmNlX1J0ZWNFdmVudENoYW5uZWxBZG1pbl9QdWJsaWNhdGlv
blNldDo6ZnJlZWJ1ZiAodG1wKTsKICB9CiAgdGhpcy0+YnVmZmVyXyA9IGRhdGE7CiAgdGhpcy0+
cmVsZWFzZV8gPSByZWxlYXNlOwp9CiMgMTE4NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5D
LmkiCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6UHVi
bGljYXRpb25TZXRfdmFyICh2b2lkKQogIDogcHRyXyAoMCkKe30KCmlubGluZQpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6UHVibGljYXRpb25TZXRfdmFyIChQdWJs
aWNhdGlvblNldCAqcCkKICA6IHB0cl8gKHApCnt9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpQdWJsaWNhdGlvblNldF92YXI6OlB1YmxpY2F0aW9uU2V0X3ZhciAoY29uc3QgOjpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3ZhciAmcCkKewogIGlmIChwLnB0cl8p
CiAgICBkbyB7IHRyeSB7IHRoaXMtPnB0cl8gPSBuZXcgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlB1YmxpY2F0aW9uU2V0ICgqcC5wdHJfKTsgfSBjYXRjaCAoc3RkOjpiYWRfYWxsb2MpIHsgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9IDEyOyByZXR1cm47IH0gfSB3aGlsZSAoMCk7CiAgZWxzZQog
ICAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1Ymxp
Y2F0aW9uU2V0X3Zhcjo6flB1YmxpY2F0aW9uU2V0X3ZhciAodm9pZCkKewogIGRlbGV0ZSB0aGlz
LT5wdHJfOwp9CgppbmxpbmUgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF92
YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6b3BlcmF0b3I9
IChQdWJsaWNhdGlvblNldCAqcCkKewogIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8g
PSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQ
dWJsaWNhdGlvblNldF92YXIgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0
X3Zhcjo6b3BlcmF0b3I9IChjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp
b25TZXRfdmFyICZwKQp7CiAgaWYgKHRoaXMgIT0gJnApCiAgICB7CiAgICAgIGlmIChwLnB0cl8g
PT0gMCkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgdGhpcy0+cHRyXzsKICAgICAgICAgIHRo
aXMtPnB0cl8gPSAwOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIFB1
YmxpY2F0aW9uU2V0ICpkZWVwX2NvcHkgPQogICAgICAgICAgICBuZXcgUHVibGljYXRpb25TZXQg
KCpwLnB0cl8pOwoKICAgICAgICAgIGlmIChkZWVwX2NvcHkgIT0gMCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIFB1YmxpY2F0aW9uU2V0ICp0bXAgPSBkZWVwX2NvcHk7CiAgICAgICAgICAg
ICAgZGVlcF9jb3B5ID0gdGhpcy0+cHRyXzsKICAgICAgICAgICAgICB0aGlzLT5wdHJfID0gdG1w
OwogICAgICAgICAgICAgIGRlbGV0ZSBkZWVwX2NvcHk7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICB9CgogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpQdWJsaWNhdGlvblNldCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRp
b25TZXRfdmFyOjpvcGVyYXRvci0+ICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgKgpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQ
dWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yIGNvbnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQdWJsaWNhdGlvblNldCAmKCkgY29uc3QKewogIHJldHVybiAqdGhpcy0+cHRyXzsKfQoKaW5s
aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfdmFyOjpvcGVyYXRvciA6
OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgJigpCnsKICByZXR1cm4gKnRo
aXMtPnB0cl87Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0
X3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0ICYo
KSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9CgoKaW5saW5lClJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6UHVibGljYXRpb25TZXRfdmFyOjpvcGVyYXRvciA6OlJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHVibGljYXRpb25TZXQgKiYoKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCmlubGlu
ZSBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYKUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpQdWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkK
ewogIHJldHVybiB0aGlzLT5wdHJfLT5vcGVyYXRvcltdIChpbmRleCk7Cn0KCmlubGluZSBjb25z
dCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICYKUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpQdWJsaWNhdGlvblNldF92YXI6Om9wZXJhdG9yW10gKENPUkJBOjpVTG9uZyBpbmRleCkg
Y29uc3QKewogIHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHVibGljYXRpb24gJj4gKHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KSk7Cn0KCmlubGlu
ZSBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgJgpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6aW4gKHZvaWQpIGNvbnN0CnsKICBy
ZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi
bGljYXRpb25TZXQgJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X3Zhcjo6
aW5vdXQgKHZvaWQpCnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCgppbmxpbmUgOjpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0IComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHVibGljYXRpb25TZXRfdmFyOjpvdXQgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0
aGlzLT5wdHJfID0gMDsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldCAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVi
bGljYXRpb25TZXRfdmFyOjpfcmV0biAodm9pZCkKewogIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQdWJsaWNhdGlvblNldCAqdG1wID0gdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKICBy
ZXR1cm4gdG1wOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9u
U2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF92YXI6OnB0ciAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgoKCgoKaW5saW5lClJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpQdWJsaWNhdGlvblNldF9vdXQgKFB1Ymxp
Y2F0aW9uU2V0IComcCkKICA6IHB0cl8gKHApCnsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5l
ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpQdWJsaWNhdGlvblNl
dF9vdXQgKFB1YmxpY2F0aW9uU2V0X3ZhciAmcCkKICA6IHB0cl8gKHAub3V0ICgpKQp7CiAgZGVs
ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dDo6UHVibGljYXRpb25TZXRfb3V0IChjb25zdCA6
OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0ICZwKQogIDogcHRyXyAo
Y29uc3RfY2FzdDxQdWJsaWNhdGlvblNldF9vdXQmPiAocCkucHRyXykKe30KCmlubGluZSA6OlJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0ICYKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25z
dF9jYXN0PFB1YmxpY2F0aW9uU2V0X291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoK
aW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQgJgpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0X291dDo6b3BlcmF0b3I9IChQdWJsaWNh
dGlvblNldCAqcCkKewogIHRoaXMtPnB0cl8gPSBwOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5l
ClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXRfb3V0OjpvcGVyYXRvciA6OlJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQgKiYoKQp7CiAgcmV0dXJuIHRoaXMt
PnB0cl87Cn0KCmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb25TZXQg
KiYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9vdXQ6OnB0ciAodm9pZCkK
ewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlB1YmxpY2F0aW9uU2V0ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvblNldF9v
dXQ6Om9wZXJhdG9yLT4gKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIFJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHVibGljYXRpb24gJgpSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlB1YmxpY2F0aW9uU2V0X291dDo6b3BlcmF0b3JbXSAoQ09SQkE6OlVMb25nIGluZGV4KQp7CiAg
cmV0dXJuIHRoaXMtPnB0cl8tPm9wZXJhdG9yW10gKGluZGV4KTsKfQojIDE0MDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw
bGllclFPU192YXI6OlN1cHBsaWVyUU9TX3ZhciAodm9pZCkKICA6IHB0cl8gKDApCnt9Cgppbmxp
bmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6OlN1cHBsaWVyUU9TX3Zh
ciAoU3VwcGxpZXJRT1MgKnApCiAgOiBwdHJfIChwKQp7fQoKaW5saW5lClJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyOjpTdXBwbGllclFPU192YXIgKGNvbnN0IDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXIgJnApCnsKICBpZiAocC5wdHJfKQogICAg
ZG8geyB0cnkgeyB0aGlzLT5wdHJfID0gbmV3IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw
bGllclFPUyAoKnAucHRyXyk7IH0gY2F0Y2ggKHN0ZDo6YmFkX2FsbG9jKSB7ICgqX19lcnJub19s
b2NhdGlvbiAoKSkgPSAxMjsgcmV0dXJuOyB9IH0gd2hpbGUgKDApOwogIGVsc2UKICAgIHRoaXMt
PnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192
YXI6On5TdXBwbGllclFPU192YXIgKHZvaWQpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKfQoKaW5s
aW5lIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyICYKUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yPSAoU3VwcGxpZXJRT1MgKnApCnsK
ICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gcDsKICByZXR1cm4gKnRoaXM7Cn0K
CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyICYKUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3ZhciAmcCkKewogIGlmICh0aGlzICE9ICZw
KQogICAgewogICAgICBpZiAocC5wdHJfID09IDApCiAgICAgICAgewogICAgICAgICAgZGVsZXRl
IHRoaXMtPnB0cl87CiAgICAgICAgICB0aGlzLT5wdHJfID0gMDsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB7CiAgICAgICAgICBTdXBwbGllclFPUyAqZGVlcF9jb3B5ID0KICAgICAgICAg
ICAgbmV3IFN1cHBsaWVyUU9TICgqcC5wdHJfKTsKCiAgICAgICAgICBpZiAoZGVlcF9jb3B5ICE9
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBTdXBwbGllclFPUyAqdG1wID0gZGVlcF9j
b3B5OwogICAgICAgICAgICAgIGRlZXBfY29weSA9IHRoaXMtPnB0cl87CiAgICAgICAgICAgICAg
dGhpcy0+cHRyXyA9IHRtcDsKICAgICAgICAgICAgICBkZWxldGUgZGVlcF9jb3B5OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgfQoKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZSBjb25zdCA6
OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKgpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OlN1cHBsaWVyUU9TX3Zhcjo6b3BlcmF0b3ItPiAodm9pZCkgY29uc3QKewogIHJldHVybiB0
aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T
ICoKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJhdG9yLT4gKHZv
aWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6U3VwcGxpZXJRT1NfdmFyOjpvcGVyYXRvciBjb25zdCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6U3VwcGxpZXJRT1MgJigpIGNvbnN0CnsKICByZXR1cm4gKnRoaXMtPnB0cl87Cn0KCmlubGlu
ZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6b3BlcmF0b3IgOjpSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYoKQp7CiAgcmV0dXJuICp0aGlzLT5wdHJf
Owp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU192YXI6Om9wZXJh
dG9yIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmKCkgY29uc3QKewogIHJl
dHVybiAqdGhpcy0+cHRyXzsKfQoKCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBs
aWVyUU9TX3Zhcjo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T
IComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgY29uc3QgOjpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGll
clFPU192YXI6OmluICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuICp0aGlzLT5wdHJfOwp9Cgppbmxp
bmUgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TICYKUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpTdXBwbGllclFPU192YXI6Omlub3V0ICh2b2lkKQp7CiAgcmV0dXJuICp0aGlzLT5w
dHJfOwp9CgoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAqJgpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6b3V0ICh2b2lkKQp7CiAgZGVs
ZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9IDA7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0K
CmlubGluZSA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKgpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX3Zhcjo6X3JldG4gKHZvaWQpCnsKICA6OlJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKnRtcCA9IHRoaXMtPnB0cl87CiAgdGhpcy0+cHRy
XyA9IDA7CiAgcmV0dXJuIHRtcDsKfQoKaW5saW5lIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT
dXBwbGllclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1NfdmFyOjpwdHIg
KHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKCgoKCmlubGluZQpSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9TX291dDo6U3VwcGxpZXJRT1Nfb3V0ICg6OlJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgKiZwKQogIDogcHRyXyAocCkKewogIHRoaXMt
PnB0cl8gPSAwOwp9CgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU19v
dXQ6OlN1cHBsaWVyUU9TX291dCAoU3VwcGxpZXJRT1NfdmFyICZwKQogIDogcHRyXyAocC5vdXQg
KCkpCnsKICBkZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gMDsKfQoKaW5saW5lClJ0
ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0OjpTdXBwbGllclFPU19vdXQgKGNv
bnN0IDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPU19vdXQgJnApCiAgOiBwdHJf
IChjb25zdF9jYXN0PFN1cHBsaWVyUU9TX291dCY+IChwKS5wdHJfKQp7fQoKaW5saW5lIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpTdXBwbGllclFPU19vdXQ6Om9wZXJhdG9yPSAoY29uc3QgOjpSdGVjRXZlbnRDaGFubmVsQWRt
aW46OlN1cHBsaWVyUU9TX291dCAmcCkKewogIHRoaXMtPnB0cl8gPSBjb25zdF9jYXN0PFN1cHBs
aWVyUU9TX291dCY+IChwKS5wdHJfOwogIHJldHVybiAqdGhpczsKfQoKaW5saW5lIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1Nfb3V0ICYKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT
dXBwbGllclFPU19vdXQ6Om9wZXJhdG9yPSAoU3VwcGxpZXJRT1MgKnApCnsKICB0aGlzLT5wdHJf
ID0gcDsKICByZXR1cm4gKnRoaXM7Cn0KCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1
cHBsaWVyUU9TX291dDo6b3BlcmF0b3IgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVy
UU9TIComKCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9CgppbmxpbmUgOjpSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OlN1cHBsaWVyUU9TIComClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJR
T1Nfb3V0OjpwdHIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKaW5saW5lIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAqClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
U3VwcGxpZXJRT1Nfb3V0OjpvcGVyYXRvci0+ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87
Cn0KCgoKCgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcjo6
UHJveHlQdXNoU3VwcGxpZXIgKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJBOjpCb29s
ZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAqc2VydmFu
dAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNlcnZhbnQp
CnsKICB0aGlzLT5SdGVjRXZlbnRDaGFubmVsQWRtaW5fUHJveHlQdXNoU3VwcGxpZXJfc2V0dXBf
Y29sbG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyAxNjEyICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENo
YW5uZWxBZG1pbkMuaSIKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29u
c3VtZXI6OlByb3h5UHVzaENvbnN1bWVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JC
QTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2Ug
KnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBz
ZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1Byb3h5UHVzaENvbnN1bWVy
X3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxvY2F0ZWQpOwp9CiMgMTYzMCAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1
bWVyQWRtaW46OkNvbnN1bWVyQWRtaW4gKAogICAgVEFPX1N0dWIgKm9ianJlZiwKICAgIENPUkJB
OjpCb29sZWFuIF90YW9fY29sbG9jYXRlZCwKICAgIFRBT19BYnN0cmFjdF9TZXJ2YW50QmFzZSAq
c2VydmFudAogICkKICA6IENPUkJBX09iamVjdCAob2JqcmVmLCBfdGFvX2NvbGxvY2F0ZWQsIHNl
cnZhbnQpCnsKICB0aGlzLT5SdGVjRXZlbnRDaGFubmVsQWRtaW5fQ29uc3VtZXJBZG1pbl9zZXR1
cF9jb2xsb2NhdGlvbiAoX3Rhb19jb2xsb2NhdGVkKTsKfQojIDE2NDggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5pIgppbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFk
bWluOjpTdXBwbGllckFkbWluICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9v
bGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZh
bnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50
KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5lbEFkbWluX1N1cHBsaWVyQWRtaW5fc2V0dXBfY29s
bG9jYXRpb24gKF90YW9fY29sbG9jYXRlZCk7Cn0KIyAxNjY2ICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5u
ZWxBZG1pbkMuaSIKaW5saW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXI6Ok9ic2Vy
dmVyICgKICAgIFRBT19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxv
Y2F0ZWQsCiAgICBUQU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JC
QV9PYmplY3QgKG9ianJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluX09ic2VydmVyX3NldHVwX2NvbGxvY2F0aW9uIChfdGFvX2NvbGxv
Y2F0ZWQpOwp9CiMgMTcxMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmkiCmlubGluZQpS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6RXZlbnRDaGFubmVsICgKICAgIFRB
T19TdHViICpvYmpyZWYsCiAgICBDT1JCQTo6Qm9vbGVhbiBfdGFvX2NvbGxvY2F0ZWQsCiAgICBU
QU9fQWJzdHJhY3RfU2VydmFudEJhc2UgKnNlcnZhbnQKICApCiAgOiBDT1JCQV9PYmplY3QgKG9i
anJlZiwgX3Rhb19jb2xsb2NhdGVkLCBzZXJ2YW50KQp7CiAgdGhpcy0+UnRlY0V2ZW50Q2hhbm5l
bEFkbWluX0V2ZW50Q2hhbm5lbF9zZXR1cF9jb2xsb2NhdGlvbiAoX3Rhb19jb2xsb2NhdGVkKTsK
fQoKCgoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0
cm0sIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCAmX3Rhb19h
Z2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0
dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25u
ZWN0ZWQmKQp7CiAgcmV0dXJuIDE7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8
IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlR5cGVF
cnJvciAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lk
ICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6
Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46
OlR5cGVFcnJvciYpCnsKICByZXR1cm4gMTsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJh
dG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RGVwZW5kZW5jeSAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2Fn
Z3JlZ2F0ZS5ldmVudCkgJiYKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLnJ0X2luZm8pCiAg
KQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cgp9CgppbmxpbmUgQ09SQkE6OkJv
b2xlYW4gb3BlcmF0b3I+PiAoVEFPX0lucHV0Q0RSICZzdHJtLCBSdGVjRXZlbnRDaGFubmVsQWRt
aW46OkRlcGVuZGVuY3kgJl90YW9fYWdncmVnYXRlKQp7CiAgaWYgKAogICAgKHN0cm0gPj4gX3Rh
b19hZ2dyZWdhdGUuZXZlbnQpICYmCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5ydF9pbmZv
KQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoKfQoKCgoKCkNPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3QgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpEZXBlbmRlbmN5U2V0ICYKICApOwpDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpE
ZXBlbmRlbmN5U2V0ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo
VEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1l
clFPUyAmX3Rhb19hZ2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0
ZS5kZXBlbmRlbmNpZXMpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4g
KF90YW9fYWdncmVnYXRlLmlzX2dhdGV3YXkpKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAg
IHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1
dENEUiAmc3RybSwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmX3Rhb19hZ2dy
ZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5kZXBlbmRlbmNpZXMp
ICYmCiAgICAoc3RybSA+PiBDT1JCQTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5p
c19nYXRld2F5KSkKICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCmlu
bGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25z
dCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uICZfdGFvX2FnZ3JlZ2F0ZSkKewog
IGlmICgKICAgIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLmV2ZW50KSAmJgogICAgKHN0cm0gPDwg
X3Rhb19hZ2dyZWdhdGUuZGVwZW5kZW5jeV9pbmZvKQogICkKICAgIHJldHVybiAxOwogIGVsc2UK
ICAgIHJldHVybiAwOwoKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19J
bnB1dENEUiAmc3RybSwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQdWJsaWNhdGlvbiAmX3Rhb19h
Z2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5ldmVudCkgJiYK
ICAgIChzdHJtID4+IF90YW9fYWdncmVnYXRlLmRlcGVuZGVuY3lfaW5mbykKICApCiAgICByZXR1
cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCgoKCgpDT1JCQTo6Qm9vbGVhbiBvcGVyYXRv
cjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6UHVibGljYXRpb25TZXQgJgogICk7CkNPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKAogICAg
VEFPX0lucHV0Q0RSICYsCiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlB1YmxpY2F0aW9uU2V0
ICYKICApOwoKCgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE
UiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmX3Rhb19h
Z2dyZWdhdGUpCnsKICBpZiAoCiAgICAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5wdWJsaWNhdGlv
bnMpICYmCiAgICAoc3RybSA8PCBDT1JCQTo6QW55Ojpmcm9tX2Jvb2xlYW4gKF90YW9fYWdncmVn
YXRlLmlzX2dhdGV3YXkpKQogICkKICAgIHJldHVybiAxOwogIGVsc2UKICAgIHJldHVybiAwOwoK
fQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmc3RybSwg
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmX3Rhb19hZ2dyZWdhdGUpCnsKICBp
ZiAoCiAgICAoc3RybSA+PiBfdGFvX2FnZ3JlZ2F0ZS5wdWJsaWNhdGlvbnMpICYmCiAgICAoc3Ry
bSA+PiBDT1JCQTo6QW55Ojp0b19ib29sZWFuIChfdGFvX2FnZ3JlZ2F0ZS5pc19nYXRld2F5KSkK
ICApCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKCn0KCiAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAg
IGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyCiAgKTsK
CiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAgIFRBT19J
bnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9w
dHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAo
CiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlBy
b3h5UHVzaENvbnN1bWVyX3B0cgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwKICAgIFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyICYKICApOwoKICAgICAgICAgICAgICAgICAgIENP
UkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKAogICAgVEFPX091dHB1dENEUiAmLAogICAgY29uc3Qg
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lckFkbWluX3B0cgogICk7CgogICAgICAgICAg
ICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+PiAoCiAgICBUQU9fSW5wdXRDRFIgJiwK
ICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgJgogICk7CgogICAg
ICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0
Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW5fcHRy
CiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+ICgKICAg
IFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu
X3B0ciAmCiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcjw8
ICgKICAgIFRBT19PdXRwdXRDRFIgJiwKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
T2JzZXJ2ZXJfcHRyCiAgKTsKCiAgICAgICAgICAgICAgICAgICBDT1JCQTo6Qm9vbGVhbiBvcGVy
YXRvcj4+ICgKICAgIFRBT19JbnB1dENEUiAmLAogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpP
YnNlcnZlcl9wdHIgJgogICk7CgogICAgICAgICAgICAgICAgICAgQ09SQkE6OkJvb2xlYW4gb3Bl
cmF0b3I8PCAoCiAgICBUQU9fT3V0cHV0Q0RSICYsCiAgICBjb25zdCBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OkV2ZW50Q2hhbm5lbF9wdHIKICApOwoKICAgICAgICAgICAgICAgICAgIENPUkJBOjpC
b29sZWFuIG9wZXJhdG9yPj4gKAogICAgVEFPX0lucHV0Q0RSICYsCiAgICBSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkV2ZW50Q2hhbm5lbF9wdHIgJgogICk7CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiAmX3Rhb19hZ2dyZWdhdGUp
CnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChU
QU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hS
T05JWkFUSU9OX0VSUk9SJikKewogIHJldHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4g
b3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpFdmVudENoYW5uZWw6OlFPU19FUlJPUiAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0
cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0
dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIg
JixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6UU9TX0VSUk9SJikKewogIHJl
dHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENE
UiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNVQlND
UklQVElPTl9FUlJPUiAmX3Rhb19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dy
ZWdhdGUuX2lkICgpKQogICAgcmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGlu
ZSBDT1JCQTo6Qm9vbGVhbiBvcGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1VCU0NSSVBUSU9OX0VSUk9SJikKewogIHJldHVybiAx
Owp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3Ry
bSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNPUlJFTEFUSU9O
X0VSUk9SICZfdGFvX2FnZ3JlZ2F0ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5f
aWQgKCkpCiAgICByZXR1cm4gMTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJB
OjpCb29sZWFuIG9wZXJhdG9yPj4gKFRBT19JbnB1dENEUiAmLFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RXZlbnRDaGFubmVsOjpDT1JSRUxBVElPTl9FUlJPUiYpCnsKICByZXR1cm4gMTsKfQoKaW5s
aW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPDwgKFRBT19PdXRwdXRDRFIgJnN0cm0sIGNvbnN0
IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpESVNQQVRDSF9FUlJPUiAmX3Rh
b19hZ2dyZWdhdGUpCnsKCiAgaWYgKHN0cm0gPDwgX3Rhb19hZ2dyZWdhdGUuX2lkICgpKQogICAg
cmV0dXJuIDE7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCmlubGluZSBDT1JCQTo6Qm9vbGVhbiBv
cGVyYXRvcj4+IChUQU9fSW5wdXRDRFIgJixSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hh
bm5lbDo6RElTUEFUQ0hfRVJST1ImKQp7CiAgcmV0dXJuIDE7Cn0KCmlubGluZSBDT1JCQTo6Qm9v
bGVhbiBvcGVyYXRvcjw8IChUQU9fT3V0cHV0Q0RSICZzdHJtLCBjb25zdCBSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIgJl90YW9fYWdncmVn
YXRlKQp7CgogIGlmIChzdHJtIDw8IF90YW9fYWdncmVnYXRlLl9pZCAoKSkKICAgIHJldHVybiAx
OwogIGVsc2UKICAgIHJldHVybiAwOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xlYW4gb3BlcmF0b3I+
PiAoVEFPX0lucHV0Q0RSICYsUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNB
TlRfQVBQRU5EX09CU0VSVkVSJikKewogIHJldHVybiAxOwp9CgppbmxpbmUgQ09SQkE6OkJvb2xl
YW4gb3BlcmF0b3I8PCAoVEFPX091dHB1dENEUiAmc3RybSwgY29uc3QgUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICZfdGFvX2FnZ3JlZ2F0
ZSkKewoKICBpZiAoc3RybSA8PCBfdGFvX2FnZ3JlZ2F0ZS5faWQgKCkpCiAgICByZXR1cm4gMTsK
ICBlbHNlCiAgICByZXR1cm4gMDsKfQoKaW5saW5lIENPUkJBOjpCb29sZWFuIG9wZXJhdG9yPj4g
KFRBT19JbnB1dENEUiAmLFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsOjpDQU5U
X1JFTU9WRV9PQlNFUlZFUiYpCnsKICByZXR1cm4gMTsKfQojIDMyMjggIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluQy5oIiAyCiMgMzIzOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9B
Q0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5DLmgi
CiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3Qu
aCIgMQojIDMyMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RB
Ty9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluQy5oIiAyCiMgMjkgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
UnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNlcnZlci9Qb3J0YWJsZVNl
cnZlci5oIiAxCiMgMzYgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl
cnZlci9TZXJ2YW50X0Jhc2UuaCIgMQojIDM3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMu
aCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90
YW8vUG9ydGFibGVTZXJ2ZXIvQ29sbG9jYXRlZF9PYmplY3QuaCIgMQojIDM4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNF
dmVudENoYW5uZWxBZG1pblMuaCIgMgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL1RBTy90YW8vUG9ydGFibGVTZXJ2ZXIvVGhydVBPQV9PYmplY3RfUHJveHlf
SW1wbC5oIiAxCiMgMzkgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIiAyCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL3Rhby9Qb3J0YWJsZVNl
cnZlci9EaXJlY3RfT2JqZWN0X1Byb3h5X0ltcGwuaCIgMQojIDQwICIvaG9tZS9ycnAvc2Nob29s
L3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENo
YW5uZWxBZG1pblMuaCIgMgojIDUxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKbmFt
ZXNwYWNlIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW4KewogIGNsYXNzIFByb3h5UHVzaFN1cHBs
aWVyOwogIHR5cGVkZWYgUHJveHlQdXNoU3VwcGxpZXIgKlByb3h5UHVzaFN1cHBsaWVyX3B0cjsK
CiAgY2xhc3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgY2xh
c3MgX1RBT19Qcm94eVB1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXI7CgogIGNs
YXNzIFByb3h5UHVzaFN1cHBsaWVyIDogcHVibGljIHZpcnR1YWwgUE9BX1J0ZWNFdmVudENvbW06
OlB1c2hTdXBwbGllcgogIHsKICBwcm90ZWN0ZWQ6CiAgICBQcm94eVB1c2hTdXBwbGllciAodm9p
ZCk7CgogIHB1YmxpYzoKICAgIFByb3h5UHVzaFN1cHBsaWVyIChjb25zdCBQcm94eVB1c2hTdXBw
bGllciYgcmhzKTsKICAgIHZpcnR1YWwgflByb3h5UHVzaFN1cHBsaWVyICh2b2lkKTsKCgogICAg
dmlydHVhbCBDT1JCQTo6Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNh
bF90eXBlX2lkLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAg
ICApOwoKICAgIHZpcnR1YWwgdm9pZCogX2Rvd25jYXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBs
b2dpY2FsX3R5cGVfaWQKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAg
ICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2
b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4
aXN0ZW50X3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9p
ZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0
YXRpYyB2b2lkIF9pbnRlcmZhY2Vfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJl
cSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
ICAgICk7CgogICAgdmlydHVhbCB2b2lkIF9kaXNwYXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJl
cXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpfc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7Cgog
ICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyICpfdGhpcyAoCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmly
dHVhbCBjb25zdCBjaGFyKiBfaW50ZXJmYWNlX3JlcG9zaXRvcnlfaWQgKHZvaWQpIGNvbnN0OwoK
ICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgICAgIFJ0ZWNFdmVu
dENvbW06OlB1c2hDb25zdW1lcl9wdHIgcHVzaF9jb25zdW1lciwKICAgICAgICBjb25zdCBSdGVj
RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyUU9TICYgcW9zLAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkLCBSdGVj
RXZlbnRDaGFubmVsQWRtaW46OlR5cGVFcnJvciApID0gMDsKCgoKCgogICAgICAgIHN0YXRpYyB2
b2lkIGNvbm5lY3RfcHVzaF9jb25zdW1lcl9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVz
dCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAgdm9pZCAqX3Rhb19z
ZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZF9jb25u
ZWN0aW9uICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAg
KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAg
c3RhdGljIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJS
ZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpf
dGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHZpcnR1YWwgdm9pZCByZXN1bWVf
Y29ubmVjdGlvbiAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAg
ICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAg
ICAgIHN0YXRpYyB2b2lkIHJlc3VtZV9jb25uZWN0aW9uX3NrZWwgKAogICAgICAgIFRBT19TZXJ2
ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lk
ICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIGRpc2Nv
bm5lY3RfcHVzaF9zdXBwbGllcl9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVx
LAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpjb250ZXh0LAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAg
ICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKCiAgfTsKCgoKCgoKICBjbGFz
cyBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciA6IHB1Ymxp
YyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1Byb3h5UHVzaFN1cHBsaWVy
X1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1N0
cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1
c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwg
OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1w
bCAmc2VsZWN0X3Byb3h5ICgKICAgICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVz
aFN1cHBsaWVyICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9w
cm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoKICAgIDo6
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1Byb3h5X0ltcGwK
ICAgICpwcm94eV9jYWNoZV9bVEFPX0NvbGxvY2F0aW9uX1N0cmF0ZWdpZXM6OkNTX0xBU1RdOwoK
ICAgIEFDRV9NVF9TWU5DSDo6TVVURVggbXV0ZXhfOwoKCgoKICBwdWJsaWM6CiAgICBzdGF0aWMg
X1RBT19Qcm94eVB1c2hTdXBwbGllcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9f
UHJveHlQdXNoU3VwcGxpZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKICB9Owoj
IDIyMyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiAgY2xhc3MgX1RBT19Qcm94eVB1
c2hTdXBwbGllcl9UaHJ1UE9BX1Byb3h5X0ltcGwgOgogICAgcHVibGljIHZpcnR1YWwgOjpSdGVj
RXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoU3VwcGxpZXJfUHJveHlfSW1wbCwKICAg
IHB1YmxpYyB2aXJ0dWFsIFRBT19UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsLAogICAgcHVibGlj
IHZpcnR1YWwgOjpQT0FfUnRlY0V2ZW50Q29tbTo6X1RBT19QdXNoU3VwcGxpZXJfVGhydVBPQV9Q
cm94eV9JbXBsCgogIHsKICBwdWJsaWM6CiAgICBfVEFPX1Byb3h5UHVzaFN1cHBsaWVyX1RocnVQ
T0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19Qcm94eVB1c2hTdXBwbGll
cl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
X3B1c2hfY29uc3VtZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3Rh
cmdldF8sCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0ciBwdXNoX2NvbnN1
bWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgJiBx
b3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVj
RXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQsIFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6VHlwZUVycm9yICk7CgoKCgoKICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kX2Nvbm5lY3Rpb24g
KAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAg
ICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lX2Nvbm5lY3Rpb24gKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhj
ZXB0aW9uICk7CgoKCgogIH07CgoKCgoKCiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXI7CiAgdHlw
ZWRlZiBQcm94eVB1c2hDb25zdW1lciAqUHJveHlQdXNoQ29uc3VtZXJfcHRyOwoKICBjbGFzcyBf
VEFPX1Byb3h5UHVzaENvbnN1bWVyX1RocnVQT0FfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX1By
b3h5UHVzaENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgUHJveHlQ
dXNoQ29uc3VtZXIgOiBwdWJsaWMgdmlydHVhbCBQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1
bWVyCiAgewogIHByb3RlY3RlZDoKICAgIFByb3h5UHVzaENvbnN1bWVyICh2b2lkKTsKCiAgcHVi
bGljOgogICAgUHJveHlQdXNoQ29uc3VtZXIgKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyJiByaHMp
OwogICAgdmlydHVhbCB+UHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENP
UkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQs
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAg
dmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlw
ZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19T
ZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZh
bnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tl
bCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAg
ICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQg
X2ludGVyZmFjZV9za2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAg
IHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAg
ICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVx
LAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXIgKl90aGlzICgKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAg
ICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0
IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVh
bCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgUnRlY0V2ZW50Q29tbTo6UHVz
aFN1cHBsaWVyX3B0ciBwdXNoX3N1cHBsaWVyLAogICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3MsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9u
LCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKSA9IDA7CgoKCgogICAg
ICAgIHN0YXRpYyB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGllcl9za2VsICgKICAgICAgICBUQU9f
U2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmosCiAgICAgICAg
dm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBw
dXNoX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAq
b2JqLAogICAgICAgIHZvaWQgKmNvbnRleHQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vu
dmlyb25tZW50ICgpCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgZGlzY29ubmVjdF9wdXNoX2Nv
bnN1bWVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9p
ZCAqb2JqLAogICAgICAgIHZvaWQgKmNvbnRleHQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgoKICB9OwoKCgoKCgogIGNsYXNzIF9UQU9fUHJveHlQ
dXNoQ29uc3VtZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyIDogcHVibGljIHZpcnR1YWwgOjpS
dGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfQnJva2Vy
CiAgewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfU3RyYXRlZ2l6ZWRfUHJv
eHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaENvbnN1bWVyX1N0
cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6X1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsICZzZWxlY3RfcHJv
eHkgKAogICAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXIgKm9i
amVjdCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUKICAgICk7CgogIHByaXZhdGU6CgoKICAgIHZvaWQgY3JlYXRlX3Byb3h5ICgKICAgICAg
aW50IGNvbGxvY2F0aW9uX3N0cmF0ZWd5LAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0Vf
Q09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCgogICAgOjpSdGVjRXZlbnRDaGFu
bmVsQWRtaW46Ol9UQU9fUHJveHlQdXNoQ29uc3VtZXJfUHJveHlfSW1wbAogICAgKnByb3h5X2Nh
Y2hlX1tUQU9fQ29sbG9jYXRpb25fU3RyYXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNFX01UX1NZ
TkNIOjpNVVRFWCBtdXRleF87CgoKCgogIHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1Byb3h5UHVz
aENvbnN1bWVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19Qcm94eVB1c2hDb25z
dW1lcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgNDE3ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKICBjbGFzcyBfVEFPX1Byb3h5UHVzaENvbnN1bWVyX1Ro
cnVQT0FfUHJveHlfSW1wbCA6CiAgICBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6X1RBT19Qcm94eVB1c2hDb25zdW1lcl9Qcm94eV9JbXBsLAogICAgcHVibGljIHZpcnR1
YWwgVEFPX1RocnVQT0FfT2JqZWN0X1Byb3h5X0ltcGwsCiAgICBwdWJsaWMgdmlydHVhbCA6OlBP
QV9SdGVjRXZlbnRDb21tOjpfVEFPX1B1c2hDb25zdW1lcl9UaHJ1UE9BX1Byb3h5X0ltcGwKCiAg
ewogIHB1YmxpYzoKICAgIF9UQU9fUHJveHlQdXNoQ29uc3VtZXJfVGhydVBPQV9Qcm94eV9JbXBs
ICh2b2lkKTsKCiAgICB2aXJ0dWFsIH5fVEFPX1Byb3h5UHVzaENvbnN1bWVyX1RocnVQT0FfUHJv
eHlfSW1wbCAodm9pZCkgeyB9CgogICAgdmlydHVhbCB2b2lkIGNvbm5lY3RfcHVzaF9zdXBwbGll
ciAoCiAgICAgICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAg
ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAgICAg
Y29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmIHFvcywKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAg
KQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCApOwoKCgoKCiAgfTsKCgoKCgoKICBjbGFzcyBDb25zdW1l
ckFkbWluOwogIHR5cGVkZWYgQ29uc3VtZXJBZG1pbiAqQ29uc3VtZXJBZG1pbl9wdHI7CgogIGNs
YXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGw7CiAgY2xhc3MgX1RBT19D
b25zdW1lckFkbWluX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlcjsKCiAgY2xhc3MgQ29uc3VtZXJB
ZG1pbiA6IHB1YmxpYyB2aXJ0dWFsIFBvcnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQogIHsKICBw
cm90ZWN0ZWQ6CiAgICBDb25zdW1lckFkbWluICh2b2lkKTsKCiAgcHVibGljOgogICAgQ29uc3Vt
ZXJBZG1pbiAoY29uc3QgQ29uc3VtZXJBZG1pbiYgcmhzKTsKICAgIHZpcnR1YWwgfkNvbnN1bWVy
QWRtaW4gKHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAg
ICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0
X2Vudmlyb25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAog
ICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2
b2lkIF9pc19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAg
dm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAg
IHN0YXRpYyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVl
c3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGws
CiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zhcmlh
YmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFjZV9za2VsICgKICAgICAgICBU
QU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpz
ZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgK
ICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3Vw
Y2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB
ZG1pbiAqX3RoaXMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQog
ICAgICApOwoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogX2ludGVyZmFjZV9yZXBvc2l0b3J5X2lk
ICh2b2lkKSBjb25zdDsKCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ
dXNoU3VwcGxpZXJfcHRyIG9idGFpbl9wdXNoX3N1cHBsaWVyICgKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgb2J0YWluX3B1c2hfc3Vw
cGxpZXJfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJl90YW9fcmVxLAogICAgICAg
IHZvaWQgKl90YW9fb2JqLAogICAgICAgIHZvaWQgKl90YW9fc2VydmFudF91cGNhbGwsCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
ICAgICk7CgoKICB9OwoKCgoKCgogIGNsYXNzIF9UQU9fQ29uc3VtZXJBZG1pbl9TdHJhdGVnaXpl
ZF9Qcm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
X1RBT19Db25zdW1lckFkbWluX1Byb3h5X0Jyb2tlcgogIHsKICBwdWJsaWM6CiAgICBfVEFPX0Nv
bnN1bWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFs
IH5fVEFPX0NvbnN1bWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAg
ICB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0NvbnN1bWVyQWRtaW5fUHJv
eHlfSW1wbCAmc2VsZWN0X3Byb3h5ICgKICAgICAgOjpSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNv
bnN1bWVyQWRtaW4gKm9iamVjdCwKICAgICAgQ09SQkFfRW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFf
RW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgogIHByaXZhdGU6CgoKICAgIHZvaWQgY3JlYXRl
X3Byb3h5ICgKICAgICAgaW50IGNvbGxvY2F0aW9uX3N0cmF0ZWd5LAogICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7CgoKCgogICAg
OjpSdGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fQ29uc3VtZXJBZG1pbl9Qcm94eV9JbXBsCiAg
ICAqcHJveHlfY2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzOjpDU19MQVNUXTsKCiAg
ICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGljOgogICAgc3RhdGljIF9U
QU9fQ29uc3VtZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKnRoZV9UQU9fQ29uc3Vt
ZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwogIH07CiMgNTc1ICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIKICBjbGFzcyBfVEFPX0NvbnN1bWVyQWRtaW5fVGhy
dVBPQV9Qcm94eV9JbXBsIDoKICAgIHB1YmxpYyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpfVEFPX0NvbnN1bWVyQWRtaW5fUHJveHlfSW1wbCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRB
T19UaHJ1UE9BX09iamVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fQ29uc3Vt
ZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fQ29u
c3VtZXJBZG1pbl9UaHJ1UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3Vw
cGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
CiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCgogIH07
CgoKCgoKCiAgY2xhc3MgU3VwcGxpZXJBZG1pbjsKICB0eXBlZGVmIFN1cHBsaWVyQWRtaW4gKlN1
cHBsaWVyQWRtaW5fcHRyOwoKICBjbGFzcyBfVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94
eV9JbXBsOwogIGNsYXNzIF9UQU9fU3VwcGxpZXJBZG1pbl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r
ZXI7CgogIGNsYXNzIFN1cHBsaWVyQWRtaW4gOiBwdWJsaWMgdmlydHVhbCBQb3J0YWJsZVNlcnZl
cjo6U2VydmFudEJhc2UKICB7CiAgcHJvdGVjdGVkOgogICAgU3VwcGxpZXJBZG1pbiAodm9pZCk7
CgogIHB1YmxpYzoKICAgIFN1cHBsaWVyQWRtaW4gKGNvbnN0IFN1cHBsaWVyQWRtaW4mIHJocyk7
CiAgICB2aXJ0dWFsIH5TdXBwbGllckFkbWluICh2b2lkKTsKCgogICAgdmlydHVhbCBDT1JCQTo6
Qm9vbGVhbiBfaXNfYSAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90eXBlX2lkLAogICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9
CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwoKICAgIHZpcnR1
YWwgdm9pZCogX2Rvd25jYXN0ICgKICAgICAgICBjb25zdCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQK
ICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfaXNfYV9za2VsICgKICAgICAgICBUQU9fU2VydmVy
UmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50X3Vw
Y2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9pZCBfbm9uX2V4aXN0ZW50X3NrZWwgKAog
ICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAqb2JqLAogICAgICAg
IHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9pbnRl
cmZhY2Vfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lk
ICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmly
dHVhbCB2b2lkIF9kaXNwYXRjaCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJlcSwKICAg
ICAgICB2b2lkICpfc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZf
QUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgOjpSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlN1cHBsaWVyQWRtaW4gKl90aGlzICgKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9p
bnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCBSdGVjRXZl
bnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3B0ciBvYnRhaW5fcHVzaF9jb25zdW1l
ciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAg
ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoKCgogICAgICAgIHN0YXRp
YyB2b2lkIG9idGFpbl9wdXNoX2NvbnN1bWVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1
ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFv
X3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9F
bnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKCiAgfTsKCgoKCgoKICBjbGFzcyBfVEFPX1N1
cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyIDogcHVibGljIHZpcnR1YWwgOjpS
dGVjRXZlbnRDaGFubmVsQWRtaW46Ol9UQU9fU3VwcGxpZXJBZG1pbl9Qcm94eV9Ccm9rZXIKICB7
CiAgcHVibGljOgogICAgX1RBT19TdXBwbGllckFkbWluX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tl
ciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19TdXBwbGllckFkbWluX1N0cmF0ZWdpemVkX1By
b3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluICpvYmplY3QsCiAgICAgIENPUkJBX0Vu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2
YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9wcm94eSAoCiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJh
dGVneSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgICApOwoKCgoKICAgIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX1N1cHBs
aWVyQWRtaW5fUHJveHlfSW1wbAogICAgKnByb3h5X2NhY2hlX1tUQU9fQ29sbG9jYXRpb25fU3Ry
YXRlZ2llczo6Q1NfTEFTVF07CgogICAgQUNFX01UX1NZTkNIOjpNVVRFWCBtdXRleF87CgoKCgog
IHB1YmxpYzoKICAgIHN0YXRpYyBfVEFPX1N1cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlf
QnJva2VyICp0aGVfVEFPX1N1cHBsaWVyQWRtaW5fU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2
b2lkKTsKICB9OwojIDcyOCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TLmgiCiAgY2xhc3Mg
X1RBT19TdXBwbGllckFkbWluX1RocnVQT0FfUHJveHlfSW1wbCA6CiAgICBwdWJsaWMgdmlydHVh
bCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19TdXBwbGllckFkbWluX1Byb3h5X0ltcGws
CiAgICBwdWJsaWMgdmlydHVhbCBUQU9fVGhydVBPQV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBw
dWJsaWM6CiAgICBfVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94eV9JbXBsICh2b2lkKTsK
CiAgICB2aXJ0dWFsIH5fVEFPX1N1cHBsaWVyQWRtaW5fVGhydVBPQV9Qcm94eV9JbXBsICh2b2lk
KSB7IH0KCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3Vt
ZXJfcHRyIG9idGFpbl9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xs
b2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3Rl
bUV4Y2VwdGlvbiApOwoKCgoKICB9OwoKCgoKCgogIGNsYXNzIE9ic2VydmVyOwogIHR5cGVkZWYg
T2JzZXJ2ZXIgKk9ic2VydmVyX3B0cjsKCiAgY2xhc3MgX1RBT19PYnNlcnZlcl9UaHJ1UE9BX1By
b3h5X0ltcGw7CiAgY2xhc3MgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9rZXI7
CgogIGNsYXNzIE9ic2VydmVyIDogcHVibGljIHZpcnR1YWwgUG9ydGFibGVTZXJ2ZXI6OlNlcnZh
bnRCYXNlCiAgewogIHByb3RlY3RlZDoKICAgIE9ic2VydmVyICh2b2lkKTsKCiAgcHVibGljOgog
ICAgT2JzZXJ2ZXIgKGNvbnN0IE9ic2VydmVyJiByaHMpOwogICAgdmlydHVhbCB+T2JzZXJ2ZXIg
KHZvaWQpOwoKCiAgICB2aXJ0dWFsIENPUkJBOjpCb29sZWFuIF9pc19hICgKICAgICAgICBjb25z
dCBjaGFyKiBsb2dpY2FsX3R5cGVfaWQsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmly
b25tZW50ICgpCiAgICAgICk7CgogICAgdmlydHVhbCB2b2lkKiBfZG93bmNhc3QgKAogICAgICAg
IGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9pZAogICAgICApOwoKICAgIHN0YXRpYyB2b2lkIF9p
c19hX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAgICAgdm9pZCAq
b2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIHN0YXRp
YyB2b2lkIF9ub25fZXhpc3RlbnRfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJlcXVlc3QgJnJl
cSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2VydmFudF91cGNhbGwsCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
ICAgICk7CgogICAgc3RhdGljIHZvaWQgX2ludGVyZmFjZV9za2VsICgKICAgICAgICBUQU9fU2Vy
dmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwKICAgICAgICB2b2lkICpzZXJ2YW50
X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1l
bnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0dWFsIHZvaWQgX2Rpc3BhdGNoICgKICAgICAg
ICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKl9zZXJ2YW50X3VwY2FsbCwK
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUKICAgICAgKTsKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXIgKl90aGlz
ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29u
c3Q7CgogICAgdmlydHVhbCB2b2lkIHVwZGF0ZV9jb25zdW1lciAoCiAgICAgICAgY29uc3QgUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAgICBDT1JCQTo6RW52
aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFP
X2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0
ZW1FeGNlcHRpb24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgdXBkYXRlX2NvbnN1bWVy
X3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2b2lk
ICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICAp
OwoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIGNvbnN0IFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICAgICAgQ09SQkE6OkVudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19k
ZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uICkgPSAwOwoKCgogICAgICAgIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdXBwbGllcl9z
a2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAq
X3Rhb19vYmosCiAgICAgICAgdm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JC
QTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsK
CgogIH07CgoKCgoKCiAgY2xhc3MgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXplZF9Qcm94eV9Ccm9r
ZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19PYnNlcnZl
cl9Qcm94eV9Ccm9rZXIKICB7CiAgcHVibGljOgogICAgX1RBT19PYnNlcnZlcl9TdHJhdGVnaXpl
ZF9Qcm94eV9Ccm9rZXIgKHZvaWQpOwoKICAgIHZpcnR1YWwgfl9UQU9fT2JzZXJ2ZXJfU3RyYXRl
Z2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwgJnNlbGVjdF9wcm94eSAoCiAgICAgIDo6
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlciAqb2JqZWN0LAogICAgICBDT1JCQV9FbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgKTsKCiAgcHJpdmF0
ZToKCgogICAgdm9pZCBjcmVhdGVfcHJveHkgKAogICAgICBpbnQgY29sbG9jYXRpb25fc3RyYXRl
Z3ksCiAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZQogICAgKTsKCgoKCiAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19PYnNlcnZl
cl9Qcm94eV9JbXBsCiAgICAqcHJveHlfY2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVz
OjpDU19MQVNUXTsKCiAgICBBQ0VfTVRfU1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGlj
OgogICAgc3RhdGljIF9UQU9fT2JzZXJ2ZXJfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICp0aGVf
VEFPX09ic2VydmVyX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CiAgfTsKIyA4OTgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluUy5oIgogIGNsYXNzIF9UQU9fT2JzZXJ2ZXJfVGhy
dVBPQV9Qcm94eV9JbXBsIDoKICAgIHB1YmxpYyB2aXJ0dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpfVEFPX09ic2VydmVyX1Byb3h5X0ltcGwsCiAgICBwdWJsaWMgdmlydHVhbCBUQU9fVGhy
dVBPQV9PYmplY3RfUHJveHlfSW1wbAogIHsKICBwdWJsaWM6CiAgICBfVEFPX09ic2VydmVyX1Ro
cnVQT0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19PYnNlcnZlcl9UaHJ1
UE9BX1Byb3h5X0ltcGwgKHZvaWQpIHsgfQoKICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVfY29uc3Vt
ZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAg
ICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAg
ICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAogICAgICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0
ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw
bGllclFPUyAmIHB1YiwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKTsKCgoKCiAgfTsKCgoKCgoKICBjbGFzcyBFdmVudENoYW5uZWw7CiAgdHlwZWRlZiBF
dmVudENoYW5uZWwgKkV2ZW50Q2hhbm5lbF9wdHI7CgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVs
X1RocnVQT0FfUHJveHlfSW1wbDsKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9TdHJhdGVnaXpl
ZF9Qcm94eV9Ccm9rZXI7CgogIGNsYXNzIEV2ZW50Q2hhbm5lbCA6IHB1YmxpYyB2aXJ0dWFsIFBv
cnRhYmxlU2VydmVyOjpTZXJ2YW50QmFzZQogIHsKICBwcm90ZWN0ZWQ6CiAgICBFdmVudENoYW5u
ZWwgKHZvaWQpOwoKICBwdWJsaWM6CiAgICBFdmVudENoYW5uZWwgKGNvbnN0IEV2ZW50Q2hhbm5l
bCYgcmhzKTsKICAgIHZpcnR1YWwgfkV2ZW50Q2hhbm5lbCAodm9pZCk7CgoKICAgIHZpcnR1YWwg
Q09SQkE6OkJvb2xlYW4gX2lzX2EgKAogICAgICAgIGNvbnN0IGNoYXIqIGxvZ2ljYWxfdHlwZV9p
ZCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAg
ICB2aXJ0dWFsIHZvaWQqIF9kb3duY2FzdCAoCiAgICAgICAgY29uc3QgY2hhciogbG9naWNhbF90
eXBlX2lkCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX2lzX2Ffc2tlbCAoCiAgICAgICAgVEFP
X1NlcnZlclJlcXVlc3QgJnJlcSwKICAgICAgICB2b2lkICpvYmosCiAgICAgICAgdm9pZCAqc2Vy
dmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgc3RhdGljIHZvaWQgX25vbl9leGlzdGVudF9z
a2VsICgKICAgICAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgICAgIHZvaWQgKm9iaiwK
ICAgICAgICB2b2lkICpzZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICBzdGF0aWMgdm9p
ZCBfaW50ZXJmYWNlX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZyZXEsCiAgICAg
ICAgdm9pZCAqb2JqLAogICAgICAgIHZvaWQgKnNlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoK
ICAgIHZpcnR1YWwgdm9pZCBfZGlzcGF0Y2ggKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZy
ZXEsCiAgICAgICAgdm9pZCAqX3NlcnZhbnRfdXBjYWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApOwoKICAgIDo6UnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWwgKl90aGlzICgKICAgICAgICBDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAg
VEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKCiAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIF9pbnRlcmZhY2VfcmVwb3NpdG9yeV9pZCAodm9pZCkgY29uc3Q7CgogICAgdmlydHVhbCBS
dGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1lcnMgKAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApID0gMDsKCgoKICAgICAgICBzdGF0aWMgdm9p
ZCBmb3JfY29uc3VtZXJzX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3Jl
cSwKICAgICAgICB2b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBj
YWxsLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZQogICAgICApOwoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBw
bGllckFkbWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf
ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24gKSA9IDA7CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZm9yX3N1cHBsaWVyc19za2VsICgKICAg
ICAgICBUQU9fU2VydmVyUmVxdWVzdCAmX3Rhb19yZXEsCiAgICAgICAgdm9pZCAqX3Rhb19vYmos
CiAgICAgICAgdm9pZCAqX3Rhb19zZXJ2YW50X3VwY2FsbCwKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKTsKCiAgICB2aXJ0
dWFsIHZvaWQgZGVzdHJveSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50
ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkgPSAwOwoK
CgogICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lfc2tlbCAoCiAgICAgICAgVEFPX1NlcnZlclJl
cXVlc3QgJl90YW9fcmVxLAogICAgICAgIHZvaWQgKl90YW9fb2JqLAogICAgICAgIHZvaWQgKl90
YW9fc2VydmFudF91cGNhbGwsCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJB
X0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICk7CgogICAgdmlydHVhbCBSdGVjRXZlbnRDaGFu
bmVsQWRtaW46Ok9ic2VydmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4
Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpB
VElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQ
RU5EX09CU0VSVkVSICkgPSAwOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgYXBwZW5kX29ic2Vy
dmVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2
b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg
ICApOwoKICAgIHZpcnR1YWwgdm9pZCByZW1vdmVfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVm
YXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4
Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpB
VElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVN
T1ZFX09CU0VSVkVSICkgPSAwOwoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgcmVtb3ZlX29ic2Vy
dmVyX3NrZWwgKAogICAgICAgIFRBT19TZXJ2ZXJSZXF1ZXN0ICZfdGFvX3JlcSwKICAgICAgICB2
b2lkICpfdGFvX29iaiwKICAgICAgICB2b2lkICpfdGFvX3NlcnZhbnRfdXBjYWxsLAogICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAg
ICApOwoKCiAgfTsKCgoKCgoKICBjbGFzcyBfVEFPX0V2ZW50Q2hhbm5lbF9TdHJhdGVnaXplZF9Q
cm94eV9Ccm9rZXIgOiBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RB
T19FdmVudENoYW5uZWxfUHJveHlfQnJva2VyCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRD
aGFubmVsX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAodm9pZCk7CgogICAgdmlydHVhbCB+X1RB
T19FdmVudENoYW5uZWxfU3RyYXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKCiAgICB2aXJ0
dWFsIDo6UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9JbXBs
ICZzZWxlY3RfcHJveHkgKAogICAgICA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu
bmVsICpvYmplY3QsCiAgICAgIENPUkJBX0Vudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlCiAgICApOwoKICBwcml2YXRlOgoKCiAgICB2b2lkIGNyZWF0ZV9wcm94eSAo
CiAgICAgIGludCBjb2xsb2NhdGlvbl9zdHJhdGVneSwKICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICApOwoKCgoKICAgIDo6UnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpfVEFPX0V2ZW50Q2hhbm5lbF9Qcm94eV9JbXBsCiAgICAqcHJveHlf
Y2FjaGVfW1RBT19Db2xsb2NhdGlvbl9TdHJhdGVnaWVzOjpDU19MQVNUXTsKCiAgICBBQ0VfTVRf
U1lOQ0g6Ok1VVEVYIG11dGV4XzsKCgoKCiAgcHVibGljOgogICAgc3RhdGljIF9UQU9fRXZlbnRD
aGFubmVsX1N0cmF0ZWdpemVkX1Byb3h5X0Jyb2tlciAqdGhlX1RBT19FdmVudENoYW5uZWxfU3Ry
YXRlZ2l6ZWRfUHJveHlfQnJva2VyICh2b2lkKTsKICB9OwojIDExMjcgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50
Q2hhbm5lbEFkbWluUy5oIgogIGNsYXNzIF9UQU9fRXZlbnRDaGFubmVsX1RocnVQT0FfUHJveHlf
SW1wbCA6CiAgICBwdWJsaWMgdmlydHVhbCA6OlJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6X1RBT19F
dmVudENoYW5uZWxfUHJveHlfSW1wbCwKICAgIHB1YmxpYyB2aXJ0dWFsIFRBT19UaHJ1UE9BX09i
amVjdF9Qcm94eV9JbXBsCiAgewogIHB1YmxpYzoKICAgIF9UQU9fRXZlbnRDaGFubmVsX1RocnVQ
T0FfUHJveHlfSW1wbCAodm9pZCk7CgogICAgdmlydHVhbCB+X1RBT19FdmVudENoYW5uZWxfVGhy
dVBPQV9Qcm94eV9JbXBsICh2b2lkKSB7IH0KCiAgICB2aXJ0dWFsIFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgZm9yX2NvbnN1bWVycyAoCiAgICAgICAgQ09SQkFfT2Jq
ZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAoIENP
UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpTdXBwbGllckFkbWluX3B0ciBmb3Jfc3VwcGxpZXJzICgKICAgICAgICBDT1JCQV9PYmpl
Y3QgKl9jb2xsb2NhdGVkX3Rhb190YXJnZXRfLAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICAgICApCiAgICAgIHRocm93ICggQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgdmlydHVhbCB2b2lkIGRlc3Ryb3kgKAogICAg
ICAgIENPUkJBX09iamVjdCAqX2NvbGxvY2F0ZWRfdGFvX3RhcmdldF8sCiAgICAgICAgQ09SQkE6
OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgICAgICkKICAg
ICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICB2aXJ0dWFsIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGFwcGVuZF9vYnNlcnZlciAoCiAgICAg
ICAgQ09SQkFfT2JqZWN0ICpfY29sbG9jYXRlZF90YW9fdGFyZ2V0XywKICAgICAgICBSdGVjRXZl
bnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX3B0ciBndywKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICAgKQogICAgICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu
bmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD
aGFubmVsOjpDQU5UX0FQUEVORF9PQlNFUlZFUiApOwoKCgoKCiAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlX29ic2VydmVyICgKICAgICAgICBDT1JCQV9PYmplY3QgKl9jb2xsb2NhdGVkX3Rhb190YXJn
ZXRfLAogICAgICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFuZGxlIGd3LAog
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJs
ZQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfUkVNT1ZFX09CU0VSVkVSICk7CgoK
CgoKCiAgfTsKCgoKCgoKfQoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuaCIg
MQojIDI1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji
c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIgojIDEgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDI2ICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIiAyCiMgMzUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFk
bWluU19ULmgiCm5hbWVzcGFjZSBQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluCnsKCiAgdGVtcGxh
dGUgPGNsYXNzIFQ+CiAgY2xhc3MgUHJveHlQdXNoU3VwcGxpZXJfdGllIDogcHVibGljIFByb3h5
UHVzaFN1cHBsaWVyCiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAm
dCk7CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9B
X3B0ciBwb2EpOwoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29s
ZWFuIHJlbGVhc2U9MSk7CgogICAgUHJveHlQdXNoU3VwcGxpZXJfdGllIChUICp0cCwgUG9ydGFi
bGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Q
cm94eVB1c2hTdXBwbGllcl90aWUgKHZvaWQpOwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lk
KTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVj
dCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFu
IF9pc19vd25lciAodm9pZCk7CgogICAgdm9pZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIp
OwoKCgogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZvaWQgY29ubmVj
dF9wdXNoX2NvbnN1bWVyICgKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRy
IHB1c2hfY29uc3VtZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25z
dW1lclFPUyAmIHFvcywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkK
ICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpUeXBl
RXJyb3IgKTsKCgoKCgogICAgICAgIHZvaWQgc3VzcGVuZF9jb25uZWN0aW9uICgKICAgICAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAg
ICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENP
UkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICB2b2lkIHJlc3VtZV9jb25uZWN0aW9u
ICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICB2b2lkIGRpc2Nv
bm5lY3RfcHVzaF9zdXBwbGllciAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25t
ZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoK
CiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIg
cG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJlbF87CgoKICAgIFByb3h5UHVzaFN1cHBsaWVyX3Rp
ZSAoY29uc3QgUHJveHlQdXNoU3VwcGxpZXJfdGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv
bnN0IFByb3h5UHVzaFN1cHBsaWVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+
CiAgY2xhc3MgUHJveHlQdXNoQ29uc3VtZXJfdGllIDogcHVibGljIFByb3h5UHVzaENvbnN1bWVy
CiAgewogIHB1YmxpYzoKICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoVCAmdCk7CgogICAgUHJv
eHlQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpOwoK
ICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9
MSk7CgogICAgUHJveHlQdXNoQ29uc3VtZXJfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBP
QV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Qcm94eVB1c2hDb25z
dW1lcl90aWUgKHZvaWQpOwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lkKTsKCiAgICB2b2lk
IF90aWVkX29iamVjdCAoVCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAqb2JqLCBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFuIF9pc19vd25lciAo
dm9pZCk7CgogICAgdm9pZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpOwoKCgogICAgUG9y
dGFibGVTZXJ2ZXI6OlBPQV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2Rl
ZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKTsKICAgIHZvaWQgY29ubmVjdF9wdXNoX3N1cHBs
aWVyICgKICAgICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxp
ZXIsCiAgICAgICAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyAmIHFv
cywKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAg
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
QWxyZWFkeUNvbm5lY3RlZCApOwoKCgoKICAgICAgICB2b2lkIHB1c2ggKAogICAgICAgIGNvbnN0
IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0ICYgZGF0YSwKICAgICAgICBDT1JCQTo6RW52aXJvbm1l
bnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1
bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24gKTsKCgoKICAgICAgICB2b2lkIGRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCiAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0K
ICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cg
KCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpwdHJf
OwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFuIHJl
bF87CgoKICAgIFByb3h5UHVzaENvbnN1bWVyX3RpZSAoY29uc3QgUHJveHlQdXNoQ29uc3VtZXJf
dGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IFByb3h5UHVzaENvbnN1bWVyX3RpZSAm
KTsKICB9OwoKCiAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgY2xhc3MgQ29uc3VtZXJBZG1pbl90aWUg
OiBwdWJsaWMgQ29uc3VtZXJBZG1pbgogIHsKICBwdWJsaWM6CiAgICBDb25zdW1lckFkbWluX3Rp
ZSAoVCAmdCk7CgogICAgQ29uc3VtZXJBZG1pbl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQ
T0FfcHRyIHBvYSk7CgogICAgQ29uc3VtZXJBZG1pbl90aWUgKFQgKnRwLCBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlPTEpOwoKICAgIENvbnN1bWVyQWRtaW5fdGllIChUICp0cCwgUG9ydGFibGVTZXJ2
ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVhbiByZWxlYXNlPTEpOwoKICAgIH5Db25zdW1l
ckFkbWluX3RpZSAodm9pZCk7CgoKCiAgICBUICpfdGllZF9vYmplY3QgKHZvaWQpOwoKICAgIHZv
aWQgX3RpZWRfb2JqZWN0IChUICZvYmopOwoKICAgIHZvaWQgX3RpZWRfb2JqZWN0IChUICpvYmos
IENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MSk7CgogICAgQ09SQkE6OkJvb2xlYW4gX2lzX293bmVy
ICh2b2lkKTsKCiAgICB2b2lkIF9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYik7CgoKCiAgICBQ
b3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKAogICAgICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9f
ZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApOwogICAgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQcm94eVB1c2hTdXBwbGllcl9wdHIgb2J0YWluX3B1c2hfc3VwcGxpZXIgKAogICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAg
ICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09S
QkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgICBwcml2YXRlOgogICAgVCAqcHRyXzsKICAg
IFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyIHBvYV87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwoK
CiAgICBDb25zdW1lckFkbWluX3RpZSAoY29uc3QgQ29uc3VtZXJBZG1pbl90aWUgJik7CiAgICB2
b2lkIG9wZXJhdG9yPSAoY29uc3QgQ29uc3VtZXJBZG1pbl90aWUgJik7CiAgfTsKCgogIHRlbXBs
YXRlIDxjbGFzcyBUPgogIGNsYXNzIFN1cHBsaWVyQWRtaW5fdGllIDogcHVibGljIFN1cHBsaWVy
QWRtaW4KICB7CiAgcHVibGljOgogICAgU3VwcGxpZXJBZG1pbl90aWUgKFQgJnQpOwoKICAgIFN1
cHBsaWVyQWRtaW5fdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpOwoKICAg
IFN1cHBsaWVyQWRtaW5fdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAg
ICBTdXBwbGllckFkbWluX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwg
Q09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICB+U3VwcGxpZXJBZG1pbl90aWUgKHZvaWQp
OwoKCgogICAgVCAqX3RpZWRfb2JqZWN0ICh2b2lkKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAo
VCAmb2JqKTsKCiAgICB2b2lkIF90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVhbiBy
ZWxlYXNlPTEpOwoKICAgIENPUkJBOjpCb29sZWFuIF9pc19vd25lciAodm9pZCk7CgogICAgdm9p
ZCBfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpOwoKCgogICAgUG9ydGFibGVTZXJ2ZXI6OlBP
QV9wdHIgX2RlZmF1bHRfUE9BICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1l
bnQgKCkKICAgICAgKTsKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3Vt
ZXJfcHRyIG9idGFpbl9wdXNoX2NvbnN1bWVyICgKICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQg
Jl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQogICAgICAgICAgVEFPX2RlZmF1bHRf
ZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRp
b24gKTsKCgoKICAgICAgcHJpdmF0ZToKICAgIFQgKnB0cl87CiAgICBQb3J0YWJsZVNlcnZlcjo6
UE9BX3ZhciBwb2FfOwogICAgQ09SQkE6OkJvb2xlYW4gcmVsXzsKCgogICAgU3VwcGxpZXJBZG1p
bl90aWUgKGNvbnN0IFN1cHBsaWVyQWRtaW5fdGllICYpOwogICAgdm9pZCBvcGVyYXRvcj0gKGNv
bnN0IFN1cHBsaWVyQWRtaW5fdGllICYpOwogIH07CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBj
bGFzcyBPYnNlcnZlcl90aWUgOiBwdWJsaWMgT2JzZXJ2ZXIKICB7CiAgcHVibGljOgogICAgT2Jz
ZXJ2ZXJfdGllIChUICZ0KTsKCiAgICBPYnNlcnZlcl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVy
OjpQT0FfcHRyIHBvYSk7CgogICAgT2JzZXJ2ZXJfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4g
cmVsZWFzZT0xKTsKCiAgICBPYnNlcnZlcl90aWUgKFQgKnRwLCBQb3J0YWJsZVNlcnZlcjo6UE9B
X3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2U9MSk7CgogICAgfk9ic2VydmVyX3RpZSAo
dm9pZCk7CgoKCiAgICBUICpfdGllZF9vYmplY3QgKHZvaWQpOwoKICAgIHZvaWQgX3RpZWRfb2Jq
ZWN0IChUICZvYmopOwoKICAgIHZvaWQgX3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29s
ZWFuIHJlbGVhc2U9MSk7CgogICAgQ09SQkE6OkJvb2xlYW4gX2lzX293bmVyICh2b2lkKTsKCiAg
ICB2b2lkIF9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYik7CgoKCiAgICBQb3J0YWJsZVNlcnZl
cjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZp
cm9ubWVudCAoKQogICAgICApOwogICAgdm9pZCB1cGRhdGVfY29uc3VtZXIgKAogICAgICAgIGNv
bnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJRT1MgJiBzdWIsCiAgICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAg
ICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgICAgdm9pZCB1cGRhdGVfc3VwcGxpZXIgKAog
ICAgICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxl
ID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhy
b3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgIHByaXZhdGU6CiAgICBUICpw
dHJfOwogICAgUG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgcG9hXzsKICAgIENPUkJBOjpCb29sZWFu
IHJlbF87CgoKICAgIE9ic2VydmVyX3RpZSAoY29uc3QgT2JzZXJ2ZXJfdGllICYpOwogICAgdm9p
ZCBvcGVyYXRvcj0gKGNvbnN0IE9ic2VydmVyX3RpZSAmKTsKICB9OwoKCiAgdGVtcGxhdGUgPGNs
YXNzIFQ+CiAgY2xhc3MgRXZlbnRDaGFubmVsX3RpZSA6IHB1YmxpYyBFdmVudENoYW5uZWwKICB7
CiAgcHVibGljOgogICAgRXZlbnRDaGFubmVsX3RpZSAoVCAmdCk7CgogICAgRXZlbnRDaGFubmVs
X3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hKTsKCiAgICBFdmVudENoYW5u
ZWxfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAgICBFdmVudENoYW5u
ZWxfdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlPTEpOwoKICAgIH5FdmVudENoYW5uZWxfdGllICh2b2lkKTsKCgoKICAgIFQgKl90
aWVkX29iamVjdCAodm9pZCk7CgogICAgdm9pZCBfdGllZF9vYmplY3QgKFQgJm9iaik7CgogICAg
dm9pZCBfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZT0xKTsKCiAg
ICBDT1JCQTo6Qm9vbGVhbiBfaXNfb3duZXIgKHZvaWQpOwoKICAgIHZvaWQgX2lzX293bmVyIChD
T1JCQTo6Qm9vbGVhbiBiKTsKCgoKICAgIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIF9kZWZhdWx0
X1BPQSAoCiAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlID0KICAgICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICk7
CiAgICBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fcHRyIGZvcl9jb25zdW1l
cnMgKAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKQogICAgICApCiAg
ICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApOwoKCgogICAgICAgIFJ0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl9wdHIgZm9yX3N1cHBsaWVycyAoCiAgICAgICAg
Q09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAg
ICAgICAgIFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBD
T1JCQTo6U3lzdGVtRXhjZXB0aW9uICk7CgoKCiAgICAgICAgdm9pZCBkZXN0cm95ICgKICAgICAg
ICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUgPQog
ICAgICAgICAgVEFPX2RlZmF1bHRfZW52aXJvbm1lbnQgKCkKICAgICAgKQogICAgICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKTsKCgoKICAgICAgICBSdGVjRXZlbnRDaGFubmVsQWRt
aW46Ok9ic2VydmVyX0hhbmRsZSBhcHBlbmRfb2JzZXJ2ZXIgKAogICAgICAgIFJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAm
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9CiAgICAgICAgICBUQU9fZGVmYXVsdF9l
bnZpcm9ubWVudCAoKQogICAgICApCiAgICAgIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
biwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9F
UlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09C
U0VSVkVSICk7CgoKCgoKICAgICAgICB2b2lkIHJlbW92ZV9vYnNlcnZlciAoCiAgICAgICAgUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgZ3csCiAgICAgICAgQ09SQkE6OkVu
dmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgIFRB
T19kZWZhdWx0X2Vudmlyb25tZW50ICgpCiAgICAgICkKICAgICAgdGhyb3cgKCBDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6U1lOQ0hS
T05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbDo6Q0FO
VF9SRU1PVkVfT0JTRVJWRVIgKTsKCgoKCgogICAgICBwcml2YXRlOgogICAgVCAqcHRyXzsKICAg
IFBvcnRhYmxlU2VydmVyOjpQT0FfdmFyIHBvYV87CiAgICBDT1JCQTo6Qm9vbGVhbiByZWxfOwoK
CiAgICBFdmVudENoYW5uZWxfdGllIChjb25zdCBFdmVudENoYW5uZWxfdGllICYpOwogICAgdm9p
ZCBvcGVyYXRvcj0gKGNvbnN0IEV2ZW50Q2hhbm5lbF90aWUgJik7CiAgfTsKCn0KCgoKCgojIDEg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmkiIDEKIyAyNCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRD
aGFubmVsQWRtaW5TX1QuaSIKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46OlByb3h5UHVzaFN1cHBsaWVy
X3RpZSAoVCAmdCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxl
U2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxj
bGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxp
ZXJfdGllPFQ+OjpQcm94eVB1c2hTdXBwbGllcl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQ
T0FfcHRyIHBvYSkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxl
U2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRl
bXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ
dXNoU3VwcGxpZXJfdGllPFQ+OjpQcm94eVB1c2hTdXBwbGllcl90aWUgKFQgKnRwLCBDT1JCQTo6
Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9hXyAoUG9y
dGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfIChyZWxlYXNlKQp7fQoK
dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94
eVB1c2hTdXBwbGllcl90aWU8VD46OlByb3h5UHVzaFN1cHBsaWVyX3RpZSAoVCAqdHAsIFBvcnRh
YmxlU2VydmVyOjpQT0FfcHRyIHBvYSwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6
IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNh
dGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGll
PFQ+Ojp+UHJveHlQdXNoU3VwcGxpZXJfdGllICh2b2lkKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRl
bGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgKgpQT0FfUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46Ol90aWVkX29iamVj
dCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGll
PFQ+OjpfdGllZF9vYmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhp
cy0+cHRyXzsKICB0aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5
UHVzaFN1cHBsaWVyX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29sZWFu
IHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1
c2hTdXBwbGllcl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxf
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpCb29sZWFu
IGIpCnsKICB0aGlzLT5yZWxfID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQb3J0
YWJsZVNlcnZlcjo6UE9BX3B0cgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hT
dXBwbGllcl90aWU8VD46Ol9kZWZhdWx0X1BPQSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NP
UkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5w
b2FfLmluICgpKSkKICAgIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0
aGlzLT5wb2FfLmluICgpKTsKCiAgcmV0dXJuIHRoaXMtPlByb3h5UHVzaFN1cHBsaWVyOjpfZGVm
YXVsdF9QT0EgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNo
U3VwcGxpZXJfdGllPFQ+Ojpjb25uZWN0X3B1c2hfY29uc3VtZXIgKAogICAgUnRlY0V2ZW50Q29t
bTo6UHVzaENvbnN1bWVyX3B0ciBwdXNoX2NvbnN1bWVyLAogICAgY29uc3QgUnRlY0V2ZW50Q2hh
bm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHFvcywKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FD
RV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1F
eGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFkeUNvbm5lY3RlZCwgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpUeXBlRXJyb3IgKQoKCgoKewogIHRoaXMtPnB0cl8tPmNvbm5lY3Rf
cHVzaF9jb25zdW1lciAoCnB1c2hfY29uc3VtZXIsCiAgICBxb3MsCiAgICBfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lk
IFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3RpZTxUPjo6c3Vz
cGVuZF9jb25uZWN0aW9uICgKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoK
CnsKICB0aGlzLT5wdHJfLT5zdXNwZW5kX2Nvbm5lY3Rpb24gKApfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9S
dGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBsaWVyX3RpZTxUPjo6cmVzdW1lX2Nv
bm5lY3Rpb24gKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50
X3ZhcmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRo
aXMtPnB0cl8tPnJlc3VtZV9jb25uZWN0aW9uICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0FfUnRlY0V2ZW50
Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hTdXBwbGllcl90aWU8VD46OmRpc2Nvbm5lY3RfcHVzaF9z
dXBwbGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgdGhp
cy0+cHRyXy0+ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpQcm94eVB1c2hDb25zdW1l
cl90aWUgKFQgJnQpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJs
ZVNlcnZlcjo6UE9BOjpfbmlsICgpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1
bWVyX3RpZTxUPjo6UHJveHlQdXNoQ29uc3VtZXJfdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6
UE9BX3B0ciBwb2EpCiAgICAgICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJs
ZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5
UHVzaENvbnN1bWVyX3RpZTxUPjo6UHJveHlQdXNoQ29uc3VtZXJfdGllIChUICp0cCwgQ09SQkE6
OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBv
cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30K
CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJv
eHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpQcm94eVB1c2hDb25zdW1lcl90aWUgKFQgKnRwLCBQb3J0
YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgICAgICAg
OiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGlj
YXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
VD4gaW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3Rp
ZTxUPjo6flByb3h5UHVzaENvbnN1bWVyX3RpZSAodm9pZCkKewogIGlmICh0aGlzLT5yZWxfKSBk
ZWxldGUgdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBUICoKUE9BX1J0
ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpfdGllZF9vYmpl
Y3QgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu
bGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3Rp
ZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRo
aXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9IDA7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94
eVB1c2hDb25zdW1lcl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9vbGVh
biByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMt
PnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ
dXNoQ29uc3VtZXJfdGllPFQ+OjpfaXNfb3duZXIgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+cmVs
XzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVs
QWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVh
biBiKQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9y
dGFibGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNo
Q29uc3VtZXJfdGllPFQ+OjpfZGVmYXVsdF9QT0EgKENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIGlmICghQ09SQkE6OmlzX25pbCAodGhpcy0+
cG9hXy5pbiAoKSkpCiAgICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAo
dGhpcy0+cG9hXy5pbiAoKSk7CgogIHJldHVybiB0aGlzLT5Qcm94eVB1c2hDb25zdW1lcjo6X2Rl
ZmF1bHRfUE9BIChfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVz
aENvbnN1bWVyX3RpZTxUPjo6Y29ubmVjdF9wdXNoX3N1cHBsaWVyICgKICAgIFJ0ZWNFdmVudENv
bW06OlB1c2hTdXBwbGllcl9wdHIgcHVzaF9zdXBwbGllciwKICAgIGNvbnN0IFJ0ZWNFdmVudENo
YW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MgJiBxb3MsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVt
RXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkFscmVhZHlDb25uZWN0ZWQgKQoKCgp7
CiAgdGhpcy0+cHRyXy0+Y29ubmVjdF9wdXNoX3N1cHBsaWVyICgKcHVzaF9zdXBwbGllciwKICAg
IHFvcywKICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQ
dXNoQ29uc3VtZXJfdGllPFQ+OjpwdXNoICgKICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50
U2V0ICYgZGF0YSwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0
aGlzLT5wdHJfLT5wdXNoICgKZGF0YSwKICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUKICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENo
YW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfdGllPFQ+OjpkaXNjb25uZWN0X3B1c2hfY29u
c3VtZXIgKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoKewogIHRoaXMt
PnB0cl8tPmRpc2Nvbm5lY3RfcHVzaF9jb25zdW1lciAoCl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRf
dmFyaWFibGUKICApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lClBPQV9SdGVjRXZlbnRD
aGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpDb25zdW1lckFkbWluX3RpZSAoVCAm
dCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQ
T0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46OkNv
bnN1bWVyQWRtaW5fdGllIChUICZ0LCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBwb2EpCiAgICAg
ICAgOiBwdHJfICgmdCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVw
bGljYXRlIChwb2EpKSwKICAgICAgICAgIHJlbF8gKDApCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpD
b25zdW1lckFkbWluX3RpZSAoVCAqdHAsIENPUkJBOjpCb29sZWFuIHJlbGVhc2UpCiAgICAgICAg
OiBwdHJfICh0cCksCiAgICAgICAgICBwb2FfIChQb3J0YWJsZVNlcnZlcjo6UE9BOjpfbmlsICgp
KSwKICAgICAgICAgIHJlbF8gKHJlbGVhc2UpCnt9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5l
ClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpDb25zdW1l
ckFkbWluX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwgQ09SQkE6OkJv
b2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRh
YmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAocmVsZWFz
ZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1p
bjo6Q29uc3VtZXJBZG1pbl90aWU8VD46On5Db25zdW1lckFkbWluX3RpZSAodm9pZCkKewogIGlm
ICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlu
bGluZSBUICoKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46
Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJB
ZG1pbl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAmb2JqKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRl
bGV0ZSB0aGlzLT5wdHJfOwogIHRoaXMtPnB0cl8gPSAmb2JqOwogIHRoaXMtPnJlbF8gPSAwOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1p
bjo6Q29uc3VtZXJBZG1pbl90aWU8VD46Ol90aWVkX29iamVjdCAoVCAqb2JqLCBDT1JCQTo6Qm9v
bGVhbiByZWxlYXNlKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwogIHRo
aXMtPnB0cl8gPSBvYmo7CiAgdGhpcy0+cmVsXyA9IHJlbGVhc2U7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgQ09SQkE6OkJvb2xlYW4KUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29u
c3VtZXJBZG1pbl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxf
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6Q29uc3VtZXJBZG1pbl90aWU8VD46Ol9pc19vd25lciAoQ09SQkE6OkJvb2xlYW4gYikK
ewogIHRoaXMtPnJlbF8gPSBiOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFBvcnRhYmxl
U2VydmVyOjpQT0FfcHRyClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5f
dGllPFQ+OjpfZGVmYXVsdF9QT0EgKENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZp
cm9ubWVudF92YXJpYWJsZSkKewogIGlmICghQ09SQkE6OmlzX25pbCAodGhpcy0+cG9hXy5pbiAo
KSkpCiAgICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAodGhpcy0+cG9h
Xy5pbiAoKSk7CgogIHJldHVybiB0aGlzLT5Db25zdW1lckFkbWluOjpfZGVmYXVsdF9QT0EgKF9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyIFBPQV9SdGVj
RXZlbnRDaGFubmVsQWRtaW46OkNvbnN1bWVyQWRtaW5fdGllPFQ+OjpvYnRhaW5fcHVzaF9zdXBw
bGllciAoCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgcmV0dXJu
IHRoaXMtPnB0cl8tPm9idGFpbl9wdXNoX3N1cHBsaWVyICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVu
dF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46OlN1cHBsaWVyQWRtaW5fdGllIChU
ICZ0KQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2ZXI6
OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfICgwKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6
U3VwcGxpZXJBZG1pbl90aWUgKFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSkKICAg
ICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9k
dXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46
OlN1cHBsaWVyQWRtaW5fdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAg
ICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwg
KCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp
bmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46OlN1cHBs
aWVyQWRtaW5fdGllIChUICp0cCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgcG9hLCBDT1JCQTo6
Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9hXyAoUG9y
dGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxfIChyZWxl
YXNlKQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6flN1cHBsaWVyQWRtaW5fdGllICh2b2lkKQp7CiAg
aWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4g
aW5saW5lIFQgKgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxU
Pjo6X3RpZWRfb2JqZWN0ICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRl
IDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGll
ckFkbWluX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVsXykg
ZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9IDA7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5lbEFk
bWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpC
b29sZWFuIHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAg
dGhpcy0+cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNs
YXNzIFQ+IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpT
dXBwbGllckFkbWluX3RpZTxUPjo6X2lzX293bmVyICh2b2lkKQp7CiAgcmV0dXJuIHRoaXMtPnJl
bF87Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpTdXBwbGllckFkbWluX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVhbiBi
KQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9ydGFi
bGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1p
bl90aWU8VD46Ol9kZWZhdWx0X1BPQSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5wb2FfLmlu
ICgpKSkKICAgIHJldHVybiBQb3J0YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5w
b2FfLmluICgpKTsKCiAgcmV0dXJuIHRoaXMtPlN1cHBsaWVyQWRtaW46Ol9kZWZhdWx0X1BPQSAo
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpQcm94eVB1c2hDb25zdW1lcl9wdHIgUE9BX1J0
ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJBZG1pbl90aWU8VD46Om9idGFpbl9wdXNoX2Nv
bnN1bWVyICgKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZQogICkKICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICByZXR1
cm4gdGhpcy0+cHRyXy0+b2J0YWluX3B1c2hfY29uc3VtZXIgKApfQUNFX0NPUkJBX0Vudmlyb25t
ZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90aWU8VD46Ok9ic2VydmVyX3RpZSAoVCAmdCkKICAg
ICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9u
aWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUK
UE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+OjpPYnNlcnZlcl90aWUg
KFQgJnQsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSkKICAgICAgICA6IHB0cl8gKCZ0KSwK
ICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAog
ICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNF
dmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+OjpPYnNlcnZlcl90aWUgKFQgKnRwLCBD
T1JCQTo6Qm9vbGVhbiByZWxlYXNlKQogICAgICAgIDogcHRyXyAodHApLAogICAgICAgICAgcG9h
XyAoUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X25pbCAoKSksCiAgICAgICAgICByZWxfIChyZWxlYXNl
KQp7fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpPYnNlcnZlcl90aWU8VD46Ok9ic2VydmVyX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQ
T0FfcHRyIHBvYSwgQ09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwK
ICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAog
ICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9B
X1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+Ojp+T2JzZXJ2ZXJfdGllICh2
b2lkKQp7CiAgaWYgKHRoaXMtPnJlbF8pIGRlbGV0ZSB0aGlzLT5wdHJfOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIFQgKgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90
aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2Jz
ZXJ2ZXJfdGllPFQ+OjpfdGllZF9vYmplY3QgKFQgJm9iaikKewogIGlmICh0aGlzLT5yZWxfKSBk
ZWxldGUgdGhpcy0+cHRyXzsKICB0aGlzLT5wdHJfID0gJm9iajsKICB0aGlzLT5yZWxfID0gMDsK
fQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSB2b2lkClBPQV9SdGVjRXZlbnRDaGFubmVsQWRt
aW46Ok9ic2VydmVyX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICpvYmosIENPUkJBOjpCb29sZWFu
IHJlbGVhc2UpCnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+
cHRyXyA9IG9iajsKICB0aGlzLT5yZWxfID0gcmVsZWFzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+
IGlubGluZSBDT1JCQTo6Qm9vbGVhbgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZl
cl90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5yZWxfOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2Jz
ZXJ2ZXJfdGllPFQ+OjpfaXNfb3duZXIgKENPUkJBOjpCb29sZWFuIGIpCnsKICB0aGlzLT5yZWxf
ID0gYjsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZSBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0
cgpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl90aWU8VD46Ol9kZWZhdWx0X1BP
QSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7
CiAgaWYgKCFDT1JCQTo6aXNfbmlsICh0aGlzLT5wb2FfLmluICgpKSkKICAgIHJldHVybiBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5wb2FfLmluICgpKTsKCiAgcmV0dXJu
IHRoaXMtPk9ic2VydmVyOjpfZGVmYXVsdF9QT0EgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFy
aWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCnZvaWQgUE9BX1J0ZWNFdmVudENo
YW5uZWxBZG1pbjo6T2JzZXJ2ZXJfdGllPFQ+Ojp1cGRhdGVfY29uc3VtZXIgKAogICAgY29uc3Qg
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpDb25zdW1lclFPUyAmIHN1YiwKICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAoIENP
UkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0aGlzLT5wdHJfLT51cGRhdGVfY29uc3VtZXIg
KApzdWIsCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2Vy
dmVyX3RpZTxUPjo6dXBkYXRlX3N1cHBsaWVyICgKICAgIGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6U3VwcGxpZXJRT1MgJiBwdWIsCiAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09S
QkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAgdGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0
aW9uICkKCgp7CiAgdGhpcy0+cHRyXy0+dXBkYXRlX3N1cHBsaWVyICgKcHViLAogICAgX0FDRV9D
T1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxp
bmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6RXZlbnRD
aGFubmVsX3RpZSAoVCAmdCkKICAgICAgICA6IHB0cl8gKCZ0KSwKICAgICAgICAgIHBvYV8gKFBv
cnRhYmxlU2VydmVyOjpQT0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAoMCkKe30KCnRlbXBs
YXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu
bmVsX3RpZTxUPjo6RXZlbnRDaGFubmVsX3RpZSAoVCAmdCwgUG9ydGFibGVTZXJ2ZXI6OlBPQV9w
dHIgcG9hKQogICAgICAgIDogcHRyXyAoJnQpLAogICAgICAgICAgcG9hXyAoUG9ydGFibGVTZXJ2
ZXI6OlBPQTo6X2R1cGxpY2F0ZSAocG9hKSksCiAgICAgICAgICByZWxfICgwKQp7fQoKdGVtcGxh
dGUgPGNsYXNzIFQ+IGlubGluZQpQT0FfUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5u
ZWxfdGllPFQ+OjpFdmVudENoYW5uZWxfdGllIChUICp0cCwgQ09SQkE6OkJvb2xlYW4gcmVsZWFz
ZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBvYV8gKFBvcnRhYmxlU2VydmVyOjpQ
T0E6Ol9uaWwgKCkpLAogICAgICAgICAgcmVsXyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxU
Pjo6RXZlbnRDaGFubmVsX3RpZSAoVCAqdHAsIFBvcnRhYmxlU2VydmVyOjpQT0FfcHRyIHBvYSwg
Q09SQkE6OkJvb2xlYW4gcmVsZWFzZSkKICAgICAgICA6IHB0cl8gKHRwKSwKICAgICAgICAgIHBv
YV8gKFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHBvYSkpLAogICAgICAgICAgcmVs
XyAocmVsZWFzZSkKe30KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKUE9BX1J0ZWNFdmVudENo
YW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6fkV2ZW50Q2hhbm5lbF90aWUgKHZvaWQp
CnsKICBpZiAodGhpcy0+cmVsXykgZGVsZXRlIHRoaXMtPnB0cl87Cn0KCnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgVCAqClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90
aWU8VD46Ol90aWVkX29iamVjdCAodm9pZCkKewogIHJldHVybiB0aGlzLT5wdHJfOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZl
bnRDaGFubmVsX3RpZTxUPjo6X3RpZWRfb2JqZWN0IChUICZvYmopCnsKICBpZiAodGhpcy0+cmVs
XykgZGVsZXRlIHRoaXMtPnB0cl87CiAgdGhpcy0+cHRyXyA9ICZvYmo7CiAgdGhpcy0+cmVsXyA9
IDA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZApQT0FfUnRlY0V2ZW50Q2hhbm5l
bEFkbWluOjpFdmVudENoYW5uZWxfdGllPFQ+OjpfdGllZF9vYmplY3QgKFQgKm9iaiwgQ09SQkE6
OkJvb2xlYW4gcmVsZWFzZSkKewogIGlmICh0aGlzLT5yZWxfKSBkZWxldGUgdGhpcy0+cHRyXzsK
ICB0aGlzLT5wdHJfID0gb2JqOwogIHRoaXMtPnJlbF8gPSByZWxlYXNlOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIENPUkJBOjpCb29sZWFuClBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46
OkV2ZW50Q2hhbm5lbF90aWU8VD46Ol9pc19vd25lciAodm9pZCkKewogIHJldHVybiB0aGlzLT5y
ZWxfOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lIHZvaWQKUE9BX1J0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6X2lzX293bmVyIChDT1JCQTo6Qm9vbGVhbiBi
KQp7CiAgdGhpcy0+cmVsXyA9IGI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgUG9ydGFi
bGVTZXJ2ZXI6OlBPQV9wdHIKUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVs
X3RpZTxUPjo6X2RlZmF1bHRfUE9BIChDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUpCnsKICBpZiAoIUNPUkJBOjppc19uaWwgKHRoaXMtPnBvYV8uaW4g
KCkpKQogICAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMtPnBv
YV8uaW4gKCkpOwoKICByZXR1cm4gdGhpcy0+RXZlbnRDaGFubmVsOjpfZGVmYXVsdF9QT0EgKF9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5s
aW5lClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIgUE9BX1J0ZWNFdmVu
dENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6Zm9yX2NvbnN1bWVycyAoCiAgICBD
T1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICApCiAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uICkKCgp7CiAgcmV0dXJuIHRoaXMtPnB0cl8t
PmZvcl9jb25zdW1lcnMgKApfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQpSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVy
QWRtaW5fcHRyIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90aWU8VD46
OmZvcl9zdXBwbGllcnMgKAogICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmly
b25tZW50X3ZhcmlhYmxlCiAgKQogIHRocm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiApCgoK
ewogIHJldHVybiB0aGlzLT5wdHJfLT5mb3Jfc3VwcGxpZXJzICgKX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKdm9pZCBQT0Ff
UnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWxfdGllPFQ+OjpkZXN0cm95ICgKICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkK
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24gKQoKCnsKICB0aGlzLT5wdHJfLT5kZXN0
cm95ICgKX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBUPiBpbmxpbmUKUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUgUE9B
X1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsX3RpZTxUPjo6YXBwZW5kX29ic2Vy
dmVyICgKICAgIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfcHRyIGd3LAogICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKQogIHRo
cm93ICggQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVu
dENoYW5uZWw6OlNZTkNIUk9OSVpBVElPTl9FUlJPUiwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpF
dmVudENoYW5uZWw6OkNBTlRfQVBQRU5EX09CU0VSVkVSICkKCgoKCnsKICByZXR1cm4gdGhpcy0+
cHRyXy0+YXBwZW5kX29ic2VydmVyICgKZ3csCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3Zh
cmlhYmxlCiAgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIFQ+IGlubGluZQp2b2lkIFBPQV9SdGVjRXZl
bnRDaGFubmVsQWRtaW46OkV2ZW50Q2hhbm5lbF90aWU8VD46OnJlbW92ZV9vYnNlcnZlciAoCiAg
ICBSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX0hhbmRsZSBndywKICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKICB0aHJvdyAo
IENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFu
bmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRD
aGFubmVsOjpDQU5UX1JFTU9WRV9PQlNFUlZFUiApCgoKCgp7CiAgdGhpcy0+cHRyXy0+cmVtb3Zl
X29ic2VydmVyICgKZ3csCiAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAgKTsK
fQojIDQ0NiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29y
YnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuaCIgMgoKCgoKIyAxICIvaG9t
ZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNz
L1J0ZWNFdmVudENoYW5uZWxBZG1pblNfVC5jcHAiIDEKIyAyNSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu
bmVsQWRtaW5TX1QuY3BwIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmgiIDEK
IyAyNiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2
Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5TX1QuY3BwIiAyCiMgNDUxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0
ZWNFdmVudENoYW5uZWxBZG1pblNfVC5oIiAyCiMgNDYyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB
ZG1pblNfVC5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L2FjZS9wb3N0LmgiIDEKIyA0NjMgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRlY0V2ZW50Q2hhbm5lbEFkbWluU19ULmgiIDIK
IyAxMTk0ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji
c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIgMgoKCiMgMSAiL2hvbWUvcnJw
L3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVj
RXZlbnRDaGFubmVsQWRtaW5TLmkiIDEKIyAyMiAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFubmVsQWRtaW5T
LmkiCmlubGluZSB2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaFN1cHBs
aWVyOjpkaXNjb25uZWN0X3B1c2hfc3VwcGxpZXJfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVxdWVz
dCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAgdm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpFbnZp
cm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIFBPQV9SdGVj
RXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5uZWxB
ZG1pbjo6UHJveHlQdXNoU3VwcGxpZXJfcHRyKSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06OlB1
c2hTdXBwbGllcjo6ZGlzY29ubmVjdF9wdXNoX3N1cHBsaWVyX3NrZWwgKAogICAgICByZXEsCiAg
ICAgIChQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVyX3B0cikgaW1wbCwKICAgICAgY29u
dGV4dCwKICAgICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7Cn0KaW5s
aW5lIHZvaWQgUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXI6OnB1
c2hfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVxdWVzdCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAg
dm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZQogICkKewogIFBPQV9SdGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRy
IGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRy
KSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcjo6cHVzaF9za2VsICgKICAg
ICAgcmVxLAogICAgICAoUE9BX1J0ZWNFdmVudENvbW06OlB1c2hDb25zdW1lcl9wdHIpIGltcGws
CiAgICAgIGNvbnRleHQsCiAgICAgICBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlCiAg
ICApOwp9CmlubGluZSB2b2lkIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlByb3h5UHVzaENv
bnN1bWVyOjpkaXNjb25uZWN0X3B1c2hfY29uc3VtZXJfc2tlbCAoCiAgICBUQU9fU2VydmVyUmVx
dWVzdCAmcmVxLAogICAgdm9pZCAqb2JqLAogICAgdm9pZCAqY29udGV4dCwKICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZQogICkKewogIFBPQV9S
dGVjRXZlbnRDb21tOjpQdXNoQ29uc3VtZXJfcHRyIGltcGwgPSAoUE9BX1J0ZWNFdmVudENoYW5u
ZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyKSBvYmo7CiAgUE9BX1J0ZWNFdmVudENvbW06
OlB1c2hDb25zdW1lcjo6ZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyX3NrZWwgKAogICAgICByZXEs
CiAgICAgIChQT0FfUnRlY0V2ZW50Q29tbTo6UHVzaENvbnN1bWVyX3B0cikgaW1wbCwKICAgICAg
Y29udGV4dCwKICAgICAgIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUKICAgICk7Cn0K
IyAxMTk3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Ji
c3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pblMuaCIgMgojIDEyMDcgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvUnRl
Y0V2ZW50Q2hhbm5lbEFkbWluUy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMjA4ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxB
ZG1pblMuaCIgMgojIDIwICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmgiIDIKIyAxICIvaG9tZS9y
cnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2
ZW50L0VDX0ZpbHRlci5oIiAxCiMgMTcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiCiMgMSAiL2hv
bWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTgg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29y
YnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDb21tQy5oIiAx
CiMgMjAgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJz
dmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L2V2ZW50X2V4
cG9ydC5oIiAxCiMgMjEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJz
L1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiIDIKCgoKCgpjbGFzcyBUQU9f
RUNfUU9TX0luZm87CiMgNDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBw
ZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmgiCmNsYXNzIFRBT19FQ19G
aWx0ZXIKewpwdWJsaWM6CgogIFRBT19FQ19GaWx0ZXIgKHZvaWQpOwoKCiAgdmlydHVhbCB+VEFP
X0VDX0ZpbHRlciAodm9pZCk7CgoKICBUQU9fRUNfRmlsdGVyKiBwYXJlbnQgKHZvaWQpIGNvbnN0
OwoKCiAgdm9pZCBhZG9wdF9jaGlsZCAoVEFPX0VDX0ZpbHRlciogY2hpbGQpOwoKCgogIHN0YXRp
YyBpbnQgbWF0Y2hlcyAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIHJocywKICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBsaHMp
OwoKICB0eXBlZGVmIFRBT19FQ19GaWx0ZXIqIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBUQU9fRUNf
RmlsdGVyKiBjb25zdCBjb25zdF92YWx1ZV90eXBlOwogIHR5cGVkZWYgY29uc3RfdmFsdWVfdHlw
ZSogQ2hpbGRyZW5JdGVyYXRvcjsKCgoKCgoKCiAgdmlydHVhbCBDaGlsZHJlbkl0ZXJhdG9yIGJl
Z2luICh2b2lkKSBjb25zdDsKICB2aXJ0dWFsIENoaWxkcmVuSXRlcmF0b3IgZW5kICh2b2lkKSBj
b25zdDsKICB2aXJ0dWFsIGludCBzaXplICh2b2lkKSBjb25zdDsKCgoKCgoKCiAgdmlydHVhbCBp
bnQgZmlsdGVyIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAg
ICAgICAgQ09SQkE6OkVudmlyb25tZW50JiBlbnYpID0gMDsKICB2aXJ0dWFsIGludCBmaWx0ZXJf
bm9jb3B5IChSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEFPX0VDX1FPU19JbmZvJiBxb3NfaW5mbywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmIGVudikgPSAwOwoKCgoKCgoKICB2aXJ0dWFs
IHZvaWQgcHVzaCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAg
ICAgICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAg
ICAgICBDT1JCQTo6RW52aXJvbm1lbnQmIGVudikgPSAwOwogIHZpcnR1YWwgdm9pZCBwdXNoX25v
Y29weSAoUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVEFPX0VDX1FPU19JbmZvJiBxb3NfaW5mbywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCYgZW52KSA9IDA7CgoKCiAgdmlydHVhbCB2b2lkIGNs
ZWFyICh2b2lkKSA9IDA7CgoKICB2aXJ0dWFsIENPUkJBOjpVTG9uZyBtYXhfZXZlbnRfc2l6ZSAo
dm9pZCkgY29uc3QgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIGludCBjYW5fbWF0Y2ggKGNvbnN0IFJ0
ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBoZWFkZXIpIGNvbnN0ID0gMDsKIyAxMzUgIi9ob21l
L3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3Mv
RXZlbnQvRUNfRmlsdGVyLmgiCiAgdmlydHVhbCBpbnQgYWRkX2RlcGVuZGVuY2llcyAoY29uc3Qg
UnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIGhlYWRlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSkgPSAwOwoKCgoKCgoKICB2aXJ0dWFsIHZvaWQgZ2V0X3Fvc19pbmZvIChU
QU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENP
UkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cgpwcml2
YXRlOgoKICBUQU9fRUNfRmlsdGVyKiBwYXJlbnRfOwp9OwojIDE2OCAiL2hvbWUvcnJwL3NjaG9v
bC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9FQ19G
aWx0ZXIuaCIKY2xhc3MgVEFPX0VDX051bGxfRmlsdGVyIDogcHVibGljIFRBT19FQ19GaWx0ZXIK
ewpwdWJsaWM6CgogIFRBT19FQ19OdWxsX0ZpbHRlciAodm9pZCk7CgoKCiAgdmlydHVhbCBpbnQg
ZmlsdGVyIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQsCiAgICAgICAgICAg
ICAgICAgICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OkVudmlyb25tZW50JiBlbnYpOwogIHZpcnR1YWwgaW50IGZpbHRlcl9ub2NvcHkg
KFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0JiBldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUQU9fRUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENPUkJBOjpFbnZpcm9ubWVudCYgZW52KTsKICB2aXJ0dWFsIHZvaWQgcHVzaCAoY29uc3Qg
UnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQmIGV2ZW50LAogICAgICAgICAgICAgICAgICAgICBUQU9f
RUNfUU9TX0luZm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQmIGVudik7CiAgdmlydHVhbCB2b2lkIHB1c2hfbm9jb3B5IChSdGVjRXZlbnRDb21tOjpF
dmVudFNldCYgZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQU9fRUNfUU9TX0lu
Zm8mIHFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50JiBlbnYpOwogIHZpcnR1YWwgdm9pZCBjbGVhciAodm9pZCk7CiAgdmlydHVhbCBDT1JCQTo6
VUxvbmcgbWF4X2V2ZW50X3NpemUgKHZvaWQpIGNvbnN0OwogIHZpcnR1YWwgaW50IGNhbl9tYXRj
aCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFkZXImIGhlYWRlcikgY29uc3Q7CiAgdmly
dHVhbCBpbnQgYWRkX2RlcGVuZGVuY2llcyAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRIZWFk
ZXImIGhlYWRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUQU9fRUNf
UU9TX0luZm8gJnFvc19pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn07CiMgMjA4
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL0V2ZW50L0VDX0ZpbHRlci5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRXZlbnQvRUNfRmlsdGVyLmkiIDEK
CgppbmxpbmUKVEFPX0VDX0ZpbHRlcjo6VEFPX0VDX0ZpbHRlciAodm9pZCkKICA6IHBhcmVudF8g
KDApCnsKfQoKaW5saW5lIFRBT19FQ19GaWx0ZXIqClRBT19FQ19GaWx0ZXI6OnBhcmVudCAodm9p
ZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5wYXJlbnRfOwp9CgppbmxpbmUgaW50ClRBT19FQ19G
aWx0ZXI6Om1hdGNoZXMgKGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiByaHMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50SGVhZGVyJiBs
aHMpCnsKICBpZiAoKHJocy5zb3VyY2UgPT0gMCAmJiByaHMudHlwZSA9PSAwKQogICAgICB8fCAo
bGhzLnNvdXJjZSA9PSAwICYmIGxocy50eXBlID09IDApKQogICAgcmV0dXJuIDE7CgogIGlmIChy
aHMuc291cmNlID09IDAgfHwgbGhzLnNvdXJjZSA9PSAwKQogICAgcmV0dXJuIHJocy50eXBlID09
IGxocy50eXBlOwoKICBpZiAocmhzLnR5cGUgPT0gMCB8fCBsaHMudHlwZSA9PSAwKQogICAgcmV0
dXJuIHJocy5zb3VyY2UgPT0gbGhzLnNvdXJjZTsKCiAgcmV0dXJuIChyaHMudHlwZSA9PSBsaHMu
dHlwZSAmJiByaHMuc291cmNlID09IGxocy5zb3VyY2UpOwp9CgoKCmlubGluZQpUQU9fRUNfTnVs
bF9GaWx0ZXI6OlRBT19FQ19OdWxsX0ZpbHRlciAodm9pZCkKewp9CiMgMjA5ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50
L0VDX0ZpbHRlci5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93
cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMjEyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0V2ZW50L0VDX0ZpbHRlci5oIiAyCiMg
MjEgIkV2ZW50L0VDX1Byb3h5Q29uc3VtZXIuaCIgMgoKCgoKCmNsYXNzIFRBT19FQ19FdmVudF9D
aGFubmVsOwpjbGFzcyBUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXI7CmNsYXNzIFRBT19FQ19TdXBw
bGllcl9GaWx0ZXI7CiMgNTIgIkV2ZW50L0VDX1Byb3h5Q29uc3VtZXIuaCIKY2xhc3MgVEFPX0VD
X1Byb3h5UHVzaENvbnN1bWVyIDogcHVibGljIFBPQV9SdGVjRXZlbnRDaGFubmVsQWRtaW46OlBy
b3h5UHVzaENvbnN1bWVyCnsKcHVibGljOgogIHR5cGVkZWYgUnRlY0V2ZW50Q2hhbm5lbEFkbWlu
OjpQcm94eVB1c2hDb25zdW1lciBJbnRlcmZhY2U7CiAgdHlwZWRlZiBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OlByb3h5UHVzaENvbnN1bWVyX3ZhciBfdmFyX3R5cGU7CgoKICBUQU9fRUNfUHJveHlQ
dXNoQ29uc3VtZXIgKFRBT19FQ19FdmVudF9DaGFubmVsKiBldmVudF9jaGFubmVsKTsKCgogIHZp
cnR1YWwgflRBT19FQ19Qcm94eVB1c2hDb25zdW1lciAodm9pZCk7CgoKICB2aXJ0dWFsIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6UHJveHlQdXNoQ29uc3VtZXJfcHRyIGFjdGl2YXRlIChDT1JCQTo6
RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpIHRocm93IChDT1JC
QTo6U3lzdGVtRXhjZXB0aW9uKTsKCgogIHZvaWQgZGVhY3RpdmF0ZSAoQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKCgogIENPUkJBOjpCb29sZWFu
IGlzX2Nvbm5lY3RlZCAodm9pZCkgY29uc3Q7CgoKCiAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBs
aWVyX3B0ciBzdXBwbGllciAodm9pZCkgY29uc3Q7CgoKICBjb25zdCBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OlN1cHBsaWVyUU9TJiBwdWJsaWNhdGlvbnMgKHZvaWQpIGNvbnN0OwoKCgoKCgogIENP
UkJBOjpCb29sZWFuIHN1cHBsaWVyX25vbl9leGlzdGVudCAoQ09SQkE6OkJvb2xlYW5fb3V0IGRp
c2Nvbm5lY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJB
OjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CgoKCiAgdmly
dHVhbCB2b2lkIGNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBzdXBwbGllciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudik7CiAgdmly
dHVhbCB2b2lkIHJlY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZlbnYpOwog
IHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciogc3Vw
cGxpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZl
bnYpOwoKCgogIHZpcnR1YWwgdm9pZCBjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1l
ciogY29uc3VtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZlbnYpOwogIHZpcnR1YWwgdm9pZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaENvbnN1
bWVyKiBjb25zdW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9u
bWVudCAmZW52KTsKICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNo
Q29uc3VtZXIqIGNvbnN1bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmZW52KTsKCgogIHZpcnR1YWwgdm9pZCBzaHV0ZG93biAoQ09SQkE6OkVudmly
b25tZW50Jik7CgoKCiAgY29uc3QgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllclFPUyYg
cHVibGljYXRpb25zX2kgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNu
dCAodm9pZCk7CiAgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCk7CgoKICB2aXJ0dWFs
IHZvaWQgY29ubmVjdF9wdXNoX3N1cHBsaWVyICgKICAgICAgICAgICAgICAgIFJ0ZWNFdmVudENv
bW06OlB1c2hTdXBwbGllcl9wdHIgcHVzaF9zdXBwbGllciwKICAgICAgICAgICAgICAgIGNvbnN0
IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MmIHFvcywKICAgICAgICAgICAgICAg
IENPUkJBOjpFbnZpcm9ubWVudCAmKQogICAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlv
biwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkKTsKCiAgdmlydHVhbCB2
b2lkIHB1c2ggKGNvbnN0IFJ0ZWNFdmVudENvbW06OkV2ZW50U2V0JiBldmVudCwKICAgICAgICAg
ICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpCiAgICAgIHRocm93IChDT1JCQTo6U3lz
dGVtRXhjZXB0aW9uKTsKICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdF9wdXNoX2NvbnN1bWVyIChD
T1JCQTo6RW52aXJvbm1lbnQgJikKICAgICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24p
OwoKCiAgdmlydHVhbCBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBfZGVmYXVsdF9QT0EgKENPUkJB
OjpFbnZpcm9ubWVudCYgZW52KTsKICB2aXJ0dWFsIHZvaWQgX2FkZF9yZWYgKENPUkJBX0Vudmly
b25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID0KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUQU9fZGVmYXVsdF9lbnZpcm9ubWVudCAoKSk7CiAgdmlydHVhbCB2b2lk
IF9yZW1vdmVfcmVmIChDT1JCQV9FbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92
YXJpYWJsZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX2RlZmF1bHRfZW52
aXJvbm1lbnQgKCkpOwoKcHJvdGVjdGVkOgoKCiAgdm9pZCBzdXBwbGllciAoUnRlY0V2ZW50Q29t
bTo6UHVzaFN1cHBsaWVyX3B0ciBzdXBwbGllcik7CiAgdm9pZCBzdXBwbGllcl9pIChSdGVjRXZl
bnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHN1cHBsaWVyKTsKCiAgZnJpZW5kIGNsYXNzIFRBT19F
Q19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZDsKCgoKICBDT1JCQTo6Qm9vbGVhbiBpc19jb25uZWN0
ZWRfaSAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyICpmaWx0ZXJfaSAo
dm9pZCkgY29uc3Q7CgoKICB2b2lkIGNsZWFudXBfaSAodm9pZCk7Cgpwcml2YXRlOgoKICBUQU9f
RUNfRXZlbnRfQ2hhbm5lbCogZXZlbnRfY2hhbm5lbF87CgoKICBBQ0VfTG9jayogbG9ja187CgoK
ICBDT1JCQTo6VUxvbmcgcmVmY291bnRfOwoKCiAgUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy
X3ZhciBzdXBwbGllcl87CgoKCiAgaW50IGNvbm5lY3RlZF87CgoKICBSdGVjRXZlbnRDaGFubmVs
QWRtaW46OlN1cHBsaWVyUU9TIHFvc187CgoKICBQb3J0YWJsZVNlcnZlcjo6UE9BX3ZhciBkZWZh
dWx0X1BPQV87CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyKiBmaWx0ZXJfOwp9OwojIDE5NCAi
RXZlbnQvRUNfUHJveHlDb25zdW1lci5oIgpjbGFzcyBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJf
R3VhcmQKewpwdWJsaWM6CgogIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZCAoQUNFX0xv
Y2sgKmxvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6VUxvbmcg
JnJlZmNvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0VDX0V2ZW50
X0NoYW5uZWwgKmVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFPX0VDX1By
b3h5UHVzaENvbnN1bWVyICpwcm94eSk7CgoKICB+VEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0d1
YXJkICh2b2lkKTsKCgogIGludCBsb2NrZWQgKHZvaWQpIGNvbnN0OwoKICBUQU9fRUNfU3VwcGxp
ZXJfRmlsdGVyICpmaWx0ZXI7Cgpwcml2YXRlOgoKICBBQ0VfTG9jayAqbG9ja187CgoKICBDT1JC
QTo6VUxvbmcgJnJlZmNvdW50XzsKCgogIFRBT19FQ19FdmVudF9DaGFubmVsICpldmVudF9jaGFu
bmVsXzsKCgogIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lciAqcHJveHlfOwoKCgogIGludCBsb2Nr
ZWRfOwp9OwoKCiMgMSAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5pIiAxCgoKaW5saW5lIENPUkJB
OjpCb29sZWFuClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6aXNfY29ubmVjdGVkX2kgKHZvaWQp
IGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29ubmVjdGVkXzsKfQoKaW5saW5lIENPUkJBOjpCb29s
ZWFuClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6aXNfY29ubmVjdGVkICh2b2lkKSBjb25zdAp7
CiAgQUNFX0d1YXJkPCBBQ0VfTG9jayA+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2Vf
bW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm4gMDs7CgogIHJldHVybiB0aGlzLT5pc19jb25uZWN0
ZWRfaSAoKTsKfQoKaW5saW5lIFJ0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl9wdHIKVEFPX0VD
X1Byb3h5UHVzaENvbnN1bWVyOjpzdXBwbGllciAodm9pZCkgY29uc3QKewogIEFDRV9HdWFyZDwg
QUNFX0xvY2sgPiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkg
PT0gMCkgcmV0dXJuIDA7OwogIHJldHVybiBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9k
dXBsaWNhdGUgKHRoaXMtPnN1cHBsaWVyXy5pbiAoKSk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19Q
cm94eVB1c2hDb25zdW1lcjo6c3VwcGxpZXJfaSAoUnRlY0V2ZW50Q29tbTo6UHVzaFN1cHBsaWVy
X3B0ciBzdXBwbGllcikKewogIHRoaXMtPnN1cHBsaWVyXyA9IHN1cHBsaWVyOwp9CgppbmxpbmUg
dm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnN1cHBsaWVyIChSdGVjRXZlbnRDb21tOjpQ
dXNoU3VwcGxpZXJfcHRyIHN1cHBsaWVyKQp7CiAgQUNFX0d1YXJkPCBBQ0VfTG9jayA+IGFjZV9t
b24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tlZCAoKSA9PSAwKSByZXR1cm47OwoK
ICB0aGlzLT5zdXBwbGllcl9pIChzdXBwbGllcik7Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRD
aGFubmVsQWRtaW46OlN1cHBsaWVyUU9TJgpUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnB1Ymxp
Y2F0aW9ucyAodm9pZCkgY29uc3QKewoKICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAo
KnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIHJldHVybiB0aGlzLT5x
b3NfOzsKCiAgcmV0dXJuIHRoaXMtPnFvc187Cn0KCmlubGluZSBjb25zdCBSdGVjRXZlbnRDaGFu
bmVsQWRtaW46OlN1cHBsaWVyUU9TJgpUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnB1YmxpY2F0
aW9uc19pICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnFvc187Cn0KCmlubGluZSBUQU9f
RUNfU3VwcGxpZXJfRmlsdGVyICoKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpmaWx0ZXJfaSAo
dm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5maWx0ZXJfOwp9CgoKCmlubGluZSBpbnQKVEFP
X0VDX1Byb3h5UHVzaENvbnN1bWVyX0d1YXJkOjpsb2NrZWQgKHZvaWQpIGNvbnN0CnsKICByZXR1
cm4gdGhpcy0+bG9ja2VkXzsKfQojIDIzMSAiRXZlbnQvRUNfUHJveHlDb25zdW1lci5oIiAyCgoK
IyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5o
IiAxCiMgMjM0ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmgiIDIKIyA0ICJFdmVudC9FQ19Qcm94
eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VDX0V2ZW50X0NoYW5uZWwuaCIgMQojIDE3ICJF
dmVudC9FQ19FdmVudF9DaGFubmVsLmgiCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3ByZS5oIiAxCiMgMTggIkV2ZW50L0VDX0V2ZW50X0NoYW5uZWwu
aCIgMgoKIyAxICJFdmVudC9FQ19GYWN0b3J5LmgiIDEKIyAxNyAiRXZlbnQvRUNfRmFjdG9yeS5o
IgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUu
aCIgMQojIDE4ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FdmVudC9ldmVudF9l
eHBvcnQuaCIgMQojIDIwICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCgoKCgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDI2
ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIgMQojIDE2ICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcHJlLmgiIDEKIyAx
NyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL1NlcnZpY2Vf
T2JqZWN0LmgiIDIKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvYWNlL1NoYXJlZF9PYmplY3QuaCIgMQojIDE3ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9w
cm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIgojIDEgIi9ob21lL3JycC9zY2hv
b2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4ICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIiAyCgoj
IDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9BQ0UuaCIg
MQojIDIwICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hh
cmVkX09iamVjdC5oIiAyCiMgMzEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dy
YXBwZXJzL2FjZS9TaGFyZWRfT2JqZWN0LmgiCmNsYXNzIEFDRV9TaGFyZWRfT2JqZWN0CnsKcHVi
bGljOgogIEFDRV9TaGFyZWRfT2JqZWN0ICh2b2lkKTsKCgogIHZpcnR1YWwgaW50IGluaXQgKGlu
dCBhcmdjLCBBQ0VfVENIQVIgKmFyZ3ZbXSk7CgoKICB2aXJ0dWFsIGludCBmaW5pICh2b2lkKTsK
CgogIHZpcnR1YWwgaW50IGluZm8gKEFDRV9UQ0hBUiAqKmluZm9fc3RyaW5nLCBzaXplX3QgbGVu
Z3RoID0gMCkgY29uc3Q7CgogIHZpcnR1YWwgfkFDRV9TaGFyZWRfT2JqZWN0ICh2b2lkKTsKfTsK
CgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TaGFy
ZWRfT2JqZWN0LmkiIDEKCgoKCgppbmxpbmUKQUNFX1NoYXJlZF9PYmplY3Q6OkFDRV9TaGFyZWRf
T2JqZWN0ICh2b2lkKQp7Cn0KIyA1MCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vf
d3JhcHBlcnMvYWNlL1NoYXJlZF9PYmplY3QuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDUzICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2hhcmVkX09iamVjdC5oIiAyCiMgMTkg
Ii9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09i
amVjdC5oIiAyCgoKCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvRXZlbnRfSGFuZGxlci5oIiAxCiMgMjUgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lz
L3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIiAyCiMgMzggIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIgpj
bGFzcyBBQ0VfU2VydmljZV9PYmplY3QgOiBwdWJsaWMgQUNFX0V2ZW50X0hhbmRsZXIsIHB1Ymxp
YyBBQ0VfU2hhcmVkX09iamVjdAp7CnB1YmxpYzoKCgogIEFDRV9TZXJ2aWNlX09iamVjdCAoQUNF
X1JlYWN0b3IgKiA9IDApOwoKCiAgdmlydHVhbCB+QUNFX1NlcnZpY2VfT2JqZWN0ICh2b2lkKTsK
CgogIHZpcnR1YWwgaW50IHN1c3BlbmQgKHZvaWQpOwoKCiAgdmlydHVhbCBpbnQgcmVzdW1lICh2
b2lkKTsKfTsKCgpjbGFzcyBBQ0VfU2VydmljZV9UeXBlX0ltcGw7CiMgNjYgIi9ob21lL3JycC9z
Y2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIgpjbGFz
cyBBQ0VfU2VydmljZV9UeXBlCnsKcHVibGljOgogIGVudW0KICB7CgogICAgREVMRVRFX09CSiA9
IDEsCgoKICAgIERFTEVURV9USElTID0gMgogIH07CgoKICBBQ0VfU2VydmljZV9UeXBlIChjb25z
dCBBQ0VfVENIQVIgKm4sCiAgICAgICAgICAgICAgICAgICAgQUNFX1NlcnZpY2VfVHlwZV9JbXBs
ICpvLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IEFDRV9TSExJQl9IQU5ETEUgaGFuZGxlLAog
ICAgICAgICAgICAgICAgICAgIGludCBhY3RpdmUpOwogIH5BQ0VfU2VydmljZV9UeXBlICh2b2lk
KTsKCiAgY29uc3QgQUNFX1RDSEFSICpuYW1lICh2b2lkKSBjb25zdDsKICB2b2lkIG5hbWUgKGNv
bnN0IEFDRV9UQ0hBUiAqKTsKCiAgY29uc3QgQUNFX1NlcnZpY2VfVHlwZV9JbXBsICp0eXBlICh2
b2lkKSBjb25zdDsKICB2b2lkIHR5cGUgKGNvbnN0IEFDRV9TZXJ2aWNlX1R5cGVfSW1wbCAqLAog
ICAgICAgICAgICAgaW50IGFjdGl2ZSA9IDEpOwoKICBBQ0VfU0hMSUJfSEFORExFIGhhbmRsZSAo
dm9pZCkgY29uc3Q7CiAgdm9pZCBoYW5kbGUgKGNvbnN0IEFDRV9TSExJQl9IQU5ETEUpOwoKICB2
b2lkIHN1c3BlbmQgKHZvaWQpIGNvbnN0OwogIHZvaWQgcmVzdW1lICh2b2lkKSBjb25zdDsKICBp
bnQgYWN0aXZlICh2b2lkKSBjb25zdDsKICB2b2lkIGFjdGl2ZSAoaW50KTsKCgogIHZvaWQgZmlu
aSAodm9pZCk7CgoKICBpbnQgZmluaV9jYWxsZWQgKHZvaWQpIGNvbnN0OwoKCiAgdm9pZCBkdW1w
ICh2b2lkKSBjb25zdDsKCgogIHN0cnVjdCBfX0FjZSB7fTsKCnByaXZhdGU6CgogIGNvbnN0IEFD
RV9UQ0hBUiAqbmFtZV87CgoKICBjb25zdCBBQ0VfU2VydmljZV9UeXBlX0ltcGwgKnR5cGVfOwoK
CiAgQUNFX1NITElCX0hBTkRMRSBoYW5kbGVfOwoKCiAgaW50IGFjdGl2ZV87CgoKICBpbnQgZmlu
aV9hbHJlYWR5X2NhbGxlZF87Cn07CiMgMTQyICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9q
L0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaCIKY2xhc3MgQUNFX1NlcnZpY2VfT2Jq
ZWN0X1B0cgp7CnB1YmxpYzoKCgogIEFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKEFDRV9TZXJ2aWNl
X09iamVjdCAqc28pOwoKCiAgfkFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKHZvaWQpOwoKCiAgQUNF
X1NlcnZpY2VfT2JqZWN0ICpvcGVyYXRvci0+ICgpOwoKcHJpdmF0ZToKCiAgQUNFX1NlcnZpY2Vf
T2JqZWN0ICpzZXJ2aWNlX29iamVjdF87Cn07CgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNp
cy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2VydmljZV9PYmplY3QuaSIgMQoKCgoKCmlubGluZSBB
Q0VfU2VydmljZV9PYmplY3RfUHRyOjpBQ0VfU2VydmljZV9PYmplY3RfUHRyIChBQ0VfU2Vydmlj
ZV9PYmplY3QgKnNvKQogIDogc2VydmljZV9vYmplY3RfIChzbykKewp9CgppbmxpbmUgQUNFX1Nl
cnZpY2VfT2JqZWN0X1B0cjo6fkFDRV9TZXJ2aWNlX09iamVjdF9QdHIgKHZvaWQpCnsKICB0aGlz
LT5zZXJ2aWNlX29iamVjdF8tPmZpbmkgKCk7CiAgZGVsZXRlIHRoaXMtPnNlcnZpY2Vfb2JqZWN0
XzsKfQoKaW5saW5lIEFDRV9TZXJ2aWNlX09iamVjdCAqCkFDRV9TZXJ2aWNlX09iamVjdF9QdHI6
Om9wZXJhdG9yLT4gKCkKewogIHJldHVybiB0aGlzLT5zZXJ2aWNlX29iamVjdF87Cn0KCmlubGlu
ZSBjb25zdCBBQ0VfVENIQVIgKgpBQ0VfU2VydmljZV9UeXBlOjpuYW1lICh2b2lkKSBjb25zdAp7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHJldHVybiB0aGlzLT5u
YW1lXzsKfQoKaW5saW5lIGNvbnN0IEFDRV9TZXJ2aWNlX1R5cGVfSW1wbCAqCkFDRV9TZXJ2aWNl
X1R5cGU6OnR5cGUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgcmV0dXJuIHRoaXMtPnR5cGVfOwp9CgppbmxpbmUgQUNFX1NITElCX0hBTkRM
RQpBQ0VfU2VydmljZV9UeXBlOjpoYW5kbGUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+aGFuZGxlXzsKfQoKaW5s
aW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6bmFtZSAoY29uc3QgQUNFX1RDSEFSICpuKQp7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBkZWxldGUgW10gKEFDRV9U
Q0hBUiAqKSB0aGlzLT5uYW1lXzsKICB0aGlzLT5uYW1lXyA9IEFDRTo6c3RybmV3IChuKTsKfQoK
aW5saW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6dHlwZSAoY29uc3QgQUNFX1NlcnZpY2VfVHlw
ZV9JbXBsICpvLCBpbnQgZW5hYmxlZCkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICB0aGlzLT50eXBlXyA9IG87CiAgKChBQ0VfU2VydmljZV9UeXBlICopIHRoaXMp
LT5hY3RpdmVfID0gZW5hYmxlZDsKfQoKaW5saW5lIHZvaWQKQUNFX1NlcnZpY2VfVHlwZTo6aGFu
ZGxlIChjb25zdCBBQ0VfU0hMSUJfSEFORExFIGgpCnsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICB0aGlzLT5oYW5kbGVfID0gaDsKfQoKaW5saW5lIGludApBQ0Vf
U2VydmljZV9UeXBlOjphY3RpdmUgKHZvaWQpIGNvbnN0CnsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gdGhpcy0+YWN0aXZlXyAhPSAwOwp9Cgppbmxp
bmUgdm9pZApBQ0VfU2VydmljZV9UeXBlOjphY3RpdmUgKGludCB0dXJub24pCnsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0aGlzLT5hY3RpdmVfID0gdHVybm9u
Owp9CgppbmxpbmUgaW50CkFDRV9TZXJ2aWNlX1R5cGU6OmZpbmlfY2FsbGVkICh2b2lkKSBjb25z
dAp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1
cm4gdGhpcy0+ZmluaV9hbHJlYWR5X2NhbGxlZF87Cn0KIyAxNjIgIi9ob21lL3JycC9zY2hvb2wv
dGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9TZXJ2aWNlX09iamVjdC5oIiAyCgoKIyAxICIv
aG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMg
MTY1ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2UvU2Vydmlj
ZV9PYmplY3QuaCIgMgojIDI3ICJFdmVudC9FQ19GYWN0b3J5LmgiIDIKCmNsYXNzIEFDRV9Mb2Nr
OwoKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWw7CgpjbGFzcyBUQU9fRUNfRGlzcGF0Y2hpbmc7
CmNsYXNzIFRBT19FQ19GaWx0ZXJfQnVpbGRlcjsKY2xhc3MgVEFPX0VDX1N1cHBsaWVyX0ZpbHRl
cl9CdWlsZGVyOwpjbGFzcyBUQU9fRUNfQ29uc3VtZXJBZG1pbjsKY2xhc3MgVEFPX0VDX1N1cHBs
aWVyQWRtaW47CmNsYXNzIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjsKY2xhc3MgVEFPX0VDX1By
b3h5UHVzaFN1cHBsaWVyOwpjbGFzcyBUQU9fRUNfT2JzZXJ2ZXJTdHJhdGVneTsKdGVtcGxhdGU8
Y2xhc3MgUFJPWFk+IGNsYXNzIFRBT19FU0ZfUHJveHlfQ29sbGVjdGlvbjsKY2xhc3MgVEFPX0VD
X1RpbWVvdXRfR2VuZXJhdG9yOwpjbGFzcyBUQU9fRUNfU2NoZWR1bGluZ19TdHJhdGVneTsKY2xh
c3MgVEFPX0VDX0NvbnN1bWVyQ29udHJvbDsKY2xhc3MgVEFPX0VDX1N1cHBsaWVyQ29udHJvbDsK
CnR5cGVkZWYgVEFPX0VTRl9Qcm94eV9Db2xsZWN0aW9uPFRBT19FQ19Qcm94eVB1c2hDb25zdW1l
cj4gVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxlY3Rpb247CnR5cGVkZWYgVEFPX0VTRl9Q
cm94eV9Db2xsZWN0aW9uPFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcj4gVEFPX0VDX1Byb3h5UHVz
aFN1cHBsaWVyX0NvbGxlY3Rpb247CiMgNjIgIkV2ZW50L0VDX0ZhY3RvcnkuaCIKY2xhc3MgVEFP
X0VDX0ZhY3RvcnkgOiBwdWJsaWMgQUNFX1NlcnZpY2VfT2JqZWN0CnsKcHVibGljOgoKICB2aXJ0
dWFsIH5UQU9fRUNfRmFjdG9yeSAodm9pZCk7CgoKICB2aXJ0dWFsIFRBT19FQ19EaXNwYXRjaGlu
ZyoKICAgICAgY3JlYXRlX2Rpc3BhdGNoaW5nIChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsK
ICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9kaXNwYXRjaGluZyAoVEFPX0VDX0Rpc3BhdGNo
aW5nKikgPSAwOwoKCiAgdmlydHVhbCBUQU9fRUNfRmlsdGVyX0J1aWxkZXIqCiAgICAgIGNyZWF0
ZV9maWx0ZXJfYnVpbGRlciAoVEFPX0VDX0V2ZW50X0NoYW5uZWwqKSA9IDA7CiAgdmlydHVhbCB2
b2lkCiAgICAgIGRlc3Ryb3lfZmlsdGVyX2J1aWxkZXIgKFRBT19FQ19GaWx0ZXJfQnVpbGRlciop
ID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyKgogICAgICBj
cmVhdGVfc3VwcGxpZXJfZmlsdGVyX2J1aWxkZXIgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAw
OwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3N1cHBsaWVyX2ZpbHRlcl9idWlsZGVyIChU
QU9fRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIqKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19D
b25zdW1lckFkbWluKgogICAgICBjcmVhdGVfY29uc3VtZXJfYWRtaW4gKFRBT19FQ19FdmVudF9D
aGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X2NvbnN1bWVyX2FkbWlu
IChUQU9fRUNfQ29uc3VtZXJBZG1pbiopID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVy
QWRtaW4qCiAgICAgIGNyZWF0ZV9zdXBwbGllcl9hZG1pbiAoVEFPX0VDX0V2ZW50X0NoYW5uZWwq
KSA9IDA7CiAgdmlydHVhbCB2b2lkCiAgICAgIGRlc3Ryb3lfc3VwcGxpZXJfYWRtaW4gKFRBT19F
Q19TdXBwbGllckFkbWluKikgPSAwOwoKCiAgdmlydHVhbCBUQU9fRUNfUHJveHlQdXNoU3VwcGxp
ZXIqCiAgICAgIGNyZWF0ZV9wcm94eV9wdXNoX3N1cHBsaWVyIChUQU9fRUNfRXZlbnRfQ2hhbm5l
bCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9wcm94eV9wdXNoX3N1cHBsaWVy
IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19Qcm94
eVB1c2hDb25zdW1lcioKICAgICAgY3JlYXRlX3Byb3h5X3B1c2hfY29uc3VtZXIgKFRBT19FQ19F
dmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3Byb3h5X3B1
c2hfY29uc3VtZXIgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1lciopID0gMDsKCgogIHZpcnR1YWwg
VEFPX0VDX1RpbWVvdXRfR2VuZXJhdG9yKgogICAgICBjcmVhdGVfdGltZW91dF9nZW5lcmF0b3Ig
KFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95
X3RpbWVvdXRfZ2VuZXJhdG9yIChUQU9fRUNfVGltZW91dF9HZW5lcmF0b3IqKSA9IDA7CgoKICB2
aXJ0dWFsIFRBT19FQ19PYnNlcnZlclN0cmF0ZWd5KgogICAgICBjcmVhdGVfb2JzZXJ2ZXJfc3Ry
YXRlZ3kgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBk
ZXN0cm95X29ic2VydmVyX3N0cmF0ZWd5IChUQU9fRUNfT2JzZXJ2ZXJTdHJhdGVneSopID0gMDsK
CgogIHZpcnR1YWwgVEFPX0VDX1NjaGVkdWxpbmdfU3RyYXRlZ3kqCiAgICAgIGNyZWF0ZV9zY2hl
ZHVsaW5nX3N0cmF0ZWd5IChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZv
aWQKICAgICAgZGVzdHJveV9zY2hlZHVsaW5nX3N0cmF0ZWd5IChUQU9fRUNfU2NoZWR1bGluZ19T
dHJhdGVneSopID0gMDsKCgogIHZpcnR1YWwgVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxl
Y3Rpb24qCiAgICAgIGNyZWF0ZV9wcm94eV9wdXNoX2NvbnN1bWVyX2NvbGxlY3Rpb24gKFRBT19F
Q19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95X3Byb3h5
X3B1c2hfY29uc3VtZXJfY29sbGVjdGlvbiAoVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyX0NvbGxl
Y3Rpb24qKSA9IDA7CgoKICB2aXJ0dWFsIFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xsZWN0
aW9uKgogICAgICBjcmVhdGVfcHJveHlfcHVzaF9zdXBwbGllcl9jb2xsZWN0aW9uIChUQU9fRUNf
RXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAgICAgZGVzdHJveV9wcm94eV9w
dXNoX3N1cHBsaWVyX2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xsZWN0
aW9uKikgPSAwOwoKCgogIHZpcnR1YWwgQUNFX0xvY2sqIGNyZWF0ZV9jb25zdW1lcl9sb2NrICh2
b2lkKSA9IDA7CiAgdmlydHVhbCB2b2lkIGRlc3Ryb3lfY29uc3VtZXJfbG9jayAoQUNFX0xvY2sq
KSA9IDA7CiAgdmlydHVhbCBBQ0VfTG9jayogY3JlYXRlX3N1cHBsaWVyX2xvY2sgKHZvaWQpID0g
MDsKICB2aXJ0dWFsIHZvaWQgZGVzdHJveV9zdXBwbGllcl9sb2NrIChBQ0VfTG9jayopID0gMDsK
CgoKICB2aXJ0dWFsIFRBT19FQ19Db25zdW1lckNvbnRyb2wqCiAgICAgIGNyZWF0ZV9jb25zdW1l
cl9jb250cm9sIChUQU9fRUNfRXZlbnRfQ2hhbm5lbCopID0gMDsKICB2aXJ0dWFsIHZvaWQKICAg
ICAgZGVzdHJveV9jb25zdW1lcl9jb250cm9sIChUQU9fRUNfQ29uc3VtZXJDb250cm9sKikgPSAw
OwogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVyQ29udHJvbCoKICAgICAgY3JlYXRlX3N1cHBsaWVy
X2NvbnRyb2wgKFRBT19FQ19FdmVudF9DaGFubmVsKikgPSAwOwogIHZpcnR1YWwgdm9pZAogICAg
ICBkZXN0cm95X3N1cHBsaWVyX2NvbnRyb2wgKFRBT19FQ19TdXBwbGllckNvbnRyb2wqKSA9IDA7
Cn07CgoKIyAxICJFdmVudC9FQ19GYWN0b3J5LmkiIDEKIyAxNjEgIkV2ZW50L0VDX0ZhY3Rvcnku
aCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvYWNl
L3Bvc3QuaCIgMQojIDE2NCAiRXZlbnQvRUNfRmFjdG9yeS5oIiAyCiMgMjAgIkV2ZW50L0VDX0V2
ZW50X0NoYW5uZWwuaCIgMgoKCgoKCiMgMSAiRXZlbnQvRUNfRGVmYXVsdHMuaCIgMQojIDIwICJF
dmVudC9FQ19EZWZhdWx0cy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNF
X3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDIxICJFdmVudC9FQ19EZWZhdWx0cy5oIiAyCiMgMTM2
ICJFdmVudC9FQ19EZWZhdWx0cy5oIgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ov
QUNFX3dyYXBwZXJzL2FjZS9wb3N0LmgiIDEKIyAxMzcgIkV2ZW50L0VDX0RlZmF1bHRzLmgiIDIK
IyAyNiAiRXZlbnQvRUNfRXZlbnRfQ2hhbm5lbC5oIiAyCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90
aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9SdGVjRXZlbnRDaGFu
bmVsQWRtaW5TLmgiIDEKIyAyNyAiRXZlbnQvRUNfRXZlbnRfQ2hhbm5lbC5oIiAyCiMgNDQgIkV2
ZW50L0VDX0V2ZW50X0NoYW5uZWwuaCIKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWxfQXR0cmli
dXRlcwp7CnB1YmxpYzoKCgoKCgogIFRBT19FQ19FdmVudF9DaGFubmVsX0F0dHJpYnV0ZXMgKFBv
cnRhYmxlU2VydmVyOjpQT0FfcHRyIHN1cHBsaWVyX3BvYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQb3J0YWJsZVNlcnZlcjo6UE9BX3B0ciBjb25zdW1lcl9wb2EpOwoKCgoK
CiAgaW50IGNvbnN1bWVyX3JlY29ubmVjdDsKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0OwojIDcx
ICJFdmVudC9FQ19FdmVudF9DaGFubmVsLmgiCiAgaW50IGRpc2Nvbm5lY3RfY2FsbGJhY2tzOwoK
CiAgaW50IGJ1c3lfaHdtOwogIGludCBtYXhfd3JpdGVfZGVsYXk7CgoKCgoKCiAgQ09SQkE6Ok9i
amVjdF9wdHIgc2NoZWR1bGVyOwoKcHJpdmF0ZToKCiAgZnJpZW5kIGNsYXNzIFRBT19FQ19FdmVu
dF9DaGFubmVsOwoKCiAgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIgc3VwcGxpZXJfcG9hOwogIFBv
cnRhYmxlU2VydmVyOjpQT0FfcHRyIGNvbnN1bWVyX3BvYTsKfTsKIyAxMDUgIkV2ZW50L0VDX0V2
ZW50X0NoYW5uZWwuaCIKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWwgOiBwdWJsaWMgUE9BX1J0
ZWNFdmVudENoYW5uZWxBZG1pbjo6RXZlbnRDaGFubmVsCnsKcHVibGljOgoKCgoKCgogIFRBT19F
Q19FdmVudF9DaGFubmVsIChjb25zdCBUQU9fRUNfRXZlbnRfQ2hhbm5lbF9BdHRyaWJ1dGVzJiBh
dHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICAgICAgICBUQU9fRUNfRmFjdG9yeSogZmFjdG9y
eSA9IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIGludCBvd25fZmFjdG9yeSA9IDApOwoKCiAg
dmlydHVhbCB+VEFPX0VDX0V2ZW50X0NoYW5uZWwgKHZvaWQpOwoKCgogIHZpcnR1YWwgdm9pZCBh
Y3RpdmF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYgPSBUQU9fZGVmYXVsdF9lbnZpcm9ubWVu
dCAoKSk7CgoKCiAgdmlydHVhbCB2b2lkIHNodXRkb3duIChDT1JCQTo6RW52aXJvbm1lbnQgJmVu
diA9IFRBT19kZWZhdWx0X2Vudmlyb25tZW50ICgpKTsKCgogIFRBT19FQ19EaXNwYXRjaGluZyog
ZGlzcGF0Y2hpbmcgKHZvaWQpIGNvbnN0OwoKCiAgVEFPX0VDX0ZpbHRlcl9CdWlsZGVyKiBmaWx0
ZXJfYnVpbGRlciAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxk
ZXIqIHN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyICh2b2lkKSBjb25zdDsKCgoKICBUQU9fRUNfQ29u
c3VtZXJBZG1pbiogY29uc3VtZXJfYWRtaW4gKHZvaWQpIGNvbnN0OwoKCgogIFRBT19FQ19TdXBw
bGllckFkbWluKiBzdXBwbGllcl9hZG1pbiAodm9pZCkgY29uc3Q7CgoKICBUQU9fRUNfVGltZW91
dF9HZW5lcmF0b3IqIHRpbWVvdXRfZ2VuZXJhdG9yICh2b2lkKSBjb25zdDsKCgogIFRBT19FQ19T
Y2hlZHVsaW5nX1N0cmF0ZWd5KiBzY2hlZHVsaW5nX3N0cmF0ZWd5ICh2b2lkKSBjb25zdDsKCgog
IFRBT19FQ19Db25zdW1lckNvbnRyb2wgKmNvbnN1bWVyX2NvbnRyb2wgKHZvaWQpIGNvbnN0Owog
IFRBT19FQ19TdXBwbGllckNvbnRyb2wgKnN1cHBsaWVyX2NvbnRyb2wgKHZvaWQpIGNvbnN0OwoK
CgogIHZvaWQgY3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqJik7CiAgdm9p
ZCBkZXN0cm95X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqKTsKCgogIHZvaWQgY3Jl
YXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqJik7CiAgdm9pZCBkZXN0cm95X3By
b3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqKTsKCgoKCiAgdm9pZCBjcmVhdGVfcHJveHlf
Y29sbGVjdGlvbiAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyX0NvbGxlY3Rpb24qJik7CiAgdm9p
ZCBkZXN0cm95X3Byb3h5X2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllcl9Db2xs
ZWN0aW9uKik7CgoKCgogIHZvaWQgY3JlYXRlX3Byb3h5X2NvbGxlY3Rpb24gKFRBT19FQ19Qcm94
eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiYpOwogIHZvaWQgZGVzdHJveV9wcm94eV9jb2xsZWN0
aW9uIChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJfQ29sbGVjdGlvbiopOwoKCiAgUG9ydGFibGVT
ZXJ2ZXI6OlBPQV9wdHIgc3VwcGxpZXJfcG9hICh2b2lkKTsKICBQb3J0YWJsZVNlcnZlcjo6UE9B
X3B0ciBjb25zdW1lcl9wb2EgKHZvaWQpOwoKCgogIEFDRV9Mb2NrKiBjcmVhdGVfY29uc3VtZXJf
bG9jayAodm9pZCk7CiAgdm9pZCBkZXN0cm95X2NvbnN1bWVyX2xvY2sgKEFDRV9Mb2NrKik7CiAg
QUNFX0xvY2sqIGNyZWF0ZV9zdXBwbGllcl9sb2NrICh2b2lkKTsKICB2b2lkIGRlc3Ryb3lfc3Vw
cGxpZXJfbG9jayAoQUNFX0xvY2sqKTsKCgoKICB2aXJ0dWFsIHZvaWQgY29ubmVjdGVkIChUQU9f
RUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCYpOwogIHZpcnR1YWwgdm9pZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVz
aENvbnN1bWVyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVu
dCYpOwogIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hDb25zdW1l
ciosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50Jik7CgoK
CiAgdmlydHVhbCB2b2lkIGNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmKTsKICB2aXJ0dWFsIHZv
aWQgcmVjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQmKTsKICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCYpOwoKCgoKCiAgaW50IGNvbnN1bWVyX3JlY29ubmVj
dCAodm9pZCkgY29uc3Q7CgoKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0ICh2b2lkKSBjb25zdDsK
CgoKICBpbnQgZGlzY29ubmVjdF9jYWxsYmFja3MgKHZvaWQpIGNvbnN0OwoKCiAgQ09SQkE6Ok9i
amVjdF9wdHIgc2NoZWR1bGVyICh2b2lkKTsKCgoKICBpbnQgYnVzeV9od20gKHZvaWQpIGNvbnN0
OwogIGludCBtYXhfd3JpdGVfZGVsYXkgKHZvaWQpIGNvbnN0OwoKCgoKICB2aXJ0dWFsIFJ0ZWNF
dmVudENoYW5uZWxBZG1pbjo6Q29uc3VtZXJBZG1pbl9wdHIKICAgICAgZm9yX2NvbnN1bWVycyAo
Q09SQkE6OkVudmlyb25tZW50JiBlbnYpCiAgICAgICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24pOwoKCgogIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpTdXBwbGllckFkbWlu
X3B0cgogICAgICBmb3Jfc3VwcGxpZXJzIChDT1JCQTo6RW52aXJvbm1lbnQmIGVudikKICAgICAg
ICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbik7CgoKICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYpCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2Vw
dGlvbik7CgogIHZpcnR1YWwgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpPYnNlcnZlcl9IYW5kbGUK
ICAgICAgYXBwZW5kX29ic2VydmVyIChSdGVjRXZlbnRDaGFubmVsQWRtaW46Ok9ic2VydmVyX3B0
ciwKICAgICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikKICAgICAg
dGhyb3cgKCBDT1JCQTo6U3lzdGVtRXhjZXB0aW9uLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46OkV2
ZW50Q2hhbm5lbDo6U1lOQ0hST05JWkFUSU9OX0VSUk9SLCBSdGVjRXZlbnRDaGFubmVsQWRtaW46
OkV2ZW50Q2hhbm5lbDo6Q0FOVF9BUFBFTkRfT0JTRVJWRVIpOwoKCgogIHZpcnR1YWwgdm9pZAog
ICAgICByZW1vdmVfb2JzZXJ2ZXIgKFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6T2JzZXJ2ZXJfSGFu
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpFbnZpcm9ubWVudCAmZW52KQogICAg
ICB0aHJvdyAoIENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
RXZlbnRDaGFubmVsOjpTWU5DSFJPTklaQVRJT05fRVJST1IsIFJ0ZWNFdmVudENoYW5uZWxBZG1p
bjo6RXZlbnRDaGFubmVsOjpDQU5UX1JFTU9WRV9PQlNFUlZFUik7CgoKCgpwcml2YXRlOgoKCiAg
UG9ydGFibGVTZXJ2ZXI6OlBPQV92YXIgc3VwcGxpZXJfcG9hXzsKICBQb3J0YWJsZVNlcnZlcjo6
UE9BX3ZhciBjb25zdW1lcl9wb2FfOwoKCgoKCgogIFRBT19FQ19GYWN0b3J5ICpmYWN0b3J5XzsK
CgogIGludCBvd25fZmFjdG9yeV87CgoKICBUQU9fRUNfRGlzcGF0Y2hpbmcgKmRpc3BhdGNoaW5n
XzsKCgogIFRBT19FQ19GaWx0ZXJfQnVpbGRlciAqZmlsdGVyX2J1aWxkZXJfOwoKCiAgVEFPX0VD
X1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyICpzdXBwbGllcl9maWx0ZXJfYnVpbGRlcl87CgoKICBU
QU9fRUNfQ29uc3VtZXJBZG1pbiAqY29uc3VtZXJfYWRtaW5fOwoKCiAgVEFPX0VDX1N1cHBsaWVy
QWRtaW4gKnN1cHBsaWVyX2FkbWluXzsKCgogIFRBT19FQ19UaW1lb3V0X0dlbmVyYXRvciAqdGlt
ZW91dF9nZW5lcmF0b3JfOwoKCiAgVEFPX0VDX09ic2VydmVyU3RyYXRlZ3kgKm9ic2VydmVyX3N0
cmF0ZWd5XzsKCgogIENPUkJBOjpPYmplY3RfdmFyIHNjaGVkdWxlcl87CgoKICBUQU9fRUNfU2No
ZWR1bGluZ19TdHJhdGVneSAqc2NoZWR1bGluZ19zdHJhdGVneV87CgoKICBpbnQgY29uc3VtZXJf
cmVjb25uZWN0XzsKICBpbnQgc3VwcGxpZXJfcmVjb25uZWN0XzsKCgogIGludCBkaXNjb25uZWN0
X2NhbGxiYWNrc187CgoKCiAgaW50IGJ1c3lfaHdtXzsKICBpbnQgbWF4X3dyaXRlX2RlbGF5XzsK
CgoKICBUQU9fRUNfQ29uc3VtZXJDb250cm9sICpjb25zdW1lcl9jb250cm9sXzsKICBUQU9fRUNf
U3VwcGxpZXJDb250cm9sICpzdXBwbGllcl9jb250cm9sXzsKfTsKCgojIDEgIkV2ZW50L0VDX0V2
ZW50X0NoYW5uZWwuaSIgMQoKCmlubGluZQpUQU9fRUNfRXZlbnRfQ2hhbm5lbF9BdHRyaWJ1dGVz
OjoKVEFPX0VDX0V2ZW50X0NoYW5uZWxfQXR0cmlidXRlcyAoUG9ydGFibGVTZXJ2ZXI6OlBPQV9w
dHIgc19wb2EsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvcnRhYmxlU2VydmVy
OjpQT0FfcHRyIGNfcG9hKQogIDogY29uc3VtZXJfcmVjb25uZWN0ICgwKSwKICAgICBzdXBwbGll
cl9yZWNvbm5lY3QgKDApLAogICAgIGRpc2Nvbm5lY3RfY2FsbGJhY2tzICgwKSwKICAgICBidXN5
X2h3bSAoMTAyNCksCiAgICAgbWF4X3dyaXRlX2RlbGF5ICgyMDQ4KSwKICAgICBzY2hlZHVsZXIg
KENPUkJBOjpPYmplY3Q6Ol9uaWwgKCkpLAogICAgIHN1cHBsaWVyX3BvYSAoc19wb2EpLAogICAg
IGNvbnN1bWVyX3BvYSAoY19wb2EpCnsKfQoKaW5saW5lIFRBT19FQ19EaXNwYXRjaGluZyoKVEFP
X0VDX0V2ZW50X0NoYW5uZWw6OmRpc3BhdGNoaW5nICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRo
aXMtPmRpc3BhdGNoaW5nXzsKfQoKaW5saW5lIFRBT19FQ19GaWx0ZXJfQnVpbGRlcioKVEFPX0VD
X0V2ZW50X0NoYW5uZWw6OmZpbHRlcl9idWlsZGVyICh2b2lkKSBjb25zdAp7CiAgcmV0dXJuIHRo
aXMtPmZpbHRlcl9idWlsZGVyXzsKfQoKaW5saW5lIFRBT19FQ19TdXBwbGllcl9GaWx0ZXJfQnVp
bGRlcioKVEFPX0VDX0V2ZW50X0NoYW5uZWw6OnN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1cHBsaWVyX2ZpbHRlcl9idWlsZGVyXzsKfQoKaW5s
aW5lIFRBT19FQ19Db25zdW1lckFkbWluKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y29uc3VtZXJf
YWRtaW4gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+Y29uc3VtZXJfYWRtaW5fOwp9Cgpp
bmxpbmUgVEFPX0VDX1N1cHBsaWVyQWRtaW4qClRBT19FQ19FdmVudF9DaGFubmVsOjpzdXBwbGll
cl9hZG1pbiAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5zdXBwbGllcl9hZG1pbl87Cn0K
CmlubGluZSBUQU9fRUNfVGltZW91dF9HZW5lcmF0b3IqClRBT19FQ19FdmVudF9DaGFubmVsOjp0
aW1lb3V0X2dlbmVyYXRvciAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT50aW1lb3V0X2dl
bmVyYXRvcl87Cn0KCmlubGluZSBUQU9fRUNfU2NoZWR1bGluZ19TdHJhdGVneSoKVEFPX0VDX0V2
ZW50X0NoYW5uZWw6OnNjaGVkdWxpbmdfc3RyYXRlZ3kgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4g
dGhpcy0+c2NoZWR1bGluZ19zdHJhdGVneV87Cn0KCmlubGluZSBUQU9fRUNfQ29uc3VtZXJDb250
cm9sKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y29uc3VtZXJfY29udHJvbCAodm9pZCkgY29uc3QK
ewogIHJldHVybiB0aGlzLT5jb25zdW1lcl9jb250cm9sXzsKfQoKaW5saW5lIFRBT19FQ19TdXBw
bGllckNvbnRyb2wqClRBT19FQ19FdmVudF9DaGFubmVsOjpzdXBwbGllcl9jb250cm9sICh2b2lk
KSBjb25zdAp7CiAgcmV0dXJuIHRoaXMtPnN1cHBsaWVyX2NvbnRyb2xfOwp9CgppbmxpbmUgdm9p
ZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3Vw
cGxpZXIqJiB4KQp7CiAgeCA9IHRoaXMtPmZhY3RvcnlfLT5jcmVhdGVfcHJveHlfcHVzaF9zdXBw
bGllciAodGhpcyk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0cm95
X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVyKQp7CiAgdGhpcy0+ZmFj
dG9yeV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9zdXBwbGllciAoc3VwcGxpZXIpOwp9CgppbmxpbmUg
dm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5IChUQU9fRUNfUHJveHlQdXNo
Q29uc3VtZXIqJiB4KQp7CiAgeCA9IHRoaXMtPmZhY3RvcnlfLT5jcmVhdGVfcHJveHlfcHVzaF9j
b25zdW1lciAodGhpcyk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0
cm95X3Byb3h5IChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqIGNvbnN1bWVyKQp7CiAgdGhpcy0+
ZmFjdG9yeV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9jb25zdW1lciAoY29uc3VtZXIpOwp9Cgppbmxp
bmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX3Byb3h5X2NvbGxlY3Rpb24gKFRB
T19FQ19Qcm94eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiYgeCkKewogIHggPSB0aGlzLT5mYWN0
b3J5Xy0+Y3JlYXRlX3Byb3h5X3B1c2hfY29uc3VtZXJfY29sbGVjdGlvbiAodGhpcyk7Cn0KCmlu
bGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVsOjpkZXN0cm95X3Byb3h5X2NvbGxlY3Rpb24g
KFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9Db2xsZWN0aW9uKiB4KQp7CiAgdGhpcy0+ZmFjdG9y
eV8tPmRlc3Ryb3lfcHJveHlfcHVzaF9jb25zdW1lcl9jb2xsZWN0aW9uICh4KTsKfQoKaW5saW5l
IHZvaWQKVEFPX0VDX0V2ZW50X0NoYW5uZWw6OmNyZWF0ZV9wcm94eV9jb2xsZWN0aW9uIChUQU9f
RUNfUHJveHlQdXNoU3VwcGxpZXJfQ29sbGVjdGlvbiomIHgpCnsKICB4ID0gdGhpcy0+ZmFjdG9y
eV8tPmNyZWF0ZV9wcm94eV9wdXNoX3N1cHBsaWVyX2NvbGxlY3Rpb24gKHRoaXMpOwp9Cgppbmxp
bmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGVzdHJveV9wcm94eV9jb2xsZWN0aW9uIChU
QU9fRUNfUHJveHlQdXNoU3VwcGxpZXJfQ29sbGVjdGlvbiogeCkKewogIHRoaXMtPmZhY3Rvcnlf
LT5kZXN0cm95X3Byb3h5X3B1c2hfc3VwcGxpZXJfY29sbGVjdGlvbiAoeCk7Cn0KCmlubGluZSBQ
b3J0YWJsZVNlcnZlcjo6UE9BX3B0cgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6c3VwcGxpZXJfcG9h
ICh2b2lkKQp7CiAgcmV0dXJuIFBvcnRhYmxlU2VydmVyOjpQT0E6Ol9kdXBsaWNhdGUgKHRoaXMt
PnN1cHBsaWVyX3BvYV8uaW4gKCkpOwp9CgppbmxpbmUgUG9ydGFibGVTZXJ2ZXI6OlBPQV9wdHIK
VEFPX0VDX0V2ZW50X0NoYW5uZWw6OmNvbnN1bWVyX3BvYSAodm9pZCkKewogIHJldHVybiBQb3J0
YWJsZVNlcnZlcjo6UE9BOjpfZHVwbGljYXRlICh0aGlzLT5jb25zdW1lcl9wb2FfLmluICgpKTsK
fQoKaW5saW5lIEFDRV9Mb2NrKgpUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6Y3JlYXRlX2NvbnN1bWVy
X2xvY2sgKHZvaWQpCnsKICByZXR1cm4gdGhpcy0+ZmFjdG9yeV8tPmNyZWF0ZV9jb25zdW1lcl9s
b2NrICgpOwp9CgppbmxpbmUgdm9pZApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGVzdHJveV9jb25z
dW1lcl9sb2NrIChBQ0VfTG9jayogeCkKewogIHRoaXMtPmZhY3RvcnlfLT5kZXN0cm95X2NvbnN1
bWVyX2xvY2sgKHgpOwp9CgppbmxpbmUgQUNFX0xvY2sqClRBT19FQ19FdmVudF9DaGFubmVsOjpj
cmVhdGVfc3VwcGxpZXJfbG9jayAodm9pZCkKewogIHJldHVybiB0aGlzLT5mYWN0b3J5Xy0+Y3Jl
YXRlX3N1cHBsaWVyX2xvY2sgKCk7Cn0KCmlubGluZSB2b2lkClRBT19FQ19FdmVudF9DaGFubmVs
OjpkZXN0cm95X3N1cHBsaWVyX2xvY2sgKEFDRV9Mb2NrKiB4KQp7CiAgdGhpcy0+ZmFjdG9yeV8t
PmRlc3Ryb3lfc3VwcGxpZXJfbG9jayAoeCk7Cn0KCmlubGluZSBpbnQKVEFPX0VDX0V2ZW50X0No
YW5uZWw6OmNvbnN1bWVyX3JlY29ubmVjdCAodm9pZCkgY29uc3QKewogIHJldHVybiB0aGlzLT5j
b25zdW1lcl9yZWNvbm5lY3RfOwp9CgppbmxpbmUgaW50ClRBT19FQ19FdmVudF9DaGFubmVsOjpz
dXBwbGllcl9yZWNvbm5lY3QgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+c3VwcGxpZXJf
cmVjb25uZWN0XzsKfQoKaW5saW5lIGludApUQU9fRUNfRXZlbnRfQ2hhbm5lbDo6ZGlzY29ubmVj
dF9jYWxsYmFja3MgKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+ZGlzY29ubmVjdF9jYWxs
YmFja3NfOwp9CgppbmxpbmUgQ09SQkE6Ok9iamVjdF9wdHIKVEFPX0VDX0V2ZW50X0NoYW5uZWw6
OnNjaGVkdWxlciAodm9pZCkKewogIHJldHVybiBDT1JCQTo6T2JqZWN0OjpfZHVwbGljYXRlICh0
aGlzLT5zY2hlZHVsZXJfLmluICgpKTsKfQoKaW5saW5lIGludApUQU9fRUNfRXZlbnRfQ2hhbm5l
bDo6YnVzeV9od20gKHZvaWQpIGNvbnN0CnsKICByZXR1cm4gdGhpcy0+YnVzeV9od21fOwp9Cgpp
bmxpbmUgaW50ClRBT19FQ19FdmVudF9DaGFubmVsOjptYXhfd3JpdGVfZGVsYXkgKHZvaWQpIGNv
bnN0CnsKICByZXR1cm4gdGhpcy0+bWF4X3dyaXRlX2RlbGF5XzsKfQojIDMyMiAiRXZlbnQvRUNf
RXZlbnRfQ2hhbm5lbC5oIiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FD
RV93cmFwcGVycy9hY2UvcG9zdC5oIiAxCiMgMzI1ICJFdmVudC9FQ19FdmVudF9DaGFubmVsLmgi
IDIKIyA1ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VDX1N1cHBs
aWVyX0ZpbHRlci5oIiAxCiMgMTcgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlci5oIgojIDEgIi9o
b21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL2FjZS9wcmUuaCIgMQojIDE4
ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3Ro
ZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENvbW1D
LmgiIDEKIyAyMCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyLmgiIDIKIyAxICIvaG9tZS9ycnAv
c2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0VTRi9F
U0ZfV29ya2VyLmgiIDEKIyAxNSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3Jh
cHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIgojIDEgIi9ob21lL3Jy
cC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy90YW8vY29yYmEuaCIgMQojIDE2
ICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9v
cmJzdmNzL0VTRi9FU0ZfV29ya2VyLmgiIDIKIyAzMCAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMv
cHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIgp0
ZW1wbGF0ZTxjbGFzcyBPYmplY3Q+CmNsYXNzIFRBT19FU0ZfV29ya2VyCnsKcHVibGljOgogIHZp
cnR1YWwgflRBT19FU0ZfV29ya2VyICh2b2lkKTsKCgogIHZpcnR1YWwgdm9pZCB3b3JrIChPYmpl
Y3QgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKSA9IDA7Cn07CgoKIyAxICIvaG9tZS9ycnAvc2No
b29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8vb3Jic3Zjcy9vcmJzdmNzL0VTRi9FU0Zf
V29ya2VyLmkiIDEKIyA0MyAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBl
cnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9FU0YvRVNGX1dvcmtlci5oIiAyCgoKCiMgMSAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9F
U0YvRVNGX1dvcmtlci5jcHAiIDEKCgoKCgojIDEgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3By
b2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNzL29yYnN2Y3MvRVNGL0VTRl9Xb3JrZXIuaCIgMQoj
IDcgIi9ob21lL3JycC9zY2hvb2wvdGhlc2lzL3Byb2ovQUNFX3dyYXBwZXJzL1RBTy9vcmJzdmNz
L29yYnN2Y3MvRVNGL0VTRl9Xb3JrZXIuY3BwIiAyCgoKCgoKaW5saW5lIGNvbnN0IGNoYXIqIGdl
dF9yY3NpZF9FU0ZfRVNGX1dvcmtlciAoY29uc3QgY2hhciopIHsgcmV0dXJuICJFU0ZfV29ya2Vy
LmNwcCx2IDEuMiAyMDAwLzA0LzAyIDE5OjIyOjQxIGNvcnlhbiBFeHAiIDsgfSBzdGF0aWMgY29u
c3QgY2hhciogcmNzaWRfRVNGX0VTRl9Xb3JrZXIgPSBnZXRfcmNzaWRfRVNGX0VTRl9Xb3JrZXIg
KCByY3NpZF9FU0ZfRVNGX1dvcmtlciApIDsKCnRlbXBsYXRlPGNsYXNzIE9iamVjdD4KVEFPX0VT
Rl9Xb3JrZXI8T2JqZWN0Pjo6flRBT19FU0ZfV29ya2VyICh2b2lkKQp7Cn0KIyA0NyAiL2hvbWUv
cnJwL3NjaG9vbC90aGVzaXMvcHJvai9BQ0Vfd3JhcHBlcnMvVEFPL29yYnN2Y3Mvb3Jic3Zjcy9F
U0YvRVNGX1dvcmtlci5oIiAyCiMgMjEgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlci5oIiAyCiMg
MSAiRXZlbnQvZXZlbnRfZXhwb3J0LmgiIDEKIyAyMiAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVy
LmgiIDIKCgoKCgpjbGFzcyBUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXI7CmNsYXNzIFRBT19FQ19Q
cm94eVB1c2hDb25zdW1lcjsKY2xhc3MgVEFPX0VDX0V2ZW50X0NoYW5uZWw7CmNsYXNzIFRBT19F
Q19RT1NfSW5mbzsKIyA2NCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyLmgiCmNsYXNzIFRBT19F
Q19TdXBwbGllcl9GaWx0ZXIKewpwdWJsaWM6CgogIHZpcnR1YWwgflRBT19FQ19TdXBwbGllcl9G
aWx0ZXIgKHZvaWQpOwojIDc3ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIKICB2aXJ0dWFs
IHZvaWQgYmluZCAoVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyKiBjb25zdW1lcikgPSAwOwojIDg4
ICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaCIKICB2aXJ0dWFsIHZvaWQgdW5iaW5kIChUQU9f
RUNfUHJveHlQdXNoQ29uc3VtZXIqIGNvbnN1bWVyKSA9IDA7CgoKCiAgdmlydHVhbCB2b2lkIGNv
bm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyICpzdXBwbGllciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikgPSAwOwogIHZpcnR1YWwgdm9p
ZCByZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyICpzdXBwbGllciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJmVudikgPSAwOwogIHZpcnR1
YWwgdm9pZCBkaXNjb25uZWN0ZWQgKFRBT19FQ19Qcm94eVB1c2hTdXBwbGllciAqc3VwcGxpZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZlbnYpID0g
MDsKCgogIHZpcnR1YWwgdm9pZCBzaHV0ZG93biAoQ09SQkE6OkVudmlyb25tZW50ICZlbnYpID0g
MDsKCgoKICB2aXJ0dWFsIHZvaWQgcHVzaCAoY29uc3QgUnRlY0V2ZW50Q29tbTo6RXZlbnRTZXQg
JmV2ZW50LAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikgPSAwOwoK
CgogIHZpcnR1YWwgQ09SQkE6OlVMb25nIF9pbmNyX3JlZmNudCAodm9pZCkgPSAwOwogIHZpcnR1
YWwgQ09SQkE6OlVMb25nIF9kZWNyX3JlZmNudCAodm9pZCkgPSAwOwp9OwoKCgpjbGFzcyBUQU9f
RUNfRmlsdGVyX1dvcmtlciA6IHB1YmxpYyBUQU9fRVNGX1dvcmtlcjxUQU9fRUNfUHJveHlQdXNo
U3VwcGxpZXI+CnsKcHVibGljOgogIFRBT19FQ19GaWx0ZXJfV29ya2VyIChSdGVjRXZlbnRDb21t
OjpFdmVudFNldCAmZXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRBT19FQ19R
T1NfSW5mbyAmZXZlbnRfaW5mbyk7CgogIHZpcnR1YWwgdm9pZCB3b3JrIChUQU9fRUNfUHJveHlQ
dXNoU3VwcGxpZXIgKnN1cHBsaWVyLAogICAgICAgICAgICAgICAgICAgICBDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKcHJpdmF0ZToKCiAgUnRl
Y0V2ZW50Q29tbTo6RXZlbnRTZXQgJmV2ZW50XzsKCgogIGNvbnN0IFRBT19FQ19RT1NfSW5mbyAm
ZXZlbnRfaW5mb187Cn07CgoKIyAxICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXIuaSIgMQoKCmlu
bGluZQpUQU9fRUNfRmlsdGVyX1dvcmtlcjo6VEFPX0VDX0ZpbHRlcl9Xb3JrZXIgKFJ0ZWNFdmVu
dENvbW06OkV2ZW50U2V0ICZldmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUQU9fRUNfUU9TX0luZm8gJmV2ZW50X2luZm8pCiAgOiBldmVudF8g
KGV2ZW50KSwKICAgICBldmVudF9pbmZvXyAoZXZlbnRfaW5mbykKewp9CiMgMTM0ICJFdmVudC9F
Q19TdXBwbGllcl9GaWx0ZXIuaCIgMgoKCiMgMSAiL2hvbWUvcnJwL3NjaG9vbC90aGVzaXMvcHJv
ai9BQ0Vfd3JhcHBlcnMvYWNlL3Bvc3QuaCIgMQojIDEzNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmls
dGVyLmgiIDIKIyA2ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgojIDEgIkV2ZW50L0VD
X1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyLmgiIDEKIyAxNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmls
dGVyX0J1aWxkZXIuaCIKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFw
cGVycy9hY2UvcHJlLmgiIDEKIyAxOCAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIu
aCIgMgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9UQU8v
b3Jic3Zjcy9vcmJzdmNzL1J0ZWNFdmVudENoYW5uZWxBZG1pbkMuaCIgMQojIDIwICJFdmVudC9F
Q19TdXBwbGllcl9GaWx0ZXJfQnVpbGRlci5oIiAyCiMgMSAiRXZlbnQvZXZlbnRfZXhwb3J0Lmgi
IDEKIyAyMSAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIuaCIgMgoKCgoKCmNsYXNz
IFRBT19FQ19TdXBwbGllcl9GaWx0ZXI7CmNsYXNzIFRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjsK
IyAzNyAiRXZlbnQvRUNfU3VwcGxpZXJfRmlsdGVyX0J1aWxkZXIuaCIKY2xhc3MgVEFPX0VDX1N1
cHBsaWVyX0ZpbHRlcl9CdWlsZGVyCnsKcHVibGljOgoKICB2aXJ0dWFsIH5UQU9fRUNfU3VwcGxp
ZXJfRmlsdGVyX0J1aWxkZXIgKHZvaWQpOwoKCgoKCgogIHZpcnR1YWwgVEFPX0VDX1N1cHBsaWVy
X0ZpbHRlcioKICAgICAgY3JlYXRlIChSdGVjRXZlbnRDaGFubmVsQWRtaW46OlN1cHBsaWVyUU9T
JiBxb3MpID0gMDsKCgogIHZpcnR1YWwgdm9pZAogICAgICBkZXN0cm95IChUQU9fRUNfU3VwcGxp
ZXJfRmlsdGVyICpmaWx0ZXIpID0gMDsKfTsKCgoKCiMgMSAiRXZlbnQvRUNfU3VwcGxpZXJfRmls
dGVyX0J1aWxkZXIuaSIgMQojIDYwICJFdmVudC9FQ19TdXBwbGllcl9GaWx0ZXJfQnVpbGRlci5o
IiAyCgoKIyAxICIvaG9tZS9ycnAvc2Nob29sL3RoZXNpcy9wcm9qL0FDRV93cmFwcGVycy9hY2Uv
cG9zdC5oIiAxCiMgNjMgIkV2ZW50L0VDX1N1cHBsaWVyX0ZpbHRlcl9CdWlsZGVyLmgiIDIKIyA3
ICJFdmVudC9FQ19Qcm94eUNvbnN1bWVyLmNwcCIgMgoKCgoKCmlubGluZSBjb25zdCBjaGFyKiBn
ZXRfcmNzaWRfRXZlbnRfRUNfUHJveHlDb25zdW1lciAoY29uc3QgY2hhciopIHsgcmV0dXJuICJF
Q19Qcm94eUNvbnN1bWVyLmNwcCx2IDEuMzEgMjAwMS8wNS8xMSAxNzoxODo0MCBiYWxhIEV4cCIg
OyB9IHN0YXRpYyBjb25zdCBjaGFyKiByY3NpZF9FdmVudF9FQ19Qcm94eUNvbnN1bWVyID0gZ2V0
X3Jjc2lkX0V2ZW50X0VDX1Byb3h5Q29uc3VtZXIgKCByY3NpZF9FdmVudF9FQ19Qcm94eUNvbnN1
bWVyICkgOwoKdHlwZWRlZiBBQ0VfUmV2ZXJzZV9Mb2NrPEFDRV9Mb2NrPiBUQU9fRUNfVW5sb2Nr
OwoKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjoKICAgIFRBT19FQ19Qcm94eVB1c2hDb25zdW1l
ciAoVEFPX0VDX0V2ZW50X0NoYW5uZWwqIGVjKQogIDogZXZlbnRfY2hhbm5lbF8gKGVjKSwKICAg
IHJlZmNvdW50XyAoMSksCiAgICBjb25uZWN0ZWRfICgwKSwKICAgIGZpbHRlcl8gKDApCnsKICB0
aGlzLT5sb2NrXyA9CiAgICB0aGlzLT5ldmVudF9jaGFubmVsXy0+Y3JlYXRlX2NvbnN1bWVyX2xv
Y2sgKCk7CgogIHRoaXMtPmRlZmF1bHRfUE9BXyA9CiAgICB0aGlzLT5ldmVudF9jaGFubmVsXy0+
Y29uc3VtZXJfcG9hICgpOwoKICB0aGlzLT5xb3NfLmlzX2dhdGV3YXkgPSAwOwp9CgpUQU9fRUNf
UHJveHlQdXNoQ29uc3VtZXI6On5UQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIgKHZvaWQpCnsKICB0
aGlzLT5ldmVudF9jaGFubmVsXy0+ZGVzdHJveV9jb25zdW1lcl9sb2NrICh0aGlzLT5sb2NrXyk7
CiAgdGhpcy0+Y2xlYW51cF9pICgpOwp9CgoKQ09SQkE6OkJvb2xlYW4KVEFPX0VDX1Byb3h5UHVz
aENvbnN1bWVyOjpzdXBwbGllcl9ub25fZXhpc3RlbnQgKAogICAgICBDT1JCQTo6Qm9vbGVhbl9v
dXQgZGlzY29ubmVjdGVkLAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUpCnsKICBDT1JCQTo6T2JqZWN0X3ZhciBzdXBwbGllcjsKICB7CiAg
ICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAoKnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9t
b24ubG9ja2VkICgpID09IDApIGRvIHsgZG8geyB9IHdoaWxlICgmX0FDRV9DT1JCQV9FbnZpcm9u
bWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgQ09SQkE6OklOVEVSTkFMICgpOyB9IHdoaWxlICgw
KTs7CgoKICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgIGRpc2Nvbm5lY3RlZCA9IDA7CiAg
ICBpZiAodGhpcy0+aXNfY29ubmVjdGVkX2kgKCkgPT0gMCkKICAgICAgewogICAgICAgIGRpc2Nv
bm5lY3RlZCA9IDE7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIGlmIChDT1JCQTo6aXNf
bmlsICh0aGlzLT5zdXBwbGllcl8uaW4gKCkpKQogICAgICB7CiAgICAgICAgcmV0dXJuIDA7CiAg
ICAgIH0KICAgIHN1cHBsaWVyID0gQ09SQkE6Ok9iamVjdDo6X2R1cGxpY2F0ZSAodGhpcy0+c3Vw
cGxpZXJfLmluICgpKTsKICB9CgoKICByZXR1cm4gc3VwcGxpZXItPl9ub25fZXhpc3RlbnQgKF9B
Q0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwoKCgp9Cgp2b2lkClRBT19FQ19Qcm94eVB1
c2hDb25zdW1lcjo6Y29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoU3VwcGxpZXIqIHN1cHBsaWVy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50
ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVEFPX0VDX1Byb3h5UHVzaENv
bnN1bWVyX0d1YXJkIGFjZV9tb24gKHRoaXMtPmxvY2tfLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzLT5yZWZjb3VudF8sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKICBpZiAoIWFjZV9tb24ubG9ja2Vk
ICgpKQogICAgcmV0dXJuOwoKICBhY2VfbW9uLmZpbHRlci0+Y29ubmVjdGVkIChzdXBwbGllciwg
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5UHVz
aENvbnN1bWVyOjpyZWNvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBzdXBwbGll
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgVEFPX0VDX1Byb3h5UHVz
aENvbnN1bWVyX0d1YXJkIGFjZV9tb24gKHRoaXMtPmxvY2tfLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5yZWZjb3VudF8sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzKTsKICBpZiAoIWFjZV9tb24ubG9j
a2VkICgpKQogICAgcmV0dXJuOwoKICBhY2VfbW9uLmZpbHRlci0+cmVjb25uZWN0ZWQgKHN1cHBs
aWVyLCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKfQoKdm9pZApUQU9fRUNfUHJv
eHlQdXNoQ29uc3VtZXI6OmRpc2Nvbm5lY3RlZCAoVEFPX0VDX1Byb3h5UHVzaFN1cHBsaWVyKiBz
dXBwbGllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkJBOjpF
bnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKewogIFRBT19FQ19Q
cm94eVB1c2hDb25zdW1lcl9HdWFyZCBhY2VfbW9uICh0aGlzLT5sb2NrXywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+cmVmY291bnRfLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5ldmVudF9jaGFubmVsXywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyk7CiAgaWYgKCFhY2Vf
bW9uLmxvY2tlZCAoKSkKICAgIHJldHVybjsKCiAgYWNlX21vbi5maWx0ZXItPmRpc2Nvbm5lY3Rl
ZCAoc3VwcGxpZXIsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwp9Cgp2b2lkClRB
T19FQ19Qcm94eVB1c2hDb25zdW1lcjo6Y29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoQ29uc3Vt
ZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25t
ZW50ICYpCnsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnJlY29ubmVjdGVkIChU
QU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJikKewp9Cgp2b2lkClRBT19FQ19Qcm94eVB1c2hD
b25zdW1lcjo6ZGlzY29ubmVjdGVkIChUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICYpCnsK
fQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6OnNodXRkb3duIChDT1JCQTo6RW52aXJv
bm1lbnQgJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpCnsKICBSdGVjRXZlbnRDb21t
OjpQdXNoU3VwcGxpZXJfdmFyIHN1cHBsaWVyOwoKICB7CiAgICBBQ0VfR3VhcmQ8IEFDRV9Mb2Nr
ID4gYWNlX21vbiAoKnRoaXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIGRv
IHsgZG8geyB9IHdoaWxlICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsg
dGhyb3cgUnRlY0V2ZW50Q2hhbm5lbEFkbWluOjpFdmVudENoYW5uZWw6OlNZTkNIUk9OSVpBVElP
Tl9FUlJPUiAoKTsgfSB3aGlsZSAoMCk7OwoKCiAgICAgICAgICAgICA7CgogICAgc3VwcGxpZXIg
PSB0aGlzLT5zdXBwbGllcl8uX3JldG4gKCk7CiAgICB0aGlzLT5jb25uZWN0ZWRfID0gMDsKCiAg
ICBpZiAodGhpcy0+ZmlsdGVyXyAhPSAwKQogICAgICB7CiAgICAgICAgdGhpcy0+ZmlsdGVyXy0+
c2h1dGRvd24gKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgdGhpcy0+Y2xlYW51cF9pICgpOwogICAgICB9CiAgfQoKICB0aGlzLT5k
ZWFjdGl2YXRlIChfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICA7
CgogIGlmIChDT1JCQTo6aXNfbmlsIChzdXBwbGllci5pbiAoKSkpCiAgICByZXR1cm47CgogIGRv
IHsgdHJ5IHsKICAgIHsKICAgICAgc3VwcGxpZXItPmRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAo
X0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICA7CiAg
ICB9CiAgfSBjYXRjaCAoQ09SQkE6OkV4Y2VwdGlvbiAmIGV4KSB7IGRvIHsgfSB3aGlsZSAoJmV4
ID09IDApOwogICAgewoKCiAgICB9CiAgfSB9IHdoaWxlICgwKTsKfQoKdm9pZApUQU9fRUNfUHJv
eHlQdXNoQ29uc3VtZXI6OmNsZWFudXBfaSAodm9pZCkKewogIHRoaXMtPnN1cHBsaWVyXyA9CiAg
ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9uaWwgKCk7CiAgdGhpcy0+Y29ubmVjdGVk
XyA9IDA7CgogIGlmICh0aGlzLT5maWx0ZXJfICE9IDApCiAgICB7CiAgICAgIHRoaXMtPmZpbHRl
cl8tPnVuYmluZCAodGhpcyk7CiAgICAgIHRoaXMtPmZpbHRlcl8tPl9kZWNyX3JlZmNudCAoKTsK
ICAgICAgdGhpcy0+ZmlsdGVyXyA9IDA7CiAgICB9Cn0KClJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHJveHlQdXNoQ29uc3VtZXJfcHRyClRBT19FQ19Qcm94eVB1c2hDb25zdW1lcjo6YWN0aXZhdGUg
KENPUkJBOjpFbnZpcm9ubWVudCAmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSkKICB0
aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewogIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6
UHJveHlQdXNoQ29uc3VtZXJfdmFyIHJlc3VsdDsKICBkbyB7IHRyeSB7CiAgICB7CiAgICAgIHJl
c3VsdCA9CiAgICAgICAgdGhpcy0+X3RoaXMgKF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUpOwogICAgICAgICAgICAgICAgICAgOwogICAgfQogIH0gY2F0Y2ggKENPUkJBOjpFeGNlcHRp
b24gJiBleCkgeyBkbyB7IH0gd2hpbGUgKCZleCA9PSAwKTsKICAgIHsKCiAgICB9CiAgfSB9IHdo
aWxlICgwKTsKICByZXR1cm4gcmVzdWx0Ll9yZXRuICgpOwp9Cgp2b2lkClRBT19FQ19Qcm94eVB1
c2hDb25zdW1lcjo6ZGVhY3RpdmF0ZSAoQ09SQkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKQp7CiAgZG8geyB0cnkgewogICAgewogICAgICBQb3J0YWJsZVNl
cnZlcjo6UE9BX3ZhciBwb2EgPQogICAgICAgIHRoaXMtPl9kZWZhdWx0X1BPQSAoX0FDRV9DT1JC
QV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICA7CiAgICAgIFBvcnRh
YmxlU2VydmVyOjpPYmplY3RJZF92YXIgaWQgPQogICAgICAgIHBvYS0+c2VydmFudF90b19pZCAo
dGhpcywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAg
ICA7CiAgICAgIHBvYS0+ZGVhY3RpdmF0ZV9vYmplY3QgKGlkLmluICgpLCBfQUNFX0NPUkJBX0Vu
dmlyb25tZW50X3ZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgIDsKICAgIH0KICB9IGNhdGNo
IChDT1JCQTo6RXhjZXB0aW9uICYgZXgpIHsgZG8geyB9IHdoaWxlICgmZXggPT0gMCk7CiAgICB7
CgoKCgogICAgfQogIH0gfSB3aGlsZSAoMCk7Cn0KCkNPUkJBOjpVTG9uZwpUQU9fRUNfUHJveHlQ
dXNoQ29uc3VtZXI6Ol9pbmNyX3JlZmNudCAodm9pZCkKewogIEFDRV9HdWFyZDwgQUNFX0xvY2sg
PiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgcmV0
dXJuIDA7OwogIHJldHVybiB0aGlzLT5yZWZjb3VudF8rKzsKfQoKQ09SQkE6OlVMb25nClRBT19F
Q19Qcm94eVB1c2hDb25zdW1lcjo6X2RlY3JfcmVmY250ICh2b2lkKQp7CiAgewogICAgQUNFX0d1
YXJkPCBBQ0VfTG9jayA+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7IGlmIChhY2VfbW9uLmxvY2tl
ZCAoKSA9PSAwKSByZXR1cm4gMDs7CiAgICB0aGlzLT5yZWZjb3VudF8tLTsKICAgIGlmICh0aGlz
LT5yZWZjb3VudF8gIT0gMCkKICAgICAgcmV0dXJuIHRoaXMtPnJlZmNvdW50XzsKICB9CgoKICB0
aGlzLT5ldmVudF9jaGFubmVsXy0+ZGVzdHJveV9wcm94eSAodGhpcyk7CiAgcmV0dXJuIDA7Cn0K
CnZvaWQKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpjb25uZWN0X3B1c2hfc3VwcGxpZXIgKAog
ICAgICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXJfcHRyIHB1c2hfc3VwcGxpZXIsCiAgICAg
IGNvbnN0IFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6U3VwcGxpZXJRT1MmIHFvcywKICAgICAgQ09S
QkE6OkVudmlyb25tZW50ICZfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQogICAgdGhy
b3cgKENPUkJBOjpTeXN0ZW1FeGNlcHRpb24sIFJ0ZWNFdmVudENoYW5uZWxBZG1pbjo6QWxyZWFk
eUNvbm5lY3RlZCkKCnsKICB7CiAgICBBQ0VfR3VhcmQ8IEFDRV9Mb2NrID4gYWNlX21vbiAoKnRo
aXMtPmxvY2tfKTsgaWYgKGFjZV9tb24ubG9ja2VkICgpID09IDApIGRvIHsgZG8geyB9IHdoaWxl
ICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgQ09SQkE6OklO
VEVSTkFMICgpOyB9IHdoaWxlICgwKTs7CgoKCiAgICAgICAgICAgICA7CgogICAgaWYgKHRoaXMt
PmlzX2Nvbm5lY3RlZF9pICgpKQogICAgICB7CiAgICAgICAgaWYgKHRoaXMtPmV2ZW50X2NoYW5u
ZWxfLT5zdXBwbGllcl9yZWNvbm5lY3QgKCkgPT0gMCkKICAgICAgICAgIGRvIHsgZG8geyB9IHdo
aWxlICgmX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSA9PSAwKTsgdGhyb3cgUnRlY0V2
ZW50Q2hhbm5lbEFkbWluOjpBbHJlYWR5Q29ubmVjdGVkICgpOyB9IHdoaWxlICgwKTsKCgoKICAg
ICAgICB0aGlzLT5jbGVhbnVwX2kgKCk7CgoKCiAgICAgICAgVEFPX0VDX1VubG9jayByZXZlcnNl
X2xvY2sgKCp0aGlzLT5sb2NrXyk7CgogICAgICAgIHsKICAgICAgICAgIEFDRV9HdWFyZDwgVEFP
X0VDX1VubG9jayA+IGFjZV9tb24gKHJldmVyc2VfbG9jayk7IGlmIChhY2VfbW9uLmxvY2tlZCAo
KSA9PSAwKSBkbyB7IGRvIHsgfSB3aGlsZSAoJl9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFi
bGUgPT0gMCk7IHRocm93IENPUkJBOjpJTlRFUk5BTCAoKTsgfSB3aGlsZSAoMCk7OwoKCgogICAg
ICAgICAgICAgICAgICAgOwoKICAgICAgICAgIHRoaXMtPmV2ZW50X2NoYW5uZWxfLT5yZWNvbm5l
Y3RlZCAodGhpcywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7CiAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgfQoKCgoKICAgICAgICBpZiAodGhpcy0+aXNfY29ubmVjdGVkX2kg
KCkpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICB0aGlzLT5zdXBwbGllcl8gPQogICAg
ICBSdGVjRXZlbnRDb21tOjpQdXNoU3VwcGxpZXI6Ol9kdXBsaWNhdGUgKHB1c2hfc3VwcGxpZXIp
OwogICAgdGhpcy0+Y29ubmVjdGVkXyA9IDE7CiAgICB0aGlzLT5xb3NfID0gcW9zOwoKCgoKCiAg
ICB0aGlzLT5maWx0ZXJfID0KICAgICAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8tPnN1cHBsaWVyX2Zp
bHRlcl9idWlsZGVyICgpLT5jcmVhdGUgKHRoaXMtPnFvc18pOwogICAgdGhpcy0+ZmlsdGVyXy0+
YmluZCAodGhpcyk7CiAgfQoKCiAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8tPmNvbm5lY3RlZCAodGhp
cywgX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJpYWJsZSk7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5
UHVzaENvbnN1bWVyOjpwdXNoIChjb25zdCBSdGVjRXZlbnRDb21tOjpFdmVudFNldCYgZXZlbnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09SQkE6OkVudmlyb25tZW50ICZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKQogICAgdGhyb3cgKENPUkJBOjpTeXN0ZW1FeGNl
cHRpb24pCnsKICBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXJfR3VhcmQgYWNlX21vbiAodGhpcy0+
bG9ja18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnJl
ZmNvdW50XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+
ZXZlbnRfY2hhbm5lbF8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMpOwogIGlmICghYWNlX21vbi5sb2NrZWQgKCkpCiAgICByZXR1cm47CgoKCiAgYWNlX21v
bi5maWx0ZXItPnB1c2ggKGV2ZW50LCBfQUNFX0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlKTsK
ICAgICAgICAgICA7Cn0KCnZvaWQKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpkaXNjb25uZWN0
X3B1c2hfY29uc3VtZXIgKAogICAgICBDT1JCQTo6RW52aXJvbm1lbnQgJl9BQ0VfQ09SQkFfRW52
aXJvbm1lbnRfdmFyaWFibGUpCiAgICB0aHJvdyAoQ09SQkE6OlN5c3RlbUV4Y2VwdGlvbikKewog
IFJ0ZWNFdmVudENvbW06OlB1c2hTdXBwbGllcl92YXIgc3VwcGxpZXI7CiAgaW50IGNvbm5lY3Rl
ZCA9IDA7CgogIHsKICAgIEFDRV9HdWFyZDwgQUNFX0xvY2sgPiBhY2VfbW9uICgqdGhpcy0+bG9j
a18pOyBpZiAoYWNlX21vbi5sb2NrZWQgKCkgPT0gMCkgZG8geyBkbyB7IH0gd2hpbGUgKCZfQUNF
X0NPUkJBX0Vudmlyb25tZW50X3ZhcmlhYmxlID09IDApOyB0aHJvdyBDT1JCQTo6SU5URVJOQUwg
KCk7IH0gd2hpbGUgKDApOzsKCgoKICAgICAgICAgICAgIDsKCiAgICBjb25uZWN0ZWQgPSB0aGlz
LT5pc19jb25uZWN0ZWRfaSAoKTsKICAgIHN1cHBsaWVyID0gdGhpcy0+c3VwcGxpZXJfLl9yZXRu
ICgpOwogICAgdGhpcy0+Y29ubmVjdGVkXyA9IDA7CgogICAgaWYgKGNvbm5lY3RlZCkKICAgICAg
dGhpcy0+Y2xlYW51cF9pICgpOwogIH0KCgogIHRoaXMtPmV2ZW50X2NoYW5uZWxfLT5kaXNjb25u
ZWN0ZWQgKHRoaXMsIF9BQ0VfQ09SQkFfRW52aXJvbm1lbnRfdmFyaWFibGUpOwogICAgICAgICAg
IDsKCiAgaWYgKENPUkJBOjppc19uaWwgKHN1cHBsaWVyLmluICgpKSkKICAgIHsKICAgICAgcmV0
dXJuOwogICAgfQoKICBpZiAodGhpcy0+ZXZlbnRfY2hhbm5lbF8tPmRpc2Nvbm5lY3RfY2FsbGJh
Y2tzICgpKQogICAgewogICAgICBkbyB7IHRyeSB7CiAgICAgICAgewogICAgICAgICAgc3VwcGxp
ZXItPmRpc2Nvbm5lY3RfcHVzaF9zdXBwbGllciAoX0FDRV9DT1JCQV9FbnZpcm9ubWVudF92YXJp
YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAo
Q09SQkE6OkV4Y2VwdGlvbiAmIGV4KSB7IGRvIHsgfSB3aGlsZSAoJmV4ID09IDApOwogICAgICAg
IHsKCgogICAgICAgIH0KICAgICAgfSB9IHdoaWxlICgwKTsKICAgIH0KfQoKUG9ydGFibGVTZXJ2
ZXI6OlBPQV9wdHIKVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVyOjpfZGVmYXVsdF9QT0EgKENPUkJB
OjpFbnZpcm9ubWVudCYpCnsKICByZXR1cm4gUG9ydGFibGVTZXJ2ZXI6OlBPQTo6X2R1cGxpY2F0
ZSAodGhpcy0+ZGVmYXVsdF9QT0FfLmluICgpKTsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29u
c3VtZXI6Ol9hZGRfcmVmIChDT1JCQTo6RW52aXJvbm1lbnQgJikKewogIHRoaXMtPl9pbmNyX3Jl
ZmNudCAoKTsKfQoKdm9pZApUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXI6Ol9yZW1vdmVfcmVmIChD
T1JCQTo6RW52aXJvbm1lbnQgJikKewogIHRoaXMtPl9kZWNyX3JlZmNudCAoKTsKfQoKCgpUQU9f
RUNfUHJveHlQdXNoQ29uc3VtZXJfR3VhcmQ6OgogICAgVEFPX0VDX1Byb3h5UHVzaENvbnN1bWVy
X0d1YXJkIChBQ0VfTG9jayAqbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ09SQkE6OlVMb25nICZyZWZjb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVEFPX0VDX0V2ZW50X0NoYW5uZWwgKmVjLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBUQU9fRUNfUHJveHlQdXNoQ29uc3VtZXIgKnByb3h5KQogOiBsb2NrXyAobG9j
ayksCiAgICAgcmVmY291bnRfIChyZWZjb3VudCksCiAgICAgZXZlbnRfY2hhbm5lbF8gKGVjKSwK
ICAgICBwcm94eV8gKHByb3h5KSwKICAgICBsb2NrZWRfICgwKQp7CiAgQUNFX0d1YXJkPEFDRV9M
b2NrPiBhY2VfbW9uICgqdGhpcy0+bG9ja18pOwoKCgoKCgoKICBpZiAocHJveHktPmlzX2Nvbm5l
Y3RlZF9pICgpID09IDApCiAgICByZXR1cm47CgogIHRoaXMtPmZpbHRlciA9IHRoaXMtPnByb3h5
Xy0+ZmlsdGVyX2kgKCk7CiAgdGhpcy0+ZmlsdGVyLT5faW5jcl9yZWZjbnQgKCk7CgogIHRoaXMt
PmxvY2tlZF8gPSAxOwogIHRoaXMtPnJlZmNvdW50XysrOwp9CgpUQU9fRUNfUHJveHlQdXNoQ29u
c3VtZXJfR3VhcmQ6OgogICAgflRBT19FQ19Qcm94eVB1c2hDb25zdW1lcl9HdWFyZCAodm9pZCkK
ewoKCiAgaWYgKCF0aGlzLT5sb2NrZWRfKQogICAgcmV0dXJuOwoKICB7CiAgICBBQ0VfR3VhcmQ8
QUNFX0xvY2s+IGFjZV9tb24gKCp0aGlzLT5sb2NrXyk7CgoKCgoKCgogICAgdGhpcy0+ZmlsdGVy
LT5fZGVjcl9yZWZjbnQgKCk7CgogICAgdGhpcy0+cmVmY291bnRfLS07CiAgICBpZiAodGhpcy0+
cmVmY291bnRfICE9IDApCiAgICAgIHJldHVybjsKICB9CiAgdGhpcy0+ZXZlbnRfY2hhbm5lbF8t
PmRlc3Ryb3lfcHJveHkgKHRoaXMtPnByb3h5Xyk7Cn0K


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

only message in thread, other threads:[~2001-08-02 12:04 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-02 12:04 gnats/229: gcc-3.0 reports segmentation fault rrp

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