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


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

c++/9429: ICE in template instantiation with a pointered new operator


>Number:         9429
>Category:       c++
>Synopsis:       ICE in template instantiation with a pointered new operator
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-legal-code
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 24 09:56:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     t-gcc@snowelm.com
>Release:        gcc version 3.2.2 20030109 (Debian prerelease) i386-linux
>Organization:
>Environment:
Debian GNU/Linux with kernel updated to 2.4.20
>Description:
The attached code causes ICE on GCC version 3.2.2 (it seems GCC 3.2 20020927 has the same problem). GCC  2.95.4 compiles the same source perfectly (if you use the non-preprocessed code), so I believe the code is legal...
---------------
$ g++ -O0 array.ii
array.h: In member function `ARRAYBASE*
   ArrayMakerKeyTemplate<ARRAYBASE>::MakeEntry(ARRAYBASE::hashkey_t) [with
   ARRAYBASE = ArrayEntry<ulong>]':
hash.h:546:   instantiated from here
array.h:215: Internal compiler error in convert_from_eh_region_ranges_1, at
   except.c:1404
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.
$ g++ -v
Reading specs from /usr/lib/gcc-lib/i386-linux/3.2.2/specs
Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,proto,pascal,objc,ada --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.2 --enable-shared --with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-java-gc=boehm --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.2.2 20030109 (Debian prerelease)
---------------
>How-To-Repeat:
Compile the attached file:
g++ -O0 array.ii
>Fix:

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

IyAxICJhcnJheS5jcHAiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx
ICJhcnJheS5jcHAiCgoKCnN0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiJElkOiBhcnJheS5j
cHAsdiAxLjIxIDIwMDMvMDEvMjMgMTQ6MTg6MjAgbWFrIEV4cCAkIjsKIyAyMSAiYXJyYXkuY3Bw
IgojIDEgImFsbC5oIiAxCiMgMTEgImFsbC5oIgojIDEgInJ0X2NvbmZpZy5oIiAxCiMgMzggInJ0
X2NvbmZpZy5oIgojIDEgIi4uL2NvbXBpbGVyL2lkZW50LmgiIDEKIyAzOSAicnRfY29uZmlnLmgi
IDIKIyAxICIuLi9jb25maWcuaCIgMQojIDQwICJydF9jb25maWcuaCIgMgojIDkwICJydF9jb25m
aWcuaCIKIyAxICIvdXNyL2luY2x1ZGUvc3RkaW50LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUv
c3RkaW50LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjkxICIvdXNy
L2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAz
CiMgMjkyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUv
ZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMzE1ICIv
dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVk
ZS9zdGRpbnQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMg
MjkgIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9zdGRpbnQu
aCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKdHlwZWRlZiBzaG9ydCBpbnQgaW50MTZf
dDsKdHlwZWRlZiBpbnQgaW50MzJfdDsKCgoKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9u
ZyBpbnQgaW50NjRfdDsKCgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGludCB1aW50MTZfdDsKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQz
Ml90OwoKCgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVp
bnQ2NF90OwoKCgoKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIGludF9sZWFzdDhfdDsKdHlwZWRlZiBz
aG9ydCBpbnQgaW50X2xlYXN0MTZfdDsKdHlwZWRlZiBpbnQgaW50X2xlYXN0MzJfdDsKCgoKX19l
eHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2xlYXN0NjRfdDsKCgoKdHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIHVpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHVpbnRfbGVhc3QxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2xlYXN0MzJfdDsKCgoK
X19leHRlbnNpb25fXwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludF9sZWFzdDY0
X3Q7CgoKCgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgaW50X2Zhc3Q4X3Q7CgoKCgoKdHlwZWRlZiBp
bnQgaW50X2Zhc3QxNl90Owp0eXBlZGVmIGludCBpbnRfZmFzdDMyX3Q7Cl9fZXh0ZW5zaW9uX18K
dHlwZWRlZiBsb25nIGxvbmcgaW50IGludF9mYXN0NjRfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBj
aGFyIHVpbnRfZmFzdDhfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3QxNl90
Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50X2Zhc3QzMl90OwpfX2V4dGVuc2lvbl9fCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50X2Zhc3Q2NF90OwojIDEyNiAiL3Vzci9pbmNs
dWRlL3N0ZGludC5oIiAzCnR5cGVkZWYgaW50IGludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg
aW50IHVpbnRwdHJfdDsKIyAxMzggIi91c3IvaW5jbHVkZS9zdGRpbnQuaCIgMwpfX2V4dGVuc2lv
bl9fCnR5cGVkZWYgbG9uZyBsb25nIGludCBpbnRtYXhfdDsKX19leHRlbnNpb25fXwp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWludG1heF90OwojIDkxICJydF9jb25maWcuaCIgMgoj
IDEyMSAicnRfY29uZmlnLmgiCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoKIyAxICJtZW1jaGsuaCIg
MQojIDI1ICJtZW1jaGsuaCIKY2xhc3MgX19pbml0X3Rlcm1fbWVtY2hrCnsKcHVibGljOgogICAg
ICAgIF9faW5pdF90ZXJtX21lbWNoaygpIHRocm93KCk7CiAgICAgICAgfl9faW5pdF90ZXJtX21l
bWNoaygpIHRocm93KCk7Cn07CgoKc3RhdGljIF9faW5pdF90ZXJtX21lbWNoayBfX2luaXRfdGVy
bV9tZW1jaGtfaW5zdGFuY2U7CiMgMTI1ICJydF9jb25maWcuaCIgMgojIDEyICJhbGwuaCIgMgoj
IDEgImJhc2ljLmgiIDEKIyAzNSAiYmFzaWMuaCIKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi
IDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuICJDIiB7CiMgMTc1ICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQu
aCIgMSAzCiMgMTc2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL2Vudmlyb25tZW50cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52
aXJvbm1lbnRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAy
NCAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNs
dWRlL3VuaXN0ZC5oIiAyIDMKIyAxOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd29yZHNpemUuaCIgMSAzCiMgMjkgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDIwMSAiL3Vzci9saWIvZ2NjLWxpYi9p
Mzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
c2l6ZV90OwojIDMyICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9y
dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCBfX3VfbG9uZzsKCgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2ln
bmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0
eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQg
X19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNp
b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f
XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVu
c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKIyAxMjggIi91c3IvaW5jbHVk
ZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlc2l6ZXMuaCIgMSAz
CiMgMTI5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lu
b190Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVu
c2lnbmVkIGludCBfX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5
cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNp
ZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGlu
dCBfX3JsaW1fdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5
cGVkZWYgdW5zaWduZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNv
bmRzX3Q7Cgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190
Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVk
ZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlw
ZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2
NF90OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2Zz
ZmlsY250NjRfdDsKCgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3Qg
X19sb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2Nh
ZGRyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X3NvY2tsZW5fdDsKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKdHlwZWRlZiBf
X3NzaXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg
MiAzCgoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90
OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2Zm
NjRfdDsKCgoKCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRzX3Q7CgoKCgp0eXBlZGVmIF9f
cGlkX3QgcGlkX3Q7CiMgMjQ3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKdHlwZWRlZiBfX3Nv
Y2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu
IGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZXVpZGFjY2VzcyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5
cGUpIHRocm93ICgpOwojIDI5MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29m
Zl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJv
dyAoKTsKIyAzMDIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmY2NF90IGxz
ZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNz
aXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpIHRocm93
ICgpOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1
Ziwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHByZWFkIChpbnQgX19m
ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmZfdCBfX29mZnNldCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcHdyaXRlIChpbnQgX19mZCwgX19jb25zdCB2b2lkICpf
X2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0
KSB0aHJvdyAoKTsKIyAzNDAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVf
dCBwcmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgpleHRlcm4g
c3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJdKSB0aHJvdyAoKTsKIyAz
NjIgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IGFsYXJtICh1
bnNpZ25lZCBpbnQgX19zZWNvbmRzKSB0aHJvdyAoKTsKIyAzNzEgIi91c3IvaW5jbHVkZS91bmlz
dGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19zZWNvbmRz
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fdXNlY29uZHNfdCB1YWxhcm0gKF9fdXNlY29uZHNf
dCBfX3ZhbHVlLCBfX3VzZWNvbmRzX3QgX19pbnRlcnZhbCkKICAgICB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB1c2xlZXAgKF9fdXNlY29uZHNfdCBfX3VzZWNvbmRzKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHBhdXNlICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaG93biAoX19j
b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAg
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlkX3QgX19vd25l
ciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGNob3duIChfX2Nv
bnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGNoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgZmNoZGlyIChpbnQgX19mZCkgdGhyb3cgKCk7CiMgNDIzICIv
dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYs
IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9k
aXJfbmFtZSAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXR3ZCAoY2hhciAq
X19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBkdXAgKGludCBfX2ZkKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBpbnQgX19mZDIpIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICoqX19lbnZpcm9uOwoKZXh0ZXJuIGNoYXIgKiplbnZpcm9uOwoKCgoKCmV4dGVybiBp
bnQgZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwK
ICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgX19lbnZwW10pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBmZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSwgY2hh
ciAqX19jb25zdCBfX2VudnBbXSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY3Yg
KF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBleGVjbGUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2NvbnN0IGNoYXIg
Kl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4ZWNsIChfX2NvbnN0IGNoYXIg
Kl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu
dCBleGVjdnAgKF9fY29uc3QgY2hhciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZXhlY2xwIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19j
b25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50
IF9faW5jKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQgX19zdGF0dXMpIF9f
YXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L2NvbmZuYW1lLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAzCmVu
dW0KICB7CiAgICBfUENfTElOS19NQVgsCgogICAgX1BDX01BWF9DQU5PTiwKCiAgICBfUENfTUFY
X0lOUFVULAoKICAgIF9QQ19OQU1FX01BWCwKCiAgICBfUENfUEFUSF9NQVgsCgogICAgX1BDX1BJ
UEVfQlVGLAoKICAgIF9QQ19DSE9XTl9SRVNUUklDVEVELAoKICAgIF9QQ19OT19UUlVOQywKCiAg
ICBfUENfVkRJU0FCTEUsCgogICAgX1BDX1NZTkNfSU8sCgogICAgX1BDX0FTWU5DX0lPLAoKICAg
IF9QQ19QUklPX0lPLAoKICAgIF9QQ19TT0NLX01BWEJVRiwKCiAgICBfUENfRklMRVNJWkVCSVRT
LAoKICAgIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NQVhfWEZFUl9TSVpF
LAoKICAgIF9QQ19SRUNfTUlOX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX1hGRVJfQUxJR04sCgog
ICAgX1BDX0FMTE9DX1NJWkVfTUlOLAoKICAgIF9QQ19TWU1MSU5LX01BWAoKICB9OwoKCmVudW0K
ICB7CiAgICBfU0NfQVJHX01BWCwKCiAgICBfU0NfQ0hJTERfTUFYLAoKICAgIF9TQ19DTEtfVENL
LAoKICAgIF9TQ19OR1JPVVBTX01BWCwKCiAgICBfU0NfT1BFTl9NQVgsCgogICAgX1NDX1NUUkVB
TV9NQVgsCgogICAgX1NDX1RaTkFNRV9NQVgsCgogICAgX1NDX0pPQl9DT05UUk9MLAoKICAgIF9T
Q19TQVZFRF9JRFMsCgogICAgX1NDX1JFQUxUSU1FX1NJR05BTFMsCgogICAgX1NDX1BSSU9SSVRZ
X1NDSEVEVUxJTkcsCgogICAgX1NDX1RJTUVSUywKCiAgICBfU0NfQVNZTkNIUk9OT1VTX0lPLAoK
ICAgIF9TQ19QUklPUklUSVpFRF9JTywKCiAgICBfU0NfU1lOQ0hST05JWkVEX0lPLAoKICAgIF9T
Q19GU1lOQywKCiAgICBfU0NfTUFQUEVEX0ZJTEVTLAoKICAgIF9TQ19NRU1MT0NLLAoKICAgIF9T
Q19NRU1MT0NLX1JBTkdFLAoKICAgIF9TQ19NRU1PUllfUFJPVEVDVElPTiwKCiAgICBfU0NfTUVT
U0FHRV9QQVNTSU5HLAoKICAgIF9TQ19TRU1BUEhPUkVTLAoKICAgIF9TQ19TSEFSRURfTUVNT1JZ
X09CSkVDVFMsCgogICAgX1NDX0FJT19MSVNUSU9fTUFYLAoKICAgIF9TQ19BSU9fTUFYLAoKICAg
IF9TQ19BSU9fUFJJT19ERUxUQV9NQVgsCgogICAgX1NDX0RFTEFZVElNRVJfTUFYLAoKICAgIF9T
Q19NUV9PUEVOX01BWCwKCiAgICBfU0NfTVFfUFJJT19NQVgsCgogICAgX1NDX1ZFUlNJT04sCgog
ICAgX1NDX1BBR0VTSVpFLAoKCiAgICBfU0NfUlRTSUdfTUFYLAoKICAgIF9TQ19TRU1fTlNFTVNf
TUFYLAoKICAgIF9TQ19TRU1fVkFMVUVfTUFYLAoKICAgIF9TQ19TSUdRVUVVRV9NQVgsCgogICAg
X1NDX1RJTUVSX01BWCwKCgoKCiAgICBfU0NfQkNfQkFTRV9NQVgsCgogICAgX1NDX0JDX0RJTV9N
QVgsCgogICAgX1NDX0JDX1NDQUxFX01BWCwKCiAgICBfU0NfQkNfU1RSSU5HX01BWCwKCiAgICBf
U0NfQ09MTF9XRUlHSFRTX01BWCwKCiAgICBfU0NfRVFVSVZfQ0xBU1NfTUFYLAoKICAgIF9TQ19F
WFBSX05FU1RfTUFYLAoKICAgIF9TQ19MSU5FX01BWCwKCiAgICBfU0NfUkVfRFVQX01BWCwKCiAg
ICBfU0NfQ0hBUkNMQVNTX05BTUVfTUFYLAoKCiAgICBfU0NfMl9WRVJTSU9OLAoKICAgIF9TQ18y
X0NfQklORCwKCiAgICBfU0NfMl9DX0RFViwKCiAgICBfU0NfMl9GT1JUX0RFViwKCiAgICBfU0Nf
Ml9GT1JUX1JVTiwKCiAgICBfU0NfMl9TV19ERVYsCgogICAgX1NDXzJfTE9DQUxFREVGLAoKCiAg
ICBfU0NfUElJLAoKICAgIF9TQ19QSUlfWFRJLAoKICAgIF9TQ19QSUlfU09DS0VULAoKICAgIF9T
Q19QSUlfSU5URVJORVQsCgogICAgX1NDX1BJSV9PU0ksCgogICAgX1NDX1BPTEwsCgogICAgX1ND
X1NFTEVDVCwKCiAgICBfU0NfVUlPX01BWElPViwKCiAgICBfU0NfSU9WX01BWCA9IF9TQ19VSU9f
TUFYSU9WLAoKICAgIF9TQ19QSUlfSU5URVJORVRfU1RSRUFNLAoKICAgIF9TQ19QSUlfSU5URVJO
RVRfREdSQU0sCgogICAgX1NDX1BJSV9PU0lfQ09UUywKCiAgICBfU0NfUElJX09TSV9DTFRTLAoK
ICAgIF9TQ19QSUlfT1NJX00sCgogICAgX1NDX1RfSU9WX01BWCwKCgoKICAgIF9TQ19USFJFQURT
LAoKICAgIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlMsCgogICAgX1NDX0dFVEdSX1JfU0laRV9N
QVgsCgogICAgX1NDX0dFVFBXX1JfU0laRV9NQVgsCgogICAgX1NDX0xPR0lOX05BTUVfTUFYLAoK
ICAgIF9TQ19UVFlfTkFNRV9NQVgsCgogICAgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElP
TlMsCgogICAgX1NDX1RIUkVBRF9LRVlTX01BWCwKCiAgICBfU0NfVEhSRUFEX1NUQUNLX01JTiwK
CiAgICBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYLAoKICAgIF9TQ19USFJFQURfQVRUUl9TVEFDS0FE
RFIsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSwKCiAgICBfU0NfVEhSRUFEX1BSSU9S
SVRZX1NDSEVEVUxJTkcsCgogICAgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQsCgogICAgX1NDX1RI
UkVBRF9QUklPX1BST1RFQ1QsCgogICAgX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCwKCgogICAg
X1NDX05QUk9DRVNTT1JTX0NPTkYsCgogICAgX1NDX05QUk9DRVNTT1JTX09OTE4sCgogICAgX1ND
X1BIWVNfUEFHRVMsCgogICAgX1NDX0FWUEhZU19QQUdFUywKCiAgICBfU0NfQVRFWElUX01BWCwK
CiAgICBfU0NfUEFTU19NQVgsCgoKICAgIF9TQ19YT1BFTl9WRVJTSU9OLAoKICAgIF9TQ19YT1BF
Tl9YQ1VfVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fVU5JWCwKCiAgICBfU0NfWE9QRU5fQ1JZUFQs
CgogICAgX1NDX1hPUEVOX0VOSF9JMThOLAoKICAgIF9TQ19YT1BFTl9TSE0sCgoKICAgIF9TQ18y
X0NIQVJfVEVSTSwKCiAgICBfU0NfMl9DX1ZFUlNJT04sCgogICAgX1NDXzJfVVBFLAoKCiAgICBf
U0NfWE9QRU5fWFBHMiwKCiAgICBfU0NfWE9QRU5fWFBHMywKCiAgICBfU0NfWE9QRU5fWFBHNCwK
CgogICAgX1NDX0NIQVJfQklULAoKICAgIF9TQ19DSEFSX01BWCwKCiAgICBfU0NfQ0hBUl9NSU4s
CgogICAgX1NDX0lOVF9NQVgsCgogICAgX1NDX0lOVF9NSU4sCgogICAgX1NDX0xPTkdfQklULAoK
ICAgIF9TQ19XT1JEX0JJVCwKCiAgICBfU0NfTUJfTEVOX01BWCwKCiAgICBfU0NfTlpFUk8sCgog
ICAgX1NDX1NTSVpFX01BWCwKCiAgICBfU0NfU0NIQVJfTUFYLAoKICAgIF9TQ19TQ0hBUl9NSU4s
CgogICAgX1NDX1NIUlRfTUFYLAoKICAgIF9TQ19TSFJUX01JTiwKCiAgICBfU0NfVUNIQVJfTUFY
LAoKICAgIF9TQ19VSU5UX01BWCwKCiAgICBfU0NfVUxPTkdfTUFYLAoKICAgIF9TQ19VU0hSVF9N
QVgsCgoKICAgIF9TQ19OTF9BUkdNQVgsCgogICAgX1NDX05MX0xBTkdNQVgsCgogICAgX1NDX05M
X01TR01BWCwKCiAgICBfU0NfTkxfTk1BWCwKCiAgICBfU0NfTkxfU0VUTUFYLAoKICAgIF9TQ19O
TF9URVhUTUFYLAoKCiAgICBfU0NfWEJTNV9JTFAzMl9PRkYzMiwKCiAgICBfU0NfWEJTNV9JTFAz
Ml9PRkZCSUcsCgogICAgX1NDX1hCUzVfTFA2NF9PRkY2NCwKCiAgICBfU0NfWEJTNV9MUEJJR19P
RkZCSUcsCgoKICAgIF9TQ19YT1BFTl9MRUdBQ1ksCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FLAoK
ICAgIF9TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTLAoKCiAgICBfU0NfQURWSVNPUllfSU5GTywK
CiAgICBfU0NfQkFSUklFUlMsCgogICAgX1NDX0JBU0UsCgogICAgX1NDX0NfTEFOR19TVVBQT1JU
LAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVF9SLAoKICAgIF9TQ19DTE9DS19TRUxFQ1RJT04sCgog
ICAgX1NDX0NQVVRJTUUsCgogICAgX1NDX1RIUkVBRF9DUFVUSU1FLAoKICAgIF9TQ19ERVZJQ0Vf
SU8sCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDX1Is
CgogICAgX1NDX0ZEX01HTVQsCgogICAgX1NDX0ZJRk8sCgogICAgX1NDX1BJUEUsCgogICAgX1ND
X0ZJTEVfQVRUUklCVVRFUywKCiAgICBfU0NfRklMRV9MT0NLSU5HLAoKICAgIF9TQ19GSUxFX1NZ
U1RFTSwKCiAgICBfU0NfTU9OT1RPTklDX0NMT0NLLAoKICAgIF9TQ19NVUxUSV9QUk9DRVNTLAoK
ICAgIF9TQ19TSU5HTEVfUFJPQ0VTUywKCiAgICBfU0NfTkVUV09SS0lORywKCiAgICBfU0NfUkVB
REVSX1dSSVRFUl9MT0NLUywKCiAgICBfU0NfU1BJTl9MT0NLUywKCiAgICBfU0NfUkVHRVhQLAoK
ICAgIF9TQ19SRUdFWF9WRVJTSU9OLAoKICAgIF9TQ19TSEVMTCwKCiAgICBfU0NfU0lHTkFMUywK
CiAgICBfU0NfU1BBV04sCgogICAgX1NDX1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfVEhSRUFE
X1NQT1JBRElDX1NFUlZFUiwKCiAgICBfU0NfU1lTVEVNX0RBVEFCQVNFLAoKICAgIF9TQ19TWVNU
RU1fREFUQUJBU0VfUiwKCiAgICBfU0NfVElNRU9VVFMsCgogICAgX1NDX1RZUEVEX01FTU9SWV9P
QkpFQ1RTLAoKICAgIF9TQ19VU0VSX0dST1VQUywKCiAgICBfU0NfVVNFUl9HUk9VUFNfUiwKCiAg
ICBfU0NfMl9QQlMsCgogICAgX1NDXzJfUEJTX0FDQ09VTlRJTkcsCgogICAgX1NDXzJfUEJTX0xP
Q0FURSwKCiAgICBfU0NfMl9QQlNfTUVTU0FHRSwKCiAgICBfU0NfMl9QQlNfVFJBQ0ssCgogICAg
X1NDX1NZTUxPT1BfTUFYLAoKICAgIF9TQ19TVFJFQU1TLAoKICAgIF9TQ18yX1BCU19DSEVDS1BP
SU5ULAoKCiAgICBfU0NfVjZfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1Y2X0lMUDMyX09GRkJJRywK
CiAgICBfU0NfVjZfTFA2NF9PRkY2NCwKCiAgICBfU0NfVjZfTFBCSUdfT0ZGQklHLAoKCiAgICBf
U0NfSE9TVF9OQU1FX01BWCwKCiAgICBfU0NfVFJBQ0UsCgogICAgX1NDX1RSQUNFX0VWRU5UX0ZJ
TFRFUiwKCiAgICBfU0NfVFJBQ0VfSU5IRVJJVCwKCiAgICBfU0NfVFJBQ0VfTE9HCgogIH07CgoK
CgoKZW51bQogIHsKICAgIF9DU19QQVRILAoKCgoKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwK
CiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElO
VEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgog
ICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUywKCgoKCiAgICBfQ1Nf
WEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMy
X0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfWEJTNV9J
TFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUywK
CiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P
RkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTLAoKICAgIF9D
U19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFH
UywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2
NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1Nf
WEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElC
UywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoKCgogICAgX0NTX1BPU0lY
X1Y2X0lMUDMyX09GRjMyX0NGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERG
TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUywKCiAgICBfQ1NfUE9TSVhf
VjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdf
Q0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUywKCiAgICBfQ1Nf
UE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJ
R19MSU5URkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9D
U19QT1NJWF9WNl9MUDY0X09GRjY0X0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZG
NjRfTElCUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NT
X1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklHX09G
RkJJR19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUywKCiAgICBf
Q1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19WNl9XSURUSF9S
RVNUUklDVEVEX0VOVlMKCiAgfTsKIyA1MDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoK
ZXh0ZXJuIGxvbmcgaW50IHBhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9fbmFt
ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBf
X25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBzeXNjb25mIChpbnQgX19uYW1lKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBzaXplX3QgY29u
ZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3BpZF90
IGdldHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9p
ZCkgdGhyb3cgKCk7CiMgNTM2ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIF9fcGlk
X3QgX19nZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3BpZF90IGdl
dHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHBnaWQg
KF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1NjIgIi91c3IvaW5j
bHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDU4
MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBfX3BpZCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9f
dWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lkKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBnZXRyZXN1aWQgKF9fdWlkX3QgKl9fZXVpZCwgX191aWRfdCAqX19ydWlkLCBf
X3VpZF90ICpfX3N1aWQpOwoKCgpleHRlcm4gaW50IGdldHJlc2dpZCAoX19naWRfdCAqX19lZ2lk
LCBfX2dpZF90ICpfX3JnaWQsIF9fZ2lkX3QgKl9fc2dpZCk7CgoKCmV4dGVybiBpbnQgc2V0cmVz
dWlkIChfX3VpZF90IF9fZXVpZCwgX191aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19zdWlkKTsKCgoK
ZXh0ZXJuIGludCBzZXRyZXNnaWQgKF9fZ2lkX3QgX19lZ2lkLCBfX2dpZF90IF9fcmdpZCwgX19n
aWRfdCBfX3NnaWQpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lkKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBj
aGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9y
IChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCB0dHlz
bG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAoX19jb25zdCBjaGFyICpf
X2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc3ltbGlu
ayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19wYXRoLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4p
IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoj
IDc0NCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9wdC5o
IiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDQ3ICIv
dXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA2MSAiL3Vzci9p
bmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBvcHRl
cnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAz
CmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19fYXJnYywgY2hhciAqY29uc3QgKl9fX2FyZ3YsIGNv
bnN0IGNoYXIgKl9fc2hvcnRvcHRzKTsKIyAxNzUgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIgMwp9
CiMgNzQ1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCgoKZXh0ZXJuIGludCBnZXRo
b3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gaW50IHNldGhvc3RuYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzZXRob3N0aWQgKGxvbmcgaW50IF9faWQpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19s
ZW4pIHRocm93ICgpOwpleHRlcm4gaW50IHNldGRvbWFpbm5hbWUgKF9fY29uc3QgY2hhciAqX19u
YW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hhciAqX19maWxlKSB0
aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9f
c2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
YWNjdCAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0
dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgZW5kdXNlcnNoZWxsICh2b2lk
KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgc2V0dXNlcnNoZWxsICh2b2lkKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBpbnQgY2hyb290IChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChfX2NvbnN0IGNoYXIgKl9fcHJvbXB0KSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHN5
bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBnZXRwYWdlc2l6ZSAodm9pZCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCB0cnVuY2F0
ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg1
NCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgdHJ1bmNhdGU2NCAoX19jb25z
dCBjaGFyICpfX2ZpbGUsIF9fb2ZmNjRfdCBfX2xlbmd0aCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIHRocm93ICgpOwojIDg2
OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgZnRydW5jYXRlNjQgKGludCBf
X2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRh
Ymxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODg0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK
ZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg
KnNicmsgKGludHB0cl90IF9fZGVsdGEpIHRocm93ICgpOwojIDkwNSAiL3Vzci9pbmNsdWRlL3Vu
aXN0ZC5oIiAzCmV4dGVybiBsb25nIGludCBzeXNjYWxsIChsb25nIGludCBfX3N5c25vLCAuLi4p
IHRocm93ICgpOwojIDkyNSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9j
a2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIHRocm93ICgpOwojIDkzNSAi
L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGlu
dCBfX2NtZCwgX19vZmY2NF90IF9fbGVuKSB0aHJvdyAoKTsKIyA5NTYgIi91c3IvaW5jbHVkZS91
bmlzdGQuaCIgMwpleHRlcm4gaW50IGZkYXRhc3luYyAoaW50IF9fZmlsZGVzKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBj
aGFyICpfX3NhbHQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBlbmNyeXB0IChjaGFyICpfX2Js
b2NrLCBpbnQgX19lZGZsYWcpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9pZCBzd2FiIChfX2Nv
bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19mcm9tLCB2b2lkICpfX3Jlc3RyaWN0IF9fdG8sCiAgICAg
ICAgICAgICAgICAgIHNzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpj
dGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwojIDEwMDEgIi91c3IvaW5jbHVkZS91bmlzdGQu
aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZvaWQpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsK
Cgp9CiMgMzYgImJhc2ljLmgiIDIKCgp0eXBlZGVmIHNob3J0IGludDE2Owp0eXBlZGVmIHNpZ25l
ZCBzaG9ydCBzaW50MTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2Owp0eXBlZGVmIGlu
dCBpbnQzMjsKdHlwZWRlZiBzaWduZWQgaW50IHNpbnQzMjsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg
dWludDMyOwojIDgxICJiYXNpYy5oIgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVzaG9ydDsKIyA5
NCAiYmFzaWMuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVsb25nOwojIDEwNyAiYmFzaWMuaCIK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVjaGFyOwojIDEyMCAiYmFzaWMuaCIKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgdWludDsKIyAxMzMgImJhc2ljLmgiCnR5cGVkZWYgc2lnbmVkIHNob3J0IHNzaG9y
dDsKIyAxNDYgImJhc2ljLmgiCnR5cGVkZWYgc2lnbmVkIGxvbmcgc2xvbmc7CiMgMTU5ICJiYXNp
Yy5oIgp0eXBlZGVmIHNpZ25lZCBjaGFyIHNjaGFyOwojIDE3MiAiYmFzaWMuaCIKdHlwZWRlZiBz
aWduZWQgaW50IHNpbnQ7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAx
IDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytjb25maWcuaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQ2ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
cmluZ2Z3ZC5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3Ry
dWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9
IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZzsKCiAgdGVtcGxhdGU8
PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+
IHN0cmluZzsKCgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKICB0
eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQ3ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hh
cl90cmFpdHMuaCIgMSAzCiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY2hhcl90cmFp
dHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAxIDMKIyA0OCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9j
c3RkZGVmIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIv
dXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMg
MTQ3ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIg
Mwp0eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRk
ZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpz
aXplX3Q7Cn0KIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0cmluZyIgMiAzCgojIDEgIi91
c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpl
eHRlcm4gIkMiIHsKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2lu
Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKCgoK
ZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lk
ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1l
bWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3Qg
X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19z
MSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1jaHIgKF9fY29uc3Qgdm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hh
ciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9f
cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0
IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBj
aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx
LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAz
CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX19sb2NhbGVf
c3RydWN0CnsKCiAgc3RydWN0IGxvY2FsZV9kYXRhICpfX2xvY2FsZXNbMTNdOwoKCiAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgaW50ICpfX2N0eXBlX2I7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvbG93
ZXI7CiAgY29uc3QgaW50ICpfX2N0eXBlX3RvdXBwZXI7CgoKICBjb25zdCBjaGFyICpfX25hbWVz
WzEzXTsKfSAqX19sb2NhbGVfdDsKIyAxMTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoK
ZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hh
ciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f
cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNo
YXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNjAgIi91c3IvaW5jbHVkZS9z
dHJpbmcuaCIgMwoKCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQg
X19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz
dHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFy
ICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
CmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq
X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNj
ZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNo
YXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0
cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNoYXIgKl9fbmVlZGxlKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gY2hhciAq
c3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv
bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ss
IHNpemVfdCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg
Kl9fbmVlZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJp
Y3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJp
Y3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9p
ZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXpl
X3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3Ry
aW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYs
IHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lk
ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29weSAoX19jb25z
dCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBj
aGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAq
X19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZzbGwgKGxvbmcg
bG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4
dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpf
X3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2Fz
ZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAg
KGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2
ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFs
IChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJv
dyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIg
Kl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkg
dGhyb3cgKCk7CiMgMzc5ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDUyICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAyIDMKIyA3NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3N0
cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1v
dmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0
OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsK
ICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsK
ICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAg
dXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAg
dXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBf
X2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+
KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAg
c3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihj
b25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7
CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikK
ICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mx
KSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hy
KGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3Rf
Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlu
bGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0
dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIp
OyB9Cn0KIyA0NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kz
ODYtbGludXgvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4
Ni1saW51eC9iaXRzL2MrK2lvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8i
IDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKCgoKCiMgMSAiL3Vzci9s
aWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzkgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJu
ICJDIiB7CgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDQ0ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5j
bHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4y
L2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoK
IyA3MSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIg
Mwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgODEgIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGli
aW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAi
L3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDMyMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgi
IDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29u
ZmlnLmgiIDIgMwojIDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5
ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
CgoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewogICAg
d2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0
ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QK
ewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5
cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsK
fSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMK
IyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIg
MSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2MyAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDMKCiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgojIDEgIi91c3IvbGli
L2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vz
ci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9f
R0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05W
X0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lO
UFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NS
SVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lT
X0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0
cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2Nv
bnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVk
IGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50KTsKCgp0eXBlZGVmIHdp
bnRfdCAoKl9fZ2NvbnZfYnRvd2NfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCB1bnNpZ25l
ZCBjaGFyKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29u
dl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9f
Z2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f
Z2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp
Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp
bnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlw
ZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2dj
b252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj
b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu
c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1
Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg
Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh
ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2J0b3djX2ZjdCBf
X2J0b3djX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9mY3Q7CiAgX19nY29udl9lbmRf
ZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zyb207CiAgaW50IF9fbWF4X25l
ZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50IF9fbWF4X25lZWRlZF90bzsK
CgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07CgoKCnN0cnVjdCBfX2djb252
X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7CiAgdW5zaWduZWQgY2hhciAq
X19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50IF9faW52b2NhdGlvbl9jb3Vu
dGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0YXRlX3QgKl9fc3RhdGVwOwog
IF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190
cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZvCnsKICBzaXplX3QgX19uc3Rl
cHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBfX2V4dGVuc2lvbl9fIHN0cnVj
dCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9p
bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZf
aW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAg
IHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2lj
b252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMy
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2xp
Yi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91
c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVk
ZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTQgIi91c3IvaW5jbHVkZS9s
aWJpby5oIiAyIDMKIyAxNjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVt
cF90OyBzdHJ1Y3QgX0lPX0ZJTEU7CiMgMTcyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBl
ZGVmIHZvaWQgX0lPX2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9J
T19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7
CiMgMTk1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3Vs
dAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJv
ciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQg
KCpfX2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVj
dnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90
ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdj
aGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgd2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9f
Y29kZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICos
IGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0
cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAq
Kik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICop
OwogIGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0
ICopOwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwg
X19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq
LCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29u
dl90IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9f
cmVhZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jh
c2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsK
ICB3Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hh
cl90ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpf
SU9fYmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3Qg
X0lPX3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29k
ZWN2dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVt
cF90ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoK
CgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9J
T19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0
cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBf
SU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jh
c2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7
CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKCgoKICBpbnQgX2Zs
YWdzMjsKCiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2Nv
bHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsK
CgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAg
X19vZmY2NF90IF9vZmZzZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0
cnVjdCBfSU9fd2lkZV9kYXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIg
X3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoK
CgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP
XzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87
CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzUwICIvdXNy
L2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQg
Kl9fY29va2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYg
X19zc2l6ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9f
YnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoK
CnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19w
b3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2ll
KTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVk
ZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3Nl
ZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tp
ZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJl
YWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9f
Y2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lP
X2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lP
X2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19j
b29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zu
cyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAq
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193
dWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChf
SU9fRklMRSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4g
aW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVy
cm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr
ZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tm
aWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklM
RSAqKSB0aHJvdyAoKTsKIyA0NjIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQg
X0lPX3Zmc2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJp
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJp
Y3QpIHRocm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJp
Y3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxF
ICosIGludCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9J
T19GSUxFICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lP
X3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRl
cm4gX19vZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhy
b3cgKCk7CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21v
ZGUpIHRocm93ICgpOwojIDUxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf
SU9fdmZ3c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVz
dHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jl
c3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19y
ZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRu
IChfSU9fRklMRSAqLCB3aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9J
T19mcmVlX3diYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA4MiAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0
eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA5NSAiL3Vzci9saWIvZ2Nj
LWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwoKCnR5cGVkZWYgX0dfZnBv
c190IGZwb3NfdDsKCgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDE0NyAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxNDggIi91c3IvbGliL2djYy1saWIv
aTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gc3RydWN0IF9J
T19GSUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3Ry
dWN0IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBj
aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNo
YXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJ
TEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE4MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFy
ICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMjAy
ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4
dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9f
cGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0
ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZs
dXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxv
Y2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwg
KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjQ4ICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKZXh0ZXJuIEZJTEUgKmZvcGVu
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4g
RklMRSAqZnJlb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2Rl
cykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3Ry
aWN0IF9fbWFnaWNfY29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29r
aWVfaW9fZnVuY3Rpb25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZt
ZW1vcGVuICh2b2lkICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJp
Y3QgX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3Ry
aWN0IF9fc2l6ZWxvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19y
ZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3By
aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZw
cmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmlu
dGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
bWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0
IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoK
ZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qg
X19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDApKSk7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10
LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDMpKSk7CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRy
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4u
LikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMykpKTsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywg
MiwgMCkpKTsKZXh0ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0
X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNz
Y2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IHZmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwg
MCkpKTsKCgpleHRlcm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoK
CmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBn
ZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGlu
dCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIg
KmZnZXRzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVz
dHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDQ3MCAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxp
bnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0g
KGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9f
ZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9f
cmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJp
Y3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUs
CiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf
X24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNf
dW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9f
c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2Vk
IChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9u
ZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRl
bGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKIyA1MzcgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8z
LjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFt
LCBfX29mZl90IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3Qg
ZnRlbGxvIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CiMgNTUzICIvdXNyL2xpYi9nY2MtbGli
L2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRpby5oIiAzCgoKCmV4dGVybiBpbnQgZmdldHBv
cyAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25z
dCBmcG9zX3QgKl9fcG9zKSB0aHJvdyAoKTsKIyA1NzIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklM
RSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0
ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g
aW50IGZnZXRwb3M2NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVz
dHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpf
X3N0cmVhbSwgX19jb25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZv
aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRo
cm93ICgpOwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N5c19lcnJsaXN0LmgiIDEgMwoj
IDI3ICIvdXNyL2luY2x1ZGUvYml0cy9zeXNfZXJybGlzdC5oIiAzCmV4dGVybiBpbnQgc3lzX25l
cnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4g
aW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3Rb
XTsKIyA2MDkgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGlv
LmgiIDIgMwoKCgoKZXh0ZXJuIGludCBmaWxlbm8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBGSUxFICpwb3BlbiAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQsIF9fY29u
c3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqY3VzZXJpZCAoY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCnN0cnVjdCBvYnN0YWNrOwoKCmV4dGVybiBpbnQgb2JzdGFja19wcmludGYgKHN0cnVjdCBv
YnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CmV4dGVybiBpbnQg
b2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDAp
KSk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDY4
NiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkaW8uaCIgMwp9
CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRpbyIgMiAzCiMgOTcgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNp
bmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNp
bmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6
ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3Bl
bjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwog
IHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVz
aW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcg
Ojpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6Omdl
dHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwog
IHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNp
bmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6
OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6
c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVu
Z2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZz
cHJpbnRmOwp9CiMgMTUzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jc3RkaW8iIDMKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNp
bmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9Cgpu
YW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251
X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzNiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3Iv
aW5jbHVkZS9wdGhyZWFkLmgiIDEgMwojIDIwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvc2NoZWQuaCIg
MwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDExNiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBsb25nIGlu
dCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDYyICIvdXNyL2luY2x1ZGUvYml0cy9zY2hl
ZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5Owog
IH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQg
Kl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFjaywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxh
Z3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgp9CgoKCgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJh
bQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMzMgIi91c3IvaW5jbHVkZS9z
Y2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0g
KF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0
cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9z
ZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgX19hbGdvcml0aG0pIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IF9fYWxnb3JpdGhtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwg
c3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzY2hlZF9zZXRh
ZmZpbml0eSAoX19waWRfdCBfX3BpZCwgdW5zaWduZWQgbG9uZyBpbnQgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ICpfX21hc2spIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVk
IGxvbmcgaW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGludCAqX19tYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjEgIi91c3IvaW5jbHVkZS9wdGhyZWFk
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYt
bGludXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDIgMwojIDU4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKdHlwZWRl
ZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKIyA3NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwoKCnR5
cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgojIDkyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCnR5
cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDEwNCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
Mwp0eXBlZGVmIF9fdGltZXJfdCB0aW1lcl90OwojIDEyNyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3Vy
OwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dk
YXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2Zm
OwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgoKCgoKc3RydWN0IGl0aW1lcnNw
ZWMKICB7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNw
ZWMgaXRfdmFsdWU7CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTc2ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl
cm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3Ry
dWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gY2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3Qg
dG0gKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wg
KGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGNo
YXIgKnN0cnB0aW1lX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAq
X190cCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVf
dCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3IgKF9f
Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1
Y3QgdG0gKmxvY2FsdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAq
X190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190
aW1lcikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0
cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpf
X3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25z
dCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJd
OwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoK
ZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoK
CgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMg
MzA3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0g
Kl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAg
KF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVj
ICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3Qg
X19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAg
KGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
Y2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tf
aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3Qg
X19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGlt
ZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1l
cmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1l
cmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVj
dCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJz
cGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1
biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM3OCAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRh
dGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM5MyAiL3Vzci9pbmNsdWRl
L3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
cmVzYnVmcCkgdGhyb3cgKCk7CgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMK
CgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zaWdu
YWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEg
MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVmIGludCBfX3NpZ19h
dG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgX192
YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSldOwogIH0gX19zaWdz
ZXRfdDsKIyAzNCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRl
L3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzggIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMwp9CiMgMjUgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAx
IDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKdHlwZWRlZiBp
bnQgX19hdG9taWNfbG9ja190OwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBp
bnQgX19zdGF0dXM7CiAgX19hdG9taWNfbG9ja190IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVm
IHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVk
ZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBf
X3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQg
X19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGlu
dCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tz
aXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhy
ZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0
aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVh
ZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoK
dHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBf
cHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVh
ZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0
CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBp
bnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7
CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJz
OwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVh
ZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19y
d19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRl
ZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9y
d2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7
CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7
CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNj
ciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3Qgewog
IGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9wdGhy
ZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JF
QVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhS
RUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgog
IFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURf
TlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNI
RUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhf
Tk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lW
RSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVD
SyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQg
PSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRI
UkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklW
QVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldM
T0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwK
ICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFE
X1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9Owoj
IDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9i
dWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGlu
dCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7
Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxf
RElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURf
Q0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFk
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19y
ZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKigqX19zdGFy
dF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19y
ZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYg
KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9lcXVhbCAocHRocmVhZF90IF9f
dGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRo
cmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9f
dGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRo
cmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
cHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlIChwdGhyZWFk
X2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dl
dGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90
ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw
dGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0
cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19y
ZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCBpbnQgX19wb2xpY3kpCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9f
Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGluaGVyaXRzY2hlZCAocHRocmVh
ZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRp
bmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqX19yZXN0cmljdCBf
X2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2Nv
cGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Njb3BlKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3BlIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0
dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90
ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy
LCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRk
cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChfX2Nv
bnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0cmljdCBfX3N0YWNrYWRkcikKICAgICB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayAocHRocmVhZF9h
dHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0
IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf
X3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3NpemUgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0
dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJlYWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJf
dCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNjaGVkcGFy
YW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFt
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRzY2hlZHBhcmFtIChwdGhy
ZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0
IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf
bXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kg
KHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0
ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0
aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRy
X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0
cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90
ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy
X3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
Kl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRf
bXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl
c3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9p
bml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWduYWwgKHB0aHJlYWRfY29uZF90ICpfX2Nv
bmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVh
ZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dh
aXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3Qg
Kl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0
aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRf
Y29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0
dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVh
ZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrX3Qg
Kl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3JkbG9jayAo
cHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWRyZGxvY2sgKHB0aHJlYWRfcndsb2Nr
X3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcnds
b2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190
aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9jaywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0
aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0aHJl
YWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
cndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9kZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9n
ZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0
aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f
YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3By
ZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldGtpbmRfbnAg
KHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93ICgpOwojIDUwOSAiL3Vzci9pbmNsdWRl
L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5s
b2NrX3QgKl9fbG9jaywgaW50IF9fcHNoYXJlZCkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfc3Bpbl9kZXN0cm95IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fbG9jayAocHRocmVhZF9zcGlubG9ja190ICpf
X2xvY2spIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3RyeWxvY2sgKHB0aHJl
YWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp
bl91bmxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgcHRocmVhZF9iYXJyaWVyX2luaXQgKHB0aHJlYWRfYmFycmllcl90ICpfX3Jlc3RyaWN0
IF9fYmFycmllciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBwdGhy
ZWFkX2JhcnJpZXJhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19hdHRyLCB1bnNpZ25lZCBpbnQgX19jb3VudCkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHB0aHJlYWRfYmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9pbml0IChwdGhyZWFkX2Jh
cnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmll
cmF0dHJfZGVzdHJveSAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRocmVh
ZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IHB0aHJlYWRfYmFycmllcmF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpf
X2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w
c2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX3dhaXQgKHB0aHJl
YWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwojIDU1NiAiL3Vzci9pbmNsdWRlL3B0
aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAq
X19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0cl9mdW5j
dGlvbikgKHZvaWQgKikpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9rZXlfZGVsZXRl
IChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0
c3BlY2lmaWMgKHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB2b2lkICpfX3BvaW50ZXIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICpw
dGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSB0aHJvdyAoKTsKIyA1NzYg
Ii91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJl
YWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg
KCpfX2luaXRfcm91dGluZSkgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAq
X19vbGR0eXBlKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFk
X3QgX19jYW5jZWx0aHJlYWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0
Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2MTAgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMK
ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51
cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiB2b2lkIF9wdGhyZWFkX2Ns
ZWFudXBfcG9wIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cgKCk7CiMg
NjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFu
dXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l
KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpfX2FyZykgdGhyb3cgKCk7CiMgNjQyICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVy
biB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVh
bnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9n
ZXRjcHVjbG9ja2lkIChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9iaXRz
L3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3csCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IF9fc2lnc2V0X3QgKl9fcmVzdHJpY3Qg
X19uZXdtYXNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqX19yZXN0
cmljdCBfX29sZG1hc2spdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJl
YWRfdCBfX3RocmVhZGlkLCBpbnQgX19zaWdubykgdGhyb3cgKCk7CiMgNjU2ICIvdXNyL2luY2x1
ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJu
IGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
dm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMg
MzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9ndGhyLWRlZmF1bHQuaCIg
MiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJl
YWRfb25jZV90IF9fZ3RocmVhZF9vbmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3Ro
cmVhZF9tdXRleF90OwoKCgoKCgojcHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX2tleV9jcmVhdGUKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJh
Z21hIHdlYWsgcHRocmVhZF9nZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVj
aWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211
dGV4X2xvY2sgCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X3RyeWxvY2sgCiNwcmFnbWEgd2Vh
ayBwdGhyZWFkX211dGV4X3VubG9jayAKIyA4MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1s
aW51eC9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9h
Y3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0
ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9w
dHIgIT0gMDsKfQojIDQzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2d0
aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJl
YWRfb25jZV90ICpvbmNlLCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9h
Y3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UK
ICAgIHJldHVybiAtMTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUg
KF9fZ3RocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4g
cHRocmVhZF9rZXlfY3JlYXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0
aHJlYWRfa2V5X2R0b3IgKF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAo
cHRyKQogICAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAg
cmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0
aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoK
c3RhdGljIGlubGluZSB2b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5
X3Qga2V5KQp7CiAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29u
c3Qgdm9pZCAqcHRyKQp7CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsK
fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRl
eF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRo
cmVhZF9tdXRleF9sb2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBp
bmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0
ZXgpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0
ZXhfdHJ5bG9jayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5l
IGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsK
ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5s
b2NrIChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvaTM4Ni1saW51eC9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi91c3IvaW5jbHVkZS9jKysv
My4yL2kzODYtbGludXgvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBl
ZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5
cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFt
cG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBG
SUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9y
dCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9
IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19s
ZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tp
cHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4
MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgw
MDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g
MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJp
dCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsK
CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2No
YXIiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9jdGltZSIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0
aW1lIiAzCiMgNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1
c2luZyA6OmNsb2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNp
bmcgOjp0aW1lOwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6
Z210aW1lOwogIHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xpYi9nY2Mt
bGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDEgIi91c3IvaW5j
bHVkZS93Y2hhci5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg
MiAzCiMgNjMgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgojIDg4ICIvdXNyL2luY2x1ZGUvd2No
YXIuaCIgMwoKCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwoKCgojIDExMyAiL3Vzci9p
bmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpzdHJ1Y3QgdG07CgoKCgoKCgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93
ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9f
Y29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAq
X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjc25j
YXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGlu
dCB3Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpf
X3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7
CgpleHRlcm4gaW50IHdjc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25z
dCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9f
bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgd2NzY29sbCAoX19jb25z
dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc3hmcm0gKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9fbikg
dGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAq
X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgX19sb2Nh
bGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc3hmcm1fbCAod2NoYXJf
dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3Qg
Kndjc2R1cCAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fd2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywg
d2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hh
cl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoK
ZXh0ZXJuIHNpemVfdCB3Y3Njc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0
IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9f
Y29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nzc3RyIChfX2NvbnN0IHdjaGFyX3QgKl9faGF5
c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc3RvayAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y
ZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0
cmljdCBfX3B0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NsZW4gKF9fY29uc3Qgd2No
YXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biB3Y2hhcl90ICp3Y3N3Y3MgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3
Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVf
dCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg
X19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEs
CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqX19y
ZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
d2ludF90IGJ0b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2lu
dF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRl
X3QgKl9fcHMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g
c2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVf
dCB3Y3J0b21iIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAg
ICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRl
cm4gc2l6ZV90IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKIyAzMjQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCgoKCmV4
dGVybiBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90
IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9f
cHMpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmlj
dCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3Rh
dGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNu
cnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBf
X3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3Ry
aWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBz
aXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3Ry
aWN0IF9fcHMpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19j
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3Ms
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3Rv
ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25n
IGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9u
ZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UpIHRocm93ICgpOwojIDQ0MyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0
ZXJuIGxvbmcgaW50IHdjc3RvbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWxfbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
X19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lv
bl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxsX2wgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2RfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g
ZmxvYXQgd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl
X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZF9sIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs
ZSBfX3djc3RvZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX193Y3N0b2Zf
aW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf
X2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVy
bmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hh
cl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3djc3RvdWxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No
YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l
eHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f
d2NzdG91bGxfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKIyA1NjMgIi91c3IvaW5jbHVkZS93
Y2hhci5oIiAzCmV4dGVybiB3Y2hhcl90ICp3Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25z
dCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3
Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19t
b2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsK
CmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19u
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf
X2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s
aXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBf
X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2Fu
ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4
dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKCgoKCmV4dGVybiBpbnQg
dmZ3c2NhbmYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2d3NjYW5m
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB2c3dz
Y2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgoKCgoKCgpleHRlcm4g
d2ludF90IGZnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3Qg
Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZ2V0d2No
YXIgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IGZwdXR3YyAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJf
dCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHB1dHdj
aGFyICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3cyAo
d2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAg
ICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1
dHdzIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAg
IF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3Qg
dW5nZXR3YyAod2ludF90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4
dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdjX3VubG9ja2VkICh3Y2hhcl90IF9f
d2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2ludF90IHB1dHdjaGFyX3Vu
bG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdz
X3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0
IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIHNpemVfdCB3Y3NmdGltZV9sICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywg
c2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKIyA3MzcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAz
Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKIyA2OSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWJzdGF0ZV90
Owp9CiMgMTMzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7
CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6YnRvd2M7CiAgdXNpbmcgOjpmZ2V0d2M7CiAg
dXNpbmcgOjpmZ2V0d3M7CiAgdXNpbmcgOjpmcHV0d2M7CiAgdXNpbmcgOjpmcHV0d3M7CiAgdXNp
bmcgOjpmd2lkZTsKICB1c2luZyA6OmZ3cHJpbnRmOwogIHVzaW5nIDo6ZndzY2FuZjsKICB1c2lu
ZyA6OmdldHdjOwogIHVzaW5nIDo6Z2V0d2NoYXI7CiAgdXNpbmcgOjptYnJsZW47CiAgdXNpbmcg
OjptYnJ0b3djOwogIHVzaW5nIDo6bWJzaW5pdDsKICB1c2luZyA6Om1ic3J0b3djczsKICB1c2lu
ZyA6OnB1dHdjOwogIHVzaW5nIDo6cHV0d2NoYXI7CiAgdXNpbmcgOjpzd3ByaW50ZjsKICB1c2lu
ZyA6OnN3c2NhbmY7CiAgdXNpbmcgOjp1bmdldHdjOwogIHVzaW5nIDo6dmZ3cHJpbnRmOwogIHVz
aW5nIDo6dmZ3c2NhbmY7CiAgdXNpbmcgOjp2c3dwcmludGY7CiAgdXNpbmcgOjp2c3dzY2FuZjsK
ICB1c2luZyA6OnZ3cHJpbnRmOwogIHVzaW5nIDo6dndzY2FuZjsKICB1c2luZyA6OndjcnRvbWI7
CiAgdXNpbmcgOjp3Y3NjYXQ7CiAgdXNpbmcgOjp3Y3NjbXA7CiAgdXNpbmcgOjp3Y3Njb2xsOwog
IHVzaW5nIDo6d2NzY3B5OwogIHVzaW5nIDo6d2NzY3NwbjsKICB1c2luZyA6Ondjc2Z0aW1lOwog
IHVzaW5nIDo6d2NzbGVuOwogIHVzaW5nIDo6d2NzbmNhdDsKICB1c2luZyA6Ondjc25jbXA7CiAg
dXNpbmcgOjp3Y3NuY3B5OwogIHVzaW5nIDo6d2NzcnRvbWJzOwogIHVzaW5nIDo6d2Nzc3BuOwog
IHVzaW5nIDo6d2NzdG9kOwogIHVzaW5nIDo6d2NzdG9mOwogIHVzaW5nIDo6d2NzdG9rOwogIHVz
aW5nIDo6d2NzdG9sOwogIHVzaW5nIDo6d2NzdG91bDsKICB1c2luZyA6Ondjc3hmcm07CiAgdXNp
bmcgOjp3Y3RvYjsKICB1c2luZyA6OndtZW1jbXA7CiAgdXNpbmcgOjp3bWVtY3B5OwogIHVzaW5n
IDo6d21lbW1vdmU7CiAgdXNpbmcgOjp3bWVtc2V0OwogIHVzaW5nIDo6d3ByaW50ZjsKICB1c2lu
ZyA6OndzY2FuZjsKCiAgdXNpbmcgOjp3Y3NjaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc2No
cih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc2Nocihjb25zdF9jYXN0
PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVzaW5nIDo6d2NzcGJyazsKCiAgaW5s
aW5lIHdjaGFyX3QqCiAgd2NzcGJyayh3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBfX3MyKQogIHsg
cmV0dXJuIHdjc3BicmsoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9
CgogIHVzaW5nIDo6d2NzcmNocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzcmNocih3Y2hhcl90
KiBfX3AsIHdjaGFyX3QgX19jKQogIHsgcmV0dXJuIHdjc3JjaHIoY29uc3RfY2FzdDxjb25zdCB3
Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2luZyA6Ondjc3N0cjsKCiAgaW5saW5lIHdjaGFy
X3QqCiAgd2Nzc3RyKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2Nz
c3RyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6
OndtZW1jaHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdtZW1jaHIod2NoYXJfdCogX19wLCB3Y2hh
cl90IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiB3bWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qg
d2NoYXJfdCo+KF9fcCksIF9fYywgX19uKTsgfQp9CgoKCgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKICB1c2luZyA6Ondjc3RvbGQ7CiAgdXNpbmcgOjp3Y3N0b2xsOwogIHVzaW5nIDo6d2NzdG91
bGw7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sZDsKICB1c2lu
ZyBfX2dudV9jeHg6Ondjc3RvbGw7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b3VsbDsKfQojIDQ2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRl
OgogICAgICBzdHJlYW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAg
cHVibGljOgogICAgICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBf
TV9zdDsgfQoKICAgICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9z
dCA9IF9fc3Q7IH0KCgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChf
X3N0YXRlX3R5cGUoKSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90
eXBlIF9fc3QgPSBfX3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChf
X3N0KSB7IH0KCiAgICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29m
ZjsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01f
b2ZmICs9IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y
LT0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog
ICAgICBmcG9zCiAgICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAg
ICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBf
X3Q7CiAgICAgIH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikK
ICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAg
ICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNv
bnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01f
b2ZmOyB9CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVh
bW9mZgogICAgICBfTV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAg
dm9pZAogICAgICBfTV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7
IH0KICAgIH07CgoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVk
ZWYgZnBvczxtYnN0YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0
ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBl
OwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1v
ZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm
IF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29u
c3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGlj
IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNv
bnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAg
IGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYg
X19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3Mx
LCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJf
dHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwg
c2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJf
dHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0
aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsK
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2Mp
OwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAg
IHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVh
bW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAg
IHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlw
ZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg
ZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsg
cmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3Qg
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9f
YzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0
dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg
IGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29u
c3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEsIF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMg
Y2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPiht
ZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAg
IGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsg
fQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5
cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoK
CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUm
IF9fYykKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0
dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9f
YyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
Y2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsKICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2Zm
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVk
ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGlj
IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9f
bik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSog
X19zKQogICAgICB7IHJldHVybiB3Y3NsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29u
c3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7
IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBj
b25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1v
dmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29w
eShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAg
ICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hh
cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw
ZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1zZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0
YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsg
cmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9f
aW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0K
CiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2Mx
LCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9Cgog
ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90
X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2Ms
IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAg
ICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJfdHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19j
KSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29u
c3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbGltaXRz
IiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL2xpbWl0
cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUv
bGltaXRzLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5jbHVk
ZS9zeXNsaW1pdHMuaCIgMSAzCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4
LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9saWIvZ2NjLWxpYi9pMzg2
LWxpbnV4LzMuMi4yL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGltaXRz
LmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9s
aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vz
ci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGlt
aXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3
ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRl
L2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEg
MwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2lu
Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl
bl9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAi
L3Vzci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMKIyAxMzMgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNs
dWRlL2xpbWl0cy5oIiAyIDMKIyA4ICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIv
aW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51
eC8zLjIuMi9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Y2xpbWl0cyIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvbGliL2djYy1s
aWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUv
Yml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDM3
ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9lbmRpYW4u
aCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgNjQgIi91c3IvaW5jbHVk
ZS9iaXRzL3dhaXRzdGF0dXMuaCIgMiAzCgp1bmlvbiB3YWl0CiAgewogICAgaW50IHdfc3RhdHVz
OwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7
CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGlu
dCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0g
X193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBp
bnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAg
ICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsK
IyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyA5MyAiL3Vzci9pbmNsdWRlL3N0ZGxp
Yi5oIiAzCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAg
fSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9u
ZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVj
dAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0g
bGxkaXZfdDsKCgojIDEzNyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBzaXplX3Qg
X19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91Ymxl
IGF0b2YgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29u
c3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoK
CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIg
Kl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpl
eHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZmxvYXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQg
bG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBs
b25nIGludCBzdHJ0b3EgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jh
c2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxv
bmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKCiMgMjI5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Mp
IHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWxfbCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRl
bnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGRvdWJsZSBzdHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl
X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc3RydG9mX2wgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxv
bmcgZG91YmxlIHN0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CiMgNDA4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMjkgIi91
c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9j
aGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVf
aW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5
cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0
eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0
eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwojIDcy
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoK
Cgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwojIDEwNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CiMgMTE2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz
LmgiIDMKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJf
dDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTQxICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDMKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0
OCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25n
IGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgdXNob3J0Owp0eXBlZGVmIHVu
c2lnbmVkIGludCB1aW50OwojIDE5NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0
ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0
ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNiAiL3Vzci9p
bmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAz
CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zZWxlY3QuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKIyA0NiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjcgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMwpzdHJ1Y3QgdGltZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNv
bmRzX3QgdHZfdXNlYzsKICB9OwojIDQ3ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMK
IyA1NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIGxvbmcgaW50IF9fZmRf
bWFzazsKIyA2NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwp0eXBlZGVmIHN0cnVjdAog
IHsKCgoKICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFz
aykpXTsKCgoKCgogIH0gZmRfc2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwoj
IDk5ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRl
cm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywK
ICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAg
ICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAg
ICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3Jl
YWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMs
CiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVv
dXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3Np
Z21hc2spIHRocm93ICgpOwoKCn0KIyAyMTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAz
CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMjAgIi91c3IvaW5j
bHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsK
CgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRf
dCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1OCAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0
X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxj
bnQ2NF90IGZzZmlsY250NjRfdDsKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0
eXBlcy5oIiAxIDMKIyAyNjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKfQojIDQx
NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRv
bSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9f
c2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50
IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9f
c3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50
MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGlu
dCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQz
Ml90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2Rh
dGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVk
IGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJu
IGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBf
X3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0
YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0
cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cg
KCk7CgpleHRlcm4gdm9pZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBl
cmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQgbnJhbmQ0
OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpyYW5kNDggKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFu
ZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWduZWQgc2hvcnQg
aW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRocm93ICgpOwpl
eHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgdGhyb3cg
KCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNob3J0IGludCBf
X3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVuc2lnbmVkIHNo
b3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAgdW5zaWduZWQg
bG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAoc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZXJhbmQ0OF9y
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
bHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAg
ICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgp
OwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpf
X3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVz
dHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQg
c2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0
OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp
bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3JhbmQ0OF9y
IChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKQogICAg
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2Vl
ZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19i
dWZmZXIpIHRocm93ICgpOwoKCgoKCgoKCgpleHRlcm4gdm9pZCAqbWFsbG9jIChzaXplX3QgX19z
aXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQg
KmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2
b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pMzg2LWxpbnV4LzMuMi4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2
ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZv
aWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU3NyAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3Np
emUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50
IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6
ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25v
cmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9f
c3RhdHVzLCB2b2lkICpfX2FyZyksIHZvaWQgKl9fYXJnKQogICAgIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X25vcmV0dXJuX18pKTsKCgoKCgoKZXh0ZXJuIHZvaWQgX0V4aXQgKGludCBfX3N0YXR1cykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgpleHRlcm4gY2hhciAq
Z2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
X19zZWN1cmVfZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBwdXRlbnYgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50
IHNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUsIF9fY29uc3QgY2hhciAqX192YWx1ZSwgaW50
IF9fcmVwbGFjZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHVuc2V0ZW52IChfX2NvbnN0
IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgY2xlYXJlbnYgKHZvaWQp
IHRocm93ICgpOwojIDY2MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpt
a3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBta3N0
ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NzggIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7
CiMgNjg4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNo
YXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0
IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2Fs
aXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDcxMiAiL3Vz
ci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3Ry
aWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2Zu
X3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJf
Zm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoKCmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0
IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQgKl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsK
CgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVf
dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoK
ZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50
IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRl
cm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9fbnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBl
eHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBsb25nIGludCBfX251bWVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKIyA3NzYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdj
dnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVz
dHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBf
X3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAq
cWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAg
ICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9y
IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAg
ICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQs
CiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwg
c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWJsZW4gKF9fY29uc3Qg
Y2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1idG93YyAod2No
YXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2N0b21i
IChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
bWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2NzLCBzaXplX3Qg
X19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj
aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4NTggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MwpleHRlcm4gaW50IGdldHN1Ym9wdCAoY2hhciAqKl9fcmVzdHJpY3QgX19vcHRpb25wLAogICAg
ICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCAqX19yZXN0cmljdCBfX3Rva2VucywKICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fdmFsdWVwKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gdm9pZCBzZXRrZXkgKF9fY29uc3QgY2hhciAqX19rZXkpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgZ3JhbnRwdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IHVubG9ja3B0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAo
aW50IF9fZmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0c25hbWVfciAoaW50IF9fZmQs
IGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZ2V0
cHQgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGdldGxvYWRhdmcgKGRvdWJsZSBf
X2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIHRocm93ICgpOwoKCgoKCn0KIyA1MyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCiMgODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NzdGRs
aWIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsK
CiAgdXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2lu
ZyA6OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFy
Y2g7CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVz
aW5nIDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjps
ZGl2OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3dj
czsKICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1
c2luZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2lu
ZyA6OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcg
Ojp3Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBf
X2kpIHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19p
LCBsb25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvY3N0ZGxpYiIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6Omxs
ZGl2X3Q7CiAgdXNpbmcgOjpfRXhpdDsKCiAgaW5saW5lIGxvbmcgbG9uZwogIGFicyhsb25nIGxv
bmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxvbmcg
bG9uZwogIGxsYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9f
eDsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19k
KQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUg
X19kOyByZXR1cm4gX19xOyB9CgogIGlubGluZSBsbGRpdl90CiAgbGxkaXYobG9uZyBsb25nIF9f
biwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsg
X19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICB1c2luZyA6OmF0b2xsOwogIHVz
aW5nIDo6c3RydG9mOwogIHVzaW5nIDo6c3RydG9sbDsKICB1c2luZyA6OnN0cnRvdWxsOwogIHVz
aW5nIDo6c3RydG9sZDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRp
dl90OwogIHVzaW5nIF9fZ251X2N4eDo6X0V4aXQ7CiAgdXNpbmcgX19nbnVfY3h4OjphYnM7CiAg
dXNpbmcgX19nbnVfY3h4OjpsbGFiczsKICB1c2luZyBfX2dudV9jeHg6OmRpdjsKICB1c2luZyBf
X2dudV9jeHg6OmxsZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6YXRvbGw7CiAgdXNpbmcgX19nbnVf
Y3h4OjpzdHJ0b2Y7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xsOwogIHVzaW5nIF9fZ251X2N4
eDo6c3RydG91bGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b2xkOwp9CiMgNjggIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9uZXciIDEgMwojIDQyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9uZXciIDMKIyAxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb24iIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgog
IGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBleGNlcHRpb24oKSB0aHJvdygpIHsg
fQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsKCgogICAgdmlydHVhbCBjb25zdCBj
aGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGJhZF9leGNlcHRpb24g
OiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF9leGNlcHRpb24oKSB0aHJv
dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAg
dHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1
bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0
ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRy
aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4
cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgp
IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5OCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvZXhjZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9Cgpu
YW1lc3BhY2UgX19nbnVfY3h4CnsKIyAxMTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlv
biIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgpOwp9Cgp9CiMgNDMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL25ldyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0
ZAp7CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRo
cm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhy
b3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19o
YW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsKfQojIDc5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9uZXciIDMKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0
aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkg
dGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIHRocm93
KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIHRocm93KCk7CnZvaWQqIG9wZXJhdG9y
IG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkKiBv
cGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp
Owp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYp
IHRocm93KCk7CgoKaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCog
X19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQppbmxpbmUgdm9pZCogb3BlcmF0b3IgbmV3W10o
c3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7IHJldHVybiBfX3A7IH0KCgppbmxpbmUg
dm9pZCBvcGVyYXRvciBkZWxldGUgKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07CmlubGluZSB2
b2lkIG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqLCB2b2lkKikgdGhyb3coKSB7IH07Cgp9CiMgNzAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lv
c2Z3ZCIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQK
ewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7Cgog
IHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dp
Y19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
b3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJm
bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVy
ZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc2Z3ZCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvczsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg
ICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNp
Y19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxs
b2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1l
IF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29mc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog
ICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBiYXNpY19p
b3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVhbWJ1ZjsK
ICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29z
dHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+IGlvc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0eXBlZGVm
IGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj
X29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmlu
Z3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXI+
IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsKICB0eXBl
ZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVh
bTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0
eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2No
YXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBl
ZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNp
Y19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2No
YXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0KIyA3MSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcGFpci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfcGFpci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCnRlbXBsYXRlIDxjbGFz
cyBfVDEsIGNsYXNzIF9UMj4Kc3RydWN0IHBhaXIgewogIHR5cGVkZWYgX1QxIGZpcnN0X3R5cGU7
CiAgdHlwZWRlZiBfVDIgc2Vjb25kX3R5cGU7CgogIF9UMSBmaXJzdDsKICBfVDIgc2Vjb25kOwoK
CgoKICBwYWlyKCkgOiBmaXJzdCgpLCBzZWNvbmQoKSB7fQoKCgoKICBwYWlyKGNvbnN0IF9UMSYg
X19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7fQoKCiAgdGVt
cGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxfVTEsIF9VMj4m
IF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVy
biBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICBy
ZXR1cm4gX194LmZpcnN0IDwgX195LmZpcnN0IHx8CiAgICAgICAgICghKF9feS5maXJzdCA8IF9f
eC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBf
VDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g
X195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3Bl
cmF0b3I+KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBf
X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0
IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKICByZXR1
cm4gIShfX3ggPCBfX3kpOwp9CiMgMTQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9w
YWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9U
MSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9U
MSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3Ry
YWl0cy5oIiAxIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy90eXBlX3RyYWl0cy5o
IiAzCiMgOTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwpzdHJ1
Y3QgX190cnVlX3R5cGUge307CnN0cnVjdCBfX2ZhbHNlX3R5cGUge307Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgdGhp
c19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTMgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9h
c3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCnRl
bXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaWduZWQgY2hhcj4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZh
dWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs
YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBzaG9ydD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGludD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw
ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBsb25nPiB7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4gewogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNf
UE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0czxf
VHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBz
dHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGNoYXI+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9J
c19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hv
cnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50PiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nIGxvbmc+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg
X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0lzX25vcm1hbF9p
dGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07CgoKbmFtZXNwYWNl
IF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29u
dGFpbmVyPiBjbGFzcyBfX25vcm1hbF9pdGVyYXRvcjsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgpzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvcjwg
X19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+ID4gewog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9Ob3JtYWw7Cn07CiMgNzMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMg
ODAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIg
MwogIHN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0
b3JfdGFnIHt9OwoKICBzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRf
aXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBw
dWJsaWMgZm9yd2FyZF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDAg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DYXRlZ29yeSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRGlz
dGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICAgdHlwZW5hbWUgX1BvaW50ZXIgPSBfVHAqLCB0
eXBlbmFtZSBfUmVmZXJlbmNlID0gX1RwJj4KICAgIHN0cnVjdCBpdGVyYXRvciB7CgogICAgICB0
eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVkZWYgX1RwIHZh
bHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CgogICAg
ICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVm
ZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAg
c3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
OjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAqPiB7CiAgICAg
IHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
ICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1Rw
JiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
aXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21fYWNjZXNz
X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBl
ZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5j
ZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3NCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2OCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDM5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMwojIDY5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKCgoKbmFtZXNwYWNl
IHN0ZAp7CnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogIGlubGluZSB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICBfX2Rp
c3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5w
dXRfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgd2hpbGUgKF9fZmly
c3QgIT0gX19sYXN0KSB7CiAgICAgICsrX19maXJzdDsgKytfX247CiAgICB9CiAgICByZXR1cm4g
X19uOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICBpbmxp
bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZl
cmVuY2VfdHlwZQogIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0
ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogIH0KIyAx
MTEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIg
Mwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogIHsKCiAgICBy
ZXR1cm4gX19kaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0
YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5j
ZSBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CgogICAKICAgIHdoaWxlIChfX24tLSkgKytf
X2k7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgdHlwZW5h
bWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRl
cmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVy
YXRvcl90YWcpCiAgewoKICAgCgogICAgaWYgKF9fbiA+IDApCiAgICAgIHdoaWxlIChfX24tLSkg
KytfX2k7CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24rKykgLS1fX2k7CiAgfQoKdGVtcGxhdGU8
dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5s
aW5lIHZvaWQKICBfX2FkdmFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yJiBfX2ksIF9EaXN0YW5j
ZSBfX24sCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogIHsKCiAgIAog
ICAgX19pICs9IF9fbjsKICB9CiMgMTY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9p
dGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3Is
IHR5cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIGFkdmFuY2UoX0lucHV0SXRlcmF0
b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKICB7CgogICAgX19hZHZhbmNlKF9faSwgX19uLCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwogIH0KCn0KIyA3NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfaXRlcmF0b3IuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBj
bGFzcyByZXZlcnNlX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjx0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90
ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBjdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgIHB1YmxpYzoKCgoKICAgICAgcmV2ZXJz
ZV9pdGVyYXRvcigpIHsgfQoKCgoKICAgICAgZXhwbGljaXQKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cihpdGVyYXRvcl90eXBlIF9feCkgOiBjdXJyZW50KF9feCkgeyB9CgoKCgogICAgICByZXZlcnNl
X2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3ImIF9feCkKICAgICAgOiBjdXJyZW50KF9f
eC5jdXJyZW50KSB7IH0KCgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAg
ICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXI+JiBfX3gpCiAg
ICAgICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHsgfQoKCgoKICAgICAgaXRlcmF0b3JfdHlwZQog
ICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQoKCgoKCgogICAgICByZWZlcmVu
Y2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QKICAgICAgewogICAgICAgIF9JdGVyYXRvciBfX3Rt
cCA9IGN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICotLV9fdG1wOwogICAgICB9CgoKCgoKCiAgICAg
IHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkp
OyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAg
ICB7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoK
CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAg
ICAgICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgIC0tY3VycmVudDsK
ICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3ItLSgpCiAgICAgIHsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Igb3BlcmF0
b3ItLShpbnQpCiAgICAgIHsKICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7
CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19u
KSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGN1cnJlbnQgLSBfX24pOyB9
CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oZGlmZmVyZW5j
ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJlbnQgLT0gX19uOwogICAgICAgIHJldHVy
biAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yLShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdAogICAgICB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGN1cnJlbnQgKyBfX24pOyB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGN1cnJl
bnQgKz0gX19uOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCgoKCgogICAgICByZWZl
cmVuY2UKICAgICAgb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19uKSBjb25zdCB7IHJldHVy
biAqKCp0aGlzICsgX19uKTsgfQogICAgfTsKIyAyNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpCiAgICB7IHJldHVybiBfX3guYmFzZSgpID09IF9feS5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25z
dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feS5iYXNlKCkg
PCBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eSkKICAgIHsgcmV0dXJuICEoX194ID09IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9y
PF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgIGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj49KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0
dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp
bmxpbmUgdHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUKICAgIG9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAg
IHsgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JdGVyYXRvcj4KICAgIGlubGluZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4KICAgIG9w
ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX24sCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3gpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2Uo
KSAtIF9fbik7IH0KIyAzMjcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNl
cnRfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZv
aWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWlu
ZXIqIGNvbnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29u
dGFpbmVyX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3Io
X0NvbnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTMgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAgICAgYmFja19pbnNlcnRfaXRlcmF0
b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2Ug
X192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwog
ICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0
X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBi
YWNrX2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7
IH0KICAgIH07CiMgMzg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBiYWNrX2luc2Vy
dF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gp
CiAgICB7IHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMg
Mzk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvcgog
ICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9pZCwgdm9p
ZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29udGFpbmVy
OwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsK
CgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194KSA6
IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X2l0ZXJhdG9yLmgiIDMKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
cj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsK
ICAgICAgICBjb250YWluZXItPnB1c2hfZnJvbnQoX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0
aGlzOwogICAgICB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRv
ciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyA0
NTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGZyb250X2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPgogICAgZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1
cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9feCk7IH0KIyA0NzAgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVy
YXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewog
ICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1l
IF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBf
Q29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoKCiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29u
dGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBj
b250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQojIDUxMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1ZSkK
ICAgICAgewogICAgICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsK
ICAgICAgICArK2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgaW5z
ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAg
IGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRo
aXM7IH0KICAgIH07CiMgNTQ0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv
ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lciwgdHlwZW5hbWUgX0l0ZXJhdG9y
PgogICAgaW5saW5lIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPgogICAgaW5zZXJ0ZXIoX0Nv
bnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQogICAgewogICAgICByZXR1cm4gaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvcihfX2kpKTsKICAgIH0KfQoKbmFt
ZXNwYWNlIF9fZ251X2N4eAp7CgoKCgoKCgogIHVzaW5nIHN0ZDo6aXRlcmF0b3JfdHJhaXRzOwog
IHVzaW5nIHN0ZDo6aXRlcmF0b3I7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBl
bmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgOiBwdWJs
aWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJhdG9y
X2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpyZWZlcmVuY2U+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9JdGVyYXRvciBf
TV9jdXJyZW50OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJl
bmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0
ZXJhdG9yPjo6cG9pbnRlciBwb2ludGVyOwoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IoKSA6IF9N
X2N1cnJlbnQoX0l0ZXJhdG9yKCkpIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgX19ub3JtYWxf
aXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3VycmVudChfX2kpIHsgfQoKCiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICBpbmxpbmUgX19ub3JtYWxfaXRlcmF0
b3IoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXIsIF9Db250YWluZXI+JiBfX2kpCiAgICAg
ICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiAqX01fY3VycmVudDsgfQoKICAgICAgcG9pbnRlcgog
ICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQoKICAgICAgX19u
b3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJu
ICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkg
eyByZXR1cm4gX19ub3JtYWxfaXRlcmF0b3IoX01fY3VycmVudCsrKTsgfQoKCiAgICAgIF9fbm9y
bWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci0tKCkgeyAtLV9NX2N1cnJlbnQ7IHJldHVybiAq
dGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItLShpbnQpIHsg
cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQtLSk7IH0KCgogICAgICByZWZlcmVu
Y2UKICAgICAgb3BlcmF0b3JbXShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3IrPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikKICAgICAgeyBfTV9j
dXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25vcm1hbF9pdGVyYXRvcgog
ICAgICBvcGVyYXRvcisoY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogICAgICBfX25v
cm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItPShjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9f
bikKICAgICAgeyBfTV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfX25v
cm1hbF9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24p
OyB9CgogICAgICBjb25zdCBfSXRlcmF0b3ImCiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBf
TV9jdXJyZW50OyB9CiAgICB9OwojIDY0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
aXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09
KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK
ICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWlu
ZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxp
bmUgYm9vbAogIG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0g
X19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRv
ciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo
cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBp
bmxpbmUgYm9vbAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg
IT0gX19yaHMuYmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBl
bmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3Bl
cmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBf
X2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAg
aW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9y
LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRv
cjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkg
PCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19s
aHMsCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250
YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBib29sCiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwg
X0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf
SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBf
X3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUg
X0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9y
PD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhz
LAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRh
aW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu
bGluZSBib29sCiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8
PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5h
bWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJh
dG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog
IGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJh
dG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2Uo
KSA+PSBfX3Jocy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckws
IHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVu
YW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNl
X3R5cGUKICBvcGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0Nv
bnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0
ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9f
cmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9D
b250YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l
cj4KICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxf
aXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFs
X2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQoj
IDc2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1l
c3BhY2Ugc3RkCnsKIyA5MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBf
Rm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBf
X3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9
CiMgMTE4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9U
cCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0g
X19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp
bmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAg
IHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwog
ICAgfQojIDE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2Eg
PCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTg2ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1Rw
JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAo
X19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1h
eChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAg
fQojIDIyMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s
aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9f
Y29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vz
c19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFu
Y2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7
IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0
OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X3Ry
aXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3Vs
dCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKF9UcCkgKiAo
X19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19m
aXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4MihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBf
X2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu
ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVf
dHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAqIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4g
X19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNvbnN0IF9UcCog
X19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgICAgIHJl
dHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRw
dXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK
ICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w
eV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9y
bWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2Uo
KSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAg
X19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFs
IF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv
cjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkx
KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2Fy
ZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdo
aWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsK
ICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRp
cmVjdGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0
IC0gX19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xh
c3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAg
ICAgICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rp
c3BhdGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHko
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwK
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAg
cmV0dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsK
ICAgICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAg
bWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAg
ICAgICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBf
VHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29w
eShjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQog
ICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAq
LCBfX3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ
Mj4KICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwg
X0JJMSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJ
MSwgX0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1l
IF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxf
aXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyBy
ZXR1cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQu
YmFzZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAg
ICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3Io
X0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9f
Y29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19j
b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz
dWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFs
X2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2Jh
Y2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNl
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0
eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u
b3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9O
b3JtYWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1h
bF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgY29weV9i
YWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KQogICAgewoK
ICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0
ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgp
KTsKICAgIH0KIyA1MDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv
aWQKICAgIGZpbGwoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNv
bnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUz
MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNv
bnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0t
X19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgICByZXR1cm4g
X19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5zaWduZWQgY2hhciogX19m
aXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAg
ewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBfX3Rt
cCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAogIGZpbGwoc2lnbmVkIGNo
YXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2Mp
CiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKICB9Cgog
IGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBfX2xhc3QsIGNvbnN0IGNo
YXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1bnNpZ25lZCBjaGFyKgogICAg
ZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgdW5zaWduZWQg
Y2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
U2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBf
U2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJz
dCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIGNoYXIqCiAgICBmaWxsX24o
Y2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2MpCiAgICB7CiAgICAgIGZp
bGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmlyc3QgKyBf
X247CiAgICB9CiMgNjA2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy
PgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hp
bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAg
ICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4g
cGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9
CiMgNjQwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAg
ICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRp
Y2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7
CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJl
dHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsK
ICAgIH0KIyA2NjggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAg
ICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0
MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAg
ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoK
ICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3Qy
KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQojIDczMiAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAg
ICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8
ICpfX2ZpcnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4g
X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZv
ciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAg
ICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9fY29t
cCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsK
ICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNp
Z25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg
dW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0gX19s
YXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2Zp
cnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJzdDIs
IG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3Vs
dCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dyYXBo
aWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFy
KiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoK
ICB9Cgp9CiMgNTUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODggIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jYXNz
ZXJ0IiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0
ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fz
c2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3Nl
cnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lk
IF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBp
bnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsK
Cgp9CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Nhc3NlcnQiIDIgMwojIDg5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9leGNlcHRpb25f
ZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9u
KHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9f
dGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19s
ZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29u
c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsK
CiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2
b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgOTAgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZj
b3VudF9CYXNlCiAgewoKICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBf
UkNfdCBfTV9yZWZfY291bnQ7CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9s
b2NrOwoKICAgIF9SZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQog
ICAgewoKICAgICAgX19ndGhyZWFkX211dGV4X3QgX190bXAgPSB7MCwgMCwgMCwgUFRIUkVBRF9N
VVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9fdG1w
OwoKCgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3RocmVh
ZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50Owog
ICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9Cgog
ICAgX1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygm
X01fcmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01fcmVm
X2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7
CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1
Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAgIHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3
YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhf
dAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IHswLCAwLCAw
LCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CgoKCiAgaW5saW5lIHVuc2lnbmVk
IGxvbmcKICBfQXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBf
X3EpCiAgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+Ojpf
U19zd2FwX2xvY2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19w
ID0gX19xOwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46
Ol9TX3N3YXBfbG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQojIDE1MSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfbXV0ZXhfbG9j
awogIHsKCgoKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fbG9jazsKCiAgICB2b2lkCiAgICBf
TV9pbml0aWFsaXplKCkKICAgIHsKIyAxODQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7
CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lk
CiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExfYXV0b19sb2NrCiAgewogICAgX1NUTF9t
dXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0b19sb2NrKF9TVExfbXV0ZXhfbG9jayYg
X19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBfTV9sb2NrLl9NX2FjcXVpcmVfbG9jaygp
OyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9sb2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9
CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9fbG9jayYpOwog
ICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRvX2xvY2smKTsKICB9OwoKfQojIDkxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50
IF9BdG9taWNfd29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18g
KChfX3VudXNlZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQg
Kl9fbWVtLCBpbnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAg
X19hc21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAg
ICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIg
KF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIp
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18g
KChfX3VudXNlZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVt
LCBpbnQgX192YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEi
CiAgICAgICAgICAgICAgICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6
ICJtZW1vcnkiKTsKfQojIDkzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDEwNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxsb2MuaCIgMwogIGNsYXNzIF9fbmV3X2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRp
YyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDo6b3BlcmF0b3Ig
bmV3KF9fbik7IH0KCiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp
emVfdCkKICAgIHsgOjpvcGVyYXRvciBkZWxldGUoX19wKTsgfQogIH07CiMgMTI3ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8aW50IF9faW5zdD4K
ICAgIGNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAg
ICBzdGF0aWMgdm9pZCogX1Nfb29tX21hbGxvYyhzaXplX3QpOwoKCiAgICAgIHN0YXRpYyB2b2lk
KiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKCiAgICAgIHN0YXRpYyB2b2lkICgqIF9f
bWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZv
aWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jl
c3VsdCA9IG1hbGxvYyhfX24pOwogICAgICAgIGlmIChfX2J1aWx0aW5fZXhwZWN0KF9fcmVzdWx0
ID09IDAsIDApKQogICAgICAgICAgX19yZXN1bHQgPSBfU19vb21fbWFsbG9jKF9fbik7CiAgICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBkZWFs
bG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90ICkKICAgICAgeyBmcmVlKF9fcCk7IH0KCgogICAgICBz
dGF0aWMgdm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBf
X25ld19zeikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9f
bmV3X3N6KTsKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3Jlc3VsdCA9PSAwLCAwKSkK
ICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CgogICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9t
YWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSkoKQogICAgICB7CiAgICAgICAgdm9pZCAoKiBf
X29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQogICAg
fTsKCgogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX3Rl
bXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyKSgpID0gMDsKCiAgdGVt
cGxhdGU8aW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+OjoKICAgIF9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAo
KiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZv
ciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9j
X2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19teV9t
YWxsb2NfaGFuZGxlciA9PSAwLCAwKSkKICAgICAgICAgICAgX190aHJvd19iYWRfYWxsb2MoKTsK
ICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0g
bWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9p
ZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46OgogICAgX1Nfb29tX3JlYWxs
b2Modm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAgICB2b2lkICgqIF9fbXlfbWFsbG9j
X2hhbmRsZXIpKCk7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgICAgZm9yICg7OykKICAgICAg
ICB7CiAgICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hh
bmRsZXI7CiAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX215X21hbGxvY19oYW5kbGVy
ID09IDAsIDApKQogICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpf
X215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwg
X19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0
OwogICAgICAgIH0KICAgIH0KCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNl
OwojIDIyOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19zaW1wbGVfYWxs
b2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6
ZV90IF9fbikKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwogICAgICAgIGlmIChfX24p
CiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19u
ICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHN0
YXRpYyBfVHAqCiAgICAgIGFsbG9jYXRlKCkKICAgICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6
YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxv
Y2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAhPSBfX24pIF9BbGxvYzo6
ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lk
CiAgICAgIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f
cCwgc2l6ZW9mIChfVHApKTsgfQogICAgfTsKIyAyNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBf
X2RlYnVnX2FsbG9jCiAgICB7CiAgICBwcml2YXRlOgoKCiAgICAgIGVudW0ge19TX2V4dHJhID0g
OH07CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90
IF9fbikKICAgICAgewogICAgICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxs
b2NhdGUoX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9
IF9fbjsKICAgICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICAgICAgfQoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CiAgICAgIHsKICAgICAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBfU19l
eHRyYTsKICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0g
X19uKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI5MSwgX19QUkVUVFlfRlVO
Q1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g
KyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgcmVh
bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogICAg
ICB7CiAgICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7
CiAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xk
X3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9z
eiIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiwgMzAwLCBfX1BSRVRU
WV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikgX0Fs
bG9jOjpyZWFsbG9jYXRlKF9fcmVhbF9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19vbGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3N6ICsgKGlu
dCkgX1NfZXh0cmEpOwogICAgICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3X3N6OwogICAg
ICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9TX2V4dHJhOwogICAgICB9CiAgICB9OwojIDM0
MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAgICAgZW51
bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRF
UyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAgICAgIHsKICAgICAgICB1bmlvbiBfT2Jq
KiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAg
ICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNU
U107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFy
KiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVfdCBfU19oZWFwX3NpemU7CgogICAgICBz
dGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgICBzdGF0
aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVy
biAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0g
MSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX2ZyZWVsaXN0X2luZGV4KHNpemVf
dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpX0FMSUdOIC0g
MSkvKHNpemVfdClfQUxJR04gLSAxKTsgfQoKCgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgX1Nf
cmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgICBzdGF0aWMgY2hhcioKICAgICAgX1NfY2h1bmtf
YWxsb2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgICAgc3RydWN0IF9Mb2Nr
CiAgICAgIHsKICAgICAgICBfTG9jaygpIHsgaWYgKF9fdGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0
b3JfbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogICAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhy
ZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgICB9
IF9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSk7CiAgICAgIGZyaWVuZCBzdHJ1Y3QgX0xvY2s7
CgogICAgICBzdGF0aWMgX0F0b21pY193b3JkIF9TX2ZvcmNlX25ldzsKCiAgICBwdWJsaWM6Cgog
ICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAg
ICAgIHZvaWQqIF9fcmV0ID0gMDsKCgoKCiAgICAgICAgaWYgKF9TX2ZvcmNlX25ldyA9PSAwKQog
ICAgICAgICAgewogICAgICAgICAgICBpZiAoZ2V0ZW52KCJHTElCQ1BQX0ZPUkNFX05FVyIpKQog
ICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAxKTsKICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgIF9fYXRvbWljX2FkZCgmX1NfZm9yY2VfbmV3LCAtMSk7CgogICAg
ICAgICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKChfU19mb3JjZV9uZXcgIT0gMCkgPyAwIDogKF9f
YXNzZXJ0X2ZhaWwgKCJfU19mb3JjZV9uZXcgIT0gMCIsICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGxvYy5oIiwgNDA5LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAg
ICAgIH0KCiAgICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9y
Y2VfbmV3ID4gMCkpCiAgICAgICAgICBfX3JldCA9IF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX24p
OwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9f
bXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9p
bmRleChfX24pOwoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAg
ICAgIF9PYmoqIF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg
ICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19yZXN1bHQgPT0gMCwgMCkpCiAgICAgICAgICAg
ICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3Vs
dCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7
CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX3JldCA9
PSAwLCAwKSkKICAgICAgICAgICAgICBfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgfQog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgaWYgKChfX24g
PiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBf
X25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAg
ewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICAgIF9P
YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu
Y2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlz
dDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgICAgfQogICAgICB9
CgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3Qg
X19vbGRfc3osIHNpemVfdCBfX25ld19zeik7CiAgICB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhy
ZWFkcywgaW50IF9faW5zdD4gX0F0b21pY193b3JkCiAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZm9yY2VfbmV3ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z
dCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mLAogICAgICAgICAg
ICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD4mKQog
ICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsg
fQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgog
ICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6CiAgICBfU19j
aHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpCiAgICB7CiAgICAgIGNoYXIq
IF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7
CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7
CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxfYnl0ZXMpCiAgICAgICAgewogICAg
ICAgICAgX19yZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSAr
PSBfX3RvdGFsX2J5dGVzOwogICAgICAgICAgcmV0dXJuIF9fcmVzdWx0IDsKICAgICAgICB9CiAg
ICAgIGVsc2UgaWYgKF9fYnl0ZXNfbGVmdCA+PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAg
X19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAgICAgX190b3RhbF9i
eXRlcyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2Zy
ZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgICBy
ZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAg
c2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90YWxfYnl0ZXMgKyBf
U19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYgKF9fYnl0ZXNfbGVm
dCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9m
cmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5k
ZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAt
PiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAqX19t
eV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgICAgfQogICAgICAg
ICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNf
dG9fZ2V0KTsKICAgICAgICAgIGlmIChfU19zdGFydF9mcmVlID09IDApCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBf
X215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2JqKiBfX3A7CgoKCiAgICAgICAgICAgICAg
X19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAoOyBfX2kgPD0gKHNpemVfdCkgX01BWF9C
WVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRl
eChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAg
ICAgICAgICAgIGlmIChfX3AgIT0gMCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJlZV9saXN0X2xpbms7CiAg
ICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fcDsKICAgICAgICAg
ICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpOwoKCiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gMDsKICAgICAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKV9fbmV3X2Fs
bG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAgICAgICAgICAgfQogICAgICAgICAg
X1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgICAgX1NfZW5kX2ZyZWUgPSBf
U19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAgICAgICByZXR1cm4gX1NfY2h1bmtf
YWxsb2MoX19zaXplLCBfX25vYmpzKTsKICAgICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxi
b29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsK
ICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAgICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2Fs
bG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsK
ICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9P
YmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBfX2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKQog
ICAgICAgIHJldHVybiBfX2NodW5rOwogICAgICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlz
dCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19j
aHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVu
ayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykKICAgICAgICB7CiAgICAgICAg
ICBfX2N1cnJlbnRfb2JqID0gX19uZXh0X29iajsKICAgICAgICAgIF9fbmV4dF9vYmogPSAoX09i
aiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICAgIGlmIChfX25vYmpzIC0gMSA9
PSBfX2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2Zy
ZWVfbGlzdF9saW5rID0gMDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5r
ID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoK
ICB0ZW1wbGF0ZTxib29sIHRocmVhZHMsIGludCBpbnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6CiAgICByZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQqIF9f
cmVzdWx0OwogICAgICBzaXplX3QgX19jb3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4gKHNp
emVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg
ICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19zeikpOwogICAgICBpZiAoX1Nfcm91bmRfdXAo
X19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkKICAgICAgICByZXR1cm4oX19wKTsK
ICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25ld19zeik7CiAgICAgIF9fY29weV9zeiA9IF9f
bmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jl
c3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBkZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwog
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBp
bnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxsb2NhdG9yX2xvY2sKICAgID0geyB7MCwg
MCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgogIHRlbXBsYXRlPGJv
b2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBs
YXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9v
bCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBf
X3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl
PF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9f
dGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0
ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUKICAgIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCiAg
dHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPiBfX2FsbG9jOwogIHR5cGVk
ZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLDA+IF9fc2luZ2xlX2NsaWVudF9hbGxv
YzsKIyA2NDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBhbGxvY2F0b3IKICAgIHsKICAgICAgdHlwZWRl
ZiBfX2FsbG9jIF9BbGxvYzsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90
eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RwKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAmIGNv
bnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmluZAogICAgICAgIHsgdHlwZWRl
ZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CgogICAgICBhbGxvY2F0b3IoKSB0aHJvdygpIHt9
CiAgICAgIGFsbG9jYXRvcihjb25zdCBhbGxvY2F0b3ImKSB0aHJvdygpIHt9CiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAx
PiYpIHRocm93KCkge30KICAgICAgfmFsbG9jYXRvcigpIHRocm93KCkge30KCiAgICAgIHBvaW50
ZXIKICAgICAgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9Cgog
ICAgICBjb25zdF9wb2ludGVyCiAgICAgIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29u
c3QgeyByZXR1cm4gJl9feDsgfQoKCgogICAgICBfVHAqCiAgICAgIGFsbG9jYXRlKHNpemVfdHlw
ZSBfX24sIGNvbnN0IHZvaWQqID0gMCkKICAgICAgewogICAgICAgIF9UcCogX19yZXQgPSAwOwog
ICAgICAgIGlmIChfX24pCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfX24gPD0gdGhpcy0+
bWF4X3NpemUoKSkKICAgICAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxv
Yzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKTsKICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgIF9fdGhyb3dfYmFkX2FsbG9jKCk7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9f
cmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz
aXplX3R5cGUgX19uKQogICAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVv
ZihfVHApKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgdGhyb3co
KSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICAgIHZvaWQgY29uc3Ry
dWN0KHBvaW50ZXIgX19wLCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7
IH0KICAgICAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBhbGxvY2F0b3I8dm9pZD4KICAgIHsKICAgIHB1Ymxp
YzoKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdm9pZCogcG9pbnRlcjsKICAgICAgdHlw
ZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgc3RydWN0IHJlYmlu
ZAogICAgICAgIHsgdHlwZWRlZiBhbGxvY2F0b3I8X1RwMT4gb3RoZXI7IH07CiAgICB9OwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfVDI+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I9PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikK
ICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBf
VDI+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBhbGxvY2F0b3I8X1QxPiYs
IGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgNzQzICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3IKICAgIHsKICAgICAg
X0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgICAgIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlw
ZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVm
IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAg
ICAgIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwJiBjb25z
dF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIHN0cnVjdCByZWJpbmQKICAgICAgICB7IHR5cGVkZWYg
X19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsgfTsKCiAgICAgIF9fYWxsb2NhdG9yKCkg
dGhyb3coKSB7fQogICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvciYgX19hKSB0aHJv
dygpCiAgICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9
CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIF9fYWxsb2NhdG9yKGNvbnN0
IF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgICAgIDogX191bmRl
cmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CgogICAgICB+X19hbGxvY2F0
b3IoKSB0aHJvdygpIHt9CgogICAgICBwb2ludGVyCiAgICAgIGFkZHJlc3MocmVmZXJlbmNlIF9f
eCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKICAgICAgY29uc3RfcG9pbnRlcgogICAgICBhZGRy
ZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICAgICAg
X1RwKgogICAgICBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApCiAgICAg
IHsKICAgICAgICBfVHAqIF9fcmV0ID0gMDsKICAgICAgICBpZiAoX19uKQogICAgICAgICAgX19y
ZXQgPSBzdGF0aWNfY2FzdDxfVHAqPihfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHAp
KSk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBkZWFs
bG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgICB7IF9fdW5kZXJseWluZ19h
bGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBz
aXplb2YoX1RwKTsgfQoKICAgICAgdm9pZAogICAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNv
bnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQoKICAgICAgdm9pZAogICAg
ICBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgog
ICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0
eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1
ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmVi
aW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBf
X2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikK
ICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+
JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9f
YTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJs
eWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQogICAgeyBy
ZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4mKQogICAgeyBy
ZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0
dXJuIGZhbHNlOyB9CiMgODk2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgc3Ry
dWN0IF9BbGxvY190cmFpdHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gZmFsc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6dGVtcGxh
dGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2NhdG9yPgogICAgY29uc3QgYm9vbCBfQWxsb2Nf
dHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMT4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwg
YWxsb2NhdG9yPF9UcDE+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFu
Y2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+
IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHA+IGFsbG9jYXRvcl90eXBl
OwogICAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBpbnQgX19pbnN0PgogICAgc3Ry
dWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAg
ICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9f
aW5zdD4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFs
bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiA+CiAgICAgIF9BbGxvY190eXBlOwogICAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFk
cywgX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAs
IF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9T
X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9j
YXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgaW50IF9faW5zdD4K
ICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YWxsb2NhdG9yPF9UcDEsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgICAgIHR5
cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+
ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CiAg
ICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0PiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxv
YzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgX0Fs
bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2Nf
dGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgIGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fYWxsb2NhdG9yPF9UcDEsIF9fZGVidWdfYWxs
b2M8X0FsbG9jPiA+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs
ZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVidWdfYWxs
b2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwg
X19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoKCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgYWxsb2NhdG9yPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRf
YWxsb2NfdGVtcGxhdGU8dHJ1ZSwwPjsKfQojIDU2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1v
cnkiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAx
IDMKIyA2NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAg
aW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkK
ICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoK
CgogIHRlbXBsYXRlIDxjbGFzcyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChf
VDEqIF9fcCkKICAgIHsgbmV3IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5
OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lf
YXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9f
ZmFsc2VfdHlwZSkKICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBf
RGVzdHJveSgmKl9fZmlyc3QpOyB9CiMgMTEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAg
aW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJ
dGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3Bv
aW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29u
c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu
ZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9W
YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5
cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190
cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg
X0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA1NyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvbWVtb3J5IiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5p
bml0aWFsaXplZC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIK
ICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgcmV0
dXJuIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKQogICAgewogICAg
ICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgICAgICBfQ29u
c3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0K
ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fcmVzdWx0LCBf
X2N1cik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTA2ICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJ
dGVyCiAgICB1bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9E
X3R5cGUgX0lzX1BPRDsKICAgICAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwogICAgfQoKICBpbmxpbmUgY2hhcioK
ICB1bmluaXRpYWxpemVkX2NvcHkoY29uc3QgY2hhciogX19maXJzdCwgY29uc3QgY2hhciogX19s
YXN0LCBjaGFyKiBfX3Jlc3VsdCkKICB7CiAgICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBf
X2xhc3QgLSBfX2ZpcnN0KTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0
KTsKICB9CgogIGlubGluZSB3Y2hhcl90KgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCB3Y2hh
cl90KiBfX2ZpcnN0LCBjb25zdCB3Y2hhcl90KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QqIF9fcmVzdWx0KQogIHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIHNp
emVvZih3Y2hhcl90KSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgICByZXR1cm4gX19yZXN1bHQg
KyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9m
aWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCiAgICB7
IGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxf
YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9y
ICggOyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgICAgICBfQ29uc3RydWN0KCYqX19j
dXIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E
ZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0K
IyAxNjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IHZvaWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0Rf
dHlwZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19s
YXN0LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194
LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9f
eCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1Np
emUsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2Zp
bGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICgg
OyBfX24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwg
X194KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAg
ICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93
OwogICAgICAgIH0KICAgIH0KIyAyMTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3Vu
aW5pdGlhbGl6ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9U
cCYgX194KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y
d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X190eXBlX3RyYWl0czxfVmFsdWVUeXBlPjo6aXNfUE9EX3R5cGUgX0lzX1BPRDsKICAgICAgcmV0
dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9fZmlyc3QsIF9fbiwgX194LCBfSXNfUE9E
KCkpOwogICAgfQojIDIyNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFs
aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAg
ICBfX3VuaW5pdGlhbGl6ZWRfY29weV9jb3B5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBf
X2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQg
PSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAg
dHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBfX21pZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9E
ZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBl
bmFtZSBfSW5wdXRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxp
emVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9Gb3J3YXJkSXRlciBfX21pZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAg
ICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg
X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2Nv
cHlfZmlsbChfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQog
ICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19taWQyID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmly
c3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHRyeSB7CiAgICAgICAgdW5pbml0aWFsaXpl
ZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAg
ICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdDIsIF9fbWlkMik7CiAgICAgICAgICB0
aHJvdzsKICAgICAgICB9CiAgICB9Cgp9CiMgNTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9y
eSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRl
ci5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3JhZ2Vf
aXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yCiAgICA6IHB1
YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lk
PgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9NX2l0ZXI7Cgog
ICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcihfRm9y
d2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJhd19zdG9yYWdlX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoKICAgICAgcmF3X3N0
b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fZWxlbWVudCkKICAg
ICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQpOwogICAgICAgIHJl
dHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJ
dGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICArK19NX2l0
ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVy
YXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7
CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBfX3Rt
cCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAg
IH0KICAgIH07Cn0KIyA2MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAyIDMKCgoKCm5h
bWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKdGVtcGxh
dGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9i
dWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIx
NDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2Yo
X1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6
Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICBpZiAoX190bXAg
IT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PihfX3RtcCwgX19sZW4pOwog
ICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oKF9UcCop
MCwgMCk7Cn0KIyAxMDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFy
eV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQogIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3Jhcnlf
YnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAgfQojIDEyMCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
bWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFy
eV9idWZmZXIoX1RwKiBfX3ApCiAgewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3Ry
dWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9f
cHRyX3JlZihfVHAxKiBfX3ApCiAgIDogX01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvaW5j
bHVkZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0
b19wdHIKewpwcml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgoKICB0eXBlZGVmIF9UcCBl
bGVtZW50X3R5cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBf
X3AgPSAwKSB0aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7IH0KIyAyMDIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9N
X3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91c3IvaW5jbHVkZS9jKysvMy4yL21lbW9y
eSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxfVHAx
PiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMjYgIi91
c3IvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyJgogIG9wZXJhdG9yPShhdXRv
X3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnki
IDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRyJgogICAgb3BlcmF0b3I9
KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAgcmVzZXQoX19hLnJlbGVh
c2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91c3IvaW5jbHVkZS9jKysv
My4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0cjsgfQojIDI3MyAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAgZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigp
IGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUq
CiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29u
c3QgdGhyb3coKSB7IHJldHVybiBfTV9wdHI7IH0KIyAzMDkgIi91c3IvaW5jbHVkZS9jKysvMy4y
L21lbW9yeSIgMwogIGVsZW1lbnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAg
ICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICBy
ZXR1cm4gX190bXA7CiAgICB9CiMgMzI0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMK
ICB2b2lkCiAgcmVzZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgICB7CiAgICAg
IGlmIChfX3AgIT0gX01fcHRyKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAg
ICAgICAgICBfTV9wdHIgPSBfX3A7CiAgICAgICAgfQogICAgfQojIDM0NSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4g
X19yZWYpIHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHIm
CiAgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAg
ICB7CiAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAg
ICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
MT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gYXV0b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7
IHJldHVybiBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh
c3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcgYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgYmluYXJ5X2Z1
bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBf
QXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7
Cn07CiMgMTI3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewog
IF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyBy
ZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRp
cGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3gg
KiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1bHVzIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z
dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7
CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0K
fTsKIyAxNzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194
IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBf
X3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9
OwojIDIyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsg
fQp9OwojIDI3MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4g
ewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5h
cnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29s
IG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194
KSBjb25zdCB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25z
dCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+
KF9fcHJlZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25l
Z2F0ZQogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJz
dF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJl
ZGljYXRlOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbD4gewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGlj
aXQgYmluYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3Vt
ZW50X3R5cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0
ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3By
ZWQoX194LCBfX3kpOwogIH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5l
IGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQp
CnsKICByZXR1cm4gYmluYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6
CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90
eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYg
X195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vj
b25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gp
OwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0
eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh
dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29u
c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmlu
ZGVyMXN0PF9PcGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rp
b248dHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0
ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1l
bnRfdHlwZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gs
CiAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90
eXBlJiBfX3kpCiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVy
YXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZh
bHVlKTsKICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9y
KCkodHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7
CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w
ZXJhdGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQo
Y29uc3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVu
YW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJu
IGJpbmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1
bHQgKCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigp
IHt9CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShf
QXJnKSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29u
c3QgeyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xh
c3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3Vs
dD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3Vu
YXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Fy
ZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9m
dW5jdGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7
CnByb3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoK
ICAgIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJf
dG9fYmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDog
X01fcHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9f
eSkgY29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9p
bnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVz
dWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1
bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
PgpzdHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBf
VHAmIG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9U
cCYgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1
bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9Q
YWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy
biBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy
YXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k
X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f
eC5zZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVu
Y3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVu
X3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNp
dCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpwcml2
YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNs
YXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNv
bnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQg
KF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShj
b25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToK
ICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19w
ZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7
IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVu
X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyByZXR1
cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg
bWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01f
ZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsg
cmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko
X0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1Rw
KixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAo
X1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io
KShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9m
dW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkgOiBf
TV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3Qg
eyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAs
X0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChfUmV0
IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRv
cigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZv
aWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAq
IF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90PHZv
aWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkg
OiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7
IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25zdDsK
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4g
OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l
bV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBv
cGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2
b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0
X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6Oipf
X3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9N
X2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3Mg
bWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAq
LF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19wLCBf
QXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U
cDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs
YXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9m
dW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3Rf
bWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9
CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAoX19w
LT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Jl
Zl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcs
dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19w
ZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0Fy
ZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6
Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1
bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9
OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3Q8
X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f
dDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5s
aW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkg
Y29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0LF9U
cD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5fcmVm
X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6
OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4o
X19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5s
aW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9B
cmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9m
dW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0
KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4x
X3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykp
CiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21lbV9m
dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0Fy
ZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4o
X19mKTsgfQoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMSAzCiMgNDQgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7
CiMgODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGNsYXNzIGJhc2ljX3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJf
dHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAg
IHR5cGVkZWYgX19nbnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxwb2ludGVyLCBiYXNpY19zdHJp
bmc+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRlcmF0b3I8
Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdF9pdGVyYXRvcjsKICAgICAgdHlw
ZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJh
dG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz
aWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVz
X2FsbG9jOwojIDE0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIg
MwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3Rh
dGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0
aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9N
X3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAog
ICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAg
ICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAw
OyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3Jl
ZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkK
ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBf
TV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0No
YXJUKj4odGhpcyArIDEpOyB9CgogICAgICAgIF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNp
emVfdCBfX3MpIHRocm93KCkKICAgICAgICB7IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0K
CiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwg
Y29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9p
c19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBf
TV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3Rh
dGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRlKHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAg
ICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3NlKGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsK
ICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAw
KQogICAgICAgICAgICBfTV9kZXN0cm95KF9fYSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQq
CiAgICAgICAgX01fcmVmY29weSgpIHRocm93KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21p
Y19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwogICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsK
ICAgICAgICB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2Mm
LCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAgICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hp
ZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9
CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0
YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoK
ICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoK
ICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXAp
ICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5
cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQq
IF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBf
UmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9j
YXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBf
TV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBp
dGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgp
ICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewog
ICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19o
YXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBf
X3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAg
ICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRv
cgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAog
ICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9f
cG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhp
cy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsg
X19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAg
ICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVy
YXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19r
MSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu
KCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5
X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7
IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBz
dGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRv
ciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBf
X2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19j
b3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAg
eyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBf
X2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBf
X2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lk
CiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5
X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlf
cmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2lj
X3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxv
YyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7
CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJh
c2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAg
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAg
ICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3Ry
aW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAg
ICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYg
X19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
ICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBf
X2VuZCwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7
CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAgICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlz
LT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9y
PShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9f
cykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9
CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygp
OwogICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25z
dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJh
dG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAg
ICAgICAgX01fbGVhaygpOwogICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhp
cy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29u
c3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgp
KTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVy
biByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcgogICAgICByYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBy
ZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoK
ICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1Ymxp
YzoKCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCkt
Pl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0
dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9TX21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAg
IHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVz
aXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAg
ICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01f
Y2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJn
ID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNsZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6
ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAgICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMt
PnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10g
KHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsg
fQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAg
ICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwog
ICAgICB9CgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29u
c3QKICAgICAgewogICAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01f
ZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUg
X19uKQogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAg
ICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcm
CiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhp
cy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9
KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMt
PmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
YXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBz
aXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBw
ZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFw
cGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0K
CiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNrKF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVw
bGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgMSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19z
dHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAg
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAg
ICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0g
X19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3Bv
cywgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19u
ID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNp
Y19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkg
fHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBs
ZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAg
ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3Ms
IF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3Mg
Pj0gX19uKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBf
X24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19uKTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xl
bmd0aCA9IF9fbjsKICAgICAgICAgICAgX01fZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5h
bDsKICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1
cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9f
Yyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCks
IF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQo
aXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJl
cGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0
SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRv
ciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19lbmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9f
cCwgX19wLCBfX2JlZywgX19lbmQpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy
dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJl
dHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIu
c2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29s
IF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90
eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg
ICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwg
X19uZXdzaXplKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6
ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewog
ICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYg
KF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYgKF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBf
X24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQi
KTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0No
YXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQq
PigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19zKSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNl
X3NhZmUoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAg
ICAgICAgIHsKCgoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01f
ZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRhdGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAg
IF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwogICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2Rh
dGEoKSArIF9fcG9zOwogICAgICAgICAgICBpZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBp
ZiAoX19zID49IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyAr
IF9fbiwgX19uKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAg
ICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsgKF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0g
KF9fcCAtIF9fcykpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICAgICAgfQogICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6
ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5z
ZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0No
YXJUIF9fYykKICAgICAgewogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9f
biwgX19jKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAg
ICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9DaGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9fcCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMt
Pmluc2VydChfTV9jaGVjayhfX3BvcyksIHNpemVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9y
ZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSAr
IF9fcG9zOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlw
ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoK
ICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewog
ICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bvc2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAg
dGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9k
YXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJu
IF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp
dGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5
cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19m
aXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9N
X3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+
cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5fTV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5
cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5
cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl
cGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3Ms
CiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkK
ICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsK
ICAgICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAt
IF9fcG9zOwogICAgICAgIGlmIChfX3NpemUgLSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkg
LSBfX24yKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVw
bGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25z
dCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9D
aGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3Jl
cGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7
CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAgICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2lu
KCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBfX3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fcywgX19zICsgX19uMiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5
KCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJu
IHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9f
bjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6
ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEs
IGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBf
TV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9fcywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFy
VCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBf
X2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAg
ICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShfX2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAg
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJh
dG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19p
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsg
cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
IGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVw
bGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19rMS5iYXNlKCksIF9fazIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
Y29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAg
IH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0
SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxh
Y2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9f
azEsCiAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0
ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1Nf
Y29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2Mm
IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0
b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9f
ZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29u
c3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBf
QWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2Nv
bnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoK
ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0Fs
bG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgog
ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg
ICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9B
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
ICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAg
ICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBv
cGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1
cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9B
bGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hh
clQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jo
cyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAg
ICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJh
dG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywg
X0NoYXJUIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0
cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19z
dHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAg
ICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBh
cmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj
b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUo
X19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9f
cmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhz
LAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog
ICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMp
IDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hh
clQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAw
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0
dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2Fw
KGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMu
c3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAg
ICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIp
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwp9CiMgNTQgIi91c3IvaW5jbHVkZS9j
KysvMy4yL3N0cmluZyIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i
IDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDMKCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaGVh
cC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg
ICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3Zh
bHVlKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAv
IDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgKihfX2ZpcnN0ICsg
X19wYXJlbnQpIDwgX192YWx1ZSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9
ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50Owog
ICAgICAgIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICoo
X19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBwdXNoX2hlYXAo
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRp
ZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAg
ICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9fbGFzdCAtIF9fZmlyc3Qp
IC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihf
X2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB3aGls
ZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmIF9fY29tcCgqKF9fZmlyc3QgKyBfX3BhcmVu
dCksIF9fdmFsdWUpKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2Zp
cnN0ICsgX19wYXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAg
X19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0
ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg
ICBwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUK
ICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBfX3B1c2hfaGVhcChfX2Zp
cnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2VUeXBl
KDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpLCBfX2NvbXAp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVu
YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgX19hZGp1c3RfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQogICAgewogICAgICBf
RGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogICAgICBfRGlzdGFuY2UgX19zZWNv
bmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAgICAgIHdoaWxlIChfX3NlY29uZENoaWxk
IDwgX19sZW4pIHsKICAgICAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkgPCAqKF9f
Zmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsK
ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENo
aWxkKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNv
bmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3Nl
Y29uZENoaWxkID09IF9fbGVuKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0g
KihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBf
X3NlY29uZENoaWxkIC0gMTsKICAgICAgfQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hv
bGVJbmRleCwgX190b3BJbmRleCwgX192YWx1ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAg
IF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jl
c3VsdCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgaW5saW5l
IHZvaWQKICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7
CgoKICAgICAKCiAgICAgCgogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9f
bGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19hZGp1
c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LAogICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlLCBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5k
ZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsK
ICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlmIChfX2NvbXAo
KihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0g
MSkpKSkKICAgICAgICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgICAgICBfX2hvbGVJbmRl
eCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICAgICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRD
aGlsZCArIDEpOwogICAgICB9CiAgICAgIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVuKSB7CiAg
ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hp
bGQgLSAxKSk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkIC0gMTsKICAgICAg
fQogICAgICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwgX192
YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK
ICAgIF9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIF9f
YWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19m
aXJzdCksCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZSwgX19jb21wKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIGlubGluZSB2b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9f
Y29tcCkKICAgIHsKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICBf
X3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9WYWx1ZVR5cGUoKihf
X2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFs
dWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg
ICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBf
X2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFyZW50ID0gKF9fbGVuIC0gMikvMjsKCiAg
ICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVu
dCwgX19sZW4sIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsgX19wYXJlbnQpKSk7CiAgICAgICAgaWYg
KF9fcGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAg
CgoKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2VUeXBlIF9fcGFy
ZW50ID0gKF9fbGVuIC0gMikvMjsKCiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgX19hZGp1
c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICBf
VmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSksIF9fY29tcCk7CiAgICAgICAgaWYgKF9f
cGFyZW50ID09IDApIHJldHVybjsKICAgICAgICBfX3BhcmVudC0tOwogICAgICB9CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIHZvaWQKICAgIHNv
cnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBf
X2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICB2b2lkCiAgICBzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDEpCiAg
ICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0sIF9fY29tcCk7CiAgICB9Cgp9CiMgNjUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlcgp7CgogCgog
IHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xlbjsKICBfVHAqIF9N
X2J1ZmZlcjsKCgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVyKCkgewogICAgX01fb3JpZ2luYWxf
bGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAgICBpZiAoX01fbGVuID4gKHB0cmRp
ZmZfdCkoMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApKSkKICAgICAgX01fbGVuID0gMjE0NzQ4MzY0
NyAvIHNpemVvZihfVHApOwoKICAgIHdoaWxlIChfTV9sZW4gPiAwKSB7CiAgICAgIF9NX2J1ZmZl
ciA9IChfVHAqKSBtYWxsb2MoX01fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgICBpZiAoX01fYnVm
ZmVyKQogICAgICAgIGJyZWFrOwogICAgICBfTV9sZW4gLz0gMjsKICAgIH0KICB9CgogIHZvaWQg
X01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiwgX190cnVlX3R5cGUpIHt9CiAgdm9pZCBf
TV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmIHZhbCwgX19mYWxzZV90eXBlKSB7CiAgICB1
bmluaXRpYWxpemVkX2ZpbGxfbihfTV9idWZmZXIsIF9NX2xlbiwgdmFsKTsKICB9CgpwdWJsaWM6
CgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fbGVuOyB9CgogIHB0cmRpZmZf
dCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xlbjsgfQoKICBf
VHAqIGJlZ2luKCkgeyByZXR1cm4gX01fYnVmZmVyOyB9CgogIF9UcCogZW5kKCkgeyByZXR1cm4g
X01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0
b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rvcgog
ICAgICAgICAgICBfVHJpdmlhbDsKCiAgICB0cnkgewogICAgICBfTV9sZW4gPSBkaXN0YW5jZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICBfTV9hbGxvY2F0ZV9idWZmZXIoKTsKICAgICAgaWYgKF9N
X2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9idWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFs
KCkpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAgICB7CiAgICAgICAgZnJlZShfTV9idWZmZXIp
OwogICAgICAgIF9NX2J1ZmZlciA9IDA7CiAgICAgICAgX01fbGVuID0gMDsKICAgICAgICB0aHJv
dzsKICAgICAgfQogIH0KCiAgfl9UZW1wb3JhcnlfYnVmZmVyKCkgewogICAgX0Rlc3Ryb3koX01f
YnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwogIH0KCnBy
aXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30K
ICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07Cgp9CiMgNjYg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBz
dGQKewojIDg0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0
IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MpCiAgICB7CgogICAgIAog
ICAgICBpZiAoX19hIDwgX19iKQogICAgICAgIGlmIChfX2IgPCBfX2MpCiAgICAgICAgICByZXR1
cm4gX19iOwogICAgICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2M7
CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19hIDwg
X19jKQogICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fYiA8IF9fYykKICAgICAg
ICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0KIyAxMTgg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAgX19t
ZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYywgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpCiAg
ICAgICAgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19iOwogICAgICAg
IGVsc2UgaWYgKF9fY29tcChfX2EsIF9fYykpCiAgICAgICAgICByZXR1cm4gX19jOwogICAgICAg
IGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2EsIF9f
YykpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19jb21wKF9fYiwgX19jKSkK
ICAgICAgICByZXR1cm4gX19jOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9fYjsKICAgIH0K
IyAxNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5jdGlvbj4KICAgIF9GdW5jdGlvbgog
ICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0
aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAgICByZXR1cm4gX19mOwogICAgfQoK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIGlucHV0X2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICEoKl9fZmlyc3Qg
PT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0
ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgIGNv
bnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg
ewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4g
MjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAg
ICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19f
Zmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFs
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRj
aChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAy
OgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
KytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVm
YXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf
UmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAog
ICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9f
dHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogICAgICBmb3Ig
KCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgICAgIGlmIChfX3By
ZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAg
IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7
CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICAr
K19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0
KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2Fz
ZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4g
X19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9faXRlcmF0b3Jf
Y2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMwOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg
X1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lmKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHJldHVybiBmaW5kX2lmKF9fZmlyc3QsIF9fbGFz
dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KIyAzMjkgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAg
X0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9f
bGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g
X19sYXN0OwogICAgfQojIDM1OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJl
ZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJl
ZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg
X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg
ICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICAgICAgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4g
X19sYXN0OwogICAgfQojIDM4NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgIGNv
dW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9f
dmFsdWUpCiAgICAgICAgICArK19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0MTEgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7Cgog
ICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAgKytfX247
CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19s
YXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3Rt
cChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKQog
ICAgICAgIHJldHVybiBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogICAg
ICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3Ax
OwoKICAgICAgX0ZvcndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3Qx
LCBfX2xhc3QxLCAqX19maXJzdDIpOwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQog
ICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19j
dXJyZW50ID0gX19maXJzdDE7CiAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAg
ICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9f
cCkgewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBf
X2ZpcnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAg
ICByZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0K
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDUyMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlw
ZW5hbWUgX0ZvcndhcmRJdGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0
ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIy
IF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFz
dDIpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUo
Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICByZXR1
cm4gX19maXJzdDE7CiAgICAgIH0KCgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog
ICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAgIF9Gb3J3YXJkSXRlcjEgX19jdXJy
ZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxKSB7CiAgICAgICAgICBpZiAoX19wcmVkaWNh
dGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
ICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgcmV0dXJuIF9fbGFz
dDE7CgogICAgICAgIF9fcCA9IF9fcDE7CiAgICAgICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAg
ICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgICAg
ICB3aGlsZSAoX19wcmVkaWNhdGUoKl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgICAgIGlmICgr
K19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgICAgICBp
ZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAg
ICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0
MTsKICAgIH0KIyA1OTYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVu
YW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBj
b25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgogICAgICBpZiAoX19j
b3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICBf
X2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwog
ICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICAgICArK19faTsKICAg
ICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwp
IHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAg
ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDY0MyAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zv
cndhcmRJdGVyLCB0eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwLAogICAgICAgICAgIHR5
cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFyY2hfbihfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIF9JbnRlZ2Vy
IF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZCBfX2Jp
bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19jb3VudCA8PSAwKQog
ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3Zh
bCkpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIH0KICAg
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9JbnRlZ2VyIF9fbiA9
IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAg
ICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYm
IF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgICAgICsrX19pOwogICAgICAg
ICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKF9f
aSAhPSBfX2xhc3QpIHsKICAgICAgICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19pLCBfX3Zh
bCkpCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICArK19faTsKICAgICAgICAg
ICAgfQogICAgICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgNjk3ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIx
LCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMgogICAgc3dhcF9yYW5n
ZXMoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3Qx
LCArK19fZmlyc3QyKQogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0MSwgX19maXJzdDIpOwogICAg
ICByZXR1cm4gX19maXJzdDI7CiAgICB9CiMgNzMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAg
IHRyYW5zZm9ybShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkK
ICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2Zp
cnN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0
eXBlbmFtZSBfQmluYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9ybShf
SW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK
CiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0
MiwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEs
ICpfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA3OTYgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgY29uc3QgX1RwJiBfX29s
ZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
IAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBp
ZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3Zh
bHVlOwogICAgfQojIDgyNSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0
eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwg
Y29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg
IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7CiAgICB9CiMgODU2
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qg
PT0gX19vbGRfdmFsdWUgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICB9CiMgODg4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwg
dHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAgICB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0
SXRlcgogICAgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19wcmVkKCpfX2Zp
cnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAg
IH0KIyA5MTggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAgIHZvaWQK
ICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBf
R2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAg
fQojIDk0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfR2VuZXJh
dG9yPgogICAgX091dHB1dEl0ZXIKICAgIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwg
X1NpemUgX19uLCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoKICAgICAKCgoKICAgICAgZm9yICgg
OyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsK
ICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgOTY5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIHJlbW92ZV9j
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
KQogICAgICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAwMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2Nv
cHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m
aXJzdCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVy
biBfX3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAg
CiAgICAgCgogICAgIAoKCiAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192
YWx1ZSk7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19m
aXJzdCA9PSBfX2xhc3QgPyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fdmFsdWUpOwogICAgfQojIDEw
NzMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRl
cgogICAgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgog
ICAgICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgICAgIF9G
b3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19maXJzdCA9PSBfX2xhc3Qg
PyBfX2ZpcnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5X2lm
KCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0
ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAq
X19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
ICAgICBpZiAoIShfX3ZhbHVlID09ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpf
X2ZpcnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAg
cmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmlx
dWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdo
aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghKCpfX3Jlc3VsdCA9PSAqX19m
aXJzdCkpCiAgICAgICAgICAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1cm4gKytf
X3Jlc3VsdDsKICAgIH0KIyAxMTQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7
CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0
dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0l0ZXJUeXBlKCkp
OwogICAgfQojIDExNzAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl
bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg
X19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKICAg
IHsKCiAgICAgCgoKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6
dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3VsdCA9IF9fdmFsdWU7
CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlf
cHJlZChfX3ZhbHVlLCAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr
K19fcmVzdWx0OwogICAgfQojIDExOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs
Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191
bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAg
ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVk
KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICByZXR1
cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMjMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0
cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRl
cgogICAgdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0Jp
bmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2Nh
dGVnb3J5IF9JdGVyVHlwZTsKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
cmVzdWx0OwogICAgICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVz
dWx0LCBfX2JpbmFyeV9wcmVkLCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKICAgICAgICAgCgoKICAgICAg
ICAgIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICBy
ZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KIyAxMjkw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCwKICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg
IAogICAgIAoKCgogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fYmluYXJ5X3ByZWQpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0
LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICAgICAg
d2hpbGUgKHRydWUpCiAgICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8fCBfX2ZpcnN0
ID09IC0tX19sYXN0KQogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgX19sYXN0KTsKICAgIH0KCgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBf
X3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQogICAgewogICAgICAgICAgd2hpbGUgKF9fZmlyc3QgPCBfX2xhc3QpCiAgICAgICAgICAgIGl0
ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKICAgIH0KIyAxMzQ5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rp
b25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAoKICAg
ICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19m
aXJzdCkpOwogICAgfQojIDEzNzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgcmV2ZXJzZV9jb3B5KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgog
ICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAtLV9fbGFzdDsKICAgICAg
ICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEzOTkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9FdWNsaWRlYW5SaW5nRWxlbWVudD4K
ICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudAogICAgX19nY2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50
IF9fbSwgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKICAgIHsKICAgICAgd2hpbGUgKF9fbiAh
PSAwKSB7CiAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsKICAg
ICAgICBfX20gPSBfX247CiAgICAgICAgX19uID0gX190OwogICAgICB9CiAgICAgIHJldHVybiBf
X207CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgdm9p
ZAogICAgX19yb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBpZiAoKF9fZmlyc3QgPT0g
X19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAg
IF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiA9IF9fbWlkZGxlOwogICAgICBkbyB7CiAgICAgICAgc3dh
cCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRk
bGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAgICB9IHdoaWxlIChfX2ZpcnN0
MiAhPSBfX2xhc3QpOwoKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChf
X2ZpcnN0MiAhPSBfX2xhc3QpIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0Misr
KTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAgIF9fbWlkZGxlID0g
X19maXJzdDI7CiAgICAgICAgZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICAgICAg
X19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2Zp
cnN0ID09IF9fbWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47
CgogICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxfaXRlcmF0
b3JfdGFnKCkpOwogICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcoKSk7CgogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRsZSAmJiBf
X21pZGRsZSAhPSBfX2xhc3QpCiAgICAgICAgc3dhcCAoKl9fZmlyc3QrKywgKi0tX19sYXN0KTsK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICAgICAgX19yZXZlcnNlKF9fbWlk
ZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICAg
IGVsc2UgewogICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0g
X19taWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBf
RGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fayA9IF9f
bWlkZGxlIC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsKCiAgICAg
IGlmIChfX2sgPT0gX19sKSB7CiAgICAgICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19taWRkbGUs
IF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9EaXN0YW5jZSBfX2Qg
PSBfX2djZChfX24sIF9fayk7CgogICAgICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBf
X2Q7IF9faSsrKSB7CiAgICAgICAgX1ZhbHVlVHlwZSBfX3RtcCA9ICpfX2ZpcnN0OwogICAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgICAgIGlmIChfX2sgPCBfX2wp
IHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisr
KSB7CiAgICAgICAgICAgIGlmIChfX3AgPiBfX2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAgICAg
Kl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAgICAg
ICB9CgogICAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgICAgICBfX3AgKz0g
X19rOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZWxzZSB7CiAgICAgICAgICBmb3Ig
KF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAg
ICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag
KyBfX2spOwogICAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwogICAgICAgICAgICBfX3AgLT0gX19sOwogICAgICAg
ICAgfQogICAgICAgIH0KCiAgICAgICAgKl9fcCA9IF9fdG1wOwogICAgICAgICsrX19maXJzdDsK
ICAgICAgfQogICAgfQojIDE1NjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSB2b2lkCiAg
ICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwgX0Zv
cndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7
CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsK
ICAgIH0KIyAxNTg5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
X091dHB1dEl0ZXIKICAgIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIGNvcHko
X19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQpKTsKICAg
IH0KIyAxNjEyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBpbmxpbmUgX0Rpc3RhbmNlCiAgICBfX3JhbmRv
bV9udW1iZXIoX0Rpc3RhbmNlIF9fbikKICAgIHsKCiAgICAgIHJldHVybiBscmFuZDQ4KCkgJSBf
X247CgoKCiAgICB9CiMgMTYzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9p
ZAogICAgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybjsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsg
MTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCAr
IF9fcmFuZG9tX251bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CiAgICB2
b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJh
dG9yJiBfX3JhbmQpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBf
X2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19y
YW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAg
ICBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu
IF9fZmlyc3Q7CgogICAgICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICBpZiAoKytf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogICAgICBfRm9yd2FyZEl0ZXIgX19u
ZXh0ID0gX19maXJzdDsKCiAgICAgIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICAgICAg
aWYgKF9fcHJlZCgqX19uZXh0KSkgewogICAgICAgICAgc3dhcCgqX19maXJzdCwgKl9fbmV4dCk7
CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt
ZSBfUHJlZGljYXRlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyCiAgICBfX3BhcnRpdGlvbihfQmlk
aXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgd2hpbGUg
KHRydWUpCiAgICAgICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICAgICAgZWxzZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAg
ICAgKytfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICAt
LV9fbGFzdDsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmICghX19w
cmVkKCpfX2xhc3QpKQogICAgICAgICAgICAtLV9fbGFzdDsKICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAg
KytfX2ZpcnN0OwogICAgICB9CiAgICB9CiMgMTc0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgcGFydGl0aW9uKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gX19wYXJ0aXRp
b24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp
OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGUsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19p
bnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwgX0Rpc3RhbmNlIF9fbGVuKQogICAgewogICAgICBpZiAoX19sZW4gPT0gMSkKICAgICAgICBy
ZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbGFzdCA6IF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8g
Mik7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2luID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRp
b24oX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMik7CiAgICAgIF9Gb3J3YXJkSXRl
ciBfX2VuZCA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4gLSBfX2xlbiAvIDIpOwogICAgICByb3RhdGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5k
KTsKICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAg
ICAgcmV0dXJuIF9fYmVnaW47CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh
cmRJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3Rh
bmNlIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9z
aXplKQogICAgewogICAgICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgICAgIF9Qb2ludGVyIF9fcmVzdWx0
MiA9IF9fYnVmZmVyOwogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19fZmly
c3QpCiAgICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgICAqX19yZXN1
bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQxOwogICAgICAgICAgfQogICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAgICAg
ICAgKytfX3Jlc3VsdDI7CiAgICAgICAgICB9CiAgICAgICAgY29weShfX2J1ZmZlciwgX19yZXN1
bHQyLCBfX3Jlc3VsdDEpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDE7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICAgIF9Gb3J3YXJkSXRlciBfX2JlZ2lu
ID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9Gb3J3
YXJkSXRlciBfX2VuZCA9IF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSggX19taWRkbGUsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWZmZXIsIF9fYnVmZmVyX3Np
emUpOwogICAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICAgIGFk
dmFuY2UoX19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgICAgcmV0dXJu
IF9fYmVnaW47CiAgICAgIH0KICAgIH0KIyAxODQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRpb24oX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgewog
ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCiAgICAg
ICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgICAgICAgcmV0
dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlw
ZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAgICAgICBlbHNl
CiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19maXJzdCwgX19s
YXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0KICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgog
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAg
ICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJzdDsKICAgICAg
ICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgICAgICAt
LV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsr
X19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgICAgICsrX19m
aXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpf
X2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJzdCA8IF9fbGFz
dCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICBlbnVtIHsgX01fdGhyZXNob2xkID0g
MTYgfTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgdm9pZAogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkKICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9fdmFsIDwgKl9f
bmV4dCkgewogICAgICAgICpfX2xhc3QgPSAqX19uZXh0OwogICAgICAgIF9fbGFzdCA9IF9fbmV4
dDsKICAgICAgICAtLV9fbmV4dDsKICAgICAgfQogICAgICAqX19sYXN0ID0gX192YWw7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5z
ZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAgICAgLS1f
X25leHQ7CiAgICAgIHdoaWxlIChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAgICAgKl9f
bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0
OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAg
ewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZvciAoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAg
ICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsK
ICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAg
ICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5n
dWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCk7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKCiAgICAgIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICB7CiAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl
c3NJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbCA9ICpfX2k7CiAgICAgICAgaWYgKF9fY29tcChfX3Zh
bCwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9faSwgX19p
ICsgMSk7CiAgICAgICAgICAqX19maXJzdCA9IF9fdmFsOwogICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX192YWwsIF9fY29tcCk7
CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
cj4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFs
dWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZv
aWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsr
X19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBlKCpf
X2kpLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX01fdGhyZXNob2xkKTsKICAgICAgICBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QpOwogICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9
CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f
Zmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fY29tcCk7CiAgICAgICAgX191bmd1YXJkZWRfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCArIF9NX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBf
U2l6ZQogICAgX19sZyhfU2l6ZSBfX24pCiAgICB7CiAgICAgIF9TaXplIF9fazsKICAgICAgZm9y
IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICAgICAgcmV0dXJuIF9fazsK
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
X1NpemUgX19kZXB0aF9saW1pdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAg
ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChf
X2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIC0tX19kZXB0
aF9saW1pdDsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3Vu
Z3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0g
X19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQs
IF9fbGFzdCwgX19kZXB0aF9saW1pdCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1NpemUsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnRyb3NvcnRfbG9v
cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsK
ICAgICAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19jb21wKTsK
ICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRp
dGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19s
YXN0IC0gMSksIF9fY29tcCkpLAogICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19pbnRyb3Nv
cnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0LCBfX2NvbXApOwogICAgICAgIF9f
bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICB9CiMgMjE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+
CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAg
ICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgX19pbnRy
b3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsK
ICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIH0K
ICAgIH0KIyAyMTk3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBf
X2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2Zp
cnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQog
ICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkg
LyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAg
ICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sYXN0IC0gX19taWRkbGUpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5w
bGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9
CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBf
X2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRs
ZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3Qs
IF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1Jh
bmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBf
X3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVw
X3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAg
ICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBf
X3R3b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9f
Zmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rp
c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3Qs
CiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv
bUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlw
ZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vf
c29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0
LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXpl
OwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAg
IF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29f
c3RlcCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0K
ICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0
ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAg
ICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jl
c3VsdCwKICAgICAgICAgICAgX19jb21wKTsKICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUg
PSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBf
RGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9f
bGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9f
Y2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFz
dCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNl
cnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUs
IF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0g
X19jaHVua19zaXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0
ICsgX19jaHVua19zaXplLCBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXpl
OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXAp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUg
X1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19z
dGVwX3NpemUgPCBfX2xlbikgewogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9f
bGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwog
ICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0
LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVy
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2Ug
X19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0g
X19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5r
X3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAg
ICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVw
X3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdl
X3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUs
IF9fY29tcCk7CiAgICAgICAgX19zdGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3Np
emUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkg
LyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsK
ICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRf
YWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAg
ICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBf
X2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRf
d2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdl
X3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAg
ICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl
KF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9f
bGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf
X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFz
dCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0g
X19maXJzdCArIF9fbGVuOwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAg
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg
ICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAg
ICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0
LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhf
YnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAg
IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9f
bWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlu
bGluZSB2b2lkCiAgICBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX1RlbXBv
cmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3Nv
cnRfYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShi
dWYuc2l6ZSgpKSk7CiAgICB9CiMgMjQ2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNl
VHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNj
ZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYu
YmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xh
c3QsIF9fY29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9f
Zmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoYnVmLnNpemUoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQojIDI1MDIgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVl
X3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7
IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAg
ICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7
CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICB9CiMgMjU0MCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgcGFydGlhbF9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl
IF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2NvbXApOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fbWlk
ZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9fZmly
c3QpKQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVU
eXBlKCpfX2kpLCBfX2NvbXApOwogICAgICBzb3J0X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9f
Y29tcCk7CiAgICB9CiMgMjU3OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRl
cj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgaWYgKF9fcmVzdWx0X2Zp
cnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9sYXN0OwogICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICAgICAgd2hp
bGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xh
c3QpIHsKICAgICAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAgICAgKytf
X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIG1ha2Vf
aGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9fcmVzdWx0X2ZpcnN0
KQogICAgICAgICAgX19hZGp1c3RfaGVhcChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlVHlwZSgw
KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX3Jlc3VsdF9yZWFsX2xh
c3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dFZhbHVl
VHlwZSgqX19maXJzdCkpOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hl
YXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHJldHVybiBfX3Jl
c3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjYzMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1Jh
bmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIK
ICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1
dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRv
bUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAgICAKCgogICAgICBpZiAo
X19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0
OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0g
X19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsK
ICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0K
ICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29t
cCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIGlmIChfX2NvbXAo
Kl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVz
dWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9o
ZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHJl
dHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXI+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
CiAgICAgCiAgICAgCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRp
b24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1
ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFz
dCAtIDEpKSkpOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAgIF9fZmlyc3Qg
PSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQog
ICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CiMgMjcyOCAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgbnRoX2Vs
ZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAg
ICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgICAg
IF9fZmlyc3QgPSBfX2N1dDsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xhc3QgPSBfX2N1dDsK
ICAgICAgfQogICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsK
ICAgIH0KIyAyNzY4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJk
SXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxl
IChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAg
IGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7
CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9
CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4MTYgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJf
Ym91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKCiAg
ICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAg
ICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAg
ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7
CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICAgICAgX19maXJz
dCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xl
biAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0g
X19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI4NTYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9G
b3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3Vu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBf
X3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh
cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9faGFsZjsKICAgICAg
X0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg
IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxl
KQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2Zp
cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7
CiAgICB9CiMgMjkwMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9f
dmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAg
ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2Uo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7
CgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVu
ID4gMCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBf
X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpf
X21pZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAg
ICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAgICBfX2xlbiA9
IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9f
Zmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVu
KTsKICAgICAgICAgIF9fcmlnaHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBf
X3ZhbCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4o
X19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X0Zv
cndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwogICAgfQojIDMwMDMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHBh
aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3Rh
bmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5j
ZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdo
dDsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAx
OwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBf
X2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAg
IF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAo
X192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNl
IHsKICAgICAgICAgIF9fbGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3Zh
bCwgX19jb21wKTsKICAgICAgICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAg
X19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBfX2NvbXAp
OwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVm
dCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJk
SXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAgIH0KIyAzMDUyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9y
d2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAg
IHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKICAgIH0KIyAzMDgzICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s
CiAgICBiaW5hcnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93
ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9f
aSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7CiAgICB9CiMgMzExNSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg
IF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3Qx
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAg
ICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs
IF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CiMgMzE2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu
YW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21w
YXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAg
ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9f
cmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCkpOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwg
dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu
Y2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAg
fHwgX19sZW4yID09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4y
ID09IDIpIHsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgICAgICAgICAg
aXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19s
ZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+
IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2Uo
X19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5k
KF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3Rh
bmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAg
IF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xl
bjIyKTsKICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxl
LCAqX19zZWNvbmRfY3V0KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m
aXJzdF9jdXQpOwogICAgICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9f
c2Vjb25kX2N1dCk7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2Zp
cnN0X2N1dDsKICAgICAgYWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBf
X3NlY29uZF9jdXQpKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2Zp
cnN0X2N1dCwgX19uZXdfbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
MTEsIF9fbGVuMjIpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwg
X19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x
IC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMik7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBf
RGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICBy
ZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChfX2Nv
bXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3Qs
IF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj
b25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9E
aXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAg
IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVu
MTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs
ICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRk
bGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9
IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAg
ICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29u
ZF9jdXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmly
c3RfY3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJz
dF9jdXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19z
ZWNvbmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJz
dF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEx
LCBfX2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoKCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjEKICAgIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUs
CiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9f
bGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX21p
ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0KTsKICAgICAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJf
ZW5kLCBfX2ZpcnN0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9f
YnVmZmVyKTsKICAgICAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh
c3QpOwogICAgICAgIGFkdmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkp
OwogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
MiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0
aW9uYWxJdGVyMwogICAgX19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmly
c3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsK
ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9f
bGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICotLV9f
cmVzdWx0ID0gKl9fbGFzdDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1
bHQpOwogICAgICAgICAgLS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAg
ICAgICotLV9fcmVzdWx0ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19s
YXN0MikKICAgICAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0
MSwgX19yZXN1bHQpOwogICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAg
fQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1l
IF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMywgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21l
cmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf
X2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAg
IHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAg
IGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xh
c3QyOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpf
X2xhc3QxKSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlm
IChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAg
ICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAg
ICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9i
YWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFz
dDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyPgog
ICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAg
ICAgICAgICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg
ewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2J1ZmZlcik7CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBp
ZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZm
ZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9f
bWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs
IF9fbGFzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xMSA9IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAg
ICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19s
ZW4xIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7
CiAgICAgICAgICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf
X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5j
ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19m
aXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7
CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21p
ZGRsZSA9CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBf
X21pZGRsZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRh
cHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7
CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICB9CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAg
ICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgICAgIGlmIChf
X2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg
IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy
KTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9f
bGFzdCwgX19maXJzdCwgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9f
bGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2Vu
ZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdl
X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9
IDA7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9f
bGVuMSA+IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsK
ICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAg
ICAgICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpf
X2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNl
KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAg
ICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2Zp
cnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBf
X2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19m
aXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X25ld19taWRkbGUgPQogICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0
X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21l
cmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVy
X3NpemUsIF9fY29tcCk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwg
X19jb21wKTsKICAgICAgICAgIH0KICAgIH0KIyAzNTA4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+
CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAog
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAg
ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9CaWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNl
VHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9f
bWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9f
bGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBf
X2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVm
ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0
KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRf
YnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAg
ZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwg
X19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
RGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSkpOwogICAgfQojIDM1NTkgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlv
bmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBpbnBsYWNlX21lcmdlKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlw
ZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlz
dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
IHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNl
VHlwZSBfX2xlbjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3Jh
cnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwg
X19sYXN0KTsKICAgICAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dp
dGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBf
X2NvbXApOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21p
ZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
YnVmLmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0
SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJ
dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAgICsrX19maXJzdDEsICsr
X19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkK
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKF9fY29tcCgqX19maXJzdDEs
ICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UKICAgICAgICAg
ICsrX19maXJzdDEsICsrX19maXJzdDI7CgogICAgICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0
MjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1
dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5p
b24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAK
CgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9
IF9fbGFzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jl
c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg
IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7
CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz
dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf
X2ZpcnN0MSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsr
X19maXJzdDI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlv
bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAK
ICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2Zp
cnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAog
ICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m
aXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f
Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEs
IHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJ
dGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2Zp
cnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAg
IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+
CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEs
IF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0
MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7
CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpf
X2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAg
ICAgIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5h
bWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3N5bW1ldHJpY19kaWZmZXJl
bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQog
ICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19m
aXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAg
ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg
ICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0Owog
ICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIs
IGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAg
ICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgICAgICpfX3Jlc3Vs
dCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xh
c3QpIHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0
OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fcmVzdWx0
IDwgKl9fZmlyc3QpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
IHJldHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0Owog
ICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX3Jl
c3VsdCwgKl9fZmlyc3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJ
dGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAg
ICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0IDwgKl9f
cmVzdWx0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwg
Kl9fcmVzdWx0KSkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+
CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0
LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAt
LV9faTsKCiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0g
X19pOwogICAgICAgIC0tX19pOwogICAgICAgIGlmICgqX19pIDwgKl9faWkpIHsKICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqX19p
IDwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7
CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNl
KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0
KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsK
CiAgICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwog
ICAgICAgIC0tX19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faSwgKl9faWkpKSB7CiAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2Nv
bXAoKl9faSwgKi0tX19qKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ks
IF9faik7CiAgICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICBy
ZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
fQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K
ICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t
X19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf
X2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCotLV9f
aiA8ICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsK
ICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2Uo
X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAg
IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3Qp
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoK
ICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAg
ICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsKICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29t
cCgqLS1fX2osICpfX2kpKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwg
X19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJl
dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9
CiAgICAgIH0KICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0
ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAg
CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkK
ICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9f
bGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAg
ICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfSW5wdXRJdGVyCiAgICBmaW5kX2ZpcnN0X29mKF9J
bnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSkK
ICAgICAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9f
bGFzdDI7ICsrX19pdGVyKQogICAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIp
KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIHJldHVybiBfX2xhc3QxOwogICAg
fQojIDQyMDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBf
Rm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3
YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg
X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xh
c3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2Fy
ZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAgICAgICAg
X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25ld19yZXN1bHQg
PT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBfX2ZpcnN0
MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj
YXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmly
c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIg
X19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcjEg
X19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0
MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19uZXdfcmVzdWx0
ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgX19maXJz
dDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJl
Y3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIg
X19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp
b25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk
aXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEoX19m
aXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2SXRl
cjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0
Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVybiBfX2xh
c3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0g
X19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m
aXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg
X0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9f
Zmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u
YWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly
ZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmly
c3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jldkl0ZXIx
IF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgICAgIGlmIChf
X3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2Ug
ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgp
OwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0Mikp
OwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh
cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0
dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIy
LAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7
CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwg
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsK
ICAgIH0KCn0KIyA3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAyIDMKIyA1NyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwojIDQ1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3Qg
dHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBl
CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9T
X21heF9zaXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkg
LyA0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGNvbnN0IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBv
czsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFy
VCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9J
bkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09
IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAo
KS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVf
dHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXpl
b2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVm
W19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAg
ICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9N
X2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9y
ICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+
X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9f
bGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAg
ICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAo
X19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAg
ICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
ICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAg
ICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAg
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xl
bik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAg
IF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47
CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAg
IHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUg
PGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5J
dGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19j
YXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5kKSk7CgogICAgICAgIGlmIChfX2Jl
ZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlf
cmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19iZWcg
PT0gX0luSXRlcigpLCAwKSkKICAgICAgICAgIF9fdGhyb3dfbG9naWNfZXJyb3IoImF0dGVtcHQg
dG8gY3JlYXRlIHN0cmluZyB3aXRoIG51bGwgcG9pbnRlciIpOwoKCiAgICAgICAgX1JlcCogX19y
ID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsg
X1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAg
IGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7
CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0g
X19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVy
bWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBf
X2EpCiAgICB7CiAgICAgIGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAg
cmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX19uKQogICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgp
LCBfX24sIF9fYyk7CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAg
ICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAg
IF9fci0+X01fbGVuZ3RoID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1Jl
cDo6X1NfdGVybWluYWw7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2lj
X3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0
ci5fTV9yZXAoKS0+X01fZ3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAg
ICAgICAgICAgICAgICBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhj
b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlw
ZSgpLCBfQ2hhclQoKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9k
YXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBf
QWxsb2MoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNp
emVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxs
b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9f
cG9zKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3Ms
IF9fbiksIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29u
c3RydWN0KF9fcywgX19zICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25z
dCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2Nv
bnN0cnVjdChfX3MsIF9fcyA/IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MgKyBucG9zLCBfX2EpLCBfX2EpCiAgICB7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh
c2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRl
ciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2Rh
dGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAg
ICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9y
KCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19h
LCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2Uo
X19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhy
b3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9j
YXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19h
KS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVk
KCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xl
YWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
b2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXpl
ID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3Ny
YyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUgX19o
b3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAo
KS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoK
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFs
bG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVw
KiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6
ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf
X25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCksIF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7
CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rp
c3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEo
X19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYg
X19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUo
X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9
CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xl
bmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9T
X3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAgICAg
aWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkp
CiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAg
ICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAg
ICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0aGlz
LT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7
CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMg
LSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAg
ICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBf
X3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgX01f
cmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19s
ZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBp
ZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAg
ewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEo
X19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoK
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJl
Z2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19z
dHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0aGlz
ID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVw
KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf
U19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3Ry
aW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAg
ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAg
ICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBz
aXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmlu
Zy50Y2MiIDMKICAgICAgY29uc3Qgc2l6ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25z
dCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9j
X2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9f
bWFsbG9jX2hlYWRlcl9zaXplKSA+IF9fcGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6
ZV90IF9fZXh0cmEgPQogICAgICAgICAgICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxs
b2NfaGVhZGVyX3NpemUpICUgX19wYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsK
ICAgICAgICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAg
ICAgX19zaXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9S
ZXApOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAg
ICAgICB7CiAgICAgICAgICBzaXplX3QgX19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2Vz
aXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkK
ICAgICAgICAgICAgJSBfX3N1YnBhZ2VzaXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4
dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEp
ICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lk
KiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwog
ICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNp
dHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3At
Pl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJU
KgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBf
TV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAg
ICAgIGNvbnN0IHNpemVfdHlwZSBfX3JlcXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsK
CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBf
X21hbGxvY19oZWFkZXJfc2l6ZSAtIHNpemVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAg
ICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVz
dGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYmIF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0
eSkKCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01f
Y2FwYWNpdHkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAg
OiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9jYXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0
aCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29w
eShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAg
ICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3ko
X19hbGxvYyk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZk
YXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6cmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAg
ICAgIGlmIChfX24gPiBtYXhfc2l6ZSgpKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJi
YXNpY19zdHJpbmc6OnJlc2l6ZSIpOwogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19zaXplIDwgX19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBf
X3NpemUsIF9fYyk7CiAgICAgIGVsc2UgaWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5l
cmFzZShfX24pOwoKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ
dGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01fcmVwbGFjZShp
dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9fazEsCiAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKCiAgICAg
ICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICByZXR1cm4gX01fcmVwbGFj
ZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSk7CiAgICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3Ig
X19pMSwgaXRlcmF0b3IgX19pMiwgX0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIgX19rMikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcg
PSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fazEsIF9fazIpKTsKICAgICAgICBz
aXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAgICAgICAgc2l6ZV90eXBlIF9fZG1heCA9
IHRoaXMtPm1heF9zaXplKCk7CgogICAgICAgIGlmIChfX2RtYXggPD0gX19kbmV3KQogICAgICAg
ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6X01fcmVwbGFjZSIpOwogICAg
ICAgIHNpemVfdHlwZSBfX29mZiA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgICBfTV9tdXRh
dGUoX19vZmYsIF9fZG9sZCwgX19kbmV3KTsKCgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAg
ICBfU19jb3B5X2NoYXJzKF9NX2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OgogICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBl
IF9fbjIpCiAgICB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXpl
KCk7CiAgICAgIGlmIChfX3BvczIgPiBfX3N0cnNpemUpCiAgICAgICAgX190aHJvd19vdXRfb2Zf
cmFuZ2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBjb25zdCBib29sIF9fdGVzdG4y
ID0gX19uMiA8IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9s
ZG4yID0gX190ZXN0bjIgPyBfX24yIDogX19zdHJzaXplIC0gX19wb3MyOwogICAgICByZXR1cm4g
dGhpcy0+cmVwbGFjZShfX3BvczEsIF9fbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
c3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19mb2xkbjIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBz
aXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+
IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl
dHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2liZWdp
bigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgIHsK
CgoKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc3RyLnNpemUoKSAtIF9fcG9zLCBfX24p
ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg
ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N
X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlz
LT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhp
cy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAg
IHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwog
ICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fbiwgX19j
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAg
dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6
ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9UcmFpdHM6Omxlbmd0aChfX2xocyk7
CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc3RyLnJlc2VydmUoX19sZW4gKyBf
X3Jocy5zaXplKCkpOwogICAgICBfX3N0ci5hcHBlbmQoX19saHMsIF9fbGhzICsgX19sZW4pOwog
ICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir
KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsK
ICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfX3Jocy5zaXplKCk7CiAgICAgIF9fc3RyLnJlc2Vy
dmUoX19sZW4gKyAxKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBlKDEpLCBfX2xocyk7
CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIHNpemVfdHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgewogICAg
ICBzaXplX3R5cGUgX19uMSA9IF9faTIgLSBfX2kxOwogICAgICBzaXplX3R5cGUgX19vZmYxID0g
X19pMSAtIF9NX2liZWdpbigpOwogICAgICBpZiAobWF4X3NpemUoKSAtICh0aGlzLT5zaXplKCkg
LSBfX24xKSA8PSBfX24yKQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6OnJlcGxhY2UiKTsKICAgICAgX01fbXV0YXRlIChfX29mZjEsIF9fbjEsIF9fbjIpOwoKICAg
ICAgaWYgKF9fbjIpCiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKCkgKyBfX29m
ZjEsIF9fbjIsIF9fYyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29weShfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBp
ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6Y29weSIpOwoKICAgICAgaWYgKF9fbiA+IHRoaXMtPnNpemUoKSAtIF9fcG9z
KQogICAgICAgIF9fbiA9IHRoaXMtPnNpemUoKSAtIF9fcG9zOwoKICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19zLCBfTV9kYXRhKCkgKyBfX3BvcywgX19uKTsKCiAgICAgIHJldHVybiBfX247CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9
IF9NX2RhdGEoKTsKICAgICAgZm9yICg7IF9feHBvcyArIF9fbiA8PSBfX3NpemU7ICsrX194cG9z
KQogICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3hwb3MsIF9fcywg
X19uKSA9PSAwKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAg
ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19yZXQg
PSBucG9zOwogICAgICBpZiAoX19wb3MgPCBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBzaXplX3R5cGUgX19uID0g
X19zaXplIC0gX19wb3M7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBl
OjpmaW5kKF9fZGF0YSArIF9fcG9zLCBfX24sIF9fYyk7CiAgICAgICAgICBpZiAoX19wKQogICAg
ICAgICAgICBfX3JldCA9IF9fcCAtIF9fZGF0YTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIGlmIChfX24gPD0gX19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fcG9z
ID0gc3RkOjptaW4oX19zaXplIC0gX19uLCBfX3Bvcyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIGRvCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX19wb3MsIF9fcywgX19uKSA9
PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgICAgICB9CiAgICAgICAg
ICB3aGlsZSAoX19wb3MtLSA+IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAg
ICB7CiAgICAgICAgICBzaXplX3QgX194cG9zID0gX19zaXplIC0gMTsKICAgICAgICAgIGlmIChf
X3hwb3MgPiBfX3BvcykKICAgICAgICAgICAgX194cG9zID0gX19wb3M7CgogICAgICAgICAgZm9y
ICgrK19feHBvczsgX194cG9zLS0gPiAwOyApCiAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6
ZXEoX01fZGF0YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICAgICAgcmV0dXJuIF9feHBvczsK
ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X29mKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7
CiAgICAgIGZvciAoOyBfX24gJiYgX19wb3MgPCB0aGlzLT5zaXplKCk7ICsrX19wb3MpCiAgICAg
ICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX3Ms
IF9fbiwgX01fZGF0YSgpW19fcG9zXSk7CiAgICAgICAgICBpZiAoX19wKQogICAgICAgICAgICBy
ZXR1cm4gX19wb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5
cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9s
YXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+IF9f
cG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEo
KVtfX3NpemVdKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSAhPSAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBu
cG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9z
ID0gX19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQog
ICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hwb3Nd
KSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNp
emVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBm
aW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMt
PnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgp
W19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBv
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlm
ICgtLV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAg
IGRvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9f
cywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXpl
OwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAg
ICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+
c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6
ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19z
aXplXSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog
ICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh
c2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3Np
emUgLSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f
b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg
X19wb3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig
PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFy
ZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVf
dHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8
IF9fcG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0g
X19wb3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBf
X3BvczIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3Np
emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsg
X19wb3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBf
X3Jvc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0No
YXJUKiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl
KCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwog
ICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKICAgICAgaW50IF9f
ciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zLCBfX2xlbik7CiAgICAgIGlm
ICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBj
b25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29z
aXplID0gdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9
IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf
X3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N
X2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19y
ID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21w
YXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAog
ICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVf
dHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAg
IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6
ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJh
aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBp
ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9f
cjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQq
IF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVf
dHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0g
bWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1Ziwg
X19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsK
ICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2lj
X29zdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25z
dCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAg
ICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFyKTsKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJl
YW08Y2hhcj4mLCBzdHJpbmcmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJp
bmc8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+
JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYpOwogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTx3Y2hhcl90PiYsIGNvbnN0IHdzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08
d2NoYXJfdD4mLCB3c3RyaW5nJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBiYXNp
Y19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Jiwg
d3N0cmluZyYpOwoKfQojIDU4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwojIDE4
MCAiYmFzaWMuaCIgMgojIDE5NyAiYmFzaWMuaCIKc3RyaW5nIGludDJzdHIoaW50IGkpOwojIDIz
NSAiYmFzaWMuaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBzZXJpYWw7CiMgMjU1ICJiYXNpYy5o
Igpjb25zdCBzZXJpYWwgU19JTlZBTElEID0oc2VyaWFsKSgtMSk7CiMgMjcwICJiYXNpYy5oIgp0
eXBlZGVmIHVpbnQxNiB0c2VyaWFsOwojIDI4MyAiYmFzaWMuaCIKdHlwZWRlZiB1aW50MTYgcHNl
cmlhbDsKIyAyOTYgImJhc2ljLmgiCnR5cGVkZWYgdWludDMyIHNzZXJpYWw7CiMgMzE3ICJiYXNp
Yy5oIgpjb25zdCB0c2VyaWFsIFRTX0lOVkFMSUQgPSAodHNlcmlhbCkoLTEpOwojIDMzNyAiYmFz
aWMuaCIKY29uc3QgcHNlcmlhbCBQU19JTlZBTElEID0gKHBzZXJpYWwpKC0xKTsKIyAzNTcgImJh
c2ljLmgiCmNvbnN0IHNzZXJpYWwgU1NfSU5WQUxJRCA9IChzc2VyaWFsKSgtMSk7CiMgNDUwICJi
YXNpYy5oIgppbmxpbmUgaW50MTYgVW5hbGlnbmVkMTYoY29uc3QgY2hhciAqcCkgeyByZXR1cm4g
KGludDE2KSgoKHVpbnQpcFsxXTw8OCkrKHVpbnQpcFswXSk7IH0KaW5saW5lIGludDE2IFVuYWxp
Z25lZDE2KGNvbnN0IHVjaGFyICpwKSB7IHJldHVybiAoaW50MTYpKCgodWludClwWzFdPDw4KSso
dWludClwWzBdKTsgfQppbmxpbmUgaW50MTYgVW5hbGlnbmVkMTYoY29uc3Qgc2NoYXIgKnApIHsg
cmV0dXJuIChpbnQxNikoKCh1aW50KXBbMV08PDgpKyh1aW50KXBbMF0pOyB9CmlubGluZSBpbnQz
MiBVbmFsaWduZWQzMihjb25zdCBjaGFyICpwKSB7IHJldHVybiAoKCgoKHBbM10gPDwgOCkgKyBw
WzJdKSA8PCA4KSArIHBbMV0pIDw8IDgpICsgcFswXTsgfQppbmxpbmUgaW50MzIgVW5hbGlnbmVk
MzIoY29uc3QgdWNoYXIgKnApIHsgcmV0dXJuICgoKCgocFszXSA8PCA4KSArIHBbMl0pIDw8IDgp
ICsgcFsxXSkgPDwgOCkgKyBwWzBdOyB9CmlubGluZSBpbnQzMiBVbmFsaWduZWQzMihjb25zdCBz
Y2hhciAqcCkgeyByZXR1cm4gKCgoKChwWzNdIDw8IDgpICsgcFsyXSkgPDwgOCkgKyBwWzFdKSA8
PCA4KSArIHBbMF07IH0KIyA0NjggImJhc2ljLmgiCnR5cGVkZWYgY29uc3Qgdm9pZCAqIChjb2Rl
KSgpOwp0eXBlZGVmIGNvbnN0IHZvaWQgKiAoKmNvZGVwdHIpKCk7CiMgNDg5ICJiYXNpYy5oIgpj
b25zdCBpbnQgQ0hBUlNfUEVSX0NFTEw9NDsKIyA1MTIgImJhc2ljLmgiCmlubGluZSB1bnNpZ25l
ZCBpbnQgTEVOX1RPX0NFTExTKHVuc2lnbmVkIGludCB4KQp7CiAgICAgICAgcmV0dXJuICggeCAr
IChDSEFSU19QRVJfQ0VMTC0xKSApIC8gQ0hBUlNfUEVSX0NFTEw7Cn0KIyAxMyAiYWxsLmgiIDIK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9zZWFyY2guaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9z
ZWFyY2guaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3NlYXJjaC5oIiAyIDMKCmV4dGVybiAi
QyIgewoKCgoKCgpzdHJ1Y3QgcWVsZW0KICB7CiAgICBzdHJ1Y3QgcWVsZW0gKnFfZm9ydzsKICAg
IHN0cnVjdCBxZWxlbSAqcV9iYWNrOwogICAgY2hhciBxX2RhdGFbMV07CiAgfTsKCgoKCmV4dGVy
biB2b2lkIGluc3F1ZSAodm9pZCAqX19lbGVtLCB2b2lkICpfX3ByZXYpIHRocm93ICgpOwoKCmV4
dGVybiB2b2lkIHJlbXF1ZSAodm9pZCAqX19lbGVtKSB0aHJvdyAoKTsKIyA2MyAiL3Vzci9pbmNs
dWRlL3NlYXJjaC5oIiAzCnR5cGVkZWYgZW51bQogIHsKICAgIEZJTkQsCiAgICBFTlRFUgogIH0K
QUNUSU9OOwoKdHlwZWRlZiBzdHJ1Y3QgZW50cnkKICB7CiAgICBjaGFyICprZXk7CiAgICB2b2lk
ICpkYXRhOwogIH0KRU5UUlk7CgoKc3RydWN0IF9FTlRSWTsKIyA4OCAiL3Vzci9pbmNsdWRlL3Nl
YXJjaC5oIiAzCmV4dGVybiBFTlRSWSAqaHNlYXJjaCAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19h
Y3Rpb24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaGNyZWF0ZSAoc2l6ZV90IF9fbmVsKSB0aHJv
dyAoKTsKCgpleHRlcm4gdm9pZCBoZGVzdHJveSAodm9pZCkgdGhyb3cgKCk7CgoKCnN0cnVjdCBo
c2VhcmNoX2RhdGEKICB7CiAgICBzdHJ1Y3QgX0VOVFJZICp0YWJsZTsKICAgIHVuc2lnbmVkIGlu
dCBzaXplOwogICAgdW5zaWduZWQgaW50IGZpbGxlZDsKICB9OwoKCgpleHRlcm4gaW50IGhzZWFy
Y2hfciAoRU5UUlkgX19pdGVtLCBBQ1RJT04gX19hY3Rpb24sIEVOVFJZICoqX19yZXR2YWwsCiAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHNlYXJjaF9kYXRhICpfX2h0YWIpIHRocm93ICgp
OwpleHRlcm4gaW50IGhjcmVhdGVfciAoc2l6ZV90IF9fbmVsLCBzdHJ1Y3QgaHNlYXJjaF9kYXRh
ICpfX2h0YWIpIHRocm93ICgpOwpleHRlcm4gdm9pZCBoZGVzdHJveV9yIChzdHJ1Y3QgaHNlYXJj
aF9kYXRhICpfX2h0YWIpIHRocm93ICgpOwojIDExOSAiL3Vzci9pbmNsdWRlL3NlYXJjaC5oIiAz
CnR5cGVkZWYgZW51bQp7CiAgcHJlb3JkZXIsCiAgcG9zdG9yZGVyLAogIGVuZG9yZGVyLAogIGxl
YWYKfQpWSVNJVDsKCgoKZXh0ZXJuIHZvaWQgKnRzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXks
IHZvaWQgKipfX3Jvb3RwLAogICAgICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2Nv
bXBhcik7CgoKCmV4dGVybiB2b2lkICp0ZmluZCAoX19jb25zdCB2b2lkICpfX2tleSwgdm9pZCAq
X19jb25zdCAqX19yb290cCwKICAgICAgICAgICAgICAgICAgICBfX2NvbXBhcl9mbl90IF9fY29t
cGFyKTsKCgpleHRlcm4gdm9pZCAqdGRlbGV0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9f
a2V5LAogICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19yb290cCwKICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgp0eXBlZGVmIHZv
aWQgKCpfX2FjdGlvbl9mbl90KSAoX19jb25zdCB2b2lkICpfX25vZGVwLCBWSVNJVCBfX3ZhbHVl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fbGV2ZWwpOwoKCgoKZXh0ZXJu
IHZvaWQgdHdhbGsgKF9fY29uc3Qgdm9pZCAqX19yb290LCBfX2FjdGlvbl9mbl90IF9fYWN0aW9u
KTsKCgoKCnR5cGVkZWYgdm9pZCAoKl9fZnJlZV9mbl90KSAodm9pZCAqX19ub2RlcCk7CgoKZXh0
ZXJuIHZvaWQgdGRlc3Ryb3kgKHZvaWQgKl9fcm9vdCwgX19mcmVlX2ZuX3QgX19mcmVlZmN0KTsK
CgoKCgpleHRlcm4gdm9pZCAqbGZpbmQgKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9p
ZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19ubWVtYiwgc2l6ZV90IF9f
c2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkICpsc2VhcmNoIChf
X2NvbnN0IHZvaWQgKl9fa2V5LCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgKl9fbm1lbWIsIHNpemVfdCBfX3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoK
fQojIDE5ICJhbGwuaCIgMgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMSAzCiMg
NDYgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1s
aW51eC8zLjIuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL21hbGxv
Yy5oIiAyIDMKIyAxMDYgIi91c3IvaW5jbHVkZS9tYWxsb2MuaCIgMwpleHRlcm4gIkMiIHsKCgoK
ZXh0ZXJuIHZvaWQgKiBtYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIHZvaWQgKiBjYWxsb2MgKHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplKSB0aHJvdyAoKQogICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9j
X18pKTsKCgoKZXh0ZXJuIHZvaWQgKiByZWFsbG9jICh2b2lkICogX19wdHIsIHNpemVfdCBfX3Np
emUpIHRocm93ICgpCgogICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgpleHRl
cm4gdm9pZCBmcmVlICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGNmcmVl
ICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogbWVtYWxpZ24gKHNpemVf
dCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiB2
YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f
KSk7CgoKCmV4dGVybiB2b2lkICogcHZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkKICAg
ICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCmV4dGVybiB2b2lkICogKCpfX21v
cmVjb3JlKSAocHRyZGlmZl90IF9fc2l6ZSk7CgoKZXh0ZXJuIHZvaWQgKiBfX2RlZmF1bHRfbW9y
ZWNvcmUgKHB0cmRpZmZfdCBfX3NpemUpIHRocm93ICgpCiAgICAgICBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKCgpzdHJ1Y3QgbWFsbGluZm8gewogIGludCBhcmVuYTsKICBpbnQgb3Jk
YmxrczsKICBpbnQgc21ibGtzOwogIGludCBoYmxrczsKICBpbnQgaGJsa2hkOwogIGludCB1c21i
bGtzOwogIGludCBmc21ibGtzOwogIGludCB1b3JkYmxrczsKICBpbnQgZm9yZGJsa3M7CiAgaW50
IGtlZXBjb3N0Owp9OwoKCmV4dGVybiBzdHJ1Y3QgbWFsbGluZm8gbWFsbGluZm8gKHZvaWQpIHRo
cm93ICgpOwojIDE4NyAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIiAzCmV4dGVybiBpbnQgbWFsbG9w
dCAoaW50IF9fcGFyYW0sIGludCBfX3ZhbCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWFsbG9j
X3RyaW0gKHNpemVfdCBfX3BhZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWFsbG9jX3Vz
YWJsZV9zaXplICh2b2lkICogX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIG1hbGxvY19z
dGF0cyAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKiBtYWxsb2NfZ2V0X3N0YXRlICh2
b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBtYWxsb2Nfc2V0X3N0YXRlICh2b2lkICogX19w
dHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKCpfX21hbGxvY19pbml0aWFsaXplX2hvb2sp
ICh2b2lkKTsKCmV4dGVybiB2b2lkICgqX19mcmVlX2hvb2spICh2b2lkICogX19wdHIsIF9fY29u
c3Qgdm9pZCAqKTsKCmV4dGVybiB2b2lkICogKCpfX21hbGxvY19ob29rKSAoc2l6ZV90IF9fc2l6
ZSwgX19jb25zdCB2b2lkICopOwoKZXh0ZXJuIHZvaWQgKiAoKl9fcmVhbGxvY19ob29rKSAodm9p
ZCAqIF9fcHRyLCBzaXplX3QgX19zaXplLCBfX2NvbnN0IHZvaWQgKik7CgoKZXh0ZXJuIHZvaWQg
KiAoKl9fbWVtYWxpZ25faG9vaykgKHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSwg
X19jb25zdCB2b2lkICopOwoKCmV4dGVybiB2b2lkICgqX19hZnRlcl9tb3JlY29yZV9ob29rKSAo
dm9pZCk7CgoKZXh0ZXJuIHZvaWQgX19tYWxsb2NfY2hlY2tfaW5pdCAodm9pZCkgdGhyb3cgKCk7
CgoKc3RydWN0IG1hbGxvY19zdGF0ZTsKdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3N0YXRlICptc3Rh
dGU7CgpleHRlcm4gbXN0YXRlIF9pbnRfbmV3X2FyZW5hIChzaXplX3QgX19pbmlfc2l6ZSkgdGhy
b3cgKCk7CmV4dGVybiB2b2lkICogX2ludF9tYWxsb2MgKG1zdGF0ZSBfX20sIHNpemVfdCBfX3Np
emUpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfaW50X2ZyZWUgKG1zdGF0ZSBfX20sIHZvaWQgKiBf
X3B0cikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICogX2ludF9yZWFsbG9jIChtc3RhdGUgX19tLCB2
b2lkICogX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICogX2lu
dF9tZW1hbGlnbiAobXN0YXRlIF9fbSwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXpl
KSB0aHJvdyAoKTsKCgoKfTsKIyAyNiAiYWxsLmgiIDIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kz
ODYtbGludXgvMy4yLjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMjcgImFsbC5oIiAyCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2lvc3RyZWFtIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAx
IDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMwoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pb3MiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoK
CgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2xv
Y2FsZSIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1
ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGludXgvMy4yLjIvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9s
b2NhbGUuaCIgMwplbnVtCnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAog
IF9fTENfVElNRSA9IDIsCiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwK
ICBfX0xDX01FU1NBR0VTID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAg
X19MQ19OQU1FID0gOCwKICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAs
CiAgX19MQ19NRUFTVVJFTUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9Owoj
IDMxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3Iv
aW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2lu
dDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBj
aGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1v
bl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9n
cm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAg
Y2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3By
ZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7Cgog
IGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5f
c2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBf
Ynlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5
X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9w
b3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCn07CgoKCgoKZXh0ZXJuIGNoYXIg
KnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hhciAqX19sb2NhbGUpIHRocm93
ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYgKHZvaWQpIHRocm93ICgpOwoK
CiMgMTQ4ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKdHlwZWRlZiBfX2xvY2FsZV90IGxvY2Fs
ZV90OwoKCgoKCmV4dGVybiBfX2xvY2FsZV90IG5ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFz
aywgX19jb25zdCBjaGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xvY2FsZV90IF9fYmFzZSkgdGhyb3cgKCk7CiMgMTg5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDMKZXh0ZXJuIF9fbG9jYWxlX3QgZHVwbG9jYWxlIChfX2xvY2FsZV90IF9fZGF0YXNldCkgdGhy
b3cgKCk7CgoKCmV4dGVybiB2b2lkIGZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0
aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgdXNlbG9jYWxlIChfX2xvY2FsZV90IF9f
ZGF0YXNldCkgdGhyb3cgKCk7CgoKCgoKCgp9CiMgNTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Ns
b2NhbGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcg
OjpzZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2xhbmdpbmZvLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgi
IDMKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoKCnR5cGVkZWYgaW50IG5s
X2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBjaGFyICpfX2NhdF9uYW1l
LCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQg
X19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2F0Y2xvc2Ug
KG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdp
bmZvLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91
c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNs
dWRlL2xhbmdpbmZvLmgiIDMKZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwg
MTYpIHwgKDApKSwKCiAgQUJEQVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlf
NSwKCiAgQUJEQVlfNiwKCiAgQUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8z
LAoKICBEQVlfNCwKCiAgREFZXzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoK
ICBBQk1PTl8yLAoKICBBQk1PTl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82
LAoKICBBQk1PTl83LAoKICBBQk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJN
T05fMTEsCgogIEFCTU9OXzEyLAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1P
Tl80LAoKICBNT05fNSwKCiAgTU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgog
IE1PTl8xMCwKCiAgTU9OXzExLAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgog
IERfVF9GTVQsCgogIERfRk1ULAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAg
X19FUkFfWUVBUiwKCgoKICBFUkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1U
LAoKICBFUkFfVF9GTVQsCgoKICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVf
RVJBX0VOVFJJRVMsCgogIF9OTF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRB
WV8zLAogIF9OTF9XQUJEQVlfNCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9O
TF9XQUJEQVlfNywKCgogIF9OTF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAog
IF9OTF9XREFZXzQsCiAgX05MX1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoK
ICBfTkxfV0FCTU9OXzEsCiAgX05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FC
TU9OXzQsCiAgX05MX1dBQk1PTl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAg
X05MX1dBQk1PTl84LAogIF9OTF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJN
T05fMTEsCiAgX05MX1dBQk1PTl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBf
TkxfV01PTl8zLAogIF9OTF9XTU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9O
TF9XTU9OXzcsCiAgX05MX1dNT05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9O
TF9XTU9OXzExLAogIF9OTF9XTU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwK
CiAgX05MX1dEX1RfRk1ULAogIF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1U
X0FNUE0sCgogIF9OTF9XRVJBX1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElH
SVRTLAogIF9OTF9XRVJBX0RfVF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dF
RUtfTkRBWVMsCiAgX05MX1RJTUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVL
LAogIF9OTF9USU1FX0ZJUlNUX1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBf
TkxfVElNRV9DQUxfRElSRUNUSU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQs
CgogIF9OTF9XX0RBVEVfRk1ULAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJ
TUUsCgoKCgogIF9OTF9DT0xMQVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwg
KDApKSwKICBfTkxfQ09MTEFURV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9O
TF9DT0xMQVRFX1dFSUdIVE1CLAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVf
SU5ESVJFQ1RNQiwKICBfTkxfQ09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05M
X0NPTExBVEVfR0FQMywKICBfTkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdI
VFdDLAogIF9OTF9DT0xMQVRFX0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBf
TkxfQ09MTEFURV9TWU1CX0hBU0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwK
ICBfTkxfQ09MTEFURV9TWU1CX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9O
TF9DT0xMQVRFX0NPTExTRVFXQywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENf
Q09MTEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwg
KDApKSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVf
VE9MT1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZ
UEVfR0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVf
R0FQNiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBf
TkxfQ1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVT
RVRfTkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBF
X1RPVVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZT
RVQsCiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwK
ICBfTkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05M
X0NUWVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5E
SUdJVFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRT
OF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19M
RU4sCiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAog
IF9OTF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxf
Q1RZUEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBF
X0lORElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJ
R0lUUzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQw
X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwK
ICBfTkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05M
X0NUWVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQ
RV9PVVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VU
RElHSVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lU
MV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0Ms
CiAgX05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9O
TF9DVFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZ
UEVfT1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RS
QU5TTElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZ
UEVfVFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxf
Q1RZUEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJ
TkdfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBF
X1RSQU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxf
Q1RZUEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9F
WFRSQV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01B
UF81LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZ
UEVfRVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VY
VFJBX01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9N
QVBfMTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChf
X0xDX01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgog
IF9fTU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01P
Tl9HUk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoK
CgogIF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BS
RUNFREVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgog
IF9fTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NO
LAoKCgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoK
ICBfX0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9f
SU5UX05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05f
U0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9N
T05FVEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNf
RElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RV
T19QX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05M
X01PTkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllf
U1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRB
UllfRFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BS
RUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05F
VEFSWV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBf
TkxfTU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9O
X1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZ
X1VOT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVU
QVJZX0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9N
T05FVEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dD
LAogIF9OTF9NT05FVEFSWV9DT0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19E
RUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElY
Q0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAg
PSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1B
TF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklD
X0NPREVTRVQsCiAgX05MX05VTV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01F
U1NBR0VTKSA8PCAxNikgfCAoMCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19O
T1NUUiwKCgoKICBfTkxfTUVTU0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoK
ICBfTkxfUEFQRVJfSEVJR0hUID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxf
UEFQRVJfV0lEVEgsCiAgX05MX1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAg
X05MX05BTUVfTkFNRV9GTVQgPSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05B
TUVfTkFNRV9HRU4sCiAgX05MX05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBf
TkxfTkFNRV9OQU1FX01JU1MsCiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VU
LAogIF9OTF9OVU1fTENfTkFNRSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENf
QUREUkVTUykgPDwgMTYpIHwgKDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05M
X0FERFJFU1NfQ09VTlRSWV9QT1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9B
RERSRVNTX0NPVU5UUllfQUIzLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERS
RVNTX0NPVU5UUllfTlVNLAogIF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVT
U19MQU5HX05BTUUsCiAgX05MX0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RF
Uk0sCiAgX05MX0FERFJFU1NfTEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxf
TlVNX0xDX0FERFJFU1MsCgogIF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RF
TEVQSE9ORSkgPDwgMTYpIHwgKDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9O
TF9URUxFUEhPTkVfSU5UX1NFTEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05M
X1RFTEVQSE9ORV9DT0RFU0VULAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VS
RU1FTlRfTUVBU1VSRU1FTlQgPSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAog
IF9OTF9NRUFTVVJFTUVOVF9DT0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9O
TF9JREVOVElGSUNBVElPTl9USVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8
ICgwKSksCiAgX05MX0lERU5USUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05f
QUREUkVTUywKICBfTkxfSURFTlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJ
T05fRU1BSUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05f
RkFYLAogIF9OTF9JREVOVElGSUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05f
VEVSUklUT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklD
QVRJT05fQVBQTElDQVRJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBf
TkxfSURFTlRJRklDQVRJT05fUkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAg
X05MX0lERU5USUZJQ0FUSU9OX0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VU
LAogIF9OTF9OVU1fTENfSURFTlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNy
L2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0g
X19pdGVtKSB0aHJvdyAoKTsKIyA1ODYgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVy
biBjaGFyICpubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9
CiMgMzggIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvaWNv
bnYuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTM4Ni1saW51eC8zLjIuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4dGVybiAiQyIg
ewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGljb252X29wZW4g
KF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3QgY2hhciAqX19mcm9tY29kZSkKICAgICB0
aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAqKl9f
cmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0
IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
b3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19vdXRieXRl
c2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2UgKGljb252X3QgX19jZCkgdGhyb3cgKCk7
Cgp9CiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jKytsb2NhbGUu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAzCiMgMzUgIi91c3IvaW5jbHVk
ZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4gY2hhciAqZ2V0dGV4dCAoX19j
b25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChf
X2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFyICpfX21zZ2lkKQogICAgIHRo
cm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5h
bWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpkY2dldHRleHQgKF9fY29uc3Qg
Y2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0
ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0
dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBjaGFyICpfX21zZ2lkMiwKICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9fYXR0cmlidXRlX18gKChfX2Zv
cm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0dGV4dCAoX19jb25zdCBjaGFy
ICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVkIGxvbmcgaW50IF9fbikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1
dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAo
X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQyLCB1bnNpZ25lZCBsb25n
IGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jYXRlZ29yeSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVf
XyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBjaGFyICp0ZXh0ZG9tYWluIChf
X2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpiaW5k
dGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRocm93ICgpOwoKCgpleHRlcm4g
Y2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19j
b2Rlc2V0KSB0aHJvdyAoKTsKIyAxMjAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKfQojIDQw
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoK
CgoKCgpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICBleHRlcm4gIkMiIF9fdHlwZW9mKHVzZWxvY2Fs
ZSkgX191c2Vsb2NhbGU7Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9fbG9jYWxlX3Qg
X19jX2xvY2FsZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgaW50CiAgICBfX2NvbnZl
cnRfZnJvbV92KGNoYXIqIF9fb3V0LCBjb25zdCBpbnQgX19zaXplLCBjb25zdCBjaGFyKiBfX2Zt
dCwKCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xv
YywgaW50IF9fcHJlYyA9IC0xKQogICAgewogICAgICBfX2NfbG9jYWxlIF9fb2xkID0gX19nbnVf
Y3h4OjpfX3VzZWxvY2FsZShfX2Nsb2MpOwojIDczICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2
LWxpbnV4L2JpdHMvYysrbG9jYWxlLmgiIDMKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYgKF9f
cHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19mbXQs
IF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQs
IF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGlu
dXgvYml0cy9jKytsb2NhbGUuaCIgMwogICAgICBfX2dudV9jeHg6Ol9fdXNlbG9jYWxlKF9fb2xk
KTsKCgoKCiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KfQojIDQ3ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0
eXBlIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy
biAiQyIgewojIDQ4ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwplbnVtCnsKICBfSVN1cHBlciA9
ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lT
bG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkp
LAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikp
ID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEg
PDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4
KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1
KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgo
MSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8
IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9
ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lT
Y250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkp
LAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgx
MCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6
ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA4MSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0
ZXJuIF9fY29uc3QgdW5zaWduZWQgc2hvcnQgaW50ICoqX19jdHlwZV9iX2xvYyAodm9pZCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdCkpOwpleHRlcm4gX19jb25zdCBfX2ludDMyX3QgKipf
X2N0eXBlX3RvbG93ZXJfbG9jICh2b2lkKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0KSk7
CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqKl9fY3R5cGVfdG91cHBlcl9sb2MgKHZvaWQpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3QpKTsKIyA5NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgi
IDMKCgoKCgoKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlz
YWxwaGEgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNjbnRybCAoaW50KSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBpc2RpZ2l0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzbG93ZXIgKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNncmFwaCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc3ByaW50IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHVuY3QgKGludCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNzcGFjZSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVy
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzeGRpZ2l0IChpbnQpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdG91cHBl
ciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzY3R5cGUgKGludCBfX2MsIGludCBfX21hc2spIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF90b3Vw
cGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xvd2VyIChpbnQpIHRocm93ICgpOwoj
IDI0NyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtX2wgKGludCwg
X19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYV9sIChpbnQsIF9fbG9jYWxl
X3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzY250cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgaXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50
IGlzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3ByaW50
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwdW5jdF9sIChpbnQs
IF9fbG9jYWxlX3QpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2VfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgaXN4ZGlnaXRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgaXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRl
cm4gaW50IF9fdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgdG9sb3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBfX3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp
OwpleHRlcm4gaW50IHRvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgp
OwojIDMyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUiIDMKbmFt
ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2lu
ZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2lu
ZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2lu
ZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNp
bmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0
cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9mdW5j
dGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMu
aCIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9p
ZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFs
aWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7Cgog
IHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9f
dGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3Mg
bG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwo
X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv
b2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2Nh
bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz
cHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9D
aGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBj
b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9D
aGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBl
X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVt
cGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hh
cl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1l
OwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+
CiAgICBjbGFzcyBjb2RlY3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFy
LCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwg
bWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIG51bV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5j
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1l
X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+
CiAgICBjbGFzcyB0aW1lX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVf
cHV0X2J5bmFtZTsKCgogIGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIG1vbmV5X2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1
dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNs
YXNzIG1vbmV5cHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0g
ZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jh
c2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xh
c3MgbG9jYWxlCiAgewogIHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29y
eTsKCgogICAgY2xhc3MgZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAg
IGZyaWVuZCBjbGFzcyBmYWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9m
YWNldChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAg
IGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgog
ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVn
b3J5IGN0eXBlID0gMUwgPDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0g
MUwgPDwgMTsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAg
IHN0YXRpYyBjb25zdCBjYXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBj
YXRlZ29yeSBtb25ldGFyeSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVz
c2FnZXMgPSAxTCA8PCA1OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjdHlwZSB8
IG51bWVyaWMgfCBjb2xsYXRlIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRpbWUgfCBtb25ldGFyeSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3co
KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxp
Y2l0CiAgICBsb2NhbGUoY29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxl
JiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShj
b25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQp
OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2Fs
ZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNv
bnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmlu
ZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBj
b25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29u
c3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxl
JiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09
KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25z
dDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0
YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwq
IF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9J
bXBsKiBfU19nbG9iYWw7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2NhdGVnb3Jp
ZXNfc2l6ZSA9IDY7CgoKCgoKCiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX2V4dHJhX2NhdGVn
b3JpZXNfc2l6ZSA9IDY7CgoKCgoKICAgIHN0YXRpYyBjb25zdCBjaGFyKiBfU19jYXRlZ29yaWVz
W19TX2NhdGVnb3JpZXNfc2l6ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICsgX1NfZXh0cmFfY2F0ZWdvcmllc19zaXplXTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9J
bXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUo
KQogICAgewogICAgICBpZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoK
ICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsK
CiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9j
YWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1w
bAogIHsKICBwdWJsaWM6CgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU6OmZhY2V0OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJp
ZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0
KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgogIHByaXZhdGU6CgogICAgX0F0b21pY193b3JkIF9N
X3JlZmVyZW5jZXM7CiAgICBmYWNldCoqIF9NX2ZhY2V0czsKICAgIHNpemVfdCBfTV9mYWNldHNf
c2l6ZTsKCiAgICBjaGFyKiBfTV9uYW1lc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgX1NfZXh0cmFfY2F0ZWdvcmll
c19zaXplXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtd
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0
aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0
IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9j
YWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lk
CiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyBfX2F0b21pY19hZGQoJl9NX3Jl
ZmVyZW5jZXMsIDEpOyB9CgogICAgaW5saW5lIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2Uo
KSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmVyZW5j
ZXMsIC0xKSA9PSAxKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IGRlbGV0
ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAgICAgIH0K
ICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChjb25zdCBj
aGFyKiwgc2l6ZV90KTsKICAgIF9JbXBsKGZhY2V0KiosIHNpemVfdCwgYm9vbCk7CgogICB+X0lt
cGwoKSB0aHJvdygpOwoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJik7CgogICAgdm9pZAogICAgb3Bl
cmF0b3I9KGNvbnN0IF9JbXBsJik7CgogICAgaW5saW5lIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVf
bmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBf
X2kgPSAwOwogICAgICAgICAgIF9fcmV0ICYmIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9T
X2V4dHJhX2NhdGVnb3JpZXNfc2l6ZSAtIDE7CiAgICAgICAgICAgKytfX2kpCiAgICAgICAgX19y
ZXQgJj0gKHN0cmNtcChfTV9uYW1lc1tfX2ldLCBfTV9uYW1lc1tfX2kgKyAxXSkgPT0gMCk7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3Jp
ZXMoY29uc3QgX0ltcGwqLCBjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRl
Z29yeShjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0Kik7CgogICAgdm9pZAog
ICAgX01fcmVwbGFjZV9mYWNldChjb25zdCBfSW1wbCosIGNvbnN0IGxvY2FsZTo6aWQqKTsKCiAg
ICB2b2lkCiAgICBfTV9pbnN0YWxsX2ZhY2V0KGNvbnN0IGxvY2FsZTo6aWQqLCBmYWNldCopOwoK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgaW5saW5lIHZvaWQKICAgICAgX01f
aW5pdF9mYWNldChfRmFjZXQqIF9fZmFjZXQpCiAgICAgIHsgX01faW5zdGFsbF9mYWNldCgmX0Zh
Y2V0OjppZCwgX19mYWNldCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICBsb2NhbGU6OmxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKQogICAg
ewogICAgICBfTV9pbXBsID0gbmV3IF9JbXBsKCpfX290aGVyLl9NX2ltcGwsIDEpOwogICAgICBf
TV9pbXBsLT5fTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6OmlkLCBfX2YpOwogICAgICBmb3IgKHNp
emVfdCBfX2kgPSAwOwogICAgICAgICAgIF9faSA8IF9TX2NhdGVnb3JpZXNfc2l6ZSArIF9TX2V4
dHJhX2NhdGVnb3JpZXNfc2l6ZTsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtd
IF9NX2ltcGwtPl9NX25hbWVzW19faV07CiAgICAgICAgICBjaGFyKiBfX25ldyA9IG5ldyBjaGFy
WzJdOwogICAgICAgICAgc3RyY3B5KF9fbmV3LCAiKiIpOwogICAgICAgICAgX01faW1wbC0+X01f
bmFtZXNbX19pXSA9IF9fbmV3OwogICAgICAgIH0KICAgIH0KCgogIGNsYXNzIGxvY2FsZTo6ZmFj
ZXQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xh
c3MgbG9jYWxlOjpfSW1wbDsKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgcHJv
dGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBfU19jX2xvY2FsZTsKCgogICAgc3RhdGlj
IGNoYXIgX1NfY19uYW1lWzJdOwoKICAgIGV4cGxpY2l0CiAgICBmYWNldChzaXplX3QgX19yZWZz
ID0gMCkgdGhyb3coKTsKCiAgICB2aXJ0dWFsCiAgICB+ZmFjZXQoKTsKCiAgICBzdGF0aWMgdm9p
ZAogICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYywgY29uc3QgY2hhciog
X19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY19sb2NhbGUgX19vbGQgPSAwKTsKCiAgICBz
dGF0aWMgX19jX2xvY2FsZQogICAgX1NfY2xvbmVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9j
KTsKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZGVzdHJveV9jX2xvY2FsZShfX2NfbG9jYWxlJiBf
X2Nsb2MpOwoKICBwcml2YXRlOgogICAgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93
KCk7CgogICAgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCk7CgogICAgZmFj
ZXQoY29uc3QgZmFjZXQmKTsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgZmFjZXQmKTsK
ICB9OwoKCgogIGNsYXNzIGxvY2FsZTo6aWQKICB7CiAgcHJpdmF0ZToKICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2ZhY2V0
KGNvbnN0IGxvY2FsZSYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmll
bmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3cgKCk7CgoKCgogICAg
bXV0YWJsZSBzaXplX3QgX01faW5kZXg7CgoKICAgIHN0YXRpYyBfQXRvbWljX3dvcmQgX1NfaGln
aHdhdGVyOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBpZCYpOwoKICAgIGlkKGNvbnN0
IGlkJik7CgogIHB1YmxpYzoKCgogICAgaWQoKTsKCiAgICBpbmxpbmUgc2l6ZV90CiAgICBfTV9p
ZCgpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01faW5kZXgpCiAgICAgICAgX01faW5kZXggPSAx
ICsgX19leGNoYW5nZV9hbmRfYWRkKCZfU19oaWdod2F0ZXIsIDEpOwogICAgICByZXR1cm4gX01f
aW5kZXggLSAxOwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNv
bnN0IF9GYWNldCYKICAgIHVzZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYg
X19sb2MpIHRocm93KCk7Cn0KIyA0OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL2lvc19iYXNlLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgog
IGVudW0gX0lvc19GbXRmbGFncyB7IF9NX2lvc19mbXRmbGFnc19lbmQgPSAxTCA8PCAxNiB9OwoK
ICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lv
c19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+
KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdz
CiAgb3BlcmF0b3J8KF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl
dHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGlu
dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl4oX0lvc19GbXRm
bGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3Rh
dGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUg
X0lvc19GbXRmbGFncwogIG9wZXJhdG9yfD0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZs
YWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10
ZmxhZ3MKICBvcGVyYXRvciY9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip
CiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg
b3BlcmF0b3JePShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
fihfSW9zX0ZtdGZsYWdzIF9fYSkKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKH5zdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfT3Blbm1vZGUgeyBfTV9pb3Nfb3Blbm1vZGVf
ZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciYoX0lv
c19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1v
ZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp
bmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfChfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19P
cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9f
YSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAg
b3BlcmF0b3JeKF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVy
biBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4o
X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnw9KF9Jb3NfT3Blbm1v
ZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9
CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImPShfSW9zX09wZW5tb2RlJiBfX2Es
IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxp
bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yXj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w
ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvcn4oX0lvc19PcGVubW9kZSBfX2EpCiAgeyByZXR1cm4gX0lvc19P
cGVubW9kZSh+c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX0lvc3RhdGUg
eyBfTV9pb3NfaW9zdGF0ZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19Jb3N0YXRl
CiAgb3BlcmF0b3ImKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4o
X19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfChfSW9zX0lvc3RhdGUg
X19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lv
c3RhdGUKICBvcGVyYXRvcl4oX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7
IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8
aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8PShfSW9zX0lv
c3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7
IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yJj0oX0lvc19Jb3N0YXRlJiBfX2Es
IF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGlu
ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcl49KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3Rh
dGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0
YXRlCiAgb3BlcmF0b3J+KF9Jb3NfSW9zdGF0ZSBfX2EpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRl
KH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgogIGVudW0gX0lvc19TZWVrZGlyIHsgX01faW9z
X3NlZWtkaXJfZW5kID0gMUwgPDwgMTYgfTsKCgogIGNsYXNzIGlvc19iYXNlCiAgewogIHB1Ymxp
YzoKCgogICAgY2xhc3MgZmFpbHVyZSA6IHB1YmxpYyBleGNlcHRpb24KICAgIHsKICAgIHB1Ymxp
YzoKCgogICAgICBleHBsaWNpdAogICAgICBmYWlsdXJlKGNvbnN0IHN0cmluZyYgX19zdHIpIHRo
cm93KCk7CgoKCiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAg
dmlydHVhbCBjb25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2
YXRlOgogICAgICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVb
X01fYnVmc2l6ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdz
OwoKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfYm9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRm
bGFncyhfX2lvc19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhl
ZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgaGV4ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29u
c3QgZm10ZmxhZ3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwp
OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfbGVmdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVu
dGlmaWMgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jh
c2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3Mg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3Mgc2tpcHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0
YnVmKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3Rm
aWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMg
Y29uc3QgZm10ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2Vm
aWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9f
aW9zX2ZsYWdzOjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9z
dGF0ZTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxh
Z3M6Ol9TX2JhZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRl
KF9faW9zX2ZsYWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJp
dCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlv
c3RhdGUgZ29vZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBv
cGVubW9kZTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19m
bGFnczo6X1NfYXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShf
X2lvc19mbGFnczo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBp
biA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1v
ZGUgb3V0ID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qg
b3Blbm1vZGUgdHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0
eXBlZGVmIF9Jb3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVn
ID0gc2Vla2RpcigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7
CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyOSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvYml0cy9pb3NfYmFzZS5oIiAzCiAgICBlbnVtIGV2ZW50CiAgICB7CiAg
ICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwKICAgICAgY29weWZtdF9ldmVudAog
ICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxsYmFjaykgKGV2ZW50LCBpb3NfYmFz
ZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2FsbGJhY2soZXZlbnRfY2FsbGJhY2sg
X19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6CgogICAgc3RyZWFtc2l6ZSBfTV9wcmVj
aXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAgZm10ZmxhZ3MgX01fZmxhZ3M7CiAg
ICBpb3N0YXRlIF9NX2V4Y2VwdGlvbjsKICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0YXRlOwoK
CgogICAgc3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCog
X01fbmV4dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQg
X01faW5kZXg7CiAgICAgIF9BdG9taWNfd29yZCBfTV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFj
a19saXN0KGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAg
ICAgICAgICAgICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2Ni
KSwgX01fZm4oX19mbiksIF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAg
ICAgIHZvaWQKICAgICAgX01fYWRkX3JlZmVyZW5jZSgpIHsgX19hdG9taWNfYWRkKCZfTV9yZWZj
b3VudCwgMSk7IH0KCgogICAgICBpbnQKICAgICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHsgcmV0
dXJuIF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVmY291bnQsIC0xKTsgfQogICAgfTsKCiAgICAg
X0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxi
YWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJh
Y2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3Jk
OwogICAgICBsb25nIF9NX2l3b3JkOwogICAgICBfV29yZHMoKSA6IF9NX3B3b3JkKDApLCBfTV9p
d29yZCgwKSB7IH0KICAgIH07CgoKICAgIF9Xb3JkcyBfTV93b3JkX3plcm87CgoKICAgIHN0YXRp
YyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZF9zaXplID0gODsKICAgIF9Xb3JkcyBfTV9sb2NhbF93
b3JkW19TX2xvY2FsX3dvcmRfc2l6ZV07CgoKICAgIGludCBfTV93b3JkX3NpemU7CiAgICBfV29y
ZHMqIF9NX3dvcmQ7CgogICAgX1dvcmRzJgogICAgX01fZ3Jvd193b3JkcyhpbnQgX19pbmRleCk7
CgoKICAgIGxvY2FsZSBfTV9pb3NfbG9jYWxlOwoKICAgIHZvaWQKICAgIF9NX2luaXQoKTsKCiAg
cHVibGljOgoKCgoKCiAgICBjbGFzcyBJbml0CiAgICB7CiAgICAgIGZyaWVuZCBjbGFzcyBpb3Nf
YmFzZTsKICAgIHB1YmxpYzoKICAgICAgSW5pdCgpOwogICAgICB+SW5pdCgpOwoKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgX1NfaW9zX2NyZWF0ZShib29sIF9fc3luYyk7CgogICAgICBzdGF0aWMg
dm9pZAogICAgICBfU19pb3NfZGVzdHJveSgpOwoKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyBp
bnQgX1NfaW9zX2Jhc2VfaW5pdDsKICAgICAgc3RhdGljIGJvb2wgX1Nfc3luY2VkX3dpdGhfc3Rk
aW87CiAgICB9OwoKCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKCkgY29uc3QgeyByZXR1
cm4gX01fZmxhZ3M7IH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIGZsYWdzKGZtdGZsYWdzIF9f
Zm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2Zs
YWdzID0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRm
bGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29s
ZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyB8PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19v
bGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBzZXRmKGZtdGZsYWdzIF9fZm10Zmws
IGZtdGZsYWdzIF9fbWFzaykKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsK
ICAgICAgX01fZmxhZ3MgJj0gfl9fbWFzazsKICAgICAgX01fZmxhZ3MgfD0gKF9fZm10ZmwgJiBf
X21hc2spOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQKICAgIHVu
c2V0ZihmbXRmbGFncyBfX21hc2spIHsgX01fZmxhZ3MgJj0gfl9fbWFzazsgfQoKICAgIGlubGlu
ZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oKSBjb25zdCB7IHJldHVybiBfTV9wcmVjaXNpb247
IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKHN0cmVhbXNpemUgX19wcmVj
KQogICAgewogICAgICBzdHJlYW1zaXplIF9fb2xkID0gX01fcHJlY2lzaW9uOwogICAgICBfTV9w
cmVjaXNpb24gPSBfX3ByZWM7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUg
c3RyZWFtc2l6ZQogICAgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfTV93aWR0aDsgfQoKICAgIGlu
bGluZSBzdHJlYW1zaXplCiAgICB3aWR0aChzdHJlYW1zaXplIF9fd2lkZSkKICAgIHsKICAgICAg
c3RyZWFtc2l6ZSBfX29sZCA9IF9NX3dpZHRoOwogICAgICBfTV93aWR0aCA9IF9fd2lkZTsKICAg
ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIHN0YXRpYyBib29sCiAgICBzeW5jX3dpdGhfc3Rk
aW8oYm9vbCBfX3N5bmMgPSB0cnVlKTsKCgogICAgbG9jYWxlCiAgICBpbWJ1ZShjb25zdCBsb2Nh
bGUmIF9fbG9jKTsKCiAgICBpbmxpbmUgbG9jYWxlCiAgICBnZXRsb2MoKSBjb25zdCB7IHJldHVy
biBfTV9pb3NfbG9jYWxlOyB9CgoKICAgIHN0YXRpYyBpbnQKICAgIHhhbGxvYygpIHRocm93KCk7
CgogICAgaW5saW5lIGxvbmcmCiAgICBpd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRz
JiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAg
PyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29y
ZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkK
ICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfc2l6ZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgPyBfTV93b3JkW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsK
ICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7Cgog
IHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKCiAgcHJpdmF0ZToKICAgIGlvc19iYXNlKGNv
bnN0IGlvc19iYXNlJik7CgogICAgaW9zX2Jhc2UmCiAgICBvcGVyYXRvcj0oY29uc3QgaW9zX2Jh
c2UmKTsKCiAgfTsKCgogIGlubGluZSBpb3NfYmFzZSYKICBib29sYWxwaGEoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9ib29sYWxwaGEoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93YmFzZShpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd2Jhc2UoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93YmFzZSk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb2ludChpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwog
ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb2ludChp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb2lu
dCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3dwb3Mo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3Bvcyhp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3dwb3Mp
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBza2lwd3MoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9za2lwd3MoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1cHBlcmNhc2UoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91cHBlcmNhc2UoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2Up
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICB1bml0YnVmKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1bml0YnVmKTsK
ICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdW5pdGJ1Zihp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjp1bml0YnVm
KTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBpbnRlcm5h
bChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aW50ZXJu
YWwsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlu
bGluZSBpb3NfYmFzZSYKICBsZWZ0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNl
dGYoaW9zX2Jhc2U6OmxlZnQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHJpZ2h0KGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnJpZ2h0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQp
OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZGVjKGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmRlYywgaW9zX2Jhc2U6
OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog
IGhleChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpoZXgs
IGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBp
b3NfYmFzZSYKICBvY3QoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf
YmFzZTo6b2N0LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
CiAgaW5saW5lIGlvc19iYXNlJgogIGZpeGVkKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OmZpeGVkLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNjaWVudGlmaWMoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2NpZW50aWZpYywgaW9zX2Jh
c2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgp9CiMgNTAgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVm
IiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCgoKCgoKCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpp
bnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9z
X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90
eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgY3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+
IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnN0
YXRlX3R5cGUgX19zdGF0ZV90eXBlOwoKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lvczxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hh
cl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19vc3RyZWFtPGNo
YXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIG9zdHJlYW1i
dWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CgogICAgICBmcmllbmQgc3RyZWFt
c2l6ZQogICAgICBfX2NvcHlfc3RyZWFtYnVmczw+KGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0
c190eXBlPiYgX19pb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlw
ZSogX19zYmluLF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpOwoKICAgIHByb3RlY3RlZDoKCgoK
CgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemU7CgoK
ICAgICAgc2l6ZV90IF9NX2J1Zl9zaXplX29wdDsKCgoKICAgICAgYm9vbCBfTV9idWZfdW5pZmll
ZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01f
aW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsKICAgICAgY2hhcl90eXBlKiBfTV9v
dXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01f
b3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX01fbW9kZTsKCgogICAgICBsb2Nh
bGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1Zl9sb2NhbGVfaW5pdDsKCgoKCgoK
ICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19wYmFja19zaXplID0gMTsKICAgICAgY2hhcl90
eXBlIF9NX3BiYWNrW19TX3BiYWNrX3NpemVdOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1
cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrX2VuZF9zYXZlOwogICAgICBib29sIF9N
X3BiYWNrX2luaXQ7CgoKICAgICAgZnBvczxfX3N0YXRlX3R5cGU+IF9NX3BvczsKCgoKCiAgICAg
IHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAgewogICAgICAgIGlmICghX01fcGJh
Y2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgc2l6ZV90IF9fZGlzdCA9IF9NX2luX2Vu
ZCAtIF9NX2luX2N1cjsKICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9TX3BiYWNrX3Np
emUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX3BiYWNrLCBfTV9p
bl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfTV9pbl9jdXI7
CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5fZW5kOwogICAgICAgICAgICB0
aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sgKyBfX2xlbik7CiAgICAgICAg
ICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICB2
b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAgICAgICAgaWYgKF9NX3BiYWNr
X2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBzaXplX3QgX19vZmZfY3VyID0gX01faW5f
Y3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2VuZCA9IDA7CiAgICAg
ICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2VuZCAtIF9NX3BiYWNrOwogICAgICAg
ICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAg
ICAgICAgICBpZiAoX19wYmFja19sZW4gPiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2Zm
X2VuZCA9IF9fcGJhY2tfbGVuIC0gX19zYXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGco
X01fYnVmLCBfTV9wYmFja19jdXJfc2F2ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAg
ICAgICBfTV9wYmFja19lbmRfc2F2ZSArIF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNr
X2N1cl9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVs
bDsKICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9
CgoKCiAgICAgIHZvaWQKICAgICAgX01faW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7
CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciAr
PSBfX247CiAgICAgICAgaWYgKF9fdGVzdG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAg
IF9NX291dF9jdXIgKz0gX19uOwogICAgICB9CiMgMjAyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9z
dHJlYW1idWYiIDMKICAgICAgdm9pZAogICAgICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19u
KQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01f
b3V0X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQog
ICAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291
dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoK
ICAgICAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247
CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZf
c2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZfdHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9N
X291dF9jdXIpCiAgICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9i
dWYpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9v
dXRfY3VyOwoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2Vu
ZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9
CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAg
ewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAw
OwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
OjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAg
fQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAg
ICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5p
bWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUK
ICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2lu
aXQpCiAgICAgICAgICByZXR1cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAg
ICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAg
ICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVy
biB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVr
b2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6
Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7
IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9
CgogICAgICBpbnQKICAgICAgcHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgog
ICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNp
emUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQp
CiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUg
LSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9
IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVu
IC0gX19wYmFja19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQog
ICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAg
cmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAg
ICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg
cmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQog
ICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBp
bnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAg
ICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01f
aW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRo
aXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3Ry
ZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAg
IHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAg
ICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRj
KCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBz
dHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVm
X3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4MTkyKSwKICAgICAgX01fYnVmX3VuaWZpZWQoZmFs
c2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLAogICAgICBfTV9v
dXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBfTV9vdXRfZW5kKDApLAogICAgICBfTV9tb2RlKGlv
c19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9i
dWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9wYmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5k
X3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNo
YXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAg
IGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAg
ICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoK
ICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAg
ICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0
LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsK
ICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsK
ICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4
dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsK
ICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBf
TV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVy
biBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyBy
ZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9N
X291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3Bi
ZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291
dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAo
IShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAg
IF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0
dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAg
IF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0g
X19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2
aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1Zihj
aGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0
dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAog
ICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZp
cnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJl
dHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBz
eW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93
bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNn
ZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90
eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsg
fQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBp
bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVv
ZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOwog
ICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9p
bl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAg
IHsKICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1
cik7CiAgICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZp
ZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3Vy
OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1
YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigp
KQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0
cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f
bik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJh
aXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA0
ODUgIi91c3IvaW5jbHVkZS9jKysvMy4yL3N0cmVhbWJ1ZiIgMwogICAgcHJpdmF0ZToKICAgICAg
YmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IH07CgogICAgICBfX3N0
cmVhbWJ1Zl90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsg
cmV0dXJuICp0aGlzOyB9OwoKICAgIH07Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2JpdHMvc3RyZWFtYnVmLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMv
c3RyZWFtYnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYg
KF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAg
Y2hhcl90eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3Zl
KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJl
dHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Omlu
dF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFj
a2MoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wg
X190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9v
bCBfX3Rlc3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0
cigpWy0xXSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0
ID0gdGhpcy0+cGJhY2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9f
cmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHN1bmdldGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1
ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3Vy
X21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9N
X2luX2N1cik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFj
a2ZhaWwoKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUg
X19yZXQ7CiAgICAgIGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAq
X01fb3V0X2N1ciA9IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAg
IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoX19jKSk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFt
YnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChf
X3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5f
ZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAg
ICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAg
ICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAg
ICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAg
ICAgICAgICAgX01faW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAg
aWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j
ID0gdGhpcy0+dWZsb3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hh
cl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAg
ICAgIHdoaWxlIChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1
Zl9sZW4gPSBfTV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBf
X3JldDsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVt
YWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3Ms
IF9fbGVuKTsKICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3Mg
Kz0gX19sZW47CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAg
ICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGludF90eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlw
ZSgqX19zKSk7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVh
bWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAg
ICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQog
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAg
ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9f
c2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9f
dGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAg
ICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2J1ZnNpemUgIT0gMCAmJiBfX3NiaW4tPmdw
dHIoKSAhPSBfX251bGwKICAgICAgICAgICAgICAgICAgJiYgX19zYmluLT5ncHRyKCkgKyBfX2J1
ZnNpemUgPD0gX19zYmluLT5lZ3B0cigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICBfX3h0cmN0ID0gX19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7
CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIF9f
c2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJjdCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0
cmN0ICE9IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIHNpemVfdCBfX3NpemUgPQogICAgICAgICAgICAgICAgICAgIF9fc2Jpbi0+X01fYnVmX3Np
emVfb3B0ID4gMCA/IF9fc2Jpbi0+X01fYnVmX3NpemVfb3B0IDogMTsKICAgICAgICAgICAgICAg
ICAgX0NoYXJUKiBfX2J1ZiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJU
Kj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fc2l6ZSkpOwogICAgICAgICAg
ICAgICAgICBzdHJlYW1zaXplIF9fY2hhcnNyZWFkID0gX19zYmluLT5zZ2V0bihfX2J1ZiwgX19z
aXplKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNwdXRuKF9fYnVmLCBf
X2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9IF9feHRyY3Q7CiAgICAgICAg
ICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFkKQogICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9p
bnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigpKSkKICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAg
ICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgIT0gMCkKICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8Y2hhcj47CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8Y2hh
cj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPGNoYXI+Kik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFt
YnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5
X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdjaGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+
KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwoKfQoj
IDQ5OSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2lj
X2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAx
IDMKIyA0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWZfaXRlcmF0b3IuaCIg
MwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJh
dG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw
ZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJs
aWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp
bnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBz
dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBtdXRhYmxlIHN0cmVh
bWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBfTV9jOwoKICAgIHB1YmxpYzoKICAg
ICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKDApLCBfTV9j
KHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJl
YW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2Mo
dHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFt
YnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fYyh0cmFpdHNf
dHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25z
dAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9NX2dldCgpKTsgfQoK
ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg
ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBp
ZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c2J1bXBjKCks
IF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9N
X2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIGlzdHJlYW1i
dWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBpc3RyZWFtYnVmX2l0
ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9NX3NidWYKICAgICAgICAgICAgJiYg
dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9jID0gX01fc2J1Zi0+c2J1bXBjKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lb2YpKQogICAgICAg
ICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAgICAgX01fYyA9IF9fZW9mOwogICAg
ICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGhpc2Vv
ZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQoKSwgX19lb2YpOwogICAgICAgIGJv
b2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYi5fTV9nZXQoKSwgX19lb2Yp
OwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAh
X19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAgICAgaW50X3R5cGUKICAgICAgX01f
Z2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0ID0gX19lb2Y7CiAgICAgICAgaWYg
KF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX3Jl
dCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9zYnVmID0g
MDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRz
PiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVhbChfX2IpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19h
LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJh
dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk
LCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsKCiAgICBw
cml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgYm9vbCBfTV9mYWls
ZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihv
c3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwg
X01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFt
YnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ZhaWxlZCgh
X01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0o
X0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcioo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsg
fQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wKICAgICAgZmFpbGVkKCkgY29uc3Qg
dGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBvc3RyZWFtYnVmX2l0
ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoIV9NX2ZhaWxl
ZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01fc2J1Zi0+c3B1dGMoX19jKSwg
X1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9IHRydWU7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KfQojIDQxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5o
IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAz
CiMgNDQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvY3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1
ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xpYi9nY2MtbGliL2kzODYtbGlu
dXgvMy4yLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUu
aCIgMiAzCiMgNDUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwoKCgojIDY0ICIvdXNyL2luY2x1
ZGUvd2N0eXBlLmgiIDMKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB3Y3R5cGVfdDsKCiMg
ODYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVtCnsKICBfX0lTd3VwcGVyID0gMCwKICBf
X0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwKICBfX0lTd2RpZ2l0ID0gMywKICBfX0lT
d3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAgX19JU3dwcmludCA9IDYsCiAgX19JU3dn
cmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19JU3djbnRybCA9IDksCiAgX19JU3dwdW5j
dCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lTd3VwcGVyID0gKChfX0lTd3VwcGVyKSA8
IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpIDw8IDI0KSA6ICgoX19JU3d1cHBlcikg
PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIp
IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDgpIDogKGludCkgKCgxVUwg
PDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lTd2xvd2VyID0gKChfX0lTd2xvd2VyKSA8
IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpIDw8IDI0KSA6ICgoX19JU3dsb3dlcikg
PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIp
IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDgpIDogKGludCkgKCgxVUwg
PDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2FscGhhID0gKChfX0lTd2FscGhhKSA8
IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8IDI0KSA6ICgoX19JU3dhbHBoYSkg
PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEp
IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDgpIDogKGludCkgKCgxVUwg
PDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lTd2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8
IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3dkaWdpdCkg
PCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQp
IDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwg
PDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lTd3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQp
IDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3d4ZGln
aXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4
ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQp
ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3
c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgMjQpIDogKChfX0lT
d3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCA4KSA6ICgoX19J
U3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkpKSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3
cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgMjQpIDogKChfX0lT
d3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCA4KSA6ICgoX19J
U3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkpKSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3
Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgMjQpIDogKChfX0lT
d2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19J
U3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkpKSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3
YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgMjQpIDogKChfX0lT
d2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCA4KSA6ICgoX19J
U3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkpKSwKICBfSVN3Y250cmwgPSAoKF9fSVN3
Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgMjQpIDogKChfX0lT
d2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCA4KSA6ICgoX19J
U3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkpKSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3
cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgMjQpIDogKChfX0lT
d3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCA4KSA6ICgoX19J
U3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkpKSwKICBfSVN3YWxudW0gPSAoKF9fSVN3
YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgMjQpIDogKChfX0lT
d2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCA4KSA6ICgoX19J
U3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50
KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoK
CgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3
Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dkaWdpdCAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193Yykg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dz
cGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d1cHBlciAod2lu
dF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3dj
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5rICh3aW50X3QgX193YykgdGhyb3cg
KCk7CiMgMTg2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuIHdjdHlwZV90IHdjdHlw
ZSAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dj
dHlwZSAod2ludF90IF9fd2MsIHdjdHlwZV90IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgoKCgp0
eXBlZGVmIF9fY29uc3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKCgoKCgpleHRlcm4gd2ludF90
IHRvd2xvd2VyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBl
ciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCn0KIyAyMjggIi91c3IvaW5jbHVkZS93Y3R5cGUu
aCIgMwpleHRlcm4gIkMiIHsKCgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoX19jb25zdCBj
aGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRvd2N0cmFucyAod2lu
dF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBpbnQg
aXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgaXN3YWxwaGFfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmxfbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0X2wgKHdpbnRf
dCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3dn
cmFwaF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGlzd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3cHVuY3RfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dzcGFj
ZV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IGlzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3YmxhbmtfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0eXBlX3Qgd2N0
eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBl
X3QgX19kZXNjLCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIHdpbnRfdCB0b3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2Nh
bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFuc19sIChf
X2NvbnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBf
X2Rlc2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo
cm93ICgpOwoKCgp9CiMgNTMgIi91c3IvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n
IDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1
c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsK
ICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFw
aDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dw
cmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjpp
c3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5n
IDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1
c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2lvcyIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIgMSAzCiMgMzYgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5
cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0IGludCogX190b190eXBlOwoKCgogICAgdHlw
ZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBf
SVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0
aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhhOwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGln
aXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsK
ICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0gX0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3Qg
bWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNn
cmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNudHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0g
PSBfSVNhbG51bTsKICB9OwojIDY0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jh
c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAg
ICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog
ICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFz
ayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9f
dmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
c2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBw
ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihf
X2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNo
YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xv
d2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0
IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo
YXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywg
X19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNo
YXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9f
ZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBf
X2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93
KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw
bGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0
cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20s
IGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf
X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIo
Y2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9f
ZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFy
X3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0
KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg
X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy
X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj
aGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu
KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy
IF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+
OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5
cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj
aGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j
YWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7
CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsK
CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEp
OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJv
b2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29s
IF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlu
bGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxp
bmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o
aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj
YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0
OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy
biBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFi
bGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo
YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog
ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5
cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo
YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNl
X2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8
PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl
PHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3Qg
X19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xv
Yywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBl
CiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAg
dmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyht
YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs
dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93
KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAg
ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1w
bGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4y
L2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2kzODYtbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxj
aGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3RhYmxl
W3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNvbnN0IGNoYXIq
CiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp
Z2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAg
ICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cr
KyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46
OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hp
Z2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgIShf
TV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCiAgICAg
ICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNo
YXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIq
IF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAm
JiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9
IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4K
ICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVm
cyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1l
KCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5
cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0
eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVm
cyk7CgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0
X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAg
IHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0
YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJu
VCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAg
dHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0
ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29u
c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l
eHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAog
ICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICBy
ZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25l
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0
KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg
ICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
dW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3Vs
dAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t
LAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAg
IHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5k
LCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQs
IF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRo
cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAog
ICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5k
b19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVf
dHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNv
bnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAg
ICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAg
ICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3Rf
YmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBp
bnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmly
dHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5f
dHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAg
ICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90
eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3co
KSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0
IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0
YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29u
c3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZp
cnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBl
bmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fi
c3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVk
ZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5
cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKICAgIHB1YmxpYzoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3Vs
dAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0
ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGlu
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJv
dygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0
aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5
cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0
ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQK
ICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAg
ICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoK
ICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4K
ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAg
dHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90
eXBlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs
aWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAg
IGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAog
ICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90
eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBf
X3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z
dCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190
bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9f
bmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0
IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNv
bnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3Rh
dGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25z
dCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBs
YXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBw
dWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pgog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBlOwogICAg
ICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRl
X3R5cGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl
LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u
ZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1
YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp
cnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l
bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf
bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k
ZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+
CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBf
RXh0ZXJuVCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwoKCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvY29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMSAz
CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jb2RlY3Z0X3NwZWNp
YWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRzCiAgewogIHB1YmxpYzoKCgoKICAg
IHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMg
Y29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hhciBfTV9pbnRfZW5jW19TX21heF9z
aXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3NpemVdOwoKCiAgICBfX2Rlc2NfdHlw
ZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291dF9kZXNjOwoKCiAgICBpbnQgX01f
ZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1YmxpYzoKICAgIGV4cGxpY2l0IF9f
ZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRf
Ym9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1lbXNldChfTV9pbnRfZW5jLCAwLCBf
U19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAg
ICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0IGNoYXIqIF9faW50LCBjb25zdCBj
aGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pYm9tID0gMCwgaW50
IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApLCBfTV9leHRf
Ym9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19p
bnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX2V4dCwgX1NfbWF4
X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRzKGNvbnN0IF9fZW5jX3RyYWl0cyYg
X19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKQogICAgewogICAgICBzdHJuY3B5
KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNw
eShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4
dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50
X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAgb3BlcmF0b3I9KGNvbnN0IF9fZW5j
X3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01f
aW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9N
X2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5fZGVzYyA9IDA7CiAgICAgIF9NX291
dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9N
X2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
ICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRl
cnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChfTV9pbl9kZXNjICYmIF9NX2luX2Rl
c2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01faW5fZGVzYyk7CiAgICAgIGlmIChf
TV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikKICAgICAgICBpY29udl9jbG9zZShf
TV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01faW5pdCgpCiAgICB7CiAgICAgIGNv
bnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAg
ICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9kZXNjID0gaWNv
bnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAgICAgIGlmIChfTV9pbl9kZXNj
ID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoImNyZWF0aW5nIGlj
b252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgICAgaWYgKCFfTV9v
dXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRfZGVzYyA9IGljb252X29wZW4oX01f
ZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAoX01fb3V0X2Rlc2MgPT0gX19lcnIp
CiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3JlYXRpbmcgaWNvbnYgb3V0cHV0
IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBfTV9n
b29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9j
YXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3QgPSBfTV9pbl9kZXNjICYmIF9NX2lu
X2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVz
YyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0KCiAgICBjb25zdCBfX2Rlc2Nf
dHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9pbl9kZXNj
OyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKQog
ICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50CiAgICBfTV9nZXRfZXh0ZXJuYWxf
Ym9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAgICBpbnQKICAgIF9NX2dldF9pbnRl
cm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsgfQoKICAgIGNvbnN0IGNoYXIqCiAg
ICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9NX2ludF9lbmM7IH0KCiAgICBj
b25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygpCiAgICB7IHJldHVybiBfTV9leHRf
ZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0
cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu
VCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0
X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7
CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNf
dHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzOjpfX2Rlc2NfdHlw
ZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgX19lbmNfdHlwZTsKCgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQo
c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJu
X3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBfX2VuYywgc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90
eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAg
ZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAg
ICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5
cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f
dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f
c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq
IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv
LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29uc3Qg
dGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252KCkgY29u
c3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0
ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0
IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgbG9jYWxlOjppZAog
ICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OmlkOwoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6ZV90CiAgICBfX2ljb252X2FkYXB0
b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCop
LAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwgY2hhcioqIF9faW5idWYsIHNpemVf
dCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNoYXIqKiBfX291dGJ1Ziwgc2l6ZV90
KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9fY2QsIChfVClfX2luYnVmLCBfX2lu
Ynl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50
ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29k
ZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fb3V0KHN0YXRl
X3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgY29u
c3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25l
eHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwK
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVz
dWx0IF9fcmV0ID0gY29kZWN2dF9iYXNlOjplcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29v
ZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUg
X19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0
ZS5fTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0
aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mYnl0ZXMgPSBf
X2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVf
dCBfX3RtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190
Ynl0ZXMgPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hh
ciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIq
IF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9f
aW50X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9f
aW50X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zy
b21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0
YXRpY19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5
cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNf
Y2FzdDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxp
bnRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAg
ICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAg
ICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9t
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmJ5dGVzLCAmX19j
dG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJu
X3R5cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9y
KGljb252LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihf
X2Nmcm9tKTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVy
bl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsK
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKF9fZmJ5dGVzIDwgX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3Rv
X25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAg
ICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6
ZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29k
ZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190
cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUq
IF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUq
JiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFz
ZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAg
ICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAg
Y29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3Io
KTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlw
ZSk7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBf
X3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
X190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCpf
X2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90
KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9fdGxlbiA9PSBf
X3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAgX19yZXQgPSBj
b2RlY3Z0X2Jhc2U6Om5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkK
ICAgICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6
ZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVz
dWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk
b19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAg
ICAgIHJlc3VsdCBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJyb3I7CiAgICAgIGlmIChfX3N0YXRl
Ll9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVz
Y190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9
IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBf
X2ZtdWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVu
ID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBz
aXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90
IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBj
aGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hh
ciogX19jZnJvbTsKICAgICAgICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQg
X19leHRfYm9tID0gX19zdGF0ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAo
X19leHRfYm9tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9f
ZnJvbV9lbmQgLSBfX2Zyb207CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0g
c3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5f
dHlwZSkgKiAoX19zaXplICsgMSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRp
Y19jYXN0PGV4dGVybl90eXBlPihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRz
PGV4dGVybl90eXBlPjo6Y29weShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAg
ICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAg
ICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zy
b20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0
bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5
cGUqPihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGlj
b252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAg
ICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9t
KTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBl
Kj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gY29kZWN2dF9iYXNlOjpvazsKICAgICAg
ICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f
ZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25l
eHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAg
ICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6cGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGNvZGVjdnRfYmFzZTo6ZXJy
b3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAg
ICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNv
ZGluZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYg
KHNpemVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNp
emVvZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBi
b29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBk
b19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAg
ICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5n
dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7
IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsg
fQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAg
IGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAg
ZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzMzUgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAyIDMKIyA0MjYgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBfX251bV9iYXNl
CiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAg
ICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsgMTAsCiAg
ICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAgIH07CgoK
CiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNlJiBfX2lv
LCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6
ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3Nf
YmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsK
CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlw
ZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAg
ICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fdHJ1
ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoK
ICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAg
ICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1w
dW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hh
cl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k
b190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBl
CiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUo
KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19k
ZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoK
ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAg
ICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBk
b19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAg
ICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBf
X251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjpp
ZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVtcGxhdGU8PgogICAgbnVtcHVuY3Q8Y2hhcj46
On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBudW1wdW5jdDxjaGFyPjo6
X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTw+
CiAgICBudW1wdW5jdDx3Y2hhcl90Pjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZv
aWQKICAgIG51bXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2Nh
bGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1
bmN0X2J5bmFtZSA6IHB1YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CgogICAgICBfX2NfbG9j
YWxlIF9NX2NfbG9jYWxlX251bXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190
eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqIF9f
cywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbnVtcHVuY3Q8X0NoYXJUPihfX3JlZnMpCiAg
ICAgIHsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QsIF9f
cyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfTV9jX2xvY2FsZV9udW1wdW5jdCk7
CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0X2J5
bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCk7
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIGNsYXNzIG51bV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIF9fbnVtX2Jh
c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgbnVtX2dldChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192
KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0
KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg
IGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHVuc2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0
KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgbG9uZyYgX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
Z2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7
IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9mbG9hdChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAgICAgICAgICAgICAgICAg
ICAgICAgc3RyaW5nJiBfX3h0cmMpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2V4
dHJhY3RfaW50KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0
YXRlJiwKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGJvb2wmKSBjb25zdDsKCgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBsb25nJikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0
JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBl
LCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAg
ICAgICAgdW5zaWduZWQgaW50JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jh
c2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGxvbmcmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlv
c3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZmxvYXQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBkb3VibGUmKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg
aW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBsb25nIGRv
dWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAg
ICAgICAgICAgIHZvaWQqJikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6aWQ7CiMgNzIxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBj
bGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg
X19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFy
X3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAg
ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf
dHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1
dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0
ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBs
b25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9f
ZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBf
X3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB2b2lk
KiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxs
LCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU
PgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfZmxvYXQoaXRlcl90eXBlLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVydF9pbnQoaXRlcl90
eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAgICAg
aXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICAgIGludCBf
X2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5faW50KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg
ICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX2lu
c2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAg
dmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg
ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBf
X3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf
dHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90
eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwg
bG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcg
bG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f
ZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCBudW1fcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAgICBfX2NfbG9jYWxlIF9NX2Nf
bG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
bG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2NhbGVfY29sbGF0ZSA9IF9TX2Nf
bG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19sb2NhbGUgX19jbG9j
LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAg
eyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19jbG9jKTsgfQoKICAg
ICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBf
X2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9f
aGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwg
X19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0
IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChj
b25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAogICAgICBfTV9jb21w
YXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0OwoKICAgICAgc2l6ZV90CiAg
ICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBzaXplX3QpIGNvbnN0OwoK
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGUoKQogICAgICB7IF9TX2Rl
c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0KCiAgICAgIHZpcnR1YWwgaW50
CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hp
MSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9f
aGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJhbnNmb3Jt
KGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJU
KiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv
Y2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGludAogICAg
Y29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0
OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9y
bShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBp
bnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29uc3Qgd2NoYXJfdCosIGNvbnN0
IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAgICBjb2xsYXRlPHdj
aGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLCBzaXplX3QpIGNv
bnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5h
bWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz
dHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVm
cykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0
ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7
CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnlu
YW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVu
dW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxv
Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7
CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJU
KiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9j
X2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVf
ZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0
ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1h
dDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAg
IGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgw
NzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0No
YXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAg
Y29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhf
YTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBj
b25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9h
MDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ex
MjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBf
X3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2NhbGUg
X19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIHZvaWQK
ICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCog
X19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lk
CiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAg
IHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFd
ID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVf
Zm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190
aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFf
Zm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiog
X19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAg
X19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1l
X2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0
WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1l
X2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hh
clQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwog
ICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsK
ICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7
CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3
OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0No
YXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2Ex
OwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9k
YXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9
IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlz
WzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25z
dCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0g
X01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19t
b250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsK
ICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBf
TV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21v
bnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5Owog
ICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBf
TV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9u
dGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAg
ICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBf
TV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAg
X19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250
aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250
aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7
CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBd
ID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAg
ICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsK
CgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19j
bG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv
Y2FsZTo6aWQgX190aW1lcHVuY3Q8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25z
dCBjaGFyKgogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBs
YXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX3RpbWVw
dW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGlt
ZXB1bmN0PGNoYXI+OjpfTV9wdXQoY2hhciosIHNpemVfdCwgY29uc3QgY2hhciosIGNvbnN0IHRt
KikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVu
Y3Q8d2NoYXJfdD46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAg
IF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxl
IF9fY2xvYyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+
OjpfTV9wdXQod2NoYXJfdCosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJUPgogICAgY29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1l
em9uZXNbMTRdOwoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL3Rp
bWVfbWVtYmVycy5oIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9i
aXRzL3RpbWVfbWVtYmVycy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX190
aW1lcHVuY3Q8X0NoYXJUPjo6X190aW1lcHVuY3Qoc2l6ZV90IF9fcmVmcykKICAgIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpCiAgICB7CgoKCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGltZXB1bmN0PF9DaGFy
VD46Ol9fdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzKQogICAgOiBsb2Nh
bGU6OmZhY2V0KF9fcmVmcykKICAgIHsKCgoKCiAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0
KF9fY2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9fdGltZXB1
bmN0PF9DaGFyVD46On5fX3RpbWVwdW5jdCgpCiAgICB7CgoKCgogICAgICBfU19kZXN0cm95X2Nf
bG9jYWxlKF9NX2NfbG9jYWxlX3RpbWVwdW5jdCk7CiAgICB9CiMgMTE1OCAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRh
dGVvcmRlcgogICAgICBkYXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
ZGF0ZV9vcmRlcigpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5kb19nZXRfdGltZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn
ZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f
aW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0p
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFt
ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8s
IF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0X3llYXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2
aXJ0dWFsIGRhdGVvcmRlcgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fZ2V0X2RhdGUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVt
KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAg
ICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQK
ICAgICAgX01fZXh0cmFjdF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQs
IGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25h
bWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VycikgY29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9m
b3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1h
dCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1l
X2dldF9ieW5hbWUgOiBwdWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNv
bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9J
bkl0ZXI+KF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50
aW1lX2dldF9ieW5hbWUoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZh
Y2V0LCBwdWJsaWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXpl
X3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcs
IGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChp
dGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAg
IGNvbnN0IHRtKiBfX3RtLCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1h
dCwgX19tb2QpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1
dCgpCiAgICAgIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf
dHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190
bSwKICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2Fs
ZTo6aWQgdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDog
cHVibGljIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90
eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwg
c2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19y
ZWZzKQogICAgICB7IH07CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l
X3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1Ymxp
YzoKICAgIGVudW0gcGFydCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAg
ICBzdHJ1Y3QgcGF0dGVybiB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBh
dHRlcm4gX1NfZGVmYXVsdF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2Nv
bnN0cnVjdF9wYXR0ZXJuKGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9z
bik7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xh
c3MgbW9uZXlwdW5jdCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQog
ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaW50bCA9IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBw
cml2YXRlOgogICAgICBjb25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9N
X2RlY2ltYWxfcG9pbnQ7CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBj
b25zdCBjaGFyX3R5cGUqIF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9N
X3Bvc2l0aXZlX3NpZ247CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsK
ICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAg
ICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMp
CiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90
IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAg
IGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3Bv
aW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAg
ICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9
CgogICAgICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBv
c2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWdu
KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBm
cmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7
IH0KCiAgICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhv
dXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAg
ICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vy
cl9zeW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVf
c2lnbjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAg
ICAgIGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9
CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5pdGlh
bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVsbCk7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1v
bmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IGJvb2wgX0ludGw+CiAgICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46Omlu
dGw7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0
KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5j
dCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+Ojpf
TV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKICB0ZW1w
bGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6
ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRlPD4KICAg
IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4K
ICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0
ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXpl
X21vbmV5cHVuY3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZv
aWQKICAgIG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVu
Y3QoX19jX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlw
dW5jdDxfQ2hhclQsIF9JbnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21v
bmV5cHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1
bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1v
bmV5cHVuY3Q8X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRl
X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlh
bGl6ZV9tb25leXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsg
X1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25l
eXB1bmN0X2J5bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxv
Y2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlk
OwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv
Y2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90
eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lv
LCBfX2VyciwgX191bml0cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBl
IF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywg
X19lcnIsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+
bW9uZXlfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl
cl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3Vu
aXRzKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5
cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRz
KSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIGxvY2FsZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9u
ZXlfcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlw
ZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAog
ICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5p
dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p
bnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0
cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9f
cywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg
ICAgY29uc3Qgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsK
ICAgIHR5cGVkZWYgaW50IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgY2xhc3MgbWVzc2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3Nh
Z2VzX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBw
cm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKICAgICAg
Y2hhciogX01fbmFtZV9tZXNzYWdlczsKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6
OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDAp
OwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25z
dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGNhdGFsb2cKICAgICAgb3Bl
bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNh
dGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUm
LCBjb25zdCBjaGFyKikgY29uc3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxv
ZyBfX2MsIGludCBfX3NldCwgaW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3Mp
OyB9CgogICAgICB2b2lkCiAgICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19jbG9zZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs
CiAgICAgIH5tZXNzYWdlcygpOwoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4o
Y29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qg
c3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBk
b19jbG9zZShjYXRhbG9nKSBjb25zdDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3Rv
X2NoYXIoY29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNf
c3RyKCkpKTsKICAgICAgfQoKCiAgICAgIHN0cmluZ190eXBlCiAgICAgIF9NX2NvbnZlcnRfZnJv
bV9jaGFyKGNoYXIqIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdCBfX2xlbiA9
IGNoYXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19tc2cpIC0gMTsKIyAxNzAzICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMwogICAgICAgIHJldHVybiBzdHJpbmdf
dHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
bG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmlu
ZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3Ry
aW5nJikgY29uc3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICB3c3RyaW5nCiAgICBtZXNzYWdlczx3Y2hh
cl90Pjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25zdCB3c3RyaW5nJikgY29uc3Q7CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBw
dWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D
aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5n
X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciog
X19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAg
ICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAxIDMKIyAzNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNz
YWdlcyhzaXplX3QgX19yZWZzKQogICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgewoK
CgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsKICAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgICBtZXNzYWdlczxfQ2hhclQ+OjptZXNzYWdlcyhf
X2NfbG9jYWxlIF9fY2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj
aGFyKiBfX3MsIHNpemVfdCBfX3JlZnMpCiAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAg
ICB7CgoKCgogICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShf
X2Nsb2MpOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUg
bWVzc2FnZXM8X0NoYXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25z
dCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJp
bmR0ZXh0ZG9tYWluKF9fcy5jX3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19v
cGVuKF9fcywgX19sb2MpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
bWVzc2FnZXM8X0NoYXJUPjo6fm1lc3NhZ2VzKCkKICAgIHsKCgoKCiAgICAgIF9TX2Rlc3Ryb3lf
Y19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNz
YWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2NhbGUmKSBjb25zdAogICAgewoKCiAg
ICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAgICByZXR1cm4gMDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9f
Y2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQoKCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgICBtZXNzYWdlc19ieW5hbWU8X0NoYXJUPjo6bWVzc2FnZXNfYnluYW1lKGNvbnN0IGNo
YXIqIF9fcywgc2l6ZV90IF9fcmVmcykKICAgICA6IG1lc3NhZ2VzPF9DaGFyVD4oX19yZWZzKQog
ICAgIHsKCgoKCgoKICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2Fn
ZXMpOwogICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3Mp
OwogICAgIH0KIyAxNzM5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRy
bChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0No
YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywg
Y29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+
ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVf
YmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu
bGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl
OjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3Jh
cGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFy
VAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0No
YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6
IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg
Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0
eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+
IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwg
X1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQs
IF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlw
ZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoK
ICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90
aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBf
TV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9z
dHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5cGU7CgogICAgICBj
b25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlw
ZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4o
dGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAog
ICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xl
YXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRl
KGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBf
X3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9v
bAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChi
YWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBiYWQoKSBjb25zdAog
ICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBp
b3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRp
b247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAg
ICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIo
X01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj
X2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgp
CiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNf
aW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0
aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJl
dHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9Cgog
ICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAg
ICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAg
IGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICAgICAgICBf
TV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfTV9maWxsOwog
ICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAg
ewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxs
ID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAg
ICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhj
aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAg
ICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9z
KCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hl
Y2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAg
aWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2Fs
ZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFz
aWNfaW9zLnRjYyIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z
LnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNs
ZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAgICAg
ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAgICAgX01f
c3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5yZHN0
YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUo
ImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpy
ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwog
ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1
cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAg
ICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29y
ZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMuX01fd29y
ZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNr
czsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAg
ICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9N
X2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAg
ICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7
CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg
PCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhz
Ll9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg
ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog
ICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6ZSA9IF9f
cmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAg
ICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhz
LnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+
ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRp
b25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhj
aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFyIF9fcmV0
ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAg
IF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBf
X2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlw
ZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAg
bG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9j
KTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkg
IT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVy
biBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6
X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9N
X3RpZSA9IDA7CiMgMTU5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy50Y2Mi
IDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsK
CiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7
CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lk
CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxv
Y2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xv
YykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsK
ICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9f
bnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251
bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAg
ICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdl
dCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAg
X01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19p
b3M8Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9zPHdjaGFyX3Q+OwoK
fQojIDIwOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMgNTIg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4y
L29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFsIHB1
YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190
eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9m
Zl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg
ICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1i
dWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+
IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7
CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJh
c2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFz
cyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9fb3N0
cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5
cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikg
KGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv
bmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVk
IGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJvb2wg
X19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9fbikK
ICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkg
JiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3Qg
fHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9y
PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9fbikp
OwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg
PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19mbXQg
JiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJldHVy
biB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24pKSk7
CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlzLT5v
cGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5cGUK
ICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3NfdHlw
ZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNl
OjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50
cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9U
cmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShi
YXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAg
ICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1
bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5y
ZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBf
TV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAg
ICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg
X19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9f
Yyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxj
aGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0
YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0No
YXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAg
dGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25z
dCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0
IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNs
YXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJh
dG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVk
IGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0
IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29z
LnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
ZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBf
X29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2go
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5m
bHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL29zdHJlYW0u
dGNjIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9vc3RyZWFtLnRjYyIgMwoK
IyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9sb2NhbGUiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVf
ZmFjZXRzLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDEgMwojIDQ3
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Vycm5v
LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMv
ZXJybm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMKCgoKIyAxICIv
dXNyL2luY2x1ZGUvYXNtL2Vycm5vLmgiIDEgMwojIDUgIi91c3IvaW5jbHVkZS9saW51eC9lcnJu
by5oIiAyIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzCiMgMzggIi91c3Iv
aW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9p
ZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1
ZGUvZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFy
ICpwcm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1l
OwoKCgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7
CiMgNDkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMiAzCiMgMzkgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvY21hdGgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwoK
CgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDEg
MwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRl
Zi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUg
ZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDY1ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDUz
ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwoKCmV4dGVybiBkb3VibGUgYWNvcyAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRh
biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNp
biAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUg
Y29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19jb3NoIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19zaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvcyAoZG91YmxlIF9feCwgZG91
YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5j
b3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu
aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBkb3VibGUgZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwg
aW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUg
X194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRv
dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhw
IChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs
b2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f
ZXhwMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBwb3cxMCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs
b2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRl
cm4gZG91YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhw
MiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3BvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBzcXJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3NxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgaHlwb3Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNi
cnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjZWlsIChkb3VibGUgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jZWlsIChk
b3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fZmxv
b3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IF9faXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5m
IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fY29w
eXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdi
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19u
YW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFuIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFuIChkb3VibGUg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBk
b3VibGUgajAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSB0
aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqMSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2oxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGpuIChpbnQsIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qbiAoaW50LCBkb3VibGUpIHRocm93ICgpOwpleHRl
cm4gZG91YmxlIHkwIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJs
ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX195MSAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19lcmYgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgbGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3Vi
bGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX3RnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
ZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRv
dWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50
ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91YmxlIHJpbnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmludCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBuZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25l
eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKZXh0ZXJuIGRvdWJsZSBuZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGRvdWJsZSBfX25leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIHJlbWFpbmRl
ciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yZW1h
aW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl
IHNjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z
Y2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2di
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQg
X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcg
aW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRy
dW5jIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBkb3VibGUgX190cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJs
ZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3Vi
bGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv
bmcgaW50IGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJp
bnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2ZkaW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBk
b3VibGUgZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19mbWF4IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91
YmxlIGZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZm1pbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
X19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0
aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJs
ZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRl
cm4gZG91YmxlIF9fZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRo
cm93ICgpOwojIDY2ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4OCAiL3Vzci9pbmNsdWRl
L21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1MyAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpleHRlcm4gZmxvYXQgYWNvc2YgKGZs
b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93
ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19hc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZmxvYXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19j
b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Npbmhm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB2b2lkIHNpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQgKl9fY29z
eCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z
aW54LCBmbG9hdCAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5o
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGZsb2F0IGV4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2V4cGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGZyZXhwZiAoZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19mcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRl
cm4gZmxvYXQgbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fbGRleHBmIChmbG9hdCBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgbG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bG9nZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMTBmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19tb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2V4cDEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBwb3cxMGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19leHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0
IGxvZzFwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoK
CgpleHRlcm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19wb3dmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IHNxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoK
CgoKCmV4dGVybiBmbG9hdCBjZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQg
X19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2Zsb29yZiAoZmxvYXQgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChmbG9hdCBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu
dCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQg
X192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBm
bG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQg
c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZp
Y2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4gZmxvYXQgbmFuZiAo
X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChmbG9h
dCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGpu
ZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9hdCkg
dGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5bmYg
KGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChm
bG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
ZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxv
YXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1hZl9yIChmbG9hdCwgaW50ICpf
X3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdhbW1hZl9yIChmbG9hdCwgaW50
ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYg
KGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25l
eHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBf
X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYm5mIChmbG9hdCBfX3gs
IGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRl
cm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHJv
dW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcm91bmRmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fdHJ1bmNmIChmbG9h
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBm
bG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVv
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRl
cm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25n
IGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scm91
bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
CgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg
X196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwgZmxvYXQg
X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZsb2F0IF9f
bikgdGhyb3cgKCk7CiMgODkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDEwOSAiL3Vzci9p
bmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK
IyA1MyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz
aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25n
IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs
ZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Y29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lu
aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Npbmhs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIHNpbmNvc2wgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhyb3cg
KCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAq
X19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
YXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZy
ZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0
aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGlu
dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgbG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9n
MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cx
MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRy
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAxMGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cxMGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEwbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNx
cnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlw
b3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19m
YWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zsb29y
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19k
cmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBkb3VibGUgc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBs
b25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBj
aGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpl
eHRlcm4gaW50IF9faXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBf
X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGowbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19qMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cg
KCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9feTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRv
dWJsZSB5MWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9u
ZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBk
b3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dh
bW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdh
bW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWlu
ZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19yZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25nIGRvdWJsZSBf
X3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2dibCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2Fs
YmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4g
bG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbXF1b2wgKGxv
bmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9u
ZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25n
IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5bCAo
bG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBf
X3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRvdWJsZSBfX3gs
IGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBs
b25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9fbikgdGhyb3cgKCk7CiMgMTEwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAx
MjUgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE2NiAiL3Vz
ci9pbmNsdWRlL21hdGguaCIgMwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRF
LAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9Owoj
IDI1MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0x
LAogIF9TVklEXywKICBfWE9QRU5fLAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9O
X1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI3NSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg
dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog
ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7CiMgNDIzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0K
IyA1MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDc5ICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9jbWF0aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4gX1RwIF9fY21hdGhfcG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICBpbmxpbmUgZG91Ymxl
CiAgYWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBp
bmxpbmUgZmxvYXQKICBhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihf
X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxv
YXQgX194KSB7IHJldHVybiA6OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgog
IGlubGluZSBsb25nIGRvdWJsZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFj
b3NsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4o
ZmxvYXQgX194KSB7IHJldHVybiA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBhc2luKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoK
CgoKICB1c2luZyA6OmF0YW47CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyBy
ZXR1cm4gOjphdGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjph
dGFuMjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJl
dHVybiA6OmF0YW4yZihfX3ksIF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
YXRhbjIobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJs
KF9feSwgX194KTsgfQoKCgoKCgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNl
aWwoZmxvYXQgX194KSB7IHJldHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBjZWlsKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9
CgoKCgoKICB1c2luZyA6OmNvczsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7
IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNv
cyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1
c2luZyA6OmNvc2g7CgoKICBpbmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4g
Ojpjb3NoZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRv
dWJsZSBfX3gpIHsgcmV0dXJuIDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoK
ICBpbmxpbmUgZmxvYXQKICBleHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoK
CgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6ZXhwbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZh
YnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGZhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp
bl9mYWJzbChfX3gpOyB9CgogIHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9v
cihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBmbG9vcihsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGZtb2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsg
cmV0dXJuIDo6Zm1vZGwoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlu
bGluZSBmbG9hdAogIGZyZXhwKGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4
cGYoX194LCBfX2V4cCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25n
IGRvdWJsZSBfX3gsIGludCogX19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9
CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9f
eCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBp
bmxpbmUgbG9uZyBkb3VibGUKICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyBy
ZXR1cm4gOjpsZGV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlu
bGluZSBmbG9hdAogIGxvZyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoK
CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjps
b2dsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cx
MChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBsb2cxMChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194
LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM3NSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBkb3VibGUKICBtb2Rm
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1cm4gOjptb2RmbChf
X3gsIF9faXB0cik7IH0KIyAzODggIi91c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBf
X3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkv
X19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19u
KTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194
LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl
dHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3Vi
bGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAg
aW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19o
ZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJs
ZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1
c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBf
X2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRv
dWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNp
bmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihf
X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gp
IHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUg
ZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsg
fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy
biBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9h
dAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194
KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0
YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoK
Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9
PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0g
c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19m
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNm
aW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zp
bml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9f
ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChf
X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBf
X2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf
X2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6
ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09
IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh
cHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9U
cCBfX2YyKQogICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf
X3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9u
X18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0g
KF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChf
X3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191
KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNp
emVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXpl
b2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9
PSBGUF9OQU47IH0pKSAmJiBfX3ggPiBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAg
X19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9f
eCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25f
XyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAo
X195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f
dSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3Up
IDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6
ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09
IEZQX05BTjsgfSkpICYmIF9feCA+PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsg
cmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBf
X3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9m
X18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9m
IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo
X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np
ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g
X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkg
JiYgX194IDwgX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAog
ICAgIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1
cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlw
ZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhf
X3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9f
dSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3Up
ID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwg
KF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19m
cGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw
Y2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBf
X3ggPD0gX195OyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAg
IF9fY2FwdHVyZV9pc2xlc3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVy
biAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBl
b2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9f
eCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191
KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkg
PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAo
X191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2Zw
Y2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBj
bGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIChf
X3ggPCBfX3kgfHwgX195IDwgX194KTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQog
ICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX191ID0gKF9f
ZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9fdiA9IChfX2YyKTsgKHNpemVvZiAoX191KSA9PSBzaXpl
b2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9m
IChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0g
RlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm
IChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo
X192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpOyB9Cn0KIyA1ODAgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVy
biBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzZmluaXRl
KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2luZihfVHAg
X19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc25h
bihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNub3JtYWwo
X1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2Fw
dHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAg
ICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBfX2NhcHR1cmVfaXNncmVh
dGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAg
aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJl
X2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gX19jYXB0dXJl
X2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK
ICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVy
ZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyByZXR1cm4g
X19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7
IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7IH0KfQoKbmFtZXNwYWNl
IHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVzaW5nIF9fZ251X2N4eDo6
aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2luZyBfX2dudV9jeHg6Omlz
bmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcgX19nbnVfY3h4OjpzaWdu
Yml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5nIF9fZ251X2N4eDo6aXNn
cmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAgdXNpbmcgX19nbnVfY3h4
Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dyZWF0ZXI7CiAgdXNpbmcg
X19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2NtYXRoLnRjYyIgMSAzCiMgMzUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgu
dGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIF9UcAog
ICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQgX19uKQogICAgewogICAgICBf
VHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGlsZSAoX19uID4+PSAxKQogICAg
ICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAgICAgIGlmIChfX24gJSAyKQog
ICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9feTsK
ICAgIH0KfQojIDY1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDIgMwojIDQyICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbGltaXRzIiAxIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvbGlt
aXRzIiAzCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2kzODYtbGludXgvYml0cy9jcHVfbGlt
aXRzLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDIgMwojIDg4NyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gZmxv
YXRfcm91bmRfc3R5bGUKICB7CiAgICByb3VuZF9pbmRldGVybWluYXRlID0gLTEsCiAgICByb3Vu
ZF90b3dhcmRfemVybyA9IDAsCiAgICByb3VuZF90b19uZWFyZXN0ID0gMSwKICAgIHJvdW5kX3Rv
d2FyZF9pbmZpbml0eSA9IDIsCiAgICByb3VuZF90b3dhcmRfbmVnX2luZmluaXR5ID0gMwogIH07
CgogIGVudW0gZmxvYXRfZGVub3JtX3N0eWxlCiAgewogICAgZGVub3JtX2luZGV0ZXJtaW5hdGUg
PSAtMSwKICAgIGRlbm9ybV9hYnNlbnQgPSAwLAogICAgZGVub3JtX3ByZXNlbnQgPSAxCiAgfTsK
CgoKCiAgc3RydWN0IF9fbnVtZXJpY19saW1pdHNfYmFzZQogIHsKICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg
PSAwOwogICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50MTAgPSAwOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSBm
YWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgIHN0YXRp
YyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz
c19iZWZvcmUgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0cyA6IHB1YmxpYyBfX251bWVyaWNfbGltaXRzX2Jh
c2UKICAgIHsKICAgICAgc3RhdGljIF9UcCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j
YXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBtYXgoKSB0aHJvdygpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBlcHNpbG9uKCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcm91bmRfZXJy
b3IoKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGlj
IF9UcCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQog
ICAgICBzdGF0aWMgX1RwIHF1aWV0X05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpIHsgcmV0
dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBkZW5vcm1fbWluKCkg
dGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICB9OwoKCgogIHRlbXBs
YXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxib29sPgogICAgewogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgYm9vbCBtaW4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgYm9vbCBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wg
ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJv
b2wgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxp
bmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9v
bCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBm
YWxzZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZQogICAgICAgICAg
ICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g
cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgY2hhciBlcHNpbG9u
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIgcm91
bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxp
bmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5v
cm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBzaWduYWxpbmdf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNoYXIg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oMCk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96
ZXJvOwogICAgfTsKIyAxMDcxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBz
aWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAg
ICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzMTAgPSAyOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVp
ZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4o
MCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMg
c2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTEyOCAiL3Vzci9pbmNsdWRlL2MrKy8z
LjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2ln
bmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
bnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+
KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIHdjaGFy
X3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgzNjQ3TDsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXgg
PSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u
ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg
d2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAg
ICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2No
YXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjQxICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAx
NTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBk
ZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBm
YWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMjk4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBt
aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNo
b3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0
cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK
CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAx
KTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCky
MTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAg
c3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMi
IDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pgog
ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg
ICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
ICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFj
dCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
dW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGlu
dCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJp
Y19saW1pdHM8bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBlcHNp
bG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBz
dGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf
c3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTUyMiAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSA5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1w
bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBsb25nPgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9u
ZyBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC05MjIzMzcyMDM2ODU0Nzc1ODA3
TEwgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp
Z2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBs
b25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxv
bmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAg
ICBzdGF0aWMgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7
IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNjM0ICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdM
TCAqIDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcg
ZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxv
bmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigw
KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg
ICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUt
MzhGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMu
NDAyODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0
IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50
ID0gMTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt
X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRf
TmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBz
aWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRp
YyBmbG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKIyAxNzY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZG91YmxlIG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0KICAgICAg
c3RhdGljIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuNzk3NjkzMTM0ODYy
MzE1N2UrMzA4OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDUzOwogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBkb3VibGUgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMi4yMjA0NDYwNDkyNTAzMTMxZS0xNjsgfQogICAgICBzdGF0aWMg
ZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEwMjE7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAtMzA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDEwMjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAz
MDg7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg
c3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAg
ICAgIHN0YXRpYyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjA7
IH0KICAgICAgc3RhdGljIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0KICAgICAgICAgICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTg0NCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNf
bGltaXRzPGxvbmcgZG91YmxlPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsgfQogICAgICBzdGF0
aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1
NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2Vy
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlM
OyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMS4wTDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAt
MTYzODE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05h
TiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9CiAg
ICAgICAgICAgICAgICBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICAgIGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9CiAgICAgICAgICAgICAgICBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJs
ZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwojIDE5MjQgIi91c3IvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwp9CiMgNDQgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9jKysvMy4y
L3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhhYml2MQp7CiAgY2xh
c3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvdHlwZWlu
Zm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoK
CgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8m
IG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2lu
Zm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6
CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9
CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4g
X19uYW1lOyB9CiMgOTggIi91c3IvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCiAgICBib29s
IGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1l
IDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBf
X2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJu
ICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lz
X3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBj
b25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8g
Kl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0
KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgogIGNs
YXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2Fz
dCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsKICB9OwoK
CiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAg
YmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkKCkgdGhy
b3coKTsKICB9Owp9Cgp9CiMgNDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh
Y2V0cy50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
PgogICAgbG9jYWxlCiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBj
b25zdAogICAgewogICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwog
ICAgICBfX3RtcC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6Omlk
KTsKICAgICAgcmV0dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAg
bG9jYWxlOjpvcGVyYXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBz
dGQ6OmNvbGxhdGU8X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRl
X3R5cGUmIF9fY29sbGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAg
ICByZXR1cm4gKF9fY29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9f
czEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCks
IF9fczIuZGF0YSgpICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAg
ICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsK
ICAgICAgaWYgKCEoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19mYWNl
dHNbX19pXSkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZmFjZXRzW19faV0pOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv
YykgdGhyb3coKQogICAgewogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9pZCgpOwog
ICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7
CiAgICAgIHJldHVybiAoX19pIDwgX19sb2MuX01faW1wbC0+X01fZmFjZXRzX3NpemUgJiYgX19m
YWNldHNbX19pXSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2Um
IF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3Ry
aW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJU
PiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygp
OwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D
aGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2Vf
ZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBjb25zdCBjaGFyX3R5cGUg
X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51
cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90
eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1
cykgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVn
ICE9IF9fZW5kKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhf
X2MsIGNoYXIoKSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lk
ZW4oX1NfYXRvbXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwog
ICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9f
ZW5kKQogICAgICAgIHsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICBfX2Zv
dW5kX3plcm8gPSB0cnVlOwogICAgICAgIH0KICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAg
ICB7CiAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICArK19f
cG9zOwogICAgICAgIH0KCgogICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBfTV9FIC0gX01femVy
byArIDE7CiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfX2xlbl07CiAgICAgIF9fY3R5cGUud2lk
ZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9fd2F0b21zKTsKICAgICAgYm9vbCBfX2Zv
dW5kX2RlYyA9IGZhbHNlOwogICAgICBib29sIF9fZm91bmRfc2NpID0gZmFsc2U7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX2RlYyA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwoKICAgICAgc3RyaW5n
IF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5n
cm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBpbmcgPSBfX2dyb3VwaW5nLnNpemUo
KTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3NlcCA9
IF9fbnAudGhvdXNhbmRzX3NlcCgpOwoKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAg
ICAgIHsKCiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZp
bmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYmICFfX3RyYWl0c190
eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAr
K19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107
CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBfX3NlcCkKICAgICAgICAgICAgICAgICAgICYmIF9fY2hlY2tfZ3JvdXBpbmcgJiYgIV9fZm91
bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAoX19zZXBfcG9zKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRp
Y19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7
CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Vy
ciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX19kZWMpICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCgogICAgICAg
ICAgICAgIGlmIChfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICAgICAgICAgIF9fZm91
bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIF9feHRyYyArPSAnLic7CiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX2RlYyA9IHRydWU7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGVsc2UgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fd2F0b21z
W19NX2VdKQogICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX193
YXRvbXNbX01fRV0pKQogICAgICAgICAgICAgICAgICAgJiYgIV9fZm91bmRfc2NpICYmIF9fcG9z
KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194
dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICBfX2MgPSAq
KCsrX19iZWcpOwoKCiAgICAgICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19w
bHVzKQogICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fbWludXMp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAg
ICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBf
X2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFfX2ZvdW5k
X2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihf
X3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBf
X2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7
CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9PSBf
X2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+
CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFj
dF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjLCBp
bnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+
IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9m
YWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAg
IGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIF9fYmFzZSA9IDg7CiAg
ICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAgX19iYXNl
ID0gMTY7CiAgICAgIGVsc2UKICAgICAgICBfX2Jhc2UgPSAxMDsKCgogICAgICBpbnQgX19wb3Mg
PSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBjb25zdCBjaGFyX3R5cGUg
X19wbHVzID0gX19jdHlwZS53aWRlbignKycpOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19taW51
cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKCiAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6ZXEoX19j
LCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAm
JiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5u
YXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0
eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9feCA9
IF9fY3R5cGUud2lkZW4oJ3gnKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fWCA9IF9fY3R5cGUu
d2lkZW4oJ1gnKTsKICAgICAgaWYgKF9fYmFzZSA9PSAxMCkKICAgICAgICB7CiAgICAgICAgICBi
b29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6
OmVxKF9fYywgX196ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fZm91bmRfemVybykKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSAwKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194
KQogICAgICAgICAgICAgICAgICAgICAgIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkK
ICAgICAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2Ms
IGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYmFzZSA9IDE2
OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgIF9fYmFzZSA9IDg7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAg
ICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICAgICAgICBpZiAoKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX194KSB8fCBfX3RyYWl0c190eXBl
OjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3co
X19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICAg
ICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgfQoKCgogICAgICBzaXplX3QgX19sZW47CiAgICAgIGlmIChfX2Jhc2UgPT0gMTYpCiAgICAg
ICAgX19sZW4gPSBfTV9zaXplOwogICAgICBlbHNlCiAgICAgICAgX19sZW4gPSBfX2Jhc2U7CgoK
ICAgICAgY2hhcl90eXBlIF9fd2F0b21zW19NX3NpemVdOwogICAgICBfX2N0eXBlLndpZGVuKF9T
X2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9tcyk7CiAgICAgIHN0cmluZyBfX2ZvdW5k
X2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmco
KTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAg
IGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRo
b3VzYW5kc19zZXAoKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9t
cywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVx
KF9fYywgY2hhcl90eXBlKCkpKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRyYyAr
PSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAg
ICAgICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2Vw
KSAmJiBfX2NoZWNrX2dyb3VwaW5nKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAo
X19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy
b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAg
IF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKCiAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9fY2hlY2tfZ3JvdXBpbmcg
JiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAgICAgICAgIF9fZm91bmRf
Z3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICgh
X192ZXJpZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMg
Kz0gY2hhcigpOwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8
X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg
X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgYm9vbCYgX192KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OmJvb2xhbHBoYSkpCiAgICAgICAgewoKCiAgICAgICAgICBzdHJpbmcgX194dHJjOwog
ICAgICAgICAgaW50IF9fYmFzZTsKICAgICAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19i
ZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwoKICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgX191bDsKICAgICAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgICAgICBpZiAoIShfX2VyciAm
IGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX3VsIDw9IDEpCiAgICAgICAgICAgIF9fdiA9IF9fdWw7
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0Owog
ICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICB0eXBlZGVmIGJhc2ljX3N0cmlu
ZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5n
ZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFj
ZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9fc3RyaW5nX3R5
cGUgX190cnVlID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlw
ZSBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X190cnVlcyA9IF9fdHJ1ZS5jX3N0cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2Zh
bHNlcyA9IF9fZmFsc2UuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0g
X190cnVlLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBfX2Zh
bHNlLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19iZWcgIT0g
X19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9
ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2ZhbHNlbgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2Zh
bHNlc1tfX25dKSA6IGZhbHNlOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fbiA8PSBf
X3RydWVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBfX3RyYWl0c190eXBlOjplcShf
X2MsIF9fdHJ1ZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBpZiAoIShfX3Rlc3RmIHx8
IF9fdGVzdHQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2VyciB8PSBp
b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZiAmJiBfX24gPT0gX19mYWxzZW4pCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
dHQgJiYgX19uID09IF9fdHJ1ZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgIF9fZXJy
IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f
eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p
bywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBf
X3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAg
ICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UpOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90
b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9
IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpCiAgICAgICAgX192ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRy
YzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxvbmcg
X191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBf
U19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJp
dCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50Pjo6bWF4
KCkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAg
ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9N
X2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsK
ICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9j
YWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs
IGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBp
bnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNf
c3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0
CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVn
ID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jh
c2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1Nf
Y19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAg
X194dHJjLnJlc2VydmUoMzIpOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcs
IF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJj
LmNfc3RyKCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf
SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw
ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJp
bmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2Nv
bnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAg
ICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikg
Y29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIp
OwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19l
cnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0
PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRm
bGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAg
IGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFz
ZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNl
IHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFz
ayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CgogICAgICBzdHJpbmcg
X194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9f
YmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKCgogICAgICBfX2lvLmZs
YWdzKF9fZm10KTsKCiAgICAgIHVuc2lnbmVkIGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3Rv
X3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkpCiAgICAgICAgX192ID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3Nf
YmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQojIDYxOCAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU
PgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAg
X01fY29udmVydF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19m
aWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVQgX192KSBjb25z
dAogICAgICB7CgoKCgoKCgogICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmlj
X2xpbWl0czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAyOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVj
ID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0
cmVhbXNpemU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAg
ICAgICAgaW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMg
KiAzOwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zs
b2F0KF9faW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAg
ICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f
diwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVj
KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywg
X19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwoKCiAgICAgICAgaWYgKF9fbGVu
ID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19jc19zaXplID0gX19sZW4g
KyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxv
Y2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIGlmIChfX2ZwKQogICAgICAgICAgICAgIF9fbGVu
ID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSwgX19wcmVjKTsKICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz
LCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CiMgNjg2ICIvdXNyL2luY2x1ZGUvYysr
LzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2Zs
b2F0KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9WYWx1ZVQ+CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OgogICAgICBfTV9jb252ZXJ0X2ludChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hh
clQgX19maWxsLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kbCwg
X1ZhbHVlVCBfX3YpIGNvbnN0CiAgICAgIHsKCgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CiAg
ICAgICAgX1NfZm9ybWF0X2ludChfX2lvLCBfX2ZidWYsIF9fbW9kLCBfX21vZGwpOwoKCiAgICAg
ICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxj
aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICBpbnQgX19sZW4gPSBf
X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xl
biA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVu
ICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs
b2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19j
cywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KCgoKCgoKICAgICAgICByZXR1cm4gX01f
d2lkZW5faW50KF9fcywgX19pbywgX19maWxsLCBfX2NzLCBfX2xlbik7CiAgICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2Zsb2F0KF9PdXRJdGVy
IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg
ICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFp
dHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsK
CgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVu
KF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfX3A7CiAg
ICAgIGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0No
YXJUPiA+KF9fbG9jKTsKICAgICAgaWYgKF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193cywg
X19sZW4sIF9fY3R5cGUud2lkZW4oJy4nKSkpCiAgICAgICAgX193c1tfX3AgLSBfX3dzXSA9IF9f
bnAuZGVjaW1hbF9wb2ludCgpOwoKCgoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBf
X25wLmdyb3VwaW5nKCk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9f
aW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNp
emUoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fcDI7CiAgICAgICAgICBpbnQgX19k
ZWNsZW4gPSBfX3AgPyBfX3AgLSBfX3dzIDogX19sZW47CiAgICAgICAgICBfX3AyID0gX19hZGRf
Z3JvdXBpbmcoX193czIsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3dzICsgX19kZWNsZW4pOwogICAgICAgICAg
aW50IF9fbmV3bGVuID0gX19wMiAtIF9fd3MyOwoKCiAgICAgICAgICBpZiAoX19wKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6Y29weShfX3AyLCBfX3AsIF9fbGVu
IC0gX19kZWNsZW4pOwogICAgICAgICAgICAgIF9fbmV3bGVuICs9IF9fbGVuIC0gX19kZWNsZW47
CiAgICAgICAgICAgIH0KCgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgICAgX19sZW4g
PSBfX25ld2xlbjsKICAgICAgICB9CgogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcywgX19pbywg
X19maWxsLCBfX3dzLCBfX2xlbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICBfTV93aWRlbl9pbnQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0No
YXJUIF9fZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0
CiAgICB7CgoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0
aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193
czIgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICogX19sZW4gKiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVu
LCBfX3dzKTsKCgogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0
PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5n
ID0gX19ucC5ncm91cGluZygpOwogICAgICBjb25zdCBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNl
ZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19n
cm91cGluZy5zaXplKCkpCiAgICAgICAgewoKCgoKCiAgICAgICAgICBzdHJlYW1zaXplIF9fb2Zm
ID0gMDsKICAgICAgICAgIGlmICgoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSAm
JiBfX2xlbiA+IDEpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0
KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAgICAgICAgICAg
ICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAo
X19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAg
ICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAgIH0KICAgICAg
ICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmcoX193czIgKyBf
X29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dy
b3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAgIF9fbGVuID0g
X19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0KICAgICAgcmV0
dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQoX091dEl0ZXIg
X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJUKiBfX3dzLAog
ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3Ry
YWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8u
d2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp
bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0
YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZDxf
Q2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dzMiwgX193cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3csIF9fbGVu
LCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cpOwoKICAgICAg
ICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CgoKCiAgICAg
IGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAgICAgICAgKl9f
cyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p
bywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9fZmxhZ3MgJiBp
b3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywg
X19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
ewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwog
ICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IG51
bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9j
KTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYgKF9fdikKICAg
ICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0gX01faW5zZXJ0
KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUoKSk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0
SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9f
cywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25zdAog
ICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcigp
LCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0
KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9fYiwgX19maWxs
LCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBf
TV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7
IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFyKCksIF9fdik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25n
IGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19p
bywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+
OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10
ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8
IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwg
KGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAg
ewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1Jywg
Y2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFncyk7CiAgICAg
ICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8uZmxhZ3MoX19m
bGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBl
IF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBj
b25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcgPSB0aGlzLT5k
b19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7CgogICAgICBj
b25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdpdHMxMDsKICAg
ICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fbikp
OwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBj
dHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAgICBfX2N0eXBl
Lm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCksIF9fY3MpOwog
ICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19sb2NhbGUpOwog
ICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2lu
dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
c3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVmIG1vbmV5cHVu
Y3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxf
Q2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBh
cnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNp
emVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAg
IGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVlPihfX2xv
Yyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9fbW9uZXlf
ZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlfYmFzZTo6cGF0
dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7CgogICAgICBj
b25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWdu
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYucG9z
aXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWduID1fX2ludGwg
PyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBjaGFyX3R5cGUg
X19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNvbnN0IGNoYXJf
dHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7CgogICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkgOiBfX21w
Zi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAgIHN0cmluZyBf
X2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAgYm9vbCBfX3Rl
c3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFsc2U7CgoKICAg
ICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2Jl
ZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPihjaGFyX3Ry
YWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9fYmVnICE9
IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAgIHsKICAgICAg
ICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ldKTsKICAg
ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn
cygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX2kgPCAy
IHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAoKHN0YXRpY19j
YXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAgewoKCgoKCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/
IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2ogPCBfX2xl
biAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAgICAgICAgICAg
ICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNo
b3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3Np
Z24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkK
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0g
X19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19z
aWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ln
biA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2ln
bi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAg
ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoK
ICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAg
Kz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5k
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190
bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rl
bXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwog
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2Fz
ZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAg
ICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAg
ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAg
ICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYm
IF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYm
IF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAg
ICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7
CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRl
bignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7
CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAg
ICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVu
KCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5z
aXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3Vw
aW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAg
ICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6
ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAg
ICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90
eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAog
ICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9f
Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19j
c19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWls
dGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21f
dihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3Np
emUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAg
X19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwog
ICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgIiUuMDFM
ZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2Nh
bGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3NpemUpKTsKICAg
ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAgICBzdHJpbmdf
dHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50
bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlfcHV0PF9DaGFy
VCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5
cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190
eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhcnQg
cGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX2lvLndpZHRo
KCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9fbW9uZXlfdHJ1
ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9uZXlfZmFsc2U7
CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90cnVl
PihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0PF9f
bW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZW5k
ID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19w
OwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0gX19jdHlwZS53
aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0LnBvc19m
b3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8g
X19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9fbXB0Lm5lZ19m
b3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9X19pbnRsID8g
X19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICAgICAg
KytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5fbm90KGN0eXBl
X2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAg
ICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAgICBzdHJpbmdf
dHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2lu
dGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAgIGNvbnN0IGlu
dCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAgICAgIGlmIChf
X2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9f
ZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgICAgICAg
ICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMsIF9fZW5kKTsK
ICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwog
ICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgX192YWx1
ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIGludCBfX3Bh
ZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAgICAgY2hhcl90
eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAgICAgX192YWx1
ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAgICAgICAgICAg
ICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAgICAgICAgICAg
ICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoKCiAg
ICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5nKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmdyb3VwaW5n
KCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21w
dC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAgICAgICAgIGNv
bnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICAgICAg
ICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAgICAgICAgICAg
ICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8X0No
YXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwogICAgICAgICAg
ICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIsIF9fc2VwLCBf
X2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0
KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJpbmdfdHlwZShf
X2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICAgICAg
c2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgpOwogICAgICAg
ICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkgPyBfX3N5bWJv
bC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09IGlvc19iYXNl
OjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAoaW50IF9faSA9
IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgcGFydCBfX3do
aWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAgICAgIHN3
aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNhc2UgbW9u
ZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFncygpICYgaW9z
X2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc3ltYm9sOwog
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6
c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAgICAgICAgICAg
ICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAgICAgICAgIF9f
cmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGlw
YWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193aWR0aCAtIF9f
bGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
X19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAgICAgICAgICAg
aWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUo
X193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWduLnNpemUoKSA+
IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdpbigpICsgMSwg
X19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7CiAgICAgICAg
ICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9f
ZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBlbmQoX193aWR0
aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAgICAgICAgICBf
X3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpKTsKICAg
ICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgZm9y
IChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykKICAgICAgICAg
ICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRoKDApOwogICAg
ICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVfZ2V0PF9DaGFy
VCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4gdGltZV9iYXNl
Ojpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l
cnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19m
b3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg
ICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVu
Y3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3QgX19sZW4gPSBj
aGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9yIChzaXplX3Qg
X19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJyOyArK19faSkK
ICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAgICAgICAgICBp
ZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1h
dFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAgICAgICAgaW50
IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2MgPT0gJ08nKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsKICAgICAgICAg
ICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3NbMTBdOwogICAg
ICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUq
IF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJyZXZpYXRlZChf
X2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwg
X190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMls3XTsKICAg
ICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMyLCA3LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAgICAgY2FzZSAn
Yic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzMVsxMl07CiAg
ICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzMSk7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21v
biwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdCJzoKCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsKICAgICAgICAg
ICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczIsIDEyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfdGlt
ZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19i
ZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9ICIlbS8lZC8l
eSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDksIF9fd2Nz
KTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwg
X19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAn
SCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0t
PnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0
eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f
dG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQs
IF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAg
ICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVt
KF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5u
YXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl
ICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAgICAgICAgICAg
ICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAgICAgICAgICAg
ICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAsIDU5LCAyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAgICAgICAgICAg
ICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAgICAgICAgICAg
ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19l
cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVNOiVTIjsK
ICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwog
ICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
d2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd4JzoK
CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsKICAgICAgICAg
ICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1swXSk7CiAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6CgogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAgICAgICAgIF9f
dHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0
X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwgMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAgICAgICAgICAg
X01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAg
aWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gX19tZW0gLSAx
OTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1onOgoK
ICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBwZXIsICpfX2Jl
ZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaW50IF9fdG1w
OwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190
bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1lcHVuY3Q8X0No
YXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19i
ZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09IDAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0nKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignKycpKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJh
Y3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwgNTksIDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICBpZiAo
X19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAgICAgICAgKytf
X2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAg
dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUm
IF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAg
ICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAg
IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kgPSAwOwogICAg
ICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAgICBj
aGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQgJiYgX19p
IDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9f
YykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19jLCAw
KTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAgICB9
CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50IF9fdmFsdWUg
PSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9IF9fdmFsdWUg
JiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3ZhbHVlOwogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFs
aWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90eXBlJiBfX2Jl
ZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAgICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg
Y2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9fbWF0Y2hlcyA9
IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkgKiBfX2luZGV4
bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90IF9fcG9zID0g
MDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZvciAoc2l6ZV90
IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlmIChfX2MgPT0g
X19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVzKytdID0gX19p
MTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAgICAgICBzaXpl
X3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAwOyBfX2kyIDwg
X19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihfX21pbmxlbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZXNb
X19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlubGVuICYmIF9f
YmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6ZV90IF9faTMg
PSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAgICAgICAgICAg
ICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAgICAgICBfX21h
dGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICB9
CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAgICBfX25hbWUg
PSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4gPSBf
X3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9f
bGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAg
ICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBfX3BvcykKICAg
ICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190
ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt
KiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAgIGNvbnN0IGNo
YXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg
ICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g
PihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9fd2NzKTsKICAg
ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0s
IF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAg
ICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdl
dGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMs
IF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUg
X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICB0
eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25zdCYgX190
cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBj
aGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5
cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19l
bmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJy
KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0
aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19kYXlzKTsKICAg
ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2RheV07CiAgICAg
ICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7
CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAg
ICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAg
ICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykK
ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9
CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5ID0gX190bXB3
ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2UmIF9faW8s
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5
cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3Rw
ID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZpYXRlZChf
X21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn
LCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoKICAgICAgaWYg
KCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3RyYWl0c190eXBl
OjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9f
bW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19tb250aHNbX190
bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxl
bmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYmIF9fYmVn
ICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn
KQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19s
ZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsK
ICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190bS0+dG1f
bW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl
cgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVhcihpdGVyX3R5
cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAg
ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjaGFyX3R5
cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGln
aXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX2N0eXBlLmlz
KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9
IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19pID09IDQpCiAg
ICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRfdG9fdihfX2Rp
Z2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAgICBpZiAoIShf
X2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0gMTkwMDsKICAg
ICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wpOwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGltZV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj
aGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNv
bnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u
Z2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kKQogICAg
ICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAg
ICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7
CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBfX2MgPSBfX2N0
eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAg
ICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19j
dHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2Zvcm1hdCA9
IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lvLCBjaGFyX3R5
cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJf
dHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwgY2hhciBfX21v
ZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAg
Y3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0
PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNpemVfdCBfX21h
eGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0aWNfY2FzdDxj
aGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICogX19tYXhsZW4p
KTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFswXSA9IF9fY3R5
cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAgICAgICBfX2Zt
dFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUoKTsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9fbW9kOwogICAg
ICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0gY2hhcl90eXBl
KCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwg
X190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVu
Z3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19p
LCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAg
IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0No
YXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25zdAogICAg
eyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc2l6ZV90CiAg
ICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQqLCBz
aXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUoY29uc3QgX0No
YXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgY29uc3QgX0No
YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAgICAgY29uc3Qg
c3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg
X190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19vbmUuY19zdHIo
KSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
dHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0ZTxfQ2hhclQ+
OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o
aSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xvKSAqIDI7Cgog
ICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu
X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBfX3JlcyA9IF9N
X3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+PSBfX2xlbikK
ICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQq
PihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkpKTsKICAgICAg
ICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5zaWduZWQgbG9u
ZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQogICAgICAgIF9f
dmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAgICAgICAoX192
YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3KSkpOwogICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBjaGFyKiBfX2lu
LCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19jb252ZXJ0X2Zyb21fdihjaGFyKiBfX291
dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciogX19mbXQsCiAgICAgICAgICAgICAgICAg
ICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpOwojIDE5OTUg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAg
IHsKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQg
X19maWxsLCBfQ2hhclQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRz
LCBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6
ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9U
cmFpdHM+OjpfU19wYWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19v
bGRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUg
X19uZXdsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFt
c2l6ZSBfX29sZGxlbiwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxl
biA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFy
VCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2Yo
X0NoYXJUKSAqIF9fcGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4s
IF9fZmlsbCk7CgogICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAg
ICBzaXplX3QgX19tb2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNl
OjpmbXRmbGFncyBfX2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVs
ZDsKCiAgICAgIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAg
ICAgICAgX19iZWcgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2Jl
Z2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAg
ICBlbHNlIGlmIChfX2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAg
ICAgewoKCgogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg
IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbign
LScpOwogICAgICAgICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsK
ICAgICAgICAgIGJvb2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51
cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwg
X19wbHVzKTsKCiAgICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUu
d2lkZW4oJzAnKSwgX19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1Ry
YWl0czo6ZXEoX19jdHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sx
XSkpOwogICAgICAgICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IF9fbmV3c1swXSA9IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNb
MV07CiAgICAgICAgICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsK
ICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9f
cGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsg
X19tb2QpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1sw
XSksIF9fcGx1cykgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAg
ICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAg
ICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9j
YXN0PF9DaGFyVCo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAg
ICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxf
Q2hhclQqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAg
ICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3Bs
ZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAg
ICB9CiAgICAgIF9UcmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBf
VHJhaXRzOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwOTAgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBib29sCiAgICBfX3ZlcmlmeV9ncm91cGluZyhjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJUPiYgX19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nX3RtcCkKICAgIHsKICAgICAgaW50IF9faSA9IDA7CiAg
ICAgIGludCBfX2ogPSAwOwogICAgICBjb25zdCBpbnQgX19sZW4gPSBfX2dyb3VwaW5nLnNpemUo
KTsKICAgICAgY29uc3QgaW50IF9fbiA9IF9fZ3JvdXBpbmdfdG1wLnNpemUoKTsKICAgICAgYm9v
bCBfX3Rlc3QgPSB0cnVlOwoKCgoKICAgICAgd2hpbGUgKF9fdGVzdCAmJiBfX2kgPCBfX24gLSAx
KQogICAgICAgIGZvciAoX19qID0gMDsgX190ZXN0ICYmIF9faiA8IF9fbGVuICYmIF9faSA8IF9f
biAtIDE7ICsrX19qLCsrX19pKQogICAgICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19qXSA9
PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKCgogICAgICBfX2ogPT0gX19sZW4gPyBf
X2ogPSAwIDogX19qOwogICAgICBfX3Rlc3QgJj0gX19ncm91cGluZ1tfX2pdID49IF9fZ3JvdXBp
bmdfdG1wW19fbiAtIF9faSAtIDFdOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIF9DaGFyVCoKICAgIF9fYWRkX2dyb3VwaW5n
KF9DaGFyVCogX19zLCBfQ2hhclQgX19zZXAsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBfX2diZWcsIGNvbnN0IGNoYXIqIF9fZ2VuZCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D
aGFyVCogX19maXJzdCwgY29uc3QgX0NoYXJUKiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xh
c3QgLSBfX2ZpcnN0ID4gKl9fZ2JlZykKICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX2FkZF9n
cm91cGluZyhfX3MsIF9fc2VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fZ2Jl
ZyArIDEgPT0gX19nZW5kID8gX19nYmVnIDogX19nYmVnICsgMSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2dlbmQsIF9fZmlyc3QsIF9fbGFzdCAtICpfX2diZWcpOwogICAgICAg
ICAgX19maXJzdCA9IF9fbGFzdCAtICpfX2diZWc7CiAgICAgICAgICAqX19zKysgPSBfX3NlcDsK
ICAgICAgICB9CiAgICAgIGRvCiAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAgICAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBt
b25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG51bXB1bmN0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVt
X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIHRpbWVfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5h
bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIG1lc3NhZ2VzPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19i
eW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5bmFtZTxjaGFyPjsK
ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hhciwgY2hhciwgbWJzdGF0
ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZTxjaGFyPjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVj
dnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxjaGFy
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0
PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxu
dW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29u
c3QgbnVtX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0cnVl
PiYKICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4mCiAg
ICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8
bW9uZXlfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Y29uc3QgbW9uZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PGNo
YXI+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8
dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj
b25zdCB0aW1lX2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hh
ciwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1v
bmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8
dGltZV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3Qs
IGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFs
c2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0
cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG51bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9i
eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIF9fdGltZXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0
aW1lX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1l
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
bWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9i
eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPHdj
aGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJz
dGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4g
Pihsb2NhbGUgY29uc3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdj
aGFyX3Q+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9m
YWNldDxudW1wdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGNvbnN0IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9n
ZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1
ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFs
c2U+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9j
YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+Jgog
ICAgdXNlX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl
cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxt
b25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCBfX3RpbWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3
Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRp
bWVfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4m
CiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxt
ZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8d2NoYXJfdCwgY2hh
ciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJv
b2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0
PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leXB1bmN0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt
cGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJfdD4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8X190aW1l
cHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi
b29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9nZXQ8d2NoYXJfdD4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCn0KIyA0NyAiL3Vzci9pbmNs
dWRlL2MrKy8zLjIvbG9jYWxlIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9v
c3RyZWFtLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3Mp
CiAgICA6IF9NX29rKF9fb3MuZ29vZCgpKSwgX01fb3MoX19vcykKICAgIHsKCiAgICAgIGlmIChf
TV9vayAmJiBfX29zLnRpZSgpKQogICAgICAgIF9fb3MudGllKCktPmZsdXNoKCk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBl
JikpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3NiaW4pCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIV9fY29weV9zdHJlYW1idWZz
KCp0aGlzLCBfX3NiaW4sIHRoaXMtPnJkYnVmKCkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3NiaW4pCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f
bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf
X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10
ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoKF9fZm10ICYg
aW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6OmhleCkpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01f
Zm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9f
YiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAg
ICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1
dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhp
cy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9y
PDwobG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19i
YXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxk
OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICAgaWYgKChfX2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpo
ZXgpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBfX2w7CiAgICAgICAgICAgICAgICAgICAgICBfX2wgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9m
bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19i
ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAg
ICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs
IHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGRvdWJsZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAg
aWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWls
ZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQo
KnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0
aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkp
CiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+
ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlw
ZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19j
KTsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19wdXQsIHRyYWl0c190
eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9D
aGFyVCogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1
dCA9IHRoaXMtPnJkYnVmKCktPnNwdXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQg
IT0gX19uKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIGlmICh0aGlzLT5yZGJ1ZigpICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkK
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6cG9zX3R5cGUKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQog
ICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlz
LT5mYWlsKCkpCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlv
c19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAgICBpZiAoIXRoaXMtPmZhaWwoKSkK
ICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVi
c2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBw
b3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAg
ICAgaWYgKCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2Vy
ciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3V0KTsKCgog
ICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1
cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg
ICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2Nh
KHNpemVvZihfQ2hhclQpICogKF9fdyArIDEpKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0g
X19jOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlm
IChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8
X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywg
X19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAg
ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGUg
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiBfX29zdHJlYW1f
dHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg
ICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
dyArIDEpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAgICAgICAgICAgc3Ry
ZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFk
KF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmX19jLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0
LndyaXRlKF9fcGFkcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiBfX291dDsKICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBf
X3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f
b3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy
YihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0
cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgo
X19zKSk7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9f
b3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19zLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9f
cyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAg
X19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CgoKCiAgICAgIHR5cGVkZWYgY2hh
cl90cmFpdHM8Y2hhcj4gX190cmFpdHNfdHlwZTsKCiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90
eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAg
ICAgewogICAgICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp
OwogICAgICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu
X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX2NsZW4gKyAxKSkpOwogICAgICAgICAgZm9yIChz
aXplX3QgX19pID0gMDsgX19pIDwgX19jbGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ld
ID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7
CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f
bGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMg
PSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICog
X193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBf
X291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fd3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAg
X19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBfX2xlbik7CiAgICAgICAg
ICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVt
cGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBj
aGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz
PiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBf
X2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQu
d2lkdGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4o
X19idWlsdGluX2FsbG9jYShfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0g
c3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwoKICAgICAgICAg
ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBf
X3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAg
ICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
X19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ZWxzZSBpZiAoIV9fcykKICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5
cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0YSgpOwogICAgICAgICAgc3RyZWFt
c2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0
aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7
CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19z
dHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQu
ZmlsbCgpLCBfX3BhZHMsIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsK
ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFt
c2l6ZSBfX3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAg
X19vdXQud2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAg
IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVy
biBfX291dDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIGVuZGwob3N0cmVhbSYpOwogIGV4dGVy
biB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRzKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0
cmVhbSYgZmx1c2gob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRv
cjw8KG9zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8
PChvc3RyZWFtJiwgdW5zaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w
ZXJhdG9yPDwob3N0cmVhbSYsIHNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBv
c3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCB1bnNpZ25lZCBjaGFyKik7CiAgZXh0
ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHNpZ25lZCBj
aGFyKik7CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRlcm4gdGVt
cGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl
YW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRv
cjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy
YXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy
YXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0
cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKCn0KIyAyNzYgIi91c3Iv
aW5jbHVkZS9jKysvMy4yL29zdHJlYW0iIDIgMwojIDQ2ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9p
b3N0cmVhbSIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIgMSAzCiMgNDMg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNp
Y19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0
c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy
VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh
clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBl
PF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUg
X01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJl
YW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19z
Yik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmly
dHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6
ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsK
CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUm
ICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYp
KTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBf
X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg
X19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19m
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2Yp
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBf
X3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QK
ICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9p
ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo
aXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGlt
KTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5
cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4n
KSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0
cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp
OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0g
MSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlw
ZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hh
cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVh
ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90
eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBw
b3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBz
ZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5
cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf
X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFs
c2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0
ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJU
JiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08
Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19p
biA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
biwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry
YWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu
IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVh
bQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJs
aWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw
b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw
ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3Ry
ZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0
cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL2lzdHJlYW0udGNjIiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnNlbnRyeTo6CiAgICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX2luLCBib29sIF9fbm9za2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2QoKSkK
ICAgICAgICB7CiAgICAgICAgICBpZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50aWUo
KS0+Zmx1c2goKTsKICAgICAgICAgIGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygpICYg
aW9zX2Jhc2U6OnNraXB3cykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX2lu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBf
X2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBpZiAoX19pbi5fTV9jaGVja19mYWNl
dChfX2luLl9NX2ZjdHlwZSkpCiAgICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjpl
cV9pbnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAgICYmIF9faW4uX01f
ZmN0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKSkKICAgICAg
ICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAgICAgaWYgKHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgICAgIF9faW4u
c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg
ICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f
aXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYo
KnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f
aW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYg
KCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv
cGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh
bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv
c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAg
ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N
X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYg
KG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAg
ICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAg
ICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK
ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf
X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkg
X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy
ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBs
b25nIF9fbDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg
ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19s
KTsKCgogICAgICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg
ICAgICAgICAgICAgICYmIChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wKICAgICAg
ICAgICAgICAgICAgICAgICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCiAg
ICAgICAgICAgICAgICBfX24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBp
b3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9N
X2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0
KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxv
bmcgbG9uZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv
c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51
bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf
X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24p
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri
aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg
ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp
cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19j
ZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9
IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5n
ZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihk
b3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAg
ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAg
ICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIG9wZXJhdG9yPj4odm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp
cywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFz
ZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr
X2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlz
LCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19l
cnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1i
dWZfdHlwZSogX19zYm91dCkKICAgIHsKICAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl
KTsKICAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgIHsKICAgICAgICAgICB0cnkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgICAgICAg
ICAgaWYgKF9fc2JvdXQpCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgX19z
dHJlYW1idWZfdHlwZSogX19zYmluID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAg
IF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkK
ICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0
KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5y
ZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2Zi
aXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl
dChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg
ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZhbCA9IHRo
aXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpl
cV9pbnRfdHlwZShfX2J1ZnZhbCwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfTV9nY291bnQgPSAxOwogICAgICAgICAgICAgICAgICBfX2MgPSB0cmFpdHNfdHlw
ZTo6dG9fY2hhcl90eXBlKF9fYnVmdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwg
aW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90
eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlz
LT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7Cgog
ICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgKyAxIDwgX19uCiAgICAgICAgICAgICAgICAg
ICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAg
ICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKSkKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsK
ICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5
cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19z
dHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2dj
b3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19j
ZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Y29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxp
bSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m
KCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRi
dWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3RoaXNfc2ItPnNnZXRjKCk7CiAg
ICAgICAgICAgICAgY2hhcl90eXBlIF9fYzIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f
Yyk7CgogICAgICAgICAgICAgIHdoaWxlICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg
X19lb2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUo
X19jLCBfX2lkZWxpbSkKICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfX3NiLnNwdXRjKF9fYzIpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3RoaXNf
c2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNf
dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj
ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUg
X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf
X3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgog
ICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19l
b2YpCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9
IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0g
X19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
ICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg
ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBp
ZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9f
biwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9f
YzsKCiAgICAgICAgICAgICAgX19uID0gbWluKF9fbiwgbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6
ZT46Om1heCgpKTsKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uCiAgICAgICAg
ICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jID0gX19zYi0+c2J1
bXBjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9n
Y291bnQ7CiAgICAgICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19j
LCBfX2RlbGltKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu
ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGVlayh2b2lkKQogICAg
ewogICAgICBpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3Vu
dCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fYyA9IHRoaXMtPnJkYnVm
KCktPnNnZXRjKCk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf
aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWQoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNn
ZXRuKF9fcywgX19uKTsKICAgICAgICAgICAgICBpZiAoX01fZ2NvdW50ICE9IF9fbikKICAgICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFp
bGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog
ICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh
aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPj0gMCkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAgICAgICAgICAgICAg
IGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1Zigp
LT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAg
ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK
CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK
ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNl
CiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4g
X01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUgX19jKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90
eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYgogICAg
ICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19zYi0+c3B1dGJhY2tj
KF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZvaWQpCiAgICB7CiAg
ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg
ICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAg
ICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRf
dHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAgICBpbnQgX19yZXQg
PSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsK
ICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lkKQogICAgewogICAg
ICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgaWYgKCF0aGlzLT5mYWlsKCkp
CiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpj
dXIsIGlvc19iYXNlOjppbik7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrZyhwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgaWYg
KCF0aGlzLT5mYWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRo
aXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAg
IGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly
IF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBpZiAoIXRoaXMtPmZhaWwo
KSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+
cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgaWYgKF9fZXJy
ID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv
c19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19j
KTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVh
bWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90
eXBlOwogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8
X0NoYXJUPiBfX2N0eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoK
ICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAg
ICAgICAgaWYgKF9fbnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGlt
aXRzPHN0cmVhbXNpemU+OjptYXgoKTsKCiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAgICAg
ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAg
ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAg
IGludF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4
dHJhY3RlZCA8IF9fbnVtIC0gMQogICAgICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgJiYgIV9fY3R5cGUuaXMo
Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAg
ICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAg
ICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAq
X19zID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19l
eHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f
Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5
cGUgX19pbnRfdHlwZTsKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9m
YWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBl
IF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBf
X2luLnJkYnVmKCk7CiAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
IHdoaWxlICghX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICYm
IF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYykpCiAgICAgICAgX19jID0gX19zYi0+
c25leHRjKCk7CgogICAgICAgaWYgKF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQog
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19p
bnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1i
dWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9f
c2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2lu
LndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247CiAgICAgICAgICBfX24gPSBfX3cg
PiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoK
ICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBl
X3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9
IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u
cmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAg
ICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0
czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX19jdHlwZS5p
cyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f
c3RyICs9IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRy
YWN0ZWQ7CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgo
MCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRz
dGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5
cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXpl
X3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAg
ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAg
ICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50
X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90
eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2Vv
ZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9p
bnRfdHlwZShfX2MsIF9faWRlbGltKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0g
X19uCiAgICAgICAgICAgICAgICAgJiYgIV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2Yp
CiAgICAgICAgICAgICAgICAgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg
KytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg
ICAgICAgICBfX3Rlc3RkZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0p
OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBf
X2VvZikpCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9Cgog
IHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAg
aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwg
X19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFt
Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXIm
KTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciop
OwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25l
ZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYs
IHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0
cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0
b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi
YXNpY19pc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lz
dHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0m
LCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3Ry
ZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIg
MiAzCiMgNDcgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAyIDMKCm5hbWVzcGFjZSBz
dGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4dGVy
biBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCgogIGV4dGVybiB3aXN0cmVh
bSB3Y2luOwogIGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7
CiAgZXh0ZXJuIHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lv
aW5pdDsKfQojIDMwICJhbGwuaCIgMgoKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2lvbWFu
aXAiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pb21hbmlwIiAzCgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvZnVuY3Rpb25hbCIgMSAzCiMgNTMgIi91c3IvaW5jbHVkZS9jKysv
My4yL2Z1bmN0aW9uYWwiIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaW9tYW5pcCIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1Jlc2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6Zm10
ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9SZXNldGlvc2ZsYWdzCiAgcmVzZXRpb3NmbGFn
cyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9SZXNldGlvc2ZsYWdzIF9feDsK
ICAgIF9feC5fTV9tYXNrID0gX19tYXNrOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mIF9faXMsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRm
KGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19pczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQogICAg
ewogICAgICBfX29zLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7CiAg
ICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRpb3NmbGFncyB7IGlvc19iYXNl
OjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1NldGlvc2ZsYWdzCiAgc2V0aW9zZmxh
Z3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAgICBfU2V0aW9zZmxhZ3MgX194Owog
ICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJl
YW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYgX19pcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRmKF9f
Zi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
IF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAgIF9fb3Muc2V0ZihfX2YuX01fbWFz
ayk7CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRiYXNlIHsgaW50IF9N
X2Jhc2U7IH07CgogIGlubGluZSBfU2V0YmFzZQogIHNldGJhc2UoaW50IF9fYmFzZSkKICB7CiAg
ICBfU2V0YmFzZSBfX3g7CiAgICBfX3guX01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBfX3g7
CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp
bmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2lj
X2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAg
IF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAg
ICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDoKICAgICAgICAgICAgICBfX2Yu
X01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgIGlvc19iYXNlOjpm
bXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX2lzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxp
bmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAgIF9f
b3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAgICAg
ICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAgICAgX19m
Ll9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAgIGlvc19iYXNl
OjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX29zOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9TZXRmaWxsIHsg
X0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf
U2V0ZmlsbDxfQ2hhclQ+CiAgICBzZXRmaWxsKF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIF9TZXRm
aWxsPF9DaGFyVD4gX194OwogICAgICBfX3guX01fYyA9IF9fYzsKICAgICAgcmV0dXJuIF9feDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
aW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNp
Y19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pcywgX1NldGZpbGw8X0NoYXJUPiBfX2YpCiAg
ICB7CiAgICAgIF9faXMuZmlsbChfX2YuX01fYyk7CiAgICAgIHJldHVybiBfX2lzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsKICAg
ICAgX19vcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBzdHJ1
Y3QgX1NldHByZWNpc2lvbiB7IGludCBfTV9uOyB9OwoKICBpbmxpbmUgX1NldHByZWNpc2lvbgog
IHNldHByZWNpc2lvbihpbnQgX19uKQogIHsKICAgIF9TZXRwcmVjaXNpb24gX194OwogICAgX194
Ll9NX24gPSBfX247CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U
cmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19p
cywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9faXMucHJlY2lzaW9uKF9fZi5fTV9u
KTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3MsIF9T
ZXRwcmVjaXNpb24gX19mKQogICAgewogICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7CiAg
ICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXR3IHsgaW50IF9NX247IH07Cgog
IGlubGluZSBfU2V0dwogIHNldHcoaW50IF9fbikKICB7CiAgICBfU2V0dyBfX3g7CiAgICBfX3gu
X01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lz
LCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9faXMud2lkdGgoX19mLl9NX24pOwogICAgICByZXR1
cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0
b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldHcgX19mKQogICAg
ewogICAgICBfX29zLndpZHRoKF9fZi5fTV9uKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoK
CgogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0Zmls
bDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYs
IF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0
cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVy
YXRvcjw8KG9zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVh
bSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFt
JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRl
IGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRl
bXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBl
eHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldGJhc2UpOwog
IGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0cHJlY2lz
aW9uKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1Nl
dHcpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwg
X1NldGZpbGw8d2NoYXJfdD4pOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8
PCh3b3N0cmVhbSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBv
cGVyYXRvcjw8KHdvc3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3
b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxh
dGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRl
cm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0dyk7CiAgZXh0
ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGZpbGw8d2No
YXJfdD4pOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYs
IF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdp
c3RyZWFtJiwgX1Jlc2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3Bl
cmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0m
IG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUg
d2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0dyk7Cgp9CiMgMzQgImFsbC5oIiAy
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMgNDMgIi91c3IvaW5j
bHVkZS9jKysvMy4yL3NzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBh
bGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90
eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlw
ZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUg
b2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp
dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hh
cl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgIHByb3RlY3Rl
ZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g
aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks
IF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3Ry
LAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i
YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9z
dHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2lu
aXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAg
ICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoK
CiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAg
ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0g
bWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAg
ICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4p
OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAg
ICAgewoKICAgICAgICBfTV9zdHJpbmcuYXNzaWduKF9fcy5kYXRhKCksIF9fcy5zaXplKCkpOwog
ICAgICAgIF9NX3N0cmluZ2J1Zl9pbml0KF9NX21vZGUpOwogICAgICB9CgogICAgcHJvdGVjdGVk
OgoKICAgICAgdm9pZAogICAgICBfTV9zdHJpbmdidWZfaW5pdChpb3NfYmFzZTo6b3Blbm1vZGUg
X19tb2RlKQogICAgICB7CgoKCgoKICAgICAgICBfTV9idWZfc2l6ZSA9IF9NX3N0cmluZy5zaXpl
KCk7CgoKCgoKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSA1MTI7CiAgICAgICAgX01fbW9kZSA9
IF9fbW9kZTsKICAgICAgICBpZiAoX01fbW9kZSAmIChpb3NfYmFzZTo6YXRlIHwgaW9zX2Jhc2U6
OmFwcCkpCiAgICAgICAgICBfTV9yZWFsbHlfc3luYygwLCBfTV9idWZfc2l6ZSk7CiAgICAgICAg
ZWxzZQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgMCk7CiAgICAgIH0KCgogICAgICB2aXJ0
dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsKICAgICAgICBpZiAoX01faW5f
Y3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlw
ZTo6dG9faW50X3R5cGUoKmdwdHIoKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRy
YWl0c190eXBlOjplb2YoKTsKICAgICAgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBw
YmFja2ZhaWwoaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIHZpcnR1
YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVv
ZigpKTsKCiAgICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKICAgICAgc2V0YnVmKGNoYXJf
dHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAgICAgIGlmIChfX3MgJiYgX19u
KQogICAgICAgICAgewogICAgICAgICAgICBfTV9zdHJpbmcgPSBfX3N0cmluZ190eXBlKF9fcywg
X19uKTsKICAgICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgMCk7CiAgICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vl
a29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv
dXQpOwoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlIF9fc3As
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8
IGlvc19iYXNlOjpvdXQpOwoKCgoKCgoKICAgICAgdmlydHVhbCBpbnQKICAgICAgX01fcmVhbGx5
X3N5bmMoX19zaXplX3R5cGUgX19pLCBfX3NpemVfdHlwZSBfX28pCiAgICAgIHsKICAgICAgICBj
aGFyX3R5cGUqIF9fYmFzZSA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX01fc3RyaW5nLmRhdGEo
KSk7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAg
ICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKICAgICAgICBfX3Np
emVfdHlwZSBfX2xlbiA9IF9NX3N0cmluZy5zaXplKCk7CgogICAgICAgIF9NX2J1ZiA9IF9fYmFz
ZTsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICAgIHRoaXMtPnNldGcoX19iYXNlLCBf
X2Jhc2UgKyBfX2ksIF9fYmFzZSArIF9fbGVuKTsKICAgICAgICBpZiAoX190ZXN0b3V0KQogICAg
ICAgICAgewogICAgICAgICAgICB0aGlzLT5zZXRwKF9fYmFzZSwgX19iYXNlICsgX19sZW4pOwog
ICAgICAgICAgICBfTV9vdXRfY3VyICs9IF9fbzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4g
MDsKICAgICAgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX2lzdHJpbmdzdHJlYW0g
OiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0
cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ2J1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4gX19pc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdi
dWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfaXN0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6
OmluKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX21vZGUg
fCBpb3NfYmFzZTo6aW4pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAg
ICAgZXhwbGljaXQKICAgICAgYmFzaWNfaXN0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBl
JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
b2RlID0gaW9zX2Jhc2U6OmluKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fbnVsbCksIF9NX3N0
cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQo
Jl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19pc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9
CgoKICAgICAgX19zdHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJl
dHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAg
ICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJp
bmdidWYuc3RyKCk7IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUm
IF9fcykKICAgICAgeyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxh
dGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYg
X0FsbG9jIGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpv
ZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdi
dWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX29zdHJlYW1fdHlwZTsK
CiAgICBwcml2YXRlOgogICAgICBfX3N0cmluZ2J1Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBw
dWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBl
KF9fbnVsbCksIF9NX3N0cmluZ2J1ZihfX21vZGUgfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHRo
aXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29z
dHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCiAgICAg
IDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX21vZGUgfCBp
b3NfYmFzZTo6b3V0KQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAg
IH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19zdHJpbmdidWZfdHlw
ZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5n
YnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdfdHlwZQogICAgICBz
dHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KCiAgICAgIHZv
aWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgeyBfTV9zdHJpbmdi
dWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nc3Ry
ZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJh
aXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwoK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hhcl90
eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9f
c3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0
CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tID0gaW9zX2Jh
c2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUoX19udWxsKSwg
X01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9Cgog
ICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3QgX19zdHJpbmdfdHlw
ZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
ID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5cGUo
X19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX20pCiAgICAgIHsgdGhpcy0+aW5pdCgmX01f
c3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX3N0cmluZ3N0cmVhbSgpCiAgICAgIHsgfQoKCiAg
ICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4g
Y29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIF9f
c3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyaW5nYnVm
LnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3Mp
CiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9Owp9CgoKCgoKIyAxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3NzdHJlYW0udGNjIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9z
c3RyZWFtIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh
aXRzLCBjbGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBwYmFja2ZhaWwoaW50X3R5cGUgX19jKQogICAgewogICAgICBp
bnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2Yg
PSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlwZTo6ZW9mKCkpOwogICAg
ICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CgoK
CiAgICAgIGlmIChfX3Rlc3Rwb3MpCiAgICAgICAgewogICAgICAgICAgaWYgKHRyYWl0c190eXBl
OjplcSh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyksIHRoaXMtPmdwdHIoKVstMV0pCiAg
ICAgICAgICAgICAgJiYgIV9fdGVzdGVvZikKICAgICAgICAgICAgewogICAgICAgICAgICAgIC0t
X01faW5fY3VyOwogICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f
TV9pbl9jdXI7CiAgICAgICAgICAgICAgKl9NX2luX2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFy
X3R5cGUoX19jKTsKICAgICAgICAgICAgICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgLS1f
TV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6bm90X2VvZihfX2Mp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBl
CiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIG92ZXJm
bG93KGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw
ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19yZXQpOwogICAgICBib29sIF9fdGVzdHdyaXRlID0gX01fb3V0X2N1ciA8IF9NX2J1
ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFz
ZTo6b3V0OwoKCgogICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgIHsKICAgICAgICAgIGlmICgh
X190ZXN0ZW9mKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zaXplX3R5cGUgX19sZW4g
PSBtYXgoX01fYnVmX3NpemUsIF9NX2J1Zl9zaXplX29wdCk7CiAgICAgICAgICAgICAgX19sZW4g
Kj0gMjsKCiAgICAgICAgICAgICAgaWYgKF9fdGVzdHdyaXRlKQogICAgICAgICAgICAgICAgX19y
ZXQgPSB0aGlzLT5zcHV0Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAg
ICAgICAgIGVsc2UgaWYgKF9fbGVuIDw9IF9NX3N0cmluZy5tYXhfc2l6ZSgpKQogICAgICAgICAg
ICAgICAgewoKICAgICAgICAgICAgICAgICAgX01fc3RyaW5nID0gdGhpcy0+c3RyKCk7CiAgICAg
ICAgICAgICAgICAgIF9NX3N0cmluZy5yZXNlcnZlKF9fbGVuKTsKICAgICAgICAgICAgICAgICAg
X01fYnVmX3NpemUgPSBfX2xlbjsKICAgICAgICAgICAgICAgICAgX01fcmVhbGx5X3N5bmMoX01f
aW5fY3VyIC0gX01faW5fYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9v
dXRfY3VyIC0gX01fb3V0X2JlZyk7CiAgICAgICAgICAgICAgICAgICpfTV9vdXRfY3VyID0gdHJh
aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfTV9vdXRfY3Vy
X21vdmUoMSk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRz
X3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgog
ICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cG9z
X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
c2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksIGlvc19iYXNl
OjpvcGVubW9kZSBfX21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUo
b2ZmX3R5cGUoLTEpKTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6aW4gJiBfTV9t
b2RlICYgX19tb2RlKSAhPSAwOwogICAgICBib29sIF9fdGVzdG91dCA9IChpb3NfYmFzZTo6b3V0
ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgYm9vbCBfX3Rlc3Rib3RoID0gX190ZXN0
aW4gJiYgX190ZXN0b3V0ICYmIF9fd2F5ICE9IGlvc19iYXNlOjpjdXI7CiAgICAgIF9fdGVzdGlu
ICY9ICEoX19tb2RlICYgaW9zX2Jhc2U6Om91dCk7CiAgICAgIF9fdGVzdG91dCAmPSAhKF9fbW9k
ZSAmIGlvc19iYXNlOjppbik7CgogICAgICBpZiAoX01fYnVmX3NpemUgJiYgKF9fdGVzdGluIHx8
IF9fdGVzdG91dCB8fCBfX3Rlc3Rib3RoKSkKICAgICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUq
IF9fYmVnID0gX01fYnVmOwogICAgICAgICAgY2hhcl90eXBlKiBfX2N1cmkgPSBfX251bGw7CiAg
ICAgICAgICBjaGFyX3R5cGUqIF9fY3VybyA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSog
X19lbmRpID0gX19udWxsOwogICAgICAgICAgY2hhcl90eXBlKiBfX2VuZG8gPSBfX251bGw7Cgog
ICAgICAgICAgaWYgKF9fdGVzdGluIHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfX2N1cmkgPSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICAgICAgX19lbmRpID0gdGhp
cy0+ZWdwdHIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91dCB8fCBfX3Rl
c3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jdXJvID0gdGhpcy0+cHB0cigp
OwogICAgICAgICAgICAgIF9fZW5kbyA9IHRoaXMtPmVwcHRyKCk7CiAgICAgICAgICAgIH0KCiAg
ICAgICAgICBvZmZfdHlwZSBfX25ld29mZmkgPSAwOwogICAgICAgICAgb2ZmX3R5cGUgX19uZXdv
ZmZvID0gMDsKICAgICAgICAgIGlmIChfX3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX19uZXdvZmZpID0gX19jdXJpIC0gX19iZWc7CiAgICAgICAgICAg
ICAgX19uZXdvZmZvID0gX19jdXJvIC0gX19iZWc7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UgaWYgKF9fd2F5ID09IGlvc19iYXNlOjplbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX25ld29mZmkgPSBfX2VuZGkgLSBfX2JlZzsKICAgICAgICAgICAgICBfX25ld29mZm8gPSBf
X2VuZG8gLSBfX2JlZzsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlmICgoX190ZXN0aW4gfHwg
X190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBfX25ld29mZmkgKyBfX29mZiA+PSAwICYmIF9f
ZW5kaSAtIF9fYmVnID49IF9fbmV3b2ZmaSArIF9fb2ZmKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX01faW5fY3VyID0gX19iZWcgKyBfX25ld29mZmkgKyBfX29mZjsKICAgICAgICAgICAg
ICBfX3JldCA9IHBvc190eXBlKF9fbmV3b2ZmaSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm
ICgoX190ZXN0b3V0IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgICAgJiYgX19uZXdvZmZvICsg
X19vZmYgPj0gMCAmJiBfX2VuZG8gLSBfX2JlZyA+PSBfX25ld29mZm8gKyBfX29mZikKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX25ld29mZm8gKyBfX29mZiAt
IChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAgICAgICBfX3JldCA9IHBvc190eXBlKF9f
bmV3b2Zmbyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAg
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
cG9zX3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAg
ewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CgogICAgICBp
ZiAoX01fYnVmX3NpemUpCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUgX19wb3MgPSBfX3Nw
OwogICAgICAgICAgY2hhcl90eXBlKiBfX2JlZyA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlw
ZSogX19lbmQgPSBfX251bGw7CiAgICAgICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjpp
biAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgICAgICBib29sIF9fdGVzdG91dCA9IChp
b3NfYmFzZTo6b3V0ICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAgICAgIGJvb2wgX190
ZXN0Ym90aCA9IF9fdGVzdGluICYmIF9fdGVzdG91dDsKICAgICAgICAgIF9fdGVzdGluICY9ICEo
X19tb2RlICYgaW9zX2Jhc2U6Om91dCk7CiAgICAgICAgICBfX3Rlc3RvdXQgJj0gIShfX21vZGUg
JiBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICBib29sIF9fdGVzdHBvc2kgPSBmYWxzZTsKICAg
ICAgICAgIGJvb2wgX190ZXN0cG9zbyA9IGZhbHNlOwogICAgICAgICAgaWYgKF9fdGVzdGluIHx8
IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2JlZyA9IHRoaXMtPmVi
YWNrKCk7CiAgICAgICAgICAgICAgX19lbmQgPSB0aGlzLT5lZ3B0cigpOwogICAgICAgICAgICAg
IGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAgICAgICAgICAgICAg
ICBfX3Rlc3Rwb3NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91
dCB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19iZWcgPSB0aGlz
LT5wYmFzZSgpOwogICAgICAgICAgICAgIF9fZW5kID0gX01fYnVmICsgX01fYnVmX3NpemU7CiAg
ICAgICAgICAgICAgaWYgKDAgPD0gX19wb3MgJiYgX19wb3MgPD0gX19lbmQgLSBfX2JlZykKICAg
ICAgICAgICAgICAgIF9fdGVzdHBvc28gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBp
ZiAoX190ZXN0cG9zaSB8fCBfX3Rlc3Rwb3NvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKF9fdGVzdHBvc2kpCiAgICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfTV9pbl9iZWcgKyBf
X3BvczsKICAgICAgICAgICAgICBpZiAoX190ZXN0cG9zbykKICAgICAgICAgICAgICAgIF9NX291
dF9jdXJfbW92ZSgoX19wb3MpIC0gKF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAg
IF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoX19wb3MpKTsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfc3RyaW5nYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3Ry
aW5nc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3Ry
ZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08Y2hh
cj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD47Cgp9CiMgMzY5ICIv
dXNyL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAyIDMKIyAzOCAiYWxsLmgiIDIKCgoKCiMgMSAi
aW5pdGlhbC5oIiAxCiMgMTA0ICJpbml0aWFsLmgiCmNsYXNzIEluaXRUZXJtQmFzZQp7CiAgICAg
ICAgSW5pdFRlcm1CYXNlICpuZXh0Owpwcm90ZWN0ZWQ6CiAgICAgICAgaW50IHByaW9yaXR5OwoK
cHJpdmF0ZToKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpID0gMDsKCnB1YmxpYzoKICAgICAg
ICBJbml0VGVybUJhc2UoSW5pdFRlcm1CYXNlICoqdGFibGUsIGludCBpcCk7CgogICAgICAgIHN0
YXRpYyB2b2lkIFBlcmZvcm1BbGwoSW5pdFRlcm1CYXNlICp0YWJsZSk7Cn07CiMgMTQ0ICJpbml0
aWFsLmgiCmNsYXNzIEluaXRpYWxpemVyIDogcHJpdmF0ZSBJbml0VGVybUJhc2UKewpwcml2YXRl
OgogICAgICAgIHN0YXRpYyBJbml0VGVybUJhc2UgKmluaXRhYmxlOwoKICAgICAgICB2aXJ0dWFs
IHZvaWQgV29yaygpID0gMDsKCnB1YmxpYzoKICAgICAgICBJbml0aWFsaXplcihpbnQgaXA9MTAw
KTsKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIFBlcmZvcm1BbGwoKTsKCn07CiMgMTgyICJpbml0
aWFsLmgiCmNsYXNzIFRlcm1pbmF0b3IgOiBwcml2YXRlIEluaXRUZXJtQmFzZQp7CnByaXZhdGU6
CiAgICAgICAgc3RhdGljIEluaXRUZXJtQmFzZSAqdHJtdGFibGU7CgogICAgICAgIHZpcnR1YWwg
dm9pZCBXb3JrKCkgPSAwOwoKcHVibGljOgogICAgICAgIFRlcm1pbmF0b3IoaW50IGlwPTEwMCk7
CgoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBQZXJmb3JtQWxsKCk7Cgp9OwojIDIyMyAiaW5pdGlh
bC5oIgpjbGFzcyBJbml0RnVuY3Rpb24gOiBwcml2YXRlIEluaXRpYWxpemVyCnsKICAgICAgICB2
b2lkICgqZnVuYykoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpOwpwdWJsaWM6CiAgICAg
ICAgSW5pdEZ1bmN0aW9uKHZvaWQgKCpmKSgpLCBpbnQgaXA9MTAwKTsKCgoKfTsKIyAyNTMgImlu
aXRpYWwuaCIKY2xhc3MgVGVybUZ1bmN0aW9uIDogcHJpdmF0ZSBUZXJtaW5hdG9yCnsKICAgICAg
ICB2b2lkICgqZnVuYykoKTsKICAgICAgICB2aXJ0dWFsIHZvaWQgV29yaygpOwpwdWJsaWM6CiAg
ICAgICAgVGVybUZ1bmN0aW9uKHZvaWQgKCpmKSgpLCBpbnQgaXA9MTAwKTsKCgoKfTsKIyA0MyAi
YWxsLmgiIDIKIyAxICJvdXRmb3JtLmgiIDEKIyAzNCAib3V0Zm9ybS5oIgpjbGFzcyBvdXRmb3Jt
CnsKICAgICAgICBpbnQgeCwgeTsKICAgICAgICBzdHJpbmcgKmRhdGE7CgpwdWJsaWM6CiAgICAg
ICAgICAgICAgICBvdXRmb3JtKCk7CiAgICAgICAgICAgICAgICBvdXRmb3JtKCBjb25zdCBzdHJp
bmcgJnMgKTsKICAgICAgICAgICAgICAgIG91dGZvcm0oIGNvbnN0IGNoYXIgKnMgKTsKCiAgICAg
ICAgICAgICAgICBvdXRmb3JtKCBjb25zdCBvdXRmb3JtICZvICk7CgogICAgICAgICAgICAgICAg
fm91dGZvcm0oKTsKCiAgICAgICAgb3V0Zm9ybSYgb3BlcmF0b3I9KGNvbnN0IG91dGZvcm0gJik7
CgoKICAgICAgICB2b2lkIFNldFN0cmluZyggY29uc3Qgc3RyaW5nJiBzICk7CgoKICAgICAgICB2
b2lkIEFkZEF0Qm90dG9tKGNvbnN0IG91dGZvcm0gJik7CgogICAgICAgIHZvaWQgQWRkQXRSaWdo
dChjb25zdCBvdXRmb3JtICYpOwoKICAgICAgICB2b2lkIEFkZEF0UmlnaHRUb3AoY29uc3Qgb3V0
Zm9ybSAmKTsKCiAgICAgICAgdm9pZCBBZGRBdFJpZ2h0Qm90dG9tKGNvbnN0IG91dGZvcm0gJik7
CgogICAgICAgIHZvaWQgU3Vycm91bmRCeUJyYWNrZXQoY29uc3QgY2hhciAqIGx0LCBjb25zdCBj
aGFyICogbG0sIGNvbnN0IGNoYXIgKiBsYiwgY29uc3QgY2hhciAqIGx4LCBjb25zdCBjaGFyICog
cnQsIGNvbnN0IGNoYXIgKiBybSwgY29uc3QgY2hhciAqIHJiLCBjb25zdCBjaGFyICogcngpOwoj
IDgxICJvdXRmb3JtLmgiCiAgICAgICAgYm9vbCBJc0VtcHR5KCkgeyByZXR1cm4geT09MDsgfQoK
CiAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IG91dGZv
cm0gJik7Cgp9OwojIDQ0ICJhbGwuaCIgMgojIDEgImxpc3QuaCIgMQojIDM4ICJsaXN0LmgiCnRl
bXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBMaXN0RWxlbWVudAp7CnB1YmxpYzoKICAgICAgICBMaXN0
RWxlbWVudDxUPiAqbmV4dDsKCiAgICAgICAgVCBvYmo7CgogICAgICAgIExpc3RFbGVtZW50KCkg
eyBuZXh0ID0gX19udWxsOyB9CgogICAgICAgIExpc3RFbGVtZW50KGNvbnN0IFQgJmlvLCBMaXN0
RWxlbWVudDxUPiAqaW4pIDogb2JqKGlvKSB7IG5leHQgPSBpbjsgfQoKfTsKCgoKCnRlbXBsYXRl
IDxjbGFzcyBUPiBjbGFzcyBMaXN0SXRlcmF0b3I7CiMgNjcgImxpc3QuaCIKdGVtcGxhdGUgPGNs
YXNzIFQ+IGNsYXNzIExpc3QKewogICAgICAgIExpc3RFbGVtZW50PFQ+ICpyb290OwoKCnB1Ymxp
YzoKICAgICAgICBMaXN0KCkgeyByb290ID0gX19udWxsOyB9CgogICAgICAgIH5MaXN0KCk7Cgog
ICAgICAgIHZvaWQgQWRkKGNvbnN0IFQgJnQpIHsgcm9vdCA9IG5ldyBMaXN0RWxlbWVudDxUPiAo
dCwgcm9vdCk7IH0KCiAgICAgICAgYm9vbCBEZXRhY2goY29uc3QgVCAmdCk7CgoKICAgICAgICBm
cmllbmQgY2xhc3MgTGlzdEl0ZXJhdG9yPFQ+Owp9OwojIDk4ICJsaXN0LmgiCnRlbXBsYXRlIDxj
bGFzcyBUPiBjbGFzcyBMaXN0SXRlcmF0b3IKewogICAgICAgIExpc3RFbGVtZW50PFQ+ICpwdHI7
CgpwdWJsaWM6CiAgICAgICAgTGlzdEl0ZXJhdG9yKExpc3Q8VD4gJmwpIHsgcHRyID0gbC5yb290
OyB9CgogICAgICAgIG9wZXJhdG9yIGJvb2woKSB7IHJldHVybiBwdHIgIT0gX19udWxsOyB9Cgog
ICAgICAgIFQgJkN1cnJlbnQoKSB7IHJldHVybiBwdHItPm9iajsgfQoKICAgICAgICBUICZvcGVy
YXRvcisrKCkgeyBMaXN0RWxlbWVudDxUPiAqIHJldCA9IHB0cjsgcHRyID0gcHRyLT5uZXh0OyBy
ZXR1cm4gcmV0LT5vYmo7IH0KCiAgICAgICAgVCAmb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIChw
dHIgPSBwdHItPm5leHQpLT5vYmo7IH0KCn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gTGlzdDxU
Pjo6fkxpc3QoKQp7CiAgICAgICAgd2hpbGUoIHJvb3QgKQogICAgICAgIHsKICAgICAgICAgICAg
ICAgIExpc3RFbGVtZW50PFQ+ICpuID0gcm9vdC0+bmV4dDsKICAgICAgICAgICAgICAgIGRlbGV0
ZSByb290OwogICAgICAgICAgICAgICAgcm9vdCA9IG47CiAgICAgICAgfQp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBUPgpib29sIExpc3Q8VD46OkRldGFjaChjb25zdCBUICZ0KQp7CiAgICAgICAgTGlz
dEVsZW1lbnQ8VD4gKm4sICpubjsKICAgICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmKCByb290LT5vYmogPT0gdCApCiAgICAg
ICAgewogICAgICAgICAgICAgICAgbiA9IHJvb3Q7CiAgICAgICAgICAgICAgICByb290ID0gcm9v
dC0+bmV4dDsKICAgICAgICAgICAgICAgIGRlbGV0ZSBuOwogICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgfQoKICAgICAgICBuID0gcm9vdDsKICAgICAgICB3aGlsZSggbi0+bmV4
dCAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCBuLT5uZXh0LT5vYmog
PT0gdCApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5uID0gbi0+
bmV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgbi0+bmV4dCA9IG5uLT5uZXh0OwogICAgICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgbm47CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbiA9IG4tPm5leHQ7CiAg
ICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKfQojIDQ1ICJhbGwuaCIgMgojIDEgInZhbGxv
Yy5oIiAxCiMgNDAgInZhbGxvYy5oIgpjbGFzcyBWaXJ0dWFsQWxsb2NhdG9yCnsKcHVibGljOgog
IGVudW0gZGlyZWN0aW9uX3QgeyBub3JtYWwsIHJldmVyc2UgfTsKCgpwcm90ZWN0ZWQ6CiAgdm9p
ZCAqIHRvcDsKCiAgc2l6ZV90IG1heExlbjsKCiAgc2l6ZV90IGN1ckxlbjsKCiAgc2l6ZV90IGFs
bG9jVW5pdDsKCiAgY2hhciAqZGVzY3JpcHRpb247CgogIGRpcmVjdGlvbl90IGRpcmVjdGlvbjsK
CgogIHN0YXRpYyBzaXplX3QgcGFnZVNpemU7CgogIHN0YXRpYyBzaXplX3QgYWxsb2NTaXplOwoK
CiAgc3RhdGljIExpc3Q8VmlydHVhbEFsbG9jYXRvciAqPiBsaXN0OwojIDc1ICJ2YWxsb2MuaCIK
cHVibGljOgoKICAgICAgICBWaXJ0dWFsQWxsb2NhdG9yKHNpemVfdCBpTWF4TGVuLCBzaXplX3Qg
aW5pdGlhbExlbiwgY2hhciAqZGVzYyA9IF9fbnVsbCwgZGlyZWN0aW9uX3QgZGlyID0gbm9ybWFs
ICk7CgoKICAgICAgICB+VmlydHVhbEFsbG9jYXRvcigpOwoKCiAgICAgICAgY2hhciAqIEdldERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gZGVzY3JpcHRpb247IH0KCiAgICAgICAgc2l6ZV90IEdldE1h
eExlbigpIHsgcmV0dXJuIG1heExlbjsgfQoKICAgICAgICBzaXplX3QgR2V0Q3VyTGVuKCkgeyBy
ZXR1cm4gY3VyTGVuOyB9CgoKICAgICAgICBib29sIEV4cGFuZChzaXplX3QgbmV3TGVuKTsKCiAg
ICAgICAgYm9vbCBSZWR1Y2Uoc2l6ZV90IG5ld0xlbik7CgoKICAgICAgICB2b2lkICogR2V0UG9p
bnRlcigpIHsgaWYoIGRpcmVjdGlvbiA9PSBub3JtYWwgKSByZXR1cm4gdG9wOyBlbHNlIHJldHVy
biAobG9uZyopKChjaGFyICopdG9wICsgbWF4TGVuKSAtIDE7IH0KCiAgICAgICAgdm9pZCAqIEdl
dExpbWl0KCkgeyBpZiggZGlyZWN0aW9uID09IG5vcm1hbCApIHJldHVybiAoY2hhciAqKXRvcCAr
IG1heExlbjsgZWxzZSByZXR1cm4gdG9wOyB9CgogICAgICAgIHN0YXRpYyB2b2lkIEluaXQoKTsK
CiAgICAgICAgc3RhdGljIGJvb2wgUGFnZUZhdWx0SGFuZGxlcih2b2lkICphZGRyKTsKCgoKICAg
ICAgICBzdGF0aWMgc2l6ZV90IEdldFBhZ2VTaXplKCkgeyByZXR1cm4gcGFnZVNpemU7IH0KCn07
CiMgNDYgImFsbC5oIiAyCgojIDEgImNlbGwuaCIgMQojIDQ1ICJjZWxsLmgiCiMgMSAicHJvZmls
ZS5oIiAxCiMgMTkgInByb2ZpbGUuaCIKIyAxICJlcnJvcnMuaCIgMQojIDU5ICJlcnJvcnMuaCIK
dm9pZCBfRmF0YWwoKTsKIyAxMTQgImVycm9ycy5oIgp2b2lkIF9BYm9ydChjb25zdCBzdHJpbmcg
JiwgY29uc3QgY2hhciAqLCBpbnQpOwp2b2lkIF9SdW5FcnJvcihjb25zdCBzdHJpbmcgJik7CnZv
aWQgX1J1bkVycm9yKGNvbnN0IHN0cmluZyAmLCBjb25zdCBjaGFyICosIGludCk7CnZvaWQgX1J1
bldhcm4oY29uc3Qgc3RyaW5nICYpOwp2b2lkIF9SdW5XYXJuKGNvbnN0IHN0cmluZyAmLCBjb25z
dCBjaGFyICosIGludCk7CnZvaWQgX0luRXJyb3IoY29uc3Qgc3RyaW5nICYpOwp2b2lkIF9JbkVy
cm9yKGNvbnN0IHN0cmluZyAmLCBjb25zdCBjaGFyICosIGludCk7CnZvaWQgX0luV2Fybihjb25z
dCBzdHJpbmcgJik7CnZvaWQgX0luV2Fybihjb25zdCBzdHJpbmcgJiwgY29uc3QgY2hhciAqLCBp
bnQpOwojIDE5MyAiZXJyb3JzLmgiCmV4dGVybiBpbnQgZGVidWdmbGFnOwojIDIwICJwcm9maWxl
LmgiIDIKIyA2OCAicHJvZmlsZS5oIgpzdHJ1Y3QgdGltZWJhc2UKewogICAgICAgIGRvdWJsZSB1
c2VydGltZTsKCiAgICAgICAgZG91YmxlIHN5c3RpbWU7CgoKICAgICAgICB0aW1lYmFzZSgpIHsg
fQogICAgICAgIHRpbWViYXNlKGRvdWJsZSB1LCBkb3VibGUgcz0wLjApIHsgdXNlcnRpbWUgPSB1
OyBzeXN0aW1lID0gczsgfQogICAgICAgIGZyaWVuZCB0aW1lYmFzZSBvcGVyYXRvcisodGltZWJh
c2UgeCwgdGltZWJhc2UgYSkgeyByZXR1cm4gdGltZWJhc2UoeC51c2VydGltZSthLnVzZXJ0aW1l
LCB4LnN5c3RpbWUrYS5zeXN0aW1lKTsgfQoKICAgICAgICBmcmllbmQgdGltZWJhc2Ugb3BlcmF0
b3ItKHRpbWViYXNlIHgsIHRpbWViYXNlIGEpIHsgcmV0dXJuIHRpbWViYXNlKHgudXNlcnRpbWUt
YS51c2VydGltZSwgeC5zeXN0aW1lLWEuc3lzdGltZSk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWVi
YXNlIG9wZXJhdG9yLSh0aW1lYmFzZSBhKSB7IHJldHVybiB0aW1lYmFzZSgtYS51c2VydGltZSwg
LWEuc3lzdGltZSk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWViYXNlIG9wZXJhdG9yKih0aW1lYmFz
ZSB4LCBkb3VibGUgdmFsKSB7IHJldHVybiB0aW1lYmFzZSh4LnVzZXJ0aW1lKnZhbCwgeC5zeXN0
aW1lKnZhbCk7IH0KCiAgICAgICAgZnJpZW5kIHRpbWViYXNlIG9wZXJhdG9yLyh0aW1lYmFzZSB4
LCBkb3VibGUgdmFsKSB7IHJldHVybiB0aW1lYmFzZSh4LnVzZXJ0aW1lL3ZhbCwgeC5zeXN0aW1l
L3ZhbCk7IH0KCiAgICAgICAgZnJpZW5kIGludCBvcGVyYXRvcj4odGltZWJhc2UgeCwgZG91Ymxl
IHZhbCkgeyByZXR1cm4gKHgudXNlcnRpbWUgPiB2YWwgfHwgeC5zeXN0aW1lID4gdmFsKTsgfQoK
ICAgICAgICBmcmllbmQgaW50IG9wZXJhdG9yPCh0aW1lYmFzZSB4LCBkb3VibGUgdmFsKSB7IHJl
dHVybiAoeC51c2VydGltZSA8IHZhbCB8fCB4LnN5c3RpbWUgPCB2YWwpOyB9CgogICAgICAgIHRp
bWViYXNlJiBvcGVyYXRvcis9KHRpbWViYXNlICZhKSB7IHVzZXJ0aW1lKz1hLnVzZXJ0aW1lOyBz
eXN0aW1lKz1hLnN5c3RpbWU7IHJldHVybiAqdGhpczsgfQoKICAgICAgICB0aW1lYmFzZSYgb3Bl
cmF0b3ItPSh0aW1lYmFzZSAmYSkgeyB1c2VydGltZS09YS51c2VydGltZTsgc3lzdGltZS09YS5z
eXN0aW1lOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgICAgZG91YmxlIHdhbGx0aW1lKHZvaWQpIHsg
cmV0dXJuIHVzZXJ0aW1lICsgc3lzdGltZTsgfQoKCiAgICAgICAgb3N0cmVhbSYgb3V0cHV0KG9z
dHJlYW0mIG9zKTsKCn07CiMgMTE1ICJwcm9maWxlLmgiCmNsYXNzIHByb2ZiYXNlCnsKICAgICAg
ICBjb25zdCBjaGFyICpuYW1lOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHBhc3NjbnQ7CgogICAg
ICAgIHRpbWViYXNlIGFsbHRpbWU7CgogICAgICAgIHRpbWViYXNlIGV4Y3RpbWU7CgoKICAgICAg
ICBpbnQgcmVlbnRyYW50Y250OwoKCgpwdWJsaWM6CiAgICAgICAgcHJvZmJhc2UoY29uc3QgY2hh
ciAqbikgOiBwYXNzY250KDEpLGFsbHRpbWUoMCksZXhjdGltZSgwKSB7CiAgICAgICAgICBjaGFy
KiBubiA9IG5ldyBjaGFyW3N0cmxlbihuKSsxXTsgc3RyY3B5KG5uLG4pOyBuYW1lPW5uOwoKICAg
ICAgICAgIHJlZW50cmFudGNudD0xOwoKICAgICAgICB9CgogICAgICAgIH5wcm9mYmFzZSgpIHsg
ZGVsZXRlW10gbmFtZTsgfQoKICAgICAgICBjb25zdCBjaGFyICpHZXRLZXkoKSB7IHJldHVybiBu
YW1lOyB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldE5hbWUoKSB7IHJldHVybiBuYW1lOyB9Cgog
ICAgICAgIHZvaWQgQWRkVGltZSh0aW1lYmFzZSB0KSB7IGFsbHRpbWUgKz0gdDsgfQoKICAgICAg
ICB2b2lkIEV4Y1RpbWUodGltZWJhc2UgdCkgeyBleGN0aW1lICs9IHQ7IH0KCiAgICAgICAgdm9p
ZCBJbmNDb3VudCgpIHsgcGFzc2NudCsrOyB9CgoKCiAgICAgICAgdm9pZCBFbnRlcigpIHsgcGFz
c2NudCsrOyByZWVudHJhbnRjbnQrKzsgfQoKICAgICAgICBpbnQgTGVhdmUoKSB7IHJldHVybiAt
LXJlZW50cmFudGNudDsgfQoKCgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBHZXRQYXNzQ291bnQo
KSB7IHJldHVybiBwYXNzY250OyB9CgogICAgICAgIHRpbWViYXNlIEdldEFsbFRpbWUoKSB7IHJl
dHVybiBhbGx0aW1lOyB9CgogICAgICAgIHRpbWViYXNlIEdldEV4Y1RpbWUoKSB7IHJldHVybiBl
eGN0aW1lOyB9CgoKICAgICAgICBvc3RyZWFtJiBvdXRwdXQob3N0cmVhbSYgb3MpOwoKICAgICAg
ICBzdGF0aWMgaW50IHBiY29tcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKCn07CiMg
MTg0ICJwcm9maWxlLmgiCmNsYXNzIHByb2YKewogICAgICAgIHRpbWViYXNlIHN0YXJ0X3RpY2s7
CgogICAgICAgIHByb2YgKnBhcmVudDsKCiAgICAgICAgcHJvZmJhc2UgKm15X2Jhc2U7CgogICAg
ICAgIHN0YXRpYyBwcm9mICpjdXJyZW50OwoKcHVibGljOgogICAgICAgIHByb2YoY2hhciAqbik7
CgogICAgICAgIH5wcm9mKCk7CgoKICAgICAgICBzdGF0aWMgdGltZWJhc2UgR2V0VGljaygpOwoK
ICAgICAgICB2b2lkIEFkZFRpbWUodGltZWJhc2UgdCkgeyBzdGFydF90aWNrICs9IHQ7fQoKCiAg
ICAgICAgZnJpZW5kIGNsYXNzIHByb2ZpbGVyOwoKCn07CiMgMjIyICJwcm9maWxlLmgiCmNsYXNz
IHByb2Z1c2VyCnsKICAgICAgICB0aW1lYmFzZSBzdGFydF90aWNrOwoKICAgICAgICBwcm9mYmFz
ZSAqbXlfYmFzZTsKCiAgICAgICAgcHJvZnVzZXIgKm5leHQ7CgogICAgICAgIHN0YXRpYyBwcm9m
dXNlciAqcm9vdDsKCgogICAgICAgIHByb2Z1c2VyICpzZWFyY2hfaW50ZXJuYWwoY29uc3QgY2hh
ciAqbmFtZSk7CgoKcHVibGljOgogICAgICAgIHByb2Z1c2VyKGNvbnN0IGNoYXIgKm4pOwoKICAg
ICAgICB+cHJvZnVzZXIoKTsKCiAgICAgICAgY29uc3QgY2hhciAqR2V0TmFtZSgpIHsgcmV0dXJu
IG15X2Jhc2UtPkdldE5hbWUoKTsgfQoKICAgICAgICBzdGF0aWMgdGltZWJhc2UgR2V0VGljaygp
IHsgcmV0dXJuIHByb2Y6OkdldFRpY2soKTsgfQoKICAgICAgICB2b2lkIEFkZFRpbWUodGltZWJh
c2UgdCkgeyBzdGFydF90aWNrICs9IHQ7fQoKICAgICAgICB0aW1lYmFzZSBHZXRUaW1lKCkgeyBy
ZXR1cm4gc3RhcnRfdGljazsgfQoKCiAgICAgICAgc3RhdGljIHByb2Z1c2VyICpTZWFyY2goY29u
c3QgY2hhciAqbmFtZSkgeyBpZiggcm9vdCA9PSBfX251bGwgKSByZXR1cm4gX19udWxsOyBlbHNl
IHJldHVybiByb290LT5zZWFyY2hfaW50ZXJuYWwobmFtZSk7IH0KCgogICAgICAgIHN0YXRpYyBw
cm9mdXNlciAqR2V0Um9vdCgpIHsgcmV0dXJuIHJvb3Q7fQogICAgICAgIHByb2Z1c2VyICpHZXRO
ZXh0KCkgeyByZXR1cm4gbmV4dDsgfQoKICAgICAgICBmcmllbmQgY2xhc3MgcHJvZmlsZXI7Cn07
CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVk
ZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0
LmgiIDEgMwojIDEwMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKZXh0ZXJuIGludCBf
X3NpZ2lzbWVtYmVyIChfX2NvbnN0IF9fc2lnc2V0X3QgKiwgaW50KTsKZXh0ZXJuIGludCBfX3Np
Z2FkZHNldCAoX19zaWdzZXRfdCAqLCBpbnQpOwpleHRlcm4gaW50IF9fc2lnZGVsc2V0IChfX3Np
Z3NldF90ICosIGludCk7CiMgMzQgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAzCgoKCgoKCgp0
eXBlZGVmIF9fc2lnX2F0b21pY190IHNpZ19hdG9taWNfdDsKCiMgNTggIi91c3IvaW5jbHVkZS9z
aWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ251bS5oIiAxIDMKIyA1OSAiL3Vz
ci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKIyA3MyAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5
cGVkZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KSAoaW50KTsKCgoKCmV4dGVybiBfX3NpZ2hhbmRs
ZXJfdCBfX3N5c3Zfc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFuZGxlcikK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbCAoaW50IF9f
c2lnLCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRl
cm4gX19zaWdoYW5kbGVyX3Qgc2lnbmFsIChpbnQgX19zaWcsIF9fc2lnaGFuZGxlcl90IF9faGFu
ZGxlcikgdGhyb3cgKCk7CiMgMTAyICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKCgoKCgpleHRl
cm4gX19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbCAoaW50IF9fc2lnLCBfX3NpZ2hhbmRsZXJfdCBf
X2hhbmRsZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGtpbGwgKF9fcGlkX3QgX19waWQs
IGludCBfX3NpZykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQga2lsbHBnIChfX3BpZF90IF9f
cGdycCwgaW50IF9fc2lnKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcmFpc2UgKGludCBfX3Np
ZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gX19zaWdoYW5kbGVyX3Qgc3NpZ25hbCAoaW50IF9fc2ln
LCBfX3NpZ2hhbmRsZXJfdCBfX2hhbmRsZXIpIHRocm93ICgpOwpleHRlcm4gaW50IGdzaWduYWwg
KGludCBfX3NpZykgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwc2lnbmFsIChpbnQgX19zaWcs
IF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxNDYgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMwpleHRlcm4gaW50IF9fc2lncGF1c2UgKGludCBfX3NpZ19vcl9tYXNrLCBpbnQgX19pc19z
aWcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzaWdwYXVzZSAoaW50IF9fbWFzaykgdGhyb3cg
KCk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKZXh0ZXJuIGludCBzaWdibG9jayAo
aW50IF9fbWFzaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdzZXRtYXNrIChpbnQgX19tYXNr
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNpZ2dldG1hc2sgKHZvaWQpIHRocm93ICgpOwojIDE4
OSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCnR5cGVkZWYgX19zaWdoYW5kbGVyX3Qgc2lnaGFu
ZGxlcl90OwoKCgoKdHlwZWRlZiBfX3NpZ2hhbmRsZXJfdCBzaWdfdDsKIyAyMDUgIi91c3IvaW5j
bHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMSAzCiMg
MjUgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3dvcmRzaXplLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdpbmZvLmgiIDIgMwoK
CgoKCgoKdHlwZWRlZiB1bmlvbiBzaWd2YWwKICB7CiAgICBpbnQgc2l2YWxfaW50OwogICAgdm9p
ZCAqc2l2YWxfcHRyOwogIH0gc2lndmFsX3Q7CiMgNTEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2lu
Zm8uaCIgMwp0eXBlZGVmIHN0cnVjdCBzaWdpbmZvCiAgewogICAgaW50IHNpX3NpZ25vOwogICAg
aW50IHNpX2Vycm5vOwoKICAgIGludCBzaV9jb2RlOwoKICAgIHVuaW9uCiAgICAgIHsKICAgICAg
ICBpbnQgX3BhZFsoKDEyOCAvIHNpemVvZiAoaW50KSkgLSAzKV07CgoKICAgICAgICBzdHJ1Y3QK
ICAgICAgICAgIHsKICAgICAgICAgICAgX19waWRfdCBzaV9waWQ7CiAgICAgICAgICAgIF9fdWlk
X3Qgc2lfdWlkOwogICAgICAgICAgfSBfa2lsbDsKCgogICAgICAgIHN0cnVjdAogICAgICAgICAg
ewogICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3RpbWVyMTsKICAgICAgICAgICAgdW5zaWduZWQg
aW50IF90aW1lcjI7CiAgICAgICAgICB9IF90aW1lcjsKCgogICAgICAgIHN0cnVjdAogICAgICAg
ICAgewogICAgICAgICAgICBfX3BpZF90IHNpX3BpZDsKICAgICAgICAgICAgX191aWRfdCBzaV91
aWQ7CiAgICAgICAgICAgIHNpZ3ZhbF90IHNpX3NpZ3ZhbDsKICAgICAgICAgIH0gX3J0OwoKCiAg
ICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIF9fcGlkX3Qgc2lfcGlkOwogICAg
ICAgICAgICBfX3VpZF90IHNpX3VpZDsKICAgICAgICAgICAgaW50IHNpX3N0YXR1czsKICAgICAg
ICAgICAgX19jbG9ja190IHNpX3V0aW1lOwogICAgICAgICAgICBfX2Nsb2NrX3Qgc2lfc3RpbWU7
CiAgICAgICAgICB9IF9zaWdjaGxkOwoKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAg
ICAgICAgIHZvaWQgKnNpX2FkZHI7CiAgICAgICAgICB9IF9zaWdmYXVsdDsKCgogICAgICAgIHN0
cnVjdAogICAgICAgICAgewogICAgICAgICAgICBsb25nIGludCBzaV9iYW5kOwogICAgICAgICAg
ICBpbnQgc2lfZmQ7CiAgICAgICAgICB9IF9zaWdwb2xsOwogICAgICB9IF9zaWZpZWxkczsKICB9
IHNpZ2luZm9fdDsKIyAxMjggIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwplbnVtCnsK
ICBTSV9BU1lOQ05MID0gLTYsCgogIFNJX1NJR0lPLAoKICBTSV9BU1lOQ0lPLAoKICBTSV9NRVNH
USwKCiAgU0lfVElNRVIsCgogIFNJX1FVRVVFLAoKICBTSV9VU0VSLAoKICBTSV9LRVJORUwgPSAw
eDgwCgp9OwoKCgplbnVtCnsKICBJTExfSUxMT1BDID0gMSwKCiAgSUxMX0lMTE9QTiwKCiAgSUxM
X0lMTEFEUiwKCiAgSUxMX0lMTFRSUCwKCiAgSUxMX1BSVk9QQywKCiAgSUxMX1BSVlJFRywKCiAg
SUxMX0NPUFJPQywKCiAgSUxMX0JBRFNUSwoKfTsKCgplbnVtCnsKICBGUEVfSU5URElWID0gMSwK
CiAgRlBFX0lOVE9WRiwKCiAgRlBFX0ZMVERJViwKCiAgRlBFX0ZMVE9WRiwKCiAgRlBFX0ZMVFVO
RCwKCiAgRlBFX0ZMVFJFUywKCiAgRlBFX0ZMVElOViwKCiAgRlBFX0ZMVFNVQgoKfTsKCgplbnVt
CnsKICBTRUdWX01BUEVSUiA9IDEsCgogIFNFR1ZfQUNDRVJSCgp9OwoKCmVudW0KewogIEJVU19B
RFJBTE4gPSAxLAoKICBCVVNfQURSRVJSLAoKICBCVVNfT0JKRVJSCgp9OwoKCmVudW0KewogIFRS
QVBfQlJLUFQgPSAxLAoKICBUUkFQX1RSQUNFCgp9OwoKCmVudW0KewogIENMRF9FWElURUQgPSAx
LAoKICBDTERfS0lMTEVELAoKICBDTERfRFVNUEVELAoKICBDTERfVFJBUFBFRCwKCiAgQ0xEX1NU
T1BQRUQsCgogIENMRF9DT05USU5VRUQKCn07CgoKZW51bQp7CiAgUE9MTF9JTiA9IDEsCgogIFBP
TExfT1VULAoKICBQT0xMX01TRywKCiAgUE9MTF9FUlIsCgogIFBPTExfUFJJLAoKICBQT0xMX0hV
UAoKfTsKIyAyNzEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ2luZm8uaCIgMwpzdHJ1Y3QgX19wdGhy
ZWFkX2F0dHJfczsKCnR5cGVkZWYgc3RydWN0IHNpZ2V2ZW50CiAgewogICAgc2lndmFsX3Qgc2ln
ZXZfdmFsdWU7CiAgICBpbnQgc2lnZXZfc2lnbm87CiAgICBpbnQgc2lnZXZfbm90aWZ5OwoKICAg
IHVuaW9uCiAgICAgIHsKICAgICAgICBpbnQgX3BhZFsoKDY0IC8gc2l6ZW9mIChpbnQpKSAtIDMp
XTsKCiAgICAgICAgc3RydWN0CiAgICAgICAgICB7CiAgICAgICAgICAgIHZvaWQgKCpfZnVuY3Rp
b24pIChzaWd2YWxfdCk7CiAgICAgICAgICAgIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zICpfYXR0
cmlidXRlOwogICAgICAgICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICB9IF9zaWdldl91bjsKICB9
IHNpZ2V2ZW50X3Q7CgoKCgoKCmVudW0KewogIFNJR0VWX1NJR05BTCA9IDAsCgogIFNJR0VWX05P
TkUsCgogIFNJR0VWX1RIUkVBRAoKfTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMiAz
CgoKCmV4dGVybiBpbnQgc2lnZW1wdHlzZXQgKHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzaWdmaWxsc2V0IChzaWdzZXRfdCAqX19zZXQpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc2lnYWRkc2V0IChzaWdzZXRfdCAqX19zZXQsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IHNpZ2RlbHNldCAoc2lnc2V0X3QgKl9fc2V0LCBpbnQgX19zaWdubykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBzaWdpc21lbWJlciAoX19jb25zdCBzaWdzZXRfdCAqX19zZXQs
IGludCBfX3NpZ25vKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWdpc2VtcHR5c2V0IChfX2Nv
bnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdhbmRzZXQgKHNp
Z3NldF90ICpfX3NldCwgX19jb25zdCBzaWdzZXRfdCAqX19sZWZ0LAogICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBzaWdzZXRfdCAqX19yaWdodCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBz
aWdvcnNldCAoc2lnc2V0X3QgKl9fc2V0LCBfX2NvbnN0IHNpZ3NldF90ICpfX2xlZnQsCiAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgc2lnc2V0X3QgKl9fcmlnaHQpIHRocm93ICgpOwoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdhY3Rpb24uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVk
ZS9iaXRzL3NpZ2FjdGlvbi5oIiAzCnN0cnVjdCBzaWdhY3Rpb24KICB7CgoKICAgIHVuaW9uCiAg
ICAgIHsKCiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKCiAgICAgICAgdm9pZCAo
KnNhX3NpZ2FjdGlvbikgKGludCwgc2lnaW5mb190ICosIHZvaWQgKik7CiAgICAgIH0KICAgIF9f
c2lnYWN0aW9uX2hhbmRsZXI7CgoKCgoKCgogICAgX19zaWdzZXRfdCBzYV9tYXNrOwoKCiAgICBp
bnQgc2FfZmxhZ3M7CgoKICAgIHZvaWQgKCpzYV9yZXN0b3JlcikgKHZvaWQpOwogIH07CiMgMjM5
ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncHJvY21hc2sgKGlu
dCBfX2hvdywgX19jb25zdCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAg
ICAgICAgICAgICAgc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vc2V0KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBzaWdzdXNwZW5kIChfX2NvbnN0IHNpZ3NldF90ICpfX3NldCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBzaWdhY3Rpb24gKGludCBfX3NpZywgX19jb25zdCBzdHJ1Y3Qgc2lnYWN0aW9u
ICpfX3Jlc3RyaWN0IF9fYWN0LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2FjdGlv
biAqX19yZXN0cmljdCBfX29hY3QpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2lncGVuZGluZyAo
c2lnc2V0X3QgKl9fc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBzaWd3YWl0IChfX2NvbnN0
IHNpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2V0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWcpCiAgICAg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2lnd2FpdGluZm8gKF9fY29uc3Qgc2lnc2V0X3QgKl9f
cmVzdHJpY3QgX19zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2luZm9fdCAqX19yZXN0
cmljdCBfX2luZm8pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNpZ3RpbWVkd2FpdCAoX19jb25z
dCBzaWdzZXRfdCAqX19yZXN0cmljdCBfX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgIHNp
Z2luZm9fdCAqX19yZXN0cmljdCBfX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQpCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgc2lncXVldWUgKF9fcGlkX3QgX19waWQsIGludCBfX3NpZywgX19jb25z
dCB1bmlvbiBzaWd2YWwgX192YWwpCiAgICAgdGhyb3cgKCk7CiMgMjg0ICIvdXNyL2luY2x1ZGUv
c2lnbmFsLmgiIDMKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX3NpZ2xpc3RbNjRd
OwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19zaWdsaXN0WzY0XTsKCgpzdHJ1Y3Qg
c2lndmVjCiAgewogICAgX19zaWdoYW5kbGVyX3Qgc3ZfaGFuZGxlcjsKICAgIGludCBzdl9tYXNr
OwoKICAgIGludCBzdl9mbGFnczsKCiAgfTsKIyAzMDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIg
MwpleHRlcm4gaW50IHNpZ3ZlYyAoaW50IF9fc2lnLCBfX2NvbnN0IHN0cnVjdCBzaWd2ZWMgKl9f
dmVjLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ3ZlYyAqX19vdmVjKSB0aHJvdyAoKTsK
CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvYml0cy9zaWdjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYXNtL3NpZ2NvbnRl
eHQuaCIgMSAzCiMgMTggIi91c3IvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAzCnN0cnVjdCBf
ZnByZWcgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVu
c2lnbmVkIHNob3J0IGV4cG9uZW50Owp9OwoKc3RydWN0IF9mcHhyZWcgewogICAgICAgIHVuc2ln
bmVkIHNob3J0IHNpZ25pZmljYW5kWzRdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGV4cG9uZW50
OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHBhZGRpbmdbM107Cn07CgpzdHJ1Y3QgX3htbXJlZyB7
CiAgICAgICAgdW5zaWduZWQgbG9uZyBlbGVtZW50WzRdOwp9OwoKc3RydWN0IF9mcHN0YXRlIHsK
CiAgICAgICAgdW5zaWduZWQgbG9uZyBjdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHN3OwogICAg
ICAgIHVuc2lnbmVkIGxvbmcgdGFnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaXBvZmY7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyBjc3NlbDsKICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGFvZmY7CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBkYXRhc2VsOwogICAgICAgIHN0cnVjdCBfZnByZWcgX3N0Wzhd
OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBt
YWdpYzsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgX2Z4c3JfZW52WzZdOwogICAgICAgIHVuc2ln
bmVkIGxvbmcgbXhjc3I7CiAgICAgICAgdW5zaWduZWQgbG9uZyByZXNlcnZlZDsKICAgICAgICBz
dHJ1Y3QgX2ZweHJlZyBfZnhzcl9zdFs4XTsKICAgICAgICBzdHJ1Y3QgX3htbXJlZyBfeG1tWzhd
OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFkZGluZ1s1Nl07Cn07CgoKCnN0cnVjdCBzaWdjb250
ZXh0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBncywgX19nc2g7CiAgICAgICAgdW5zaWduZWQg
c2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAg
ICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlZGk7CiAg
ICAgICAgdW5zaWduZWQgbG9uZyBlc2k7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYnA7CiAgICAg
ICAgdW5zaWduZWQgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlYng7CiAgICAgICAg
dW5zaWduZWQgbG9uZyBlZHg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlY3g7CiAgICAgICAgdW5z
aWduZWQgbG9uZyBlYXg7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0cmFwbm87CiAgICAgICAgdW5z
aWduZWQgbG9uZyBlcnI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBlaXA7CiAgICAgICAgdW5zaWdu
ZWQgc2hvcnQgY3MsIF9fY3NoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZsYWdzOwogICAgICAg
IHVuc2lnbmVkIGxvbmcgZXNwX2F0X3NpZ25hbDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzcywg
X19zc2g7CiAgICAgICAgc3RydWN0IF9mcHN0YXRlICogZnBzdGF0ZTsKICAgICAgICB1bnNpZ25l
ZCBsb25nIG9sZG1hc2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBjcjI7Cn07CiMgMjkgIi91c3Iv
aW5jbHVkZS9iaXRzL3NpZ2NvbnRleHQuaCIgMiAzCiMgMzE0ICIvdXNyL2luY2x1ZGUvc2lnbmFs
LmgiIDIgMwoKCmV4dGVybiBpbnQgc2lncmV0dXJuIChzdHJ1Y3Qgc2lnY29udGV4dCAqX19zY3Ap
IHRocm93ICgpOwojIDMyNiAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCmV4dGVybiBpbnQgc2ln
aW50ZXJydXB0IChpbnQgX19zaWcsIGludCBfX2ludGVycnVwdCkgdGhyb3cgKCk7CgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzdGFjay5oIiAzCnN0cnVjdCBzaWdzdGFjawogIHsKICAgIHZvaWQgKnNzX3NwOwogICAgaW50
IHNzX29uc3RhY2s7CiAgfTsKCgoKZW51bQp7CiAgU1NfT05TVEFDSyA9IDEsCgogIFNTX0RJU0FC
TEUKCn07CiMgNTAgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3N0YWNrLmgiIDMKdHlwZWRlZiBzdHJ1
Y3Qgc2lnYWx0c3RhY2sKICB7CiAgICB2b2lkICpzc19zcDsKICAgIGludCBzc19mbGFnczsKICAg
IHNpemVfdCBzc19zaXplOwogIH0gc3RhY2tfdDsKIyAzMjkgIi91c3IvaW5jbHVkZS9zaWduYWwu
aCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS91Y29udGV4dC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNs
dWRlL3Vjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDEgMwoj
IDI3ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zaWdjb250ZXh0LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3Vjb250ZXh0LmgiIDIg
MwoKCgp0eXBlZGVmIGludCBncmVnX3Q7CgoKCgoKdHlwZWRlZiBncmVnX3QgZ3JlZ3NldF90WzE5
XTsKCgoKZW51bQp7CiAgUkVHX0dTID0gMCwKCiAgUkVHX0ZTLAoKICBSRUdfRVMsCgogIFJFR19E
UywKCiAgUkVHX0VESSwKCiAgUkVHX0VTSSwKCiAgUkVHX0VCUCwKCiAgUkVHX0VTUCwKCiAgUkVH
X0VCWCwKCiAgUkVHX0VEWCwKCiAgUkVHX0VDWCwKCiAgUkVHX0VBWCwKCiAgUkVHX1RSQVBOTywK
CiAgUkVHX0VSUiwKCiAgUkVHX0VJUCwKCiAgUkVHX0NTLAoKICBSRUdfRUZMLAoKICBSRUdfVUVT
UCwKCiAgUkVHX1NTCgp9OwoKCgpzdHJ1Y3QgX2xpYmNfZnByZWcKewogIHVuc2lnbmVkIHNob3J0
IGludCBzaWduaWZpY2FuZFs0XTsKICB1bnNpZ25lZCBzaG9ydCBpbnQgZXhwb25lbnQ7Cn07Cgpz
dHJ1Y3QgX2xpYmNfZnBzdGF0ZQp7CiAgdW5zaWduZWQgbG9uZyBpbnQgY3c7CiAgdW5zaWduZWQg
bG9uZyBpbnQgc3c7CiAgdW5zaWduZWQgbG9uZyBpbnQgdGFnOwogIHVuc2lnbmVkIGxvbmcgaW50
IGlwb2ZmOwogIHVuc2lnbmVkIGxvbmcgaW50IGNzc2VsOwogIHVuc2lnbmVkIGxvbmcgaW50IGRh
dGFvZmY7CiAgdW5zaWduZWQgbG9uZyBpbnQgZGF0YXNlbDsKICBzdHJ1Y3QgX2xpYmNfZnByZWcg
X3N0WzhdOwogIHVuc2lnbmVkIGxvbmcgaW50IHN0YXR1czsKfTsKCgp0eXBlZGVmIHN0cnVjdCBf
bGliY19mcHN0YXRlICpmcHJlZ3NldF90OwoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgZ3JlZ3Nl
dF90IGdyZWdzOwoKCiAgICBmcHJlZ3NldF90IGZwcmVnczsKICAgIHVuc2lnbmVkIGxvbmcgaW50
IG9sZG1hc2s7CiAgICB1bnNpZ25lZCBsb25nIGludCBjcjI7CiAgfSBtY29udGV4dF90OwoKCnR5
cGVkZWYgc3RydWN0IHVjb250ZXh0CiAgewogICAgdW5zaWduZWQgbG9uZyBpbnQgdWNfZmxhZ3M7
CiAgICBzdHJ1Y3QgdWNvbnRleHQgKnVjX2xpbms7CiAgICBzdGFja190IHVjX3N0YWNrOwogICAg
bWNvbnRleHRfdCB1Y19tY29udGV4dDsKICAgIF9fc2lnc2V0X3QgdWNfc2lnbWFzazsKICAgIHN0
cnVjdCBfbGliY19mcHN0YXRlIF9fZnByZWdzX21lbTsKICB9IHVjb250ZXh0X3Q7CiMgMjggIi91
c3IvaW5jbHVkZS91Y29udGV4dC5oIiAyIDMKCmV4dGVybiAiQyIgewoKCmV4dGVybiBpbnQgZ2V0
Y29udGV4dCAodWNvbnRleHRfdCAqX191Y3ApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2V0Y29u
dGV4dCAoX19jb25zdCB1Y29udGV4dF90ICpfX3VjcCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
c3dhcGNvbnRleHQgKHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX19vdWNwLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IHVjb250ZXh0X3QgKl9fcmVzdHJpY3QgX191Y3ApIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIHZvaWQgbWFrZWNvbnRleHQgKHVjb250ZXh0X3QgKl9fdWNwLCB2b2lk
ICgqX19mdW5jKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19hcmdjLCAu
Li4pIHRocm93ICgpOwoKfQojIDMzMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCgoKCgpl
eHRlcm4gaW50IHNpZ3N0YWNrIChzdHJ1Y3Qgc2lnc3RhY2sgKl9fc3MsIHN0cnVjdCBzaWdzdGFj
ayAqX19vc3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNpZ2FsdHN0YWNrIChfX2NvbnN0IHN0
cnVjdCBzaWdhbHRzdGFjayAqX19yZXN0cmljdCBfX3NzLAogICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2lnYWx0c3RhY2sgKl9fcmVzdHJpY3QgX19vc3MpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIGludCBzaWdob2xkIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2ln
cmVsc2UgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzaWdpZ25vcmUgKGludCBf
X3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHNpZ3NldCAoaW50IF9fc2ln
LCBfX3NpZ2hhbmRsZXJfdCBfX2Rpc3ApIHRocm93ICgpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRl
L2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDM2NSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAy
IDMKCgoKCgoKCmV4dGVybiBpbnQgX19saWJjX2N1cnJlbnRfc2lncnRtaW4gKHZvaWQpIHRocm93
ICgpOwoKZXh0ZXJuIGludCBfX2xpYmNfY3VycmVudF9zaWdydG1heCAodm9pZCkgdGhyb3cgKCk7
CgoKCn0KIyAyNjYgInByb2ZpbGUuaCIgMgojIDI3OCAicHJvZmlsZS5oIgpjbGFzcyBwcm9maWxl
cgp7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkIFNJR0FMUk1fSGFuZGxlcihpbnQpOwogICAgICAg
IHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZGFjdF9TSUdBTFJNOwogICAgICAgIHN0YXRpYyBj
b25zdCB0aW1lYmFzZSB0aWNrdW5pdDsKCiAgICAgICAgc3RhdGljIGludCBwcm9maWxlX2Jsb2Nr
X2NvdW50OwoKICAgICAgICBwcm9mICpwOwoKcHVibGljOgogICAgICAgIHByb2ZpbGVyKCk7Cgog
ICAgICAgIH5wcm9maWxlcigpOwoKCgogICAgICAgIHN0YXRpYyB2b2lkIERpc2FibGVQcm9maWxp
bmcoKSB7IHByb2ZpbGVfYmxvY2tfY291bnQgKys7IH0KCiAgICAgICAgc3RhdGljIHZvaWQgRW5h
YmxlUHJvZmlsaW5nKCkgeyBpZiggcHJvZmlsZV9ibG9ja19jb3VudCA8PSAwICkgX0Fib3J0KCgi
QmFkIFByb2ZpbGluZyIpLCAicHJvZmlsZS5oIiwgMzAxKTsgcHJvZmlsZV9ibG9ja19jb3VudC0t
OyB9CgogICAgICAgIHN0YXRpYyBib29sIElzUHJvZmlsaW5nKCkgeyByZXR1cm4gcHJvZmlsZV9i
bG9ja19jb3VudCA9PSAwOyB9CgoKCgoKCn07CiMgNDYgImNlbGwuaCIgMgojIDEgImhhc2guaCIg
MQojIDc2ICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUS2V5PiB1aW50IEhhc2hGdW5jdGlvbihj
b25zdCBUS2V5ICYpOwp0ZW1wbGF0ZSA8Y2xhc3MgVEtleT4gYm9vbCBIYXNoS2V5RXF1YWwoY29u
c3QgVEtleSAmLCBjb25zdCBUS2V5ICYpOwoKaW5saW5lIHVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0
IHVsb25nICZwKQp7CgoKCiAgICAgICAgcmV0dXJuIChwKjB4YTQyMyk+PjE1OwoKfQoKCmlubGlu
ZSBib29sIEhhc2hLZXlFcXVhbChjb25zdCB1bG9uZyAmcCwgY29uc3QgdWxvbmcgJnEpCnsKICAg
ICAgICByZXR1cm4gcCA9PSBxOwp9CgoKdWludCBIYXNoRnVuY3Rpb24xKGNoYXIgY29uc3QgKik7
CmlubGluZSB1aW50IEhhc2hGdW5jdGlvbihjaGFyIGNvbnN0ICogY29uc3QgJnApIHsgcmV0dXJu
IEhhc2hGdW5jdGlvbjEocCk7IH0KaW5saW5lIGJvb2wgSGFzaEtleUVxdWFsKGNoYXIgY29uc3Qg
KiBjb25zdCAmcCwgY2hhciBjb25zdCAqIGNvbnN0ICZxKQp7CiAgICAgICAgcmV0dXJuICEgc3Ry
Y21wKHAsIHEpOwp9CiMgMTMwICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBU
b2JqLCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgSGFzaAp7CnB1Ymxp
YzoKICAgICAgICB0eXBlZGVmIFRrZXkgaGFzaGtleV90OwogICAgICAgIHR5cGVkZWYgVG9iaiBv
YmpfdDsKICAgICAgICB0eXBlZGVmIEFsbG9jIGFsbG9jYXRvcl90OwoKcHJpdmF0ZToKCiAgICAg
ICAgVG9iaiAqKnRhYmxlOwoKICAgICAgICB1bnNpZ25lZCB0YWJsZXNpemU7CgogICAgICAgIHVu
c2lnbmVkIG5kYXRhOwoKICAgICAgICBhbGxvY2F0b3JfdCBhbGxvYzsKCgpwdWJsaWM6CiAgICAg
ICAgICAgICAgICBIYXNoKHVuc2lnbmVkIGluaXNpemUgPSAxMDI0KTsKCiAgICAgICAgICAgICAg
ICBIYXNoKHVuc2lnbmVkIGluaXNpemUsIGFsbG9jYXRvcl90IGlhbGxvYyk7CgogICAgICAgICAg
ICAgICAgSGFzaChjb25zdCBIYXNoPFRrZXksIFRvYmo+ICZ0KTsKCiAgICAgICAgICAgICAgICB+
SGFzaCgpOwoKCiAgICAgICAgdW5zaWduZWQgR2V0TkRhdGEoKSBjb25zdCB7IHJldHVybiBuZGF0
YTsgfQoKICAgICAgICB1bnNpZ25lZCBHZXRUYWJsZVNpemUoKSBjb25zdCB7IHJldHVybiB0YWJs
ZXNpemU7IH0KCgogICAgICAgIFRvYmogKkFkZChUb2JqICpkYXRhKTsKCgoKCiAgICAgICAgVG9i
aiAqQWRkT3JSZXBsYWNlKFRvYmogKmRhdGEpOwoKCgoKICAgICAgICBUb2JqICpEZWxldGUoVG9i
aiAqZGF0YSk7CgogICAgICAgIFRvYmogKkZpbmQoVGtleSBLZXkpIGNvbnN0OwoKCgoKICAgICAg
ICBUb2JqICpQaWNrKGludCBpbmRleCkgY29uc3QgeyByZXR1cm4gdGFibGVbaW5kZXhdOyB9CgoK
ICAgICAgICB2b2lkIENsZWFyVGFibGUoKSB7IG5kYXRhID0gMDsgbWVtc2V0KHRhYmxlLCAwLCB0
YWJsZXNpemUqc2l6ZW9mKFRvYmogKikpOyB9CgogICAgICAgIHZvaWQgRGVsZXRlQWxsRGF0YSgp
OwoKCiAgICAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCBzaXplKSB7IHJldHVybiA6Om9w
ZXJhdG9yIG5ldyhzaXplKTsgfQogICAgICAgIHZvaWQgKm9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6
ZSwgYWxsb2NhdG9yX3QmIGFsbG9jKSB7IHJldHVybiBhbGxvYy5hbGxvY2F0ZV9ieXRlcyhzaXpl
KTsgfQoKcHJvdGVjdGVkOgogICAgICAgIHN0YXRpYyB1aW50IGhhc2goVGtleSBrZXkpIHsgcmV0
dXJuIEhhc2hGdW5jdGlvbihrZXkpOyB9CgogICAgICAgIHN0YXRpYyBib29sIGVxdWFsKFRrZXkg
azEsIFRrZXkgazIpIHsgcmV0dXJuIEhhc2hLZXlFcXVhbChrMSwgazIpOyB9CgogICAgICAgIHZv
aWQgRXhwYW5kVGFibGUoKTsKCn07CiMgMjEzICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBUb2Jq
LCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgU3RyaW5nSGFzaCA6IHB1
YmxpYyBIYXNoPGNvbnN0IGNoYXIgKiwgVG9iaiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhh
c2g8Y29uc3QgY2hhciAqLCBUb2JqLCBBbGxvYz4gaGFzaF90OwogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaGFzaF90OjphbGxvY2F0b3JfdCBhbGxvY2F0b3JfdDsKICAgICAgICB0eXBlZGVmIHR5
cGVuYW1lIGhhc2hfdDo6aGFzaGtleV90IGhhc2hrZXlfdDsKcHVibGljOgogICAgICAgICAgICAg
ICAgU3RyaW5nSGFzaCgpIDogSGFzaDxoYXNoa2V5X3QsIFRvYmosIEFsbG9jPigpIHsgfQogICAg
ICAgICAgICAgICAgU3RyaW5nSGFzaCh1bnNpZ25lZCBpLCBhbGxvY2F0b3JfdCBpYWxsb2MgPSBh
bGxvY2F0b3JfdCgpKSA6IEhhc2g8aGFzaGtleV90LCBUb2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7
IH0KICAgICAgICAgICAgICAgIFN0cmluZ0hhc2goY29uc3QgSGFzaDxoYXNoa2V5X3QsIFRvYmo+
ICZoKSA6IEhhc2g8aGFzaGtleV90LCBUb2JqLCBBbGxvYz4oaCkgeyB9CiAgICAgICAgICAgICAg
ICBTdHJpbmdIYXNoKGNvbnN0IFN0cmluZ0hhc2g8VG9iaj4gJmgpIDogSGFzaDxoYXNoa2V5X3Qs
IFRvYmosIEFsbG9jPihoKSB7IH0KCiAgICAgICAgICAgICAgICBUb2JqICpGaW5kKGNvbnN0IHN0
cmluZyAmS2V5KSBjb25zdCB7IHJldHVybiBGaW5kKEtleS5jX3N0cigpKTsgfQp9OwojIDI0MCAi
aGFzaC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVG9iaiwgY2xhc3MgQWxsb2MgPSBhbGxvY2F0b3I8VG9i
aiAqPiA+CmNsYXNzIEludGVnZXJIYXNoIDogcHVibGljIEhhc2g8dW5zaWduZWQgbG9uZywgVG9i
aiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhhc2g8dW5zaWduZWQgbG9uZywgVG9iaiwgQWxs
b2M+IGhhc2hfdDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGhhc2hfdDo6YWxsb2NhdG9yX3Qg
YWxsb2NhdG9yX3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNoX3Q6Omhhc2hrZXlfdCBo
YXNoa2V5X3Q7CnB1YmxpYzoKICAgICAgICAgICAgICAgIEludGVnZXJIYXNoKCkgOiBIYXNoPGhh
c2hrZXlfdCwgVG9iaiwgQWxsb2M+KCkgeyB9CiAgICAgICAgICAgICAgICBJbnRlZ2VySGFzaCh1
bnNpZ25lZCBpLCBhbGxvY2F0b3JfdCBpYWxsb2MgPSBhbGxvY2F0b3JfdCgpKSA6IEhhc2g8aGFz
aGtleV90LCBUb2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7IH0KICAgICAgICAgICAgICAgIEludGVn
ZXJIYXNoKGNvbnN0IEhhc2g8aGFzaGtleV90LCBUb2JqPiAmaCkgOiBIYXNoPGhhc2hrZXlfdCwg
VG9iaiwgQWxsb2M+KGgpIHsgfQogICAgICAgICAgICAgICAgSW50ZWdlckhhc2goY29uc3QgSW50
ZWdlckhhc2g8VG9iaj4gJmgpIDogSGFzaDxoYXNoa2V5X3QsIFRvYmosIEFsbG9jPihoKSB7IH0K
fTsKIyAyNjYgImhhc2guaCIKdGVtcGxhdGUgPGNsYXNzIFRvYmo+CmNsYXNzIEhhc2hFbnRyeQp7
CiAgICAgICAgVG9iaiB0OwoKcHVibGljOgogICAgICAgIEhhc2hFbnRyeShjb25zdCBUb2JqICZf
dCkgOiB0KF90KSB7IH0KICAgICAgICB+SGFzaEVudHJ5KCkgeyB9CgogICAgICAgIGNvbnN0IFRv
YmomIEdldEtleSgpIHsgcmV0dXJuIHQ7IH0KCiAgICAgICAgb3BlcmF0b3IgVG9iaiAmKCkgeyBy
ZXR1cm4gdDt9Cgp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVGtleSwgY2xhc3MgVG9iaiwgY2xhc3Mg
QWxsb2M+Ckhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpIYXNoKHVuc2lnbmVkIGluaXNpemUpIDog
YWxsb2MoKQp7CgoKICAgICAgICBpZiggaW5pc2l6ZSA9PSAwIHx8IChpbmlzaXplICYgKGluaXNp
emUtMSkpICE9IDAgKQogICAgICAgICAgICAgICAgaW5pc2l6ZSA9IDEwMjQ7CiAgICAgICAgdGFi
bGVzaXplID0gaW5pc2l6ZTsKICAgICAgICBuZGF0YSA9IDA7CiAgICAgICAgdGFibGUgPSBhbGxv
Yy5hbGxvY2F0ZShpbmlzaXplKTsKICAgICAgICB3aGlsZSggaW5pc2l6ZSApCiAgICAgICAgICAg
ICAgICB0YWJsZVstLWluaXNpemVdID0gX19udWxsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVGtleSwg
Y2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+Ckhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpIYXNoKHVu
c2lnbmVkIGluaXNpemUsIGFsbG9jYXRvcl90IGlhbGxvYykgOiBhbGxvYyhpYWxsb2MpCnsKCgog
ICAgICAgIGlmKCBpbmlzaXplID09IDAgfHwgKGluaXNpemUgJiAoaW5pc2l6ZS0xKSkgIT0gMCAp
CiAgICAgICAgICAgICAgICBpbmlzaXplID0gMTAyNDsKICAgICAgICB0YWJsZXNpemUgPSBpbmlz
aXplOwogICAgICAgIG5kYXRhID0gMDsKICAgICAgICB0YWJsZSA9IGFsbG9jLmFsbG9jYXRlKGlu
aXNpemUpOwogICAgICAgIHdoaWxlKCBpbmlzaXplICkKICAgICAgICAgICAgICAgIHRhYmxlWy0t
aW5pc2l6ZV0gPSBfX251bGw7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBj
bGFzcyBBbGxvYz4KSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46Okhhc2goY29uc3QgSGFzaDxUa2V5
LCBUb2JqPiAmdCkKewogICAgICAgIHRhYmxlc2l6ZSA9IHQudGFibGVzaXplOwogICAgICAgIG5k
YXRhID0gdC5uZGF0YTsKICAgICAgICBhbGxvYyA9IHQuYWxsb2M7CiAgICAgICAgdGFibGUgPSBh
bGxvYy5hbGxvY2F0ZSh0YWJsZXNpemUpOwogICAgICAgIGZvciggdWludCBpPTA7IGk8dGFibGVz
aXplOyBpKysgKQogICAgICAgICAgICAgICAgdGFibGVbaV0gPSB0LnRhYmxlW2ldOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgVGtleSwgY2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+Ckhhc2g8VGtleSwgVG9i
aiwgQWxsb2M+Ojp+SGFzaCgpCnsKICAgICAgICA7CgogICAgICAgIGFsbG9jLmRlYWxsb2NhdGUo
dGFibGUsIHRhYmxlc2l6ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBj
bGFzcyBBbGxvYz4KVG9iaiAqSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46OkFkZChUb2JqICp0KQp7
CgoKCiAgICAgICAgVG9iaiAqKnA7CiAgICAgICAgOwogICAgICAgIDsKCiAgICAgICAgVGtleSBr
ZXkgPSAoVGtleSkodC0+R2V0S2V5KCkpOwogICAgICAgIGludCBoID0gaGFzaChrZXkpOwoKICAg
ICAgICBpZiggbmRhdGEgKiA4ID4gdGFibGVzaXplICkKICAgICAgICAgICAgICAgIEV4cGFuZFRh
YmxlKCk7CgogICAgICAgIHdoaWxlKCAqKHA9JnRhYmxlW2ggJiAodGFibGVzaXplLTEpXSkgIT0g
X19udWxsICkKICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICBpZiggZXF1YWwoKFRrZXkpKCgq
cCktPkdldEtleSgpKSwga2V5KSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICpwOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgaCsrOwogICAgICAgIH0KICAgICAgICBuZGF0YSsrOwogICAg
ICAgICpwID0gdDsKICAgICAgICByZXR1cm4gX19udWxsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVGtl
eSwgY2xhc3MgVG9iaiwgY2xhc3MgQWxsb2M+ClRvYmogKkhhc2g8VGtleSwgVG9iaiwgQWxsb2M+
OjpBZGRPclJlcGxhY2UoVG9iaiAqdCkKewoKCgogICAgICAgIFRvYmogKipwOwogICAgICAgIDsK
ICAgICAgICA7CgogICAgICAgIFRrZXkga2V5ID0gKFRrZXkpKHQtPkdldEtleSgpKTsKICAgICAg
ICBpbnQgaCA9IGhhc2goa2V5KTsKCiAgICAgICAgaWYoIG5kYXRhICogOCA+IHRhYmxlc2l6ZSAp
CiAgICAgICAgICAgICAgICBFeHBhbmRUYWJsZSgpOwoKICAgICAgICB3aGlsZSggKihwPSZ0YWJs
ZVtoICYgKHRhYmxlc2l6ZS0xKV0pICE9IF9fbnVsbCApCiAgICAgICAgewoKCgogICAgICAgICAg
ICAgICAgaWYoIGVxdWFsKChUa2V5KSgoKnApLT5HZXRLZXkoKSksIGtleSkgKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBUb2JqKiBvbGRwID0gKnA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICpwID0gdDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9s
ZHA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBoKys7CiAgICAgICAgfQogICAg
ICAgIG5kYXRhKys7CiAgICAgICAgKnAgPSB0OwogICAgICAgIHJldHVybiBfX251bGw7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBjbGFzcyBBbGxvYz4KVG9iaiAqSGFzaDxU
a2V5LCBUb2JqLCBBbGxvYz46OkRlbGV0ZShUb2JqICp0KQp7CgoKCiAgICAgICAgVG9iaiAqcDsK
ICAgICAgICA7CiAgICAgICAgOwoKICAgICAgICBUa2V5IGtleSA9IChUa2V5KSh0LT5HZXRLZXko
KSk7CiAgICAgICAgaW50IGggPSBoYXNoKGtleSk7CgogICAgICAgIHdoaWxlKCAocCA9IHRhYmxl
W2ggJiAodGFibGVzaXplLTEpXSkgIT0gX19udWxsICkgewogICAgICAgICAgICAgICAgaWYoIGVx
dWFsKChUa2V5KXAtPkdldEtleSgpLCBrZXkpICkgYnJlYWs7CiAgICAgICAgICAgICAgICBoKys7
CiAgICAgICAgfQogICAgICAgIGlmICh0YWJsZVtoICYgKHRhYmxlc2l6ZS0xKV0gPT0gX19udWxs
KSB7CiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICByZXR1cm4gX19udWxsOwogICAg
ICAgIH0KICAgICAgICBpbnQgaF9vcmlnID0gaDsKICAgICAgICB3aGlsZSggdGFibGVbaCAmICh0
YWJsZXNpemUtMSldICE9IF9fbnVsbCApIHsKICAgICAgICAgICAgICAgIGgrKzsKICAgICAgICB9
CiAgICAgICAgc2l6ZV90IGFsbG9jc2l6ZT0gaCAtIGhfb3JpZzsKICAgICAgICBUb2JqKiogaGFz
aF9idWYgPSBhbGxvYy5hbGxvY2F0ZShhbGxvY3NpemUpOwogICAgICAgIGggPSAwOwogICAgICAg
IHdoaWxlKCB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6ZS0xKV0gIT0gX19udWxsICkgewog
ICAgICAgICAgICAgICAgaGFzaF9idWZbaF0gPSB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6
ZS0xKV07CiAgICAgICAgICAgICAgICB0YWJsZVsoaCtoX29yaWcpICYgKHRhYmxlc2l6ZS0xKV0g
PSBfX251bGw7CiAgICAgICAgICAgICAgICBoKys7CiAgICAgICAgfQogICAgICAgIGgtLTsKICAg
ICAgICBmb3IgKDsgaD4wOyBoLS0pCiAgICAgICAgICAgICAgICBBZGQoaGFzaF9idWZbaF0pOwog
ICAgICAgIFRvYmoqIHJldF9vYmogPSBoYXNoX2J1ZlswXTsKICAgICAgICBhbGxvYy5kZWFsbG9j
YXRlKGhhc2hfYnVmLCBhbGxvY3NpemUpOwogICAgICAgIG5kYXRhLS07CiAgICAgICAgcmV0dXJu
IHJldF9vYmo7Cn0KCnRlbXBsYXRlIDxjbGFzcyBUa2V5LCBjbGFzcyBUb2JqLCBjbGFzcyBBbGxv
Yz4KVG9iaiAqSGFzaDxUa2V5LCBUb2JqLCBBbGxvYz46OkZpbmQoVGtleSBrZXkpIGNvbnN0CnsK
ICAgICAgICBUb2JqICoqcDsKICAgICAgICA7CgogICAgICAgIGludCBoID0gaGFzaChrZXkpOwoK
ICAgICAgICB3aGlsZSggKihwPSZ0YWJsZVtoICYgKHRhYmxlc2l6ZS0xKV0pICE9IF9fbnVsbCAp
CiAgICAgICAgewogICAgICAgICAgICAgICAgVGtleSBwa2V5ID0gKFRrZXkpKCpwKS0+R2V0S2V5
KCk7CiAgICAgICAgICAgICAgICBpZiggZXF1YWwocGtleSwga2V5KSApCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAqcDsKICAgICAgICAgICAgICAgIGgrKzsKICAgICAgICB9CiAgICAg
ICAgcmV0dXJuIF9fbnVsbDsKfQoKdGVtcGxhdGUgPGNsYXNzIFRrZXksIGNsYXNzIFRvYmosIGNs
YXNzIEFsbG9jPgp2b2lkIEhhc2g8VGtleSwgVG9iaiwgQWxsb2M+OjpFeHBhbmRUYWJsZSgpCnsK
ICAgICAgICBwcm9mIHByb2ZfX19MSU5FX18oIkhhc2g6OkV4cGFuZFRhYmxlKCkiKTsKICAgICAg
ICA7CiAgICAgICAgOwogICAgICAgIDsKCiAgICAgICAgVG9iaiAqKm9sZHRhYmxlID0gdGFibGU7
CiAgICAgICAgaW50IG9sZHRhYmxlc2l6ZSA9IHRhYmxlc2l6ZTsKCiAgICAgICAgdGFibGVzaXpl
ID0gdGFibGVzaXplIDw8IDE7CiAgICAgICAgdGFibGUgPSBhbGxvYy5hbGxvY2F0ZSh0YWJsZXNp
emUpOwogICAgICAgIG5kYXRhID0gMDsKCiAgICAgICAgaW50IGluaXNpemUgPSB0YWJsZXNpemU7
CiAgICAgICAgd2hpbGUoIGluaXNpemUgKQogICAgICAgICAgICAgICAgdGFibGVbLS1pbmlzaXpl
XSA9IF9fbnVsbDsKCiAgICAgICAgZm9yKCBpbnQgaT0wOyBpPG9sZHRhYmxlc2l6ZTsgaSsrICkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggb2xkdGFibGVbaV0gIT0gX19udWxsICkKICAg
ICAgICAgICAgICAgICAgICAgICAgQWRkKG9sZHRhYmxlW2ldKTsKICAgICAgICB9CiAgICAgICAg
YWxsb2MuZGVhbGxvY2F0ZShvbGR0YWJsZSwgb2xkdGFibGVzaXplKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIFRrZXksIGNsYXNzIFRvYmosIGNsYXNzIEFsbG9jPgp2b2lkIEhhc2g8VGtleSwgVG9iaiwg
QWxsb2M+OjpEZWxldGVBbGxEYXRhKCkKewogICAgICAgIDsKICAgICAgICA7CiAgICAgICAgOwoK
ICAgICAgICBmb3IoIHVpbnQgaT0wOyBpPHRhYmxlc2l6ZTsgaSsrICkKICAgICAgICAgICAgICAg
IGlmKCB0YWJsZVtpXSAhPSBfX251bGwgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICBkZWxldGUgdGFibGVbaV07CiAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxl
W2ldID0gX19udWxsOwogICAgICAgICAgICAgICAgfQp9CiMgNTE5ICJoYXNoLmgiCnRlbXBsYXRl
IDxjbGFzcyBUPgpjbGFzcyBWYXJBcnJheQp7CiAgICAgICAgVCAqKmFycnM7CgogICAgICAgIFQg
Km5leHRwOwoKICAgICAgICBpbnQgc2l6ZTsKCiAgICAgICAgc3RhdGljIGludCBncm93c3RlcDsK
CiAgICAgICAgc3RhdGljIGludCBncm93Yml0czsKICAgICAgICBzdGF0aWMgaW50IGdyb3dtYXNr
OwoKCnB1YmxpYzoKICAgICAgICBWYXJBcnJheSgpOwoKICAgICAgICBWYXJBcnJheShWYXJBcnJh
eTxUPiAmdik7CgogICAgICAgIH5WYXJBcnJheSgpOwoKICAgICAgICBpbnQgR2V0U2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIHNpemU7IH0KCiAgICAgICAgVCAmb3BlcmF0b3JbXShpbnQgaSkgeyA7IHJl
dHVybiBhcnJzW2k+Pmdyb3diaXRzXVtpJmdyb3dtYXNrXTsgfQogICAgICAgIGNvbnN0IFQgJm9w
ZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgOyByZXR1cm4gYXJyc1tpPj5ncm93Yml0c11baSZncm93
bWFza107IH0KCiAgICAgICAgVCAmTmV4dCgpIHsgaWYoIChzaXplICYgKGdyb3dzdGVwLTEpKSA9
PSAwICkgUmVzaXplKHNpemUpOyBzaXplKys7IHJldHVybiAqKG5leHRwKyspOyB9CgogICAgICAg
IGludCBHZXRMaW1pdChpbnQgaSkgeyByZXR1cm4gKGl8Z3Jvd21hc2spKzE7IH0KCiAgICAgICAg
dm9pZCBSZXNpemUoaW50IGkpOwoKfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgpWYXJBcnJheTxUPjo6
VmFyQXJyYXkoKSB7IGFycnMgPSBfX251bGw7IG5leHRwID0gX19udWxsOyBzaXplID0gMDsgfQoK
dGVtcGxhdGUgPGNsYXNzIFQ+ClZhckFycmF5PFQ+OjpWYXJBcnJheShWYXJBcnJheTxUPiAmdikK
ewogICAgICAgIGlmKCB2LmFycnMgPT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBhcnJzID0gX19udWxsOwogICAgICAgICAgICAgICAgbmV4dHAgPSBfX251bGw7CiAgICAgICAg
ICAgICAgICBzaXplID0gMDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICBzaXplID0gdi5zaXplOwoKCgoKCgoKICAgICAgICAgICAgICAgIGludCBhcnJzc2l6ZSA9ICgo
KHNpemUrZ3Jvd21hc2spPj5ncm93Yml0cykrMTI4IC0xKSZ+KDEyOCAtMSk7CiAgICAgICAgICAg
ICAgICBhcnJzID0gbmV3IFQgKlthcnJzc2l6ZV07CiAgICAgICAgICAgICAgICBmb3IoIGludCBp
PTA7IGk8KChzaXplK2dyb3dtYXNrKT4+Z3Jvd2JpdHMpOyBpKysgKQogICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgICBhcnJzW2ldID0gbmV3IFRbZ3Jvd3N0ZXBdOwogICAg
ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYXJyc1tpXSwgdi5hcnJzW2ldLCBzaXplb2YoVCkq
Z3Jvd3N0ZXApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbmV4dHAgPSBhcnJz
Wygoc2l6ZStncm93bWFzayk+Pmdyb3diaXRzKS0xXSArIChzaXplJmdyb3dtYXNrKTsKICAgICAg
ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBUPgpWYXJBcnJheTxUPjo6flZhckFycmF5KCkKewogICAg
ICAgIDsKCiAgICAgICAgZm9yKCBpbnQgaj0wOyBqPCgoc2l6ZStncm93bWFzayk+Pmdyb3diaXRz
KTsgaisrKQogICAgICAgICAgICAgICAgZGVsZXRlW10gYXJyc1tqXTsKICAgICAgICBkZWxldGVb
XSBhcnJzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4Kdm9pZCBWYXJBcnJheTxUPjo6UmVzaXplKGlu
dCBpKQp7CiAgICAgICAgaW50IGlpID0gaSA+PiBncm93Yml0czsKICAgICAgICBpZiggKGlpICYg
KDEyOCAtIDEpKSA9PSAwICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBUICoqbmV3YXJycyA9
IG5ldyBUICpbaWkrMTI4XTsKICAgICAgICAgICAgICAgIGlmKCBhcnJzICE9IF9fbnVsbCApCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShuZXdhcnJzLCBh
cnJzLCAoc2l6ZSA+PiBncm93Yml0cykgKiBzaXplb2YoVCAqKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZVtdIGFycnM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBh
cnJzID0gbmV3YXJyczsKICAgICAgICB9CiAgICAgICAgYXJyc1tpaV0gPSBuZXh0cCA9IG5ldyBU
W2dyb3dzdGVwXTsKfQojIDYyOSAiaGFzaC5oIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgVmFy
QXJyYXlJdGVyYXRvcgp7CiAgICAgICAgVmFyQXJyYXk8VD4gJmFycjsKCiAgICAgICAgVCAqcDsK
CiAgICAgICAgVCAqbGltaXQ7CgogICAgICAgIGludCBsaW1pdHB0cjsKCnB1YmxpYzoKICAgICAg
ICBWYXJBcnJheUl0ZXJhdG9yKFZhckFycmF5PFQ+ICZpYXJyKSA6IGFycihpYXJyKSB7IEp1bXAo
MCk7IH0KICAgICAgICBWYXJBcnJheUl0ZXJhdG9yKFZhckFycmF5PFQ+ICZpYXJyLCBpbnQgaWR4
KSA6IGFycihpYXJyKSB7IEp1bXAoaWR4KTsgfQoKICAgICAgICB+VmFyQXJyYXlJdGVyYXRvcigp
IHsgfQoKICAgICAgICBvcGVyYXRvciBUICooKSB7IHJldHVybiBwOyB9CiAgICAgICAgVCAqb3Bl
cmF0b3IgLT4oKSB7IHJldHVybiBwOyB9CgogICAgICAgIFQgKm9wZXJhdG9yKysoKSB7IGlmKCAr
K3AgPj0gbGltaXQgKSBKdW1wKGxpbWl0cHRyKTsgcmV0dXJuIHA7IH0KICAgICAgICBUICpvcGVy
YXRvcisrKGludCkgeyBUICpyZXQgPSBwOyBpZiggKytwID49IGxpbWl0ICkgSnVtcChsaW1pdHB0
cik7IHJldHVybiByZXQ7IH0KCiAgICAgICAgVmFyQXJyYXlJdGVyYXRvcjxUPiYgb3BlcmF0b3Ir
PShpbnQgaSkgeyBwKz1pOyBpZiggcCA+PSBsaW1pdCApIEp1bXAobGltaXRwdHIgKyAocC1saW1p
dCkpOyByZXR1cm4gKnRoaXM7IH0KICAgICAgICBUICZvcGVyYXRvcltdKGludCBpKSB7IGlmKCBw
K2kgPCBsaW1pdCApIHJldHVybiBwW2ldOyBlbHNlIHJldHVybiBhcnJbbGltaXRwdHIgKyAoKHAr
aSktbGltaXQpXTsgfQoKCiAgICAgICAgdm9pZCBKdW1wKGludCBhZGRyKTsKCiAgICAgICAgaW50
IEdldEluZGV4KCkgeyByZXR1cm4gbGltaXRwdHIgLSAobGltaXQtcCk7IH0KCn07CgoKdGVtcGxh
dGUgPGNsYXNzIFQ+CnZvaWQgVmFyQXJyYXlJdGVyYXRvcjxUPjo6SnVtcChpbnQgYWRkcikKewog
ICAgICAgIHAgPSAmKGFyclthZGRyXSk7CiAgICAgICAgbGltaXRwdHIgPSBhcnIuR2V0TGltaXQo
YWRkcik7CiAgICAgICAgbGltaXQgPSBwICsgKGxpbWl0cHRyIC0gYWRkcik7Cn0KIyA2ODggImhh
c2guaCIKY2xhc3MgQml0bWFwCnsKICAgICAgICB1bnNpZ25lZCBzaXplOwoKICAgICAgICBpbnQz
MiAqYXI7CgoKcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgQml0bWFwKHVuc2lnbmVk
IGlzKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICBCaXRtYXAoY29uc3QgQml0bWFwICZwKTsK
CiAgICAgICAgICAgICAgICAgICAgICAgIH5CaXRtYXAoKSB7IGRlbGV0ZVtdIGFyOyB9CgoKICAg
ICAgICB2b2lkIFNldCh1bnNpZ25lZCBiKSB7IDsgYXJbYi8zMl0gfD0gKGludDMyKTE8PChiJTMy
KTsgfQoKICAgICAgICB2b2lkIFJlc2V0KHVuc2lnbmVkIGIpIHsgOyBhcltiLzMyXSAmPSB+KChp
bnQzMikxPDwoYiUzMikpOyB9CgogICAgICAgIGJvb2wgVGVzdCh1bnNpZ25lZCBiKSBjb25zdCB7
IDsgcmV0dXJuIGFyW2IvMzJdICYgKChpbnQzMikxPDwoYiUzMikpID8gdHJ1ZSA6IGZhbHNlOyB9
CgoKICAgICAgICBib29sIElzQWxsWmVybygpIGNvbnN0OwoKCiAgICAgICAgYm9vbCBJZGVudChj
b25zdCBCaXRtYXAgJmIpIGNvbnN0OwoKCgogICAgICAgIHZvaWQgT3V0cHV0KG9zdHJlYW0gJm8p
IGNvbnN0OwoKCiAgICAgICAgZnJpZW5kIHVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0IEJpdG1hcCAm
cCk7Cgp9OwoKCnVpbnQgSGFzaEZ1bmN0aW9uKGNvbnN0IEJpdG1hcCAmcCk7CmlubGluZSBib29s
IEhhc2hLZXlFcXVhbChjb25zdCBCaXRtYXAgJnAsIGNvbnN0IEJpdG1hcCAmcSkKewogICAgICAg
IHJldHVybiBwLklkZW50KHEpOwp9CiMgNzQ5ICJoYXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBSRVQs
IGNsYXNzIFQ+CmNsYXNzIFRTaW1wbGVBcnJheSB7CiAgICAgICAgUkVUKiByb290OwoKICAgICAg
ICBpbnQgc2l6ZTsKCiAgICAgICAgUkVUIGRlZl92YWx1ZTsKCnB1YmxpYzoKICAgICAgICBSRVQg
Jm9wZXJhdG9yW10gKFQgYXJnKSB7CgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIHJvb3RbYXJn
XTsKICAgICAgICB9Cgpwcml2YXRlOgogICAgICAgIFRTaW1wbGVBcnJheShjb25zdCBUU2ltcGxl
QXJyYXk8UkVULFQ+ICYpIHsgfQpwdWJsaWM6CiAgICAgICAgVFNpbXBsZUFycmF5KGNvbnN0IFJF
VCAmZGVmX3YpIDogZGVmX3ZhbHVlKGRlZl92KSB7IHJvb3QgPSBfX251bGw7IHNpemUgPSAwOyB9
CgogICAgICAgIFRTaW1wbGVBcnJheSgpIDogZGVmX3ZhbHVlKF9fbnVsbCkgeyByb290ID0gX19u
dWxsOyBzaXplID0gMDsgfTsKCiAgICAgICAgflRTaW1wbGVBcnJheSgpOwoKCgoKCgogICAgICAg
IHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsKCiAgICAgICAgdm9pZCBTZXQoVCBhcmcgLCBSRVQg
dmFsdWUpOwoKfTsKIyA3OTggImhhc2guaCIKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4K
Y2xhc3MgVEFycmF5IHsKICAgICAgICBSRVQqKiByb290OwoKICAgICAgICBzdHJ1Y3QgaW5mbyB7
CiAgICAgICAgICAgICAgICBpbnQgc2l6ZTsKCiAgICAgICAgICAgICAgICBSRVQqIGRlZl9hcnJh
eTsKCiAgICAgICAgICAgICAgICBSRVQgZGVmX3ZhbHVlOwoKICAgICAgICAgICAgICAgIGJvb2wg
c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXk7CgogICAgICAgIH0gKnB0cjsKCnB1YmxpYzoKICAgICAg
ICBSRVQgJm9wZXJhdG9yW10gKFQgYXJnKSB7CgoKCgogICAgICAgICAgICAgICAgcmV0dXJuIHJv
b3RbYXJnLzMyXVthcmclMzJdOwogICAgICAgIH0KCnByaXZhdGU6CnB1YmxpYzoKICAgICAgICBU
QXJyYXkoaW50IF9zaXplICwgUkVUKiBfZGVmX2FycmF5KTsKCiAgICAgICAgVEFycmF5KFJFVCBk
ZWZfdik7CgogICAgICAgIFRBcnJheSgpIHsgcm9vdCA9IF9fbnVsbDsgcHRyID0gX19udWxsOyB9
CgogICAgICAgIFRBcnJheShjb25zdCBUQXJyYXk8UkVULFQ+ICZzcmMpOwoKICAgICAgICB+VEFy
cmF5KCk7CgoKICAgICAgICBUQXJyYXk8UkVULFQ+ICYgb3BlcmF0b3IgPShjb25zdCBUQXJyYXk8
UkVULFQ+ICZzcmMpOwoKICAgICAgICBUQXJyYXk8UkVULFQ+ICYgTW92ZShUQXJyYXk8UkVULFQ+
ICZzcmMpOwojIDg0NiAiaGFzaC5oIgogICAgICAgIHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsK
CiAgICAgICAgdm9pZCBTZXQoVCBhcmcgLCBSRVQgdmFsdWUpOwoKfTsKIyA4NjQgImhhc2guaCIK
dGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBUQXJyYXkyIHsK
ICAgICAgICBUQXJyYXkgPFJFVCwgVDI+KiByb290OwoKICAgICAgICBUQXJyYXkgPFJFVCwgVDI+
IGRlZjsKCiAgICAgICAgUkVUKiBkZWZfYXJyYXk7CgogICAgICAgIGludCBzaXplOwoKcHVibGlj
OgogICAgICAgIFRBcnJheSA8UkVULCBUMj4mIG9wZXJhdG9yW10gKFQxIGFyZzEpIHsKCgoKCiAg
ICAgICAgICAgICAgICByZXR1cm4gcm9vdFthcmcxXTsKICAgICAgICB9CgogICAgICAgIFRBcnJh
eTIoaW50IF9zaXplICwgUkVUIGRlZl92YWx1ZSk7CgoKICAgICAgICBUQXJyYXkyKCkgOwogICAg
ICAgIH5UQXJyYXkyKCk7CgoKICAgICAgICB2b2lkIEV4cGFuZChpbnQgbmV3c2l6ZSk7CgogICAg
ICAgIHZvaWQgU2V0KFQxIGFyZzEgLCBUMiBhcmcyICwgUkVUIHZhbHVlKTsKCn07CiMgOTA5ICJo
YXNoLmgiCmNsYXNzIFRBcnJheUYgewogICAgICAgIHRzZXJpYWwqKiByb290OwoKICAgICAgICBp
bnQqIG5mZWF0dXJlOwoKICAgICAgICBzdGF0aWMgdHNlcmlhbCBkZWZbMV07CgogICAgICAgIGlu
dCBzaXplOwoKcHVibGljOgogICAgICAgIHRzZXJpYWwqIG9wZXJhdG9yW10gKHRzZXJpYWwgYXJn
MSkgewoKCgoKICAgICAgICAgICAgICAgIHJldHVybiByb290W2FyZzFdOwogICAgICAgIH0KCiAg
ICAgICAgaW50IEdldE5GKCB0c2VyaWFsIGFyZzEgKSB7IHJldHVybiBuZmVhdHVyZVthcmcxXTsg
fQoKICAgICAgICBUQXJyYXlGKGludCBfc2l6ZSk7CgogICAgICAgIH5UQXJyYXlGKCk7CgogICAg
ICAgIHZvaWQgRXhwYW5kKGludCBuZXdzaXplKTsKCiAgICAgICAgdm9pZCBTZXQodHNlcmlhbCBh
cmcxICwgdHNlcmlhbCogdmFsdWUpOwoKICAgICAgICBpbnQgRXF1YWwoaW50IG51bTEsIGludCBu
dW0yKSB7CiAgICAgICAgICAgICAgICB0c2VyaWFsKiBmMSA9IHJvb3RbbnVtMV07CiAgICAgICAg
ICAgICAgICB0c2VyaWFsKiBmMiA9IHJvb3RbbnVtMl07CiAgICAgICAgICAgICAgICBpZiAoZjEg
PT0gZjIpIHJldHVybiAxOwogICAgICAgICAgICAgICAgd2hpbGUoKmYxICE9IFRTX0lOVkFMSUQp
CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqZjErKyAhPSAqZjIrKykgcmV0dXJuIDA7CiAg
ICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9Cgp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
UkVULCBjbGFzcyBUMSwgY2xhc3MgVDI+ClRBcnJheTI8UkVULFQxLFQyPjo6VEFycmF5MihpbnQg
X3NpemUgLCBSRVQgZGVmX3ZhbHVlKSB7CiAgICAgICAgc2l6ZSA9IChfc2l6ZS8zMiArMSkgKiAz
MjsKICAgICAgICByb290ID0gbmV3IFRBcnJheTxSRVQsIFQyPiBbc2l6ZV07CiAgICAgICAgZGVm
X2FycmF5ID0gbmV3IFJFVFszMl07CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yIChpPTA7aTwz
MjtpKyspIGRlZl9hcnJheVtpXSA9IGRlZl92YWx1ZTsKICAgICAgICBkZWYgPSBUQXJyYXk8UkVU
LCBUMj4oc2l6ZSxkZWZfYXJyYXkpOwogICAgICAgIGZvciAoaT0wO2k8c2l6ZTtpKyspCiAgICAg
ICAgICAgICAgICByb290W2ldID0gZGVmOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBU
MSwgY2xhc3MgVDI+ClRBcnJheTI8UkVULFQxLFQyPjo6VEFycmF5MigpIHsKICBpbnQgX3NpemUg
PSAwOwogIFJFVCBkZWZfdmFsdWUgPSBfX251bGw7CgogICAgICAgIHNpemUgPSAoX3NpemUvMzIg
KzEpICogMzI7CiAgICAgICAgcm9vdCA9IG5ldyBUQXJyYXk8UkVULCBUMj4gW3NpemVdOwogICAg
ICAgIGRlZl9hcnJheSA9IG5ldyBSRVRbMzJdOwogICAgICAgIGludCBpOwogICAgICAgIGZvciAo
aT0wO2k8MzI7aSsrKSBkZWZfYXJyYXlbaV0gPSBkZWZfdmFsdWU7CiAgICAgICAgZGVmID0gVEFy
cmF5PFJFVCwgVDI+KHNpemUsZGVmX2FycmF5KTsKICAgICAgICBmb3IgKGk9MDtpPHNpemU7aSsr
KQogICAgICAgICAgICAgICAgcm9vdFtpXSA9IGRlZjsKfQoKdGVtcGxhdGUgPGNsYXNzIFJFVCwg
Y2xhc3MgVDEsIGNsYXNzIFQyPgpUQXJyYXkyPFJFVCxUMSxUMj46On5UQXJyYXkyKCkKewogICAg
ICAgIGRlbGV0ZVtdIHJvb3Q7CiAgICAgICAgZGVsZXRlW10gZGVmX2FycmF5Owp9CiMgOTk2ICJo
YXNoLmgiCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQxLCBjbGFzcyBUMj4Kdm9pZCBUQXJy
YXkyPFJFVCxUMSxUMj46OkV4cGFuZChpbnQgbmV3c2l6ZSkgewogICAgICAgIGlmIChuZXdzaXpl
IDwgc2l6ZSkgcmV0dXJuOwogICAgICAgIFRBcnJheSA8UkVULCBUMj4qIG9sZF9yb290ID0gcm9v
dDsKICAgICAgICBpbnQgb2xkX3NpemUgPSBzaXplOwogICAgICAgIHNpemUgPSAobmV3c2l6ZS8z
MiArMSkgKiAzMjsKICAgICAgICByb290ID0gbmV3IFRBcnJheTxSRVQsIFQyPiBbc2l6ZV07CiAg
ICAgICAgaW50IGk7Zm9yIChpPTA7aTxvbGRfc2l6ZTtpKyspIHsKICAgICAgICAgICAgICAgIHJv
b3RbaV0uTW92ZShvbGRfcm9vdFtpXSk7CiAgICAgICAgICAgICAgICByb290W2ldLkV4cGFuZChu
ZXdzaXplKTsKICAgICAgICB9CiAgICAgICAgZGVmLkV4cGFuZChuZXdzaXplKTsKICAgICAgICBm
b3IgKDtpPHNpemU7aSsrKQogICAgICAgICAgICAgICAgcm9vdFtpXSA9IGRlZjsKICAgICAgICBk
ZWxldGVbXSBvbGRfcm9vdDsKfQp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUMSwgY2xhc3Mg
VDI+CnZvaWQgVEFycmF5MjxSRVQsVDEsVDI+OjpTZXQoVDEgYXJnMSAsIFQyIGFyZzIgLCBSRVQg
dmFsdWUpIHsKICAgICAgICBFeHBhbmQoYXJnMSk7CiAgICAgICAgcm9vdFthcmcxXS5TZXQoYXJn
Mix2YWx1ZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUPgpUQXJyYXk8UkVULCBU
Pjo6VEFycmF5KFJFVCBkZWZfdikKewogICAgICAgIHJvb3QgPSAwOwogICAgICAgIHB0ciA9IG5l
dyBpbmZvOwogICAgICAgIHB0ci0+ZGVmX3ZhbHVlID0gZGVmX3Y7CiAgICAgICAgcHRyLT5kZWZf
YXJyYXkgPSBuZXcgUkVUWzMyXTsKICAgICAgICBmb3IgKGludCBpPTA7aTwzMjtpKyspCiAgICAg
ICAgICAgICAgICBwdHItPmRlZl9hcnJheVtpXSA9IHB0ci0+ZGVmX3ZhbHVlOwogICAgICAgIHB0
ci0+c2l6ZSA9IDA7CiAgICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHRydWU7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+ClRBcnJheTxSRVQsIFQ+OjpUQXJyYXko
aW50IF9zaXplICwgUkVUKiBfZGVmX2FycmF5KSB7CiAgICAgICAgcHRyID0gbmV3IGluZm87CiAg
ICAgICAgaW50IGk7CiAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBfZGVmX2FycmF5OwogICAgICAg
IHB0ci0+ZGVmX3ZhbHVlID0gX2RlZl9hcnJheVswXTsKICAgICAgICBwdHItPnNpemUgPSAoX3Np
emUvMzIgKzEpICogMzI7CiAgICAgICAgcm9vdCA9IG5ldyBSRVQqW3B0ci0+c2l6ZS8zMl07CiAg
ICAgICAgZm9yIChpPTA7aTxwdHItPnNpemUvMzI7aSsrKQogICAgICAgICAgICAgICAgcm9vdFtp
XSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgIHB0ci0+c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXkg
PSBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFycmF5PFJFVCwgVD46
OlRBcnJheShjb25zdCBUQXJyYXk8UkVULFQ+ICZzcmMpCnsKICAgICAgICBwdHIgPSBuZXcgaW5m
bzsKICAgICAgICBwdHItPmRlZl92YWx1ZSA9IHNyYy5wdHItPmRlZl92YWx1ZTsKICAgICAgICBw
dHItPnNpemUgPSBzcmMucHRyLT5zaXplOwogICAgICAgIHB0ci0+ZGVmX2FycmF5ID0gbmV3IFJF
VFszMl07CiAgICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHNyYy5wdHItPnNo
b3VsZF9kZWxldGVfZGVmX2FycmF5OwogICAgICAgIGlmKCBwdHItPnNob3VsZF9kZWxldGVfZGVm
X2FycmF5ICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBwdHItPmRlZl9hcnJheSA9IG5ldyBS
RVRbMzJdOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8MzI7aSsrKQogICAgICAgICAg
ICAgICAgICAgICAgICBwdHItPmRlZl9hcnJheVtpXSA9IHNyYy5wdHItPmRlZl9hcnJheVtpXTsK
ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBz
cmMucHRyLT5kZWZfYXJyYXk7CgogICAgICAgIGludCBuc2l6ZSA9IHB0ci0+c2l6ZSAvIDMyOwog
ICAgICAgIGZvciAoaW50IGk9MDtpPG5zaXplO2krKykKICAgICAgICB7CiAgICAgICAgICAgICAg
ICBpZiggc3JjLnJvb3RbaV0gPT0gc3JjLnB0ci0+ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAg
ICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICByb290W2ldID0gbmV3IFJF
VFszMl07CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaj0wOyBqPDMyOyBqKysgKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RbaV0gPSBzcmMucm9vdFtpXTsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+
ClRBcnJheTxSRVQsVD4gJiBUQXJyYXk8UkVULCBUPjo6b3BlcmF0b3IgPShjb25zdCBUQXJyYXk8
UkVULFQ+ICZzcmMpCnsKICAgICAgICBpZiggcHRyID09IF9fbnVsbCApCiAgICAgICAgICAgICAg
ICBwdHIgPSBuZXcgaW5mbzsKICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICAgICAg
aW50IG5zaXplID0gcHRyLT5zaXplIC8gMzI7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7
aTxuc2l6ZTtpKyspCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCByb290W2ldICE9IHB0ci0+
ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVbXSByb290
W2ldOwogICAgICAgICAgICAgICAgZGVsZXRlW10gcm9vdDsKICAgICAgICAgICAgICAgIGlmKCBw
dHItPnNob3VsZF9kZWxldGVfZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlW10gcHRyLT5kZWZfYXJyYXk7CiAgICAgICAgfQogICAgICAgIHB0ci0+ZGVmX3ZhbHVlID0g
c3JjLnB0ci0+ZGVmX3ZhbHVlOwogICAgICAgIHB0ci0+c2l6ZSA9IHNyYy5wdHItPnNpemU7CiAg
ICAgICAgcHRyLT5zaG91bGRfZGVsZXRlX2RlZl9hcnJheSA9IHNyYy5wdHItPnNob3VsZF9kZWxl
dGVfZGVmX2FycmF5OwogICAgICAgIHJvb3QgPSBuZXcgUkVUKltwdHItPnNpemUvMzJdOwogICAg
ICAgIGlmKCBwdHItPnNob3VsZF9kZWxldGVfZGVmX2FycmF5ICkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBwdHItPmRlZl9hcnJheSA9IG5ldyBSRVRbMzJdOwogICAgICAgICAgICAgICAgZm9y
IChpbnQgaT0wO2k8MzI7aSsrKQogICAgICAgICAgICAgICAgICAgICAgICBwdHItPmRlZl9hcnJh
eVtpXSA9IHNyYy5wdHItPmRlZl9hcnJheVtpXTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgcHRyLT5kZWZfYXJyYXkgPSBzcmMucHRyLT5kZWZfYXJyYXk7CgogICAgICAg
IGludCBuc2l6ZSA9IHB0ci0+c2l6ZSAvIDMyOwogICAgICAgIGZvciAoaW50IGk9MDtpPG5zaXpl
O2krKykKICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiggc3JjLnJvb3RbaV0gPT0gc3JjLnB0
ci0+ZGVmX2FycmF5ICkKICAgICAgICAgICAgICAgICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVm
X2FycmF5OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICByb290W2ldID0gbmV3IFJFVFszMl07CiAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcihpbnQgaj0wOyBqPDMyOyBqKysgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJvb3RbaV0gPSBzcmMucm9vdFtpXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgcmV0dXJuICp0aGlzOwp9CgoKdGVtcGxhdGUgPGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFy
cmF5PFJFVCxUPiAmIFRBcnJheTxSRVQsIFQ+OjpNb3ZlKFRBcnJheTxSRVQsVD4gJnNyYykKewog
ICAgICAgIGlmKCBwdHIgIT0gX19udWxsICkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQg
bnNpemUgPSBwdHItPnNpemUgLyAzMjsKICAgICAgICAgICAgICAgIGZvciAoaW50IGk9MDtpPG5z
aXplO2krKykKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJvb3RbaV0gIT0gcHRyLT5kZWZf
YXJyYXkgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIHJvb3RbaV07
CiAgICAgICAgICAgICAgICBkZWxldGVbXSByb290OwogICAgICAgICAgICAgICAgaWYoIHB0ci0+
c2hvdWxkX2RlbGV0ZV9kZWZfYXJyYXkgKQogICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVb
XSBwdHItPmRlZl9hcnJheTsKICAgICAgICB9CgogICAgICAgIHB0ciA9IHNyYy5wdHI7CiAgICAg
ICAgc3JjLnB0ciA9IF9fbnVsbDsKICAgICAgICByb290ID0gc3JjLnJvb3Q7CiAgICAgICAgc3Jj
LnJvb3QgPSBfX251bGw7CiAgICAgICAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
UkVULCBjbGFzcyBUPgp2b2lkIFRBcnJheTxSRVQsIFQ+OjpFeHBhbmQoaW50IG5ld3NpemUpIHsK
ICAgICAgICBpZiAocHRyLT5zaXplID4gbmV3c2l6ZSkgcmV0dXJuOwogICAgICAgIFJFVCoqIG9s
ZF9yb290ID0gcm9vdDsKICAgICAgICBpbnQgbnNpemUgPSBwdHItPnNpemUgLyAzMjsKICAgICAg
ICBpbnQgbm5zaXplID0gKG5ld3NpemUgKyAzMikgLyAzMjsKICAgICAgICByb290ID0gbmV3IFJF
VCpbbm5zaXplXTsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgaWYgKG9sZF9yb290ICE9IDAp
IHsKICAgICAgICAgICAgICAgIGZvciAoaT0wO2k8bnNpemU7aSsrKQogICAgICAgICAgICAgICAg
ICAgICAgICByb290W2ldID0gb2xkX3Jvb3RbaV07CiAgICAgICAgICAgICAgICBkZWxldGVbXSBv
bGRfcm9vdDsKICAgICAgICB9CiAgICAgICAgZm9yKCA7IGk8bm5zaXplOyBpKysgKQogICAgICAg
ICAgICAgICAgcm9vdFtpXSA9IHB0ci0+ZGVmX2FycmF5OwogICAgICAgIHB0ci0+c2l6ZSA9IG5u
c2l6ZSAqIDMyOwp9CnRlbXBsYXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVEFycmF5PFJF
VCwgVD46OlNldChUIGFyZyAsIFJFVCB2YWx1ZSkgewogICAgICAgIEV4cGFuZChhcmcpOwogICAg
ICAgIGludCB4ID0gYXJnLzMyOwogICAgICAgIGlmIChyb290W3hdID09IHB0ci0+ZGVmX2FycmF5
KSB7CiAgICAgICAgICAgICAgICBSRVQqIHIgPSByb290W3hdID0gbmV3IFJFVFszMl07CiAgICAg
ICAgICAgICAgICBpbnQgeTtmb3IgKHk9MDt5PDMyO3krKykgclt5XSA9IHB0ci0+ZGVmX3ZhbHVl
OwogICAgICAgIH0KICAgICAgICByb290W3hdW2FyZyUzMl0gPSB2YWx1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIFJFVCwgY2xhc3MgVD4KVEFycmF5PFJFVCwgVD46On5UQXJyYXkoKSB7CiAgICAgICAg
aWYoIHB0ciAhPSBfX251bGwgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBuc2l6ZSA9
IHB0ci0+c2l6ZSAvIDMyOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wO2k8bnNpemU7aSsr
KQogICAgICAgICAgICAgICAgICAgICAgICBpZiggcm9vdFtpXSAhPSBwdHItPmRlZl9hcnJheSAp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gcm9vdFtpXTsKICAgICAg
ICAgICAgICAgIGRlbGV0ZVtdIHJvb3Q7CiAgICAgICAgICAgICAgICBpZiggcHRyLT5zaG91bGRf
ZGVsZXRlX2RlZl9hcnJheSApCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVtdIHB0ci0+
ZGVmX2FycmF5OwogICAgICAgICAgICAgICAgZGVsZXRlIHB0cjsKICAgICAgICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVFNpbXBsZUFycmF5PFJFVCwgVD46OkV4cGFu
ZChpbnQgbm4pIHsKICAgICAgICBpZiAoc2l6ZSA+IG5uKSByZXR1cm47CiAgICAgICAgaW50IG5l
d3NpemUgPSBzaXplICsgMzI7CiAgICAgICAgd2hpbGUoIG5ld3NpemUgPD0gbm4gKQogICAgICAg
ICAgICAgICAgbmV3c2l6ZSArPSAzMjsKICAgICAgICBSRVQqIG9sZF9yb290ID0gcm9vdDsKICAg
ICAgICByb290ID0gbmV3IFJFVFtuZXdzaXplXTsKICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAg
Zm9yKCA7IGk8c2l6ZTsgaSsrICkKICAgICAgICAgICAgICAgIHJvb3RbaV0gPSBvbGRfcm9vdFtp
XTsKICAgICAgICBpZiAob2xkX3Jvb3QgIT0gMCkKICAgICAgICAgICAgICAgIGRlbGV0ZVtdIG9s
ZF9yb290OwogICAgICAgIGZvciggOyBpPG5ld3NpemU7IGkrKyApCiAgICAgICAgICAgICAgICBy
b290W2ldID0gZGVmX3ZhbHVlOwogICAgICAgIHNpemUgPSBuZXdzaXplOwp9CnRlbXBsYXRlIDxj
bGFzcyBSRVQsIGNsYXNzIFQ+CnZvaWQgVFNpbXBsZUFycmF5PFJFVCwgVD46OlNldChUIGFyZyAs
IFJFVCB2YWx1ZSkgewogICAgICAgIEV4cGFuZChhcmcpOwogICAgICAgIHJvb3RbYXJnXSA9IHZh
bHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgUkVULCBjbGFzcyBUPgpUU2ltcGxlQXJyYXk8UkVULCBU
Pjo6flRTaW1wbGVBcnJheSgpIHsKICAgICAgICBkZWxldGVbXSByb290Owp9CiMgNDcgImNlbGwu
aCIgMgoKIyAxICJmdHlwZS5oIiAxCiMgMzUgImZ0eXBlLmgiCiMgMSAiaGFzaC5oIiAxCiMgMzYg
ImZ0eXBlLmgiIDIKCgoKCgoKY2xhc3MgdHlwZTsKIyA1NCAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0
IHR5cGUgKmJvdDsKIyA2NyAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKmxpc3Q7CiMgODAg
ImZ0eXBlLmgiCmV4dGVybiBjb25zdCB0eXBlICpjb25zOwojIDkzICJmdHlwZS5oIgpleHRlcm4g
Y29uc3QgdHlwZSAqbmlsOwojIDEwNiAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKmhkOwoj
IDExOSAiZnR5cGUuaCIKZXh0ZXJuIGNvbnN0IHR5cGUgKnRsOwojIDEzMCAiZnR5cGUuaCIKY2xh
c3MgTGluZWFyRlNQOwojIDE0MiAiZnR5cGUuaCIKY2xhc3MgdHlwZSB7CiAgICAgICAgc3RkOjpz
dHJpbmcgbmFtZTsKCiAgICAgICAgc3RkOjpzdHJpbmcgcHJvcGVybmFtZTsKCiAgICAgICAgY2xh
c3MgbW9kdWxlKiBtb2Q7CgogICAgICAgIGludCBuZmVhdHVyZXM7CgogICAgICAgIHRzZXJpYWwg
c2VyaWFsbm87CgogICAgICAgIGJvb2wgZXhwb3J0ZWQ7CgogICAgICAgIGJvb2wgc3RyZWFtZWQ7
CgoKICAgICAgICBzdGF0aWMgU3RyaW5nSGFzaDx0eXBlPiBoYXNoOwoKICAgICAgICBzdGF0aWMg
VmFyQXJyYXk8Y29uc3QgdHlwZSAqPiBzZXJpYWx0YWJsZTsKCgoKICAgICAgICB2b2lkIHR5cGVf
Y29uc3RydWN0b3IoY29uc3QgY2hhciAqLCB0c2VyaWFsLCBtb2R1bGUgKiwgYm9vbCk7CnB1Ymxp
YzoKICAgICAgICAgICAgICAgIHR5cGUoY29uc3QgY2hhciAqaW4sIHRzZXJpYWwgc2VyaWFsbm8s
IG1vZHVsZSAqaW1vZCwgYm9vbCBpZXhwb3J0ZWQpOwogICAgICAgICAgICAgICAgdHlwZShjb25z
dCBjaGFyICppbiwgdHNlcmlhbCBzZXJpYWxubywgbW9kdWxlICppbW9kKTsKICAgICAgICAgICAg
ICAgIHR5cGUoY29uc3QgY2hhciAqaW4sIHRzZXJpYWwgc2VyaWFsbm8pOwoKCgoKCiAgICAgICAg
ICAgICAgICB2b2lkIFJlSW5pdCh2b2lkKTsKCiAgICAgICAgICAgICAgICB2b2lkIERlbGV0ZSh2
b2lkKSB7IG5mZWF0dXJlcyA9IDA7fQoKICAgICAgICAgICAgICAgIH50eXBlKCk7CgoKICAgICAg
ICBjb25zdCBjaGFyICpHZXRQcmludE5hbWUoKSBjb25zdDsKCiAgICAgICAgY29uc3QgY2hhciAq
R2V0UHJpbnRGZWF0dXJlTmFtZSgpIGNvbnN0OwoKICAgICAgICBjb25zdCBjaGFyICpHZXRTaW1w
bGVOYW1lKCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUuY19zdHIoKTsKICAg
ICAgICB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldFByb3Blck5hbWUoKSBjb25zdCB7CiAgICAg
ICAgICAgICAgICByZXR1cm4gcHJvcGVybmFtZS5jX3N0cigpOwogICAgICAgIH0KCiAgICAgICAg
Y29uc3QgY2hhciAqR2V0S2V5KCkgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIG5hbWUu
Y19zdHIoKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGNoYXIgKkdldE5hbWUoKSBjb25zdCB7
CiAgICAgICAgICAgICAgICByZXR1cm4gR2V0UHJvcGVyTmFtZSgpOwogICAgICAgIH0KCiAgICAg
ICAgdHNlcmlhbCBHZXRTZXJpYWxObygpIGNvbnN0IHsKICAgICAgICAgICAgICAgIDsKICAgICAg
ICAgICAgICAgIGlmICh0aGlzID09IDApIHJldHVybiBUU19JTlZBTElEOwogICAgICAgICAgICAg
ICAgcmV0dXJuIHNlcmlhbG5vOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgdHlwZSAqRmVhdHVy
ZShpbnQgbikgY29uc3Q7CgogICAgICAgIGNvbnN0IHR5cGUgKkRlZlR5cGVPZk50aEZlYXR1cmUo
aW50IG4pIGNvbnN0OwoKICAgICAgICBpbnQgR2V0TkZlYXR1cmVzKCkgY29uc3QgewogICAgICAg
ICAgICAgICAgcmV0dXJuIG5mZWF0dXJlczsKICAgICAgICB9CgogICAgICAgIGludCBHZXRJbmRl
eChjb25zdCB0eXBlICpmKSBjb25zdDsKCgogICAgICAgIGludCBHZXRJbmRleCh0c2VyaWFsIGZT
TikgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJuIEdldEluZGV4KHR5cGU6OlNlcmlhbChm
U04pKTsKICAgICAgICB9CiMgMjMwICJmdHlwZS5oIgogICAgICAgIGNvbnN0IHR5cGUgKkRlZlR5
cGVPZkZlYXR1cmUoY29uc3QgdHlwZSogZikgY29uc3QgewogICAgICAgICAgICAgICAgcmV0dXJu
IERlZlR5cGVPZk50aEZlYXR1cmUoR2V0SW5kZXgoZikpOwogICAgICAgIH0KICAgICAgICBjb25z
dCB0eXBlICpEZWZUeXBlT2ZGZWF0dXJlKHRzZXJpYWwgZikgY29uc3QgewogICAgICAgICAgICAg
ICAgcmV0dXJuIERlZlR5cGVPZkZlYXR1cmUodHlwZTo6U2VyaWFsKGYpKTsKICAgICAgICB9CgoK
ICAgICAgICBjb25zdCB0eXBlICpUeXBlVW5pZnkoY29uc3QgdHlwZSAqdCkgY29uc3Q7CgoKCgoK
ICAgICAgICBib29sIElzU3ViVHlwZShjb25zdCB0eXBlICp0KSBjb25zdCB7CiAgICAgICAgICAg
ICAgICByZXR1cm4gVHlwZVVuaWZ5KHQpID09IHRoaXM7CiAgICAgICAgfQoKICAgICAgICBib29s
IElzU3VwZXJUeXBlKGNvbnN0IHR5cGUgKnQpIGNvbnN0IHsKICAgICAgICAgICAgICAgIHJldHVy
biB0LT5UeXBlVW5pZnkodGhpcykgPT0gdDsKICAgICAgICB9CgogICAgICAgIGJvb2wgSXNFeHBv
cnRlZCh2b2lkKSBjb25zdCB7CiAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0ZWQ7CiAgICAg
ICAgfQoKICAgICAgICBjbGFzcyBtb2R1bGUqIEdldE1vZHVsZSh2b2lkKSBjb25zdHsKICAgICAg
ICAgICAgICAgIHJldHVybiBtb2Q7CiAgICAgICAgfQoKICAgICAgICBjb25zdCB0eXBlKiBHZXRQ
YXJlbnRPZkZlYXR1cmUodm9pZCkgY29uc3Q7CgogICAgICAgIGludCBHZXRQcmlvcml0eU9mRmVh
dHVyZSh2b2lkKSBjb25zdDsKCgoKCiAgICAgICAgc3RhdGljIGNvbnN0IHR5cGUqIFNlcmlhbCh0
c2VyaWFsIHNlcikgeyBpZiggc2VyID09IFRTX0lOVkFMSUQgKSByZXR1cm4gX19udWxsOyBlbHNl
IHsgOyByZXR1cm4gc2VyaWFsdGFibGVbc2VyXTsgfSB9CgogICAgICAgIHN0YXRpYyB0c2VyaWFs
IEdldFNlcmlhbENvdW50KCkgeyByZXR1cm4gKHRzZXJpYWwpc2VyaWFsdGFibGUuR2V0U2l6ZSgp
OyB9CgogICAgICAgIHN0YXRpYyBjb25zdCB0eXBlKiBTZWFyY2goY29uc3QgY2hhciAqc3RyKSB7
IHJldHVybiBoYXNoLkZpbmQoc3RyKTsgfQogICAgICAgIHN0YXRpYyBjb25zdCB0eXBlKiBTZWFy
Y2goc3RkOjpzdHJpbmcgJnN0cikgeyByZXR1cm4gaGFzaC5GaW5kKHN0cik7IH0KCgogICAgICAg
IHN0YXRpYyB2b2lkIHRlcm1pbmF0ZSgpOwoKCiAgICAgICAgYm9vbCBJc0NvbXBpbGVkVHlwZSgp
IGNvbnN0OwoKICAgICAgICBib29sIElzQ29uc3RyYWluZWQoKSBjb25zdDsKCgogICAgICAgIHZv
aWQgU2V0Q29tcFRhYmxlKCk7CgoKICAgICAgICBib29sIFNldEF0dHJpYnV0ZShjb25zdCBMaW5l
YXJGU1AgJmFyZyk7CgogICAgICAgIGNvbnN0IExpbmVhckZTUCAmR2V0QXR0cmlidXRlKCkgY29u
c3Q7CgoKICAgICAgICBjb25zdCBMaW5lYXJGU1AgJkdldEFkZGVkQ29uc3RyYWludChjb25zdCB0
eXBlICp0KSBjb25zdDsKCiAgICAgICAgY29uc3QgTGluZWFyRlNQICZHZXRVbmlmaWVkQ29uc3Ry
YWludChjb25zdCB0eXBlICp0KSBjb25zdDsKCiAgICAgICAgY29uc3QgTGluZWFyRlNQICZHZXRB
bGxDb25zdHJhaW50KCkgY29uc3Q7CgoKICAgICAgICB2b2lkIFNldFN0cmVhbWVkRmxhZyhvc3Ry
ZWFtICYpIHsgc3RyZWFtZWQgPSB0cnVlOyB9CgogICAgICAgIHZvaWQgQ2xlYXJTdHJlYW1lZEZs
YWcob3N0cmVhbSAmKSB7IHN0cmVhbWVkID0gZmFsc2U7IH0KCiAgICAgICAgYm9vbCBHZXRTdHJl
YW1lZEZsYWcob3N0cmVhbSYgb3MpIHsgcmV0dXJuIHN0cmVhbWVkOyB9CgoKICAgICAgICBzdGF0
aWMgdHlwZSAqQ3JlYXRlTmV3VHlwZShzdHJpbmcgbmFtZSk7Cgp9OwojIDQ5ICJjZWxsLmgiIDIK
IyAxICJsc3RyaW5nLmgiIDEKIyA1NiAibHN0cmluZy5oIgpjbGFzcyBsc3RyaW5nCnsKICAgICAg
ICBjaGFyICpzdHI7CgoKcHVibGljOgogICAgICAgIGxzdHJpbmcoKSB7IHN0ciA9IF9fbnVsbDsg
fQoKICAgICAgICBsc3RyaW5nKGNvbnN0IGNoYXIgKnMpOwogICAgICAgIGxzdHJpbmcoY29uc3Qg
bHN0cmluZyAmcyk7CgogICAgICAgIGV4cGxpY2l0IGxzdHJpbmcoY2hhciBjLCBpbnQgcmVwZWF0
ID0gMSk7CiAgICAgICAgfmxzdHJpbmcoKSB7IGRlbGV0ZVtdIHN0cjsgfQoKCiAgICAgICAgYm9v
bCBJc051bGwoKSBjb25zdCB7IHJldHVybiBzdHIgPT0gX19udWxsOyB9CgogICAgICAgIGNvbnN0
IGNoYXIgKiBjX3N0cigpIGNvbnN0IHsgcmV0dXJuIHN0cjsgfQoKICAgICAgICBvcGVyYXRvciBz
dGQ6OnN0cmluZygpIGNvbnN0IHsgcmV0dXJuIHN0cmluZyhzdHIpOyB9CiAgICAgICAgdm9pZCBm
b3JjZV9pbml0KHZvaWQpIHsgc3RyID0gX19udWxsOyB9CgogICAgICAgIHZvaWQgaW5pdCh2b2lk
KSB7IGlmIChzdHIgIT0gX19udWxsKSBkZWxldGVbXSBzdHI7c3RyID0gX19udWxsO30KCgogICAg
ICAgIGxzdHJpbmcgJm9wZXJhdG9yID0oY29uc3QgbHN0cmluZyAmbCk7CgogICAgICAgIGxzdHJp
bmcgJm9wZXJhdG9yID0oY29uc3QgY2hhciAqcyk7CgoKICAgICAgICBjaGFyICZvcGVyYXRvcltd
KGludCBpKSB7IHJldHVybiBzdHJbaV07IH0KCgogICAgICAgIGZyaWVuZCBsc3RyaW5nIG9wZXJh
dG9yKyhjb25zdCBsc3RyaW5nICZhLCBjb25zdCBsc3RyaW5nICZiKTsKICAgICAgICBmcmllbmQg
bHN0cmluZyBvcGVyYXRvcisoY29uc3QgY2hhciAqYSwgY29uc3QgbHN0cmluZyAmYik7CiAgICAg
ICAgZnJpZW5kIGxzdHJpbmcgb3BlcmF0b3IrKGNvbnN0IGxzdHJpbmcgJmEsIGNvbnN0IGNoYXIg
KmIpOwoKCiAgICAgICAgY2hhciAqR2V0S2V5KCkgeyByZXR1cm4gc3RyOyB9CgoKCiAgICAgICAg
ZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNvbnN0IGxzdHJpbmcgJmwp
IHsgcmV0dXJuIG9zIDw8IChsLmNfc3RyKCkpOyB9CgoKfTsKIyAxMTkgImxzdHJpbmcuaCIKaW5s
aW5lIGludCBzdHJsZW4oY29uc3QgbHN0cmluZyAmYSkgeyByZXR1cm4gc3RybGVuKGEuY19zdHIo
KSk7IH0KIyAxMzUgImxzdHJpbmcuaCIKaW5saW5lIGNoYXIgKnN0cmNweShjaGFyICpzLCBjb25z
dCBsc3RyaW5nICZhKSB7IHJldHVybiBzdHJjcHkocywgYS5jX3N0cigpKTsgfQojIDE1MSAibHN0
cmluZy5oIgppbmxpbmUgaW50IHN0cmNtcChjb25zdCBsc3RyaW5nICZhLCBjb25zdCBsc3RyaW5n
ICZiKQp7IHJldHVybiBzdHJjbXAoYS5jX3N0cigpLCBiLmNfc3RyKCkpOyB9CmlubGluZSBpbnQg
c3RyY21wKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGxzdHJpbmcgJmIpCnsgcmV0dXJuIHN0cmNtcChh
LCBiLmNfc3RyKCkpOyB9CmlubGluZSBpbnQgc3RyY21wKGNvbnN0IGxzdHJpbmcgJmEsIGNvbnN0
IGNoYXIgKmIpCnsgcmV0dXJuIHN0cmNtcChhLmNfc3RyKCksIGIpOyB9CiMgMTczICJsc3RyaW5n
LmgiCmxzdHJpbmcgaW50MmxzdHIoaW50IGkpOwojIDUwICJjZWxsLmgiIDIKIyAxMDAgImNlbGwu
aCIKZW51bSBjZWxsIHsgX19fXzEgPSAweDdmZmZmZmZmICwgQ0VMTF9JTlZBTElEID0gMCwgX19f
XzIgPSAtMHg3ZmZmZmZmZiB9Owp0eXBlZGVmIHVpbnQzMiBjZWxsX2ludDsKdHlwZWRlZiBzaW50
MzIgc2lnbmVkX2NlbGxfaW50OwojIDE1OCAiY2VsbC5oIgplbnVtIHRhZ190IHsKICAgICAgICBU
X1BUUiA9IDAsCiAgICAgICAgVF9QVFIxPSA4LAogICAgICAgIFRfUFRSMj0gNCwKICAgICAgICBU
X1BUUjM9MTIsCiAgICAgICAgVF9TVFIgPSAyLAogICAgICAgIFRfQ1NUUj0xMCwKICAgICAgICBU
X1ZBUiA9IDYsCiAgICAgICAgVF9DVkFSPTE0LAogICAgICAgIFRfSU5UID0gMSwKICAgICAgICBU
X0ZMTyA9IDksCiAgICAgICAgVF9DSFIgPSA1LAogICAgICAgIFRfU1RHID0xMywKICAgICAgICBU
X0RBVCA9IDMKfTsKIyAzMDAgImNlbGwuaCIKdHlwZWRlZiB1aW50MTYgbWNoYXI7CnR5cGVkZWYg
aW50MzIgbWludDsKdHlwZWRlZiBkb3VibGUgbWZsb2F0OwojIDUwMCAiY2VsbC5oIgp0eXBlZGVm
IHVuc2lnbmVkIHNob3J0IGNoYXJfaW50OwojIDUxNyAiY2VsbC5oIgp0eXBlZGVmIGNlbGwgKiBj
ZWxsX3B0cjsKIyA4MTYgImNlbGwuaCIKaW5saW5lIGNlbGwgUFRSMmMoY2VsbF9wdHIgcCkgeyBy
ZXR1cm4gKChjZWxsKSgocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KChwKSkpKSk7IH0KCmlubGlu
ZSBjZWxsIFNUUjJjKGNvbnN0IHR5cGUgKnApIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxfaW50KShw
LT5HZXRTZXJpYWxObygpIDw8IDQpIHwgKFRfU1RSIDw8IDApKSk7IH0KCmlubGluZSBjZWxsIFNU
UjJjKHRzZXJpYWwgc2VyaWFsKSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCkoIHNlcmlhbCA8
PCA0KSB8IChUX1NUUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBWQVIyYyhjb25zdCB0eXBlICpw
KSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCkocC0+R2V0U2VyaWFsTm8oKSA8PCA0KSB8IChU
X1ZBUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBWQVIyYyh0c2VyaWFsIHNlcmlhbCkgeyByZXR1
cm4gKChjZWxsKSgoY2VsbF9pbnQpKCBzZXJpYWwgPDwgNCkgfCAoVF9WQVIgPDwgMCkpKTsgfQoK
aW5saW5lIGNlbGwgQ1NUUjJjKGNvbnN0IHR5cGUgKnApIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxf
aW50KShwLT5HZXRTZXJpYWxObygpIDw8IDQpIHwgKFRfQ1NUUiA8PCAwKSkpOyB9CgppbmxpbmUg
Y2VsbCBDU1RSMmModHNlcmlhbCBzZXJpYWwpIHsgcmV0dXJuICgoY2VsbCkoKGNlbGxfaW50KSgg
c2VyaWFsIDw8IDQpIHwgKFRfQ1NUUiA8PCAwKSkpOyB9CgppbmxpbmUgY2VsbCBDVkFSMmMoY29u
c3QgdHlwZSAqcCkgeyByZXR1cm4gKChjZWxsKSgoY2VsbF9pbnQpKHAtPkdldFNlcmlhbE5vKCkg
PDwgNCkgfCAoVF9DVkFSIDw8IDApKSk7IH0KCmlubGluZSBjZWxsIENWQVIyYyh0c2VyaWFsIHNl
cmlhbCkgeyByZXR1cm4gKChjZWxsKSgoY2VsbF9pbnQpKCBzZXJpYWwgPDwgNCkgfCAoVF9DVkFS
IDw8IDApKSk7IH0KCmlubGluZSBjZWxsIElOVDJjKG1pbnQgdmFsKSB7IHJldHVybiAoKGNlbGwp
KCgoY2VsbF9pbnQpKHZhbCkgPDwgNCkgfCAoVF9JTlQgPDwgMCkpKTsgfQoKCgppbmxpbmUgY2Vs
bCBGTE8yYyhtZmxvYXQgdmFsKSB7IHJldHVybiAoKChjZWxsKSgoVF9GTE8gPDwgMCkpKSk7IH0K
aW5saW5lIGNlbGwgQ0hSMmMobWNoYXIgdmFsKSB7IHJldHVybiAoKGNlbGwpKChjZWxsX2ludCl2
YWwgfCAoVF9DSFIgPDwgMCkpKTsgfQppbmxpbmUgY2VsbCBTVEcyYyhpbnQgcykgeyByZXR1cm4g
KCgoY2VsbCkoKChjZWxsX2ludCkocyk8PDQpIHwgKFRfU1RHIDw8IDApKSkpOyB9CgppbmxpbmUg
Y2VsbF9wdHIgYzJQVFIoY2VsbCBjKSB7IDsgcmV0dXJuIChjZWxsX3B0cikoKChjZWxsX2ludCko
YykpKTsgfQppbmxpbmUgdHNlcmlhbCBjMlNUUlMoY2VsbCBjKSB7IDsgcmV0dXJuICgodHNlcmlh
bCkoKCgoY2VsbF9pbnQpKGMpKSAmICgweGZmZmZmZmYwKSkgPj4gNCkpOyB9CgppbmxpbmUgY29u
c3QgdHlwZSAqYzJTVFIoY2VsbCBjKSB7IHJldHVybiB0eXBlOjpTZXJpYWwoYzJTVFJTKGMpKTsg
fQoKaW5saW5lIHRzZXJpYWwgYzJWQVJTKGNlbGwgYykgeyA7IHJldHVybiAoKHRzZXJpYWwpKCgo
KGNlbGxfaW50KShjKSkgJiAoMHhmZmZmZmZmMCkpID4+IDQpKTsgfQoKaW5saW5lIGNvbnN0IHR5
cGUgKmMyVkFSKGNlbGwgYykgeyByZXR1cm4gdHlwZTo6U2VyaWFsKGMyVkFSUyhjKSk7IH0KCmlu
bGluZSB0c2VyaWFsIGMyU1RSU29yVkFSUyhjZWxsIGMpIHsgOyByZXR1cm4gKCh0c2VyaWFsKSgo
KChjZWxsX2ludCkoYykpICYgKDB4ZmZmZmZmZjApKSA+PiA0KSk7IH0KCmlubGluZSBjb25zdCB0
eXBlICpjMlNUUm9yVkFSKGNlbGwgYyl7IHJldHVybiB0eXBlOjpTZXJpYWwoYzJTVFJTb3JWQVJT
KGMpKTsgfQoKCmlubGluZSBtaW50IGMySU5UKGNlbGwgYykgeyA7IHJldHVybiAobWludCkoKChj
ZWxsX2ludCkoYykpICkgPj4gNDsgfQoKCgppbmxpbmUgbWNoYXIgYzJDSFIoY2VsbCBjKSB7IDsg
cmV0dXJuIChjaGFyX2ludCkoKGNlbGxfaW50KShjKSk7IH0KaW5saW5lIGludCBjMlNURyhjZWxs
IGMpIHsgOyByZXR1cm4gKChpbnQpKCgoKGNlbGxfaW50KShjKSkgJiAoMHhmZmZmZmZmMCkpID4+
IDQpKTsgfQoKCgoKCm9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYgb3MsIGNlbGwgYyk7CiMg
ODgzICJjZWxsLmgiCmNvbnN0IHRzZXJpYWwgVFlQRV9ib3QgPSAwOwojIDg5OCAiY2VsbC5oIgpj
b25zdCB0c2VyaWFsIFRZUEVfaW50ZWdlciA9IDE7CiMgOTEzICJjZWxsLmgiCmNvbnN0IHRzZXJp
YWwgVFlQRV9zdHJpbmcgPSAyOwojIDkyOCAiY2VsbC5oIgpjb25zdCB0c2VyaWFsIFRZUEVfZmxv
YXQgPSAzOwojIDk0MyAiY2VsbC5oIgpjb25zdCB0c2VyaWFsIFRZUEVfZmVhdHVyZSA9IDQ7CiMg
MTAxOCAiY2VsbC5oIgpleHRlcm4gIkMiIHZvaWQgZGVidWdfc3RyKGNvbnN0IGNoYXIgKnMpOwoj
IDEwMzIgImNlbGwuaCIKZXh0ZXJuICJDIiB2b2lkIGRlYnVnX25vZGUoY2VsbCk7CiMgMTA0NyAi
Y2VsbC5oIgpleHRlcm4gIkMiIHZvaWQgZGVidWdfdHlwZShpbnQgaSk7CiMgMTA2MSAiY2VsbC5o
IgpleHRlcm4gIkMiIHZvaWQgZGVidWdfaW50KGludCBpKTsKIyA0OCAiYWxsLmgiIDIKCgojIDEg
Imhhc2guaCIgMQojIDUxICJhbGwuaCIgMgojIDEgImxpbGZlcy5oIiAxCiMgNjQ2ICJsaWxmZXMu
aCIKZXh0ZXJuICJDIiB7CgogICAgICAgIGV4dGVybiBjZWxsX3B0ciBIZWFwQV9Cb3R0b207CiAg
ICAgICAgZXh0ZXJuIGNlbGxfcHRyIEhlYXBCX0JvdHRvbTsKICAgICAgICBleHRlcm4gY2VsbF9w
dHIgQ2hvaWNlQm90dG9tOwogICAgICAgIGV4dGVybiBjZWxsX3B0ciBTdGFja0JvdHRvbTsKICAg
ICAgICBleHRlcm4gY2VsbF9wdHIgVHJhaWxCb3R0b207CgogICAgICAgIGV4dGVybiBjZWxsIEhl
YXBBX1BvaW50ZXI7CiAgICAgICAgZXh0ZXJuIGNlbGwgSGVhcEFfTGltaXQ7CiAgICAgICAgZXh0
ZXJuIGNlbGwgSGVhcEJfUG9pbnRlcjsKICAgICAgICBleHRlcm4gY2VsbCBIZWFwQl9MaW1pdDsK
ICAgICAgICBleHRlcm4gY2VsbCBIZWFwQV9UcmFpbExpbWl0OwogICAgICAgIGV4dGVybiBjZWxs
IEhlYXBCX1RyYWlsTGltaXQ7CiAgICAgICAgZXh0ZXJuIGNlbGwgQ2hvaWNlUG9pbnRlcjsKICAg
ICAgICBleHRlcm4gY2VsbCBTdGFja1BvaW50ZXI7CiAgICAgICAgZXh0ZXJuIGNlbGwgRnJhbWVQ
b2ludGVyOwogICAgICAgIGV4dGVybiBjZWxsIFRyYWlsUG9pbnRlcjsKICAgICAgICBleHRlcm4g
Y2VsbCBVbmlmeVBvaW50ZXIxOwogICAgICAgIGV4dGVybiBjZWxsIFVuaWZ5UG9pbnRlcjI7CiAg
ICAgICAgZXh0ZXJuIGNlbGwgVW5pZnlDZWxsMTsKICAgICAgICBleHRlcm4gY2VsbCBVbmlmeUNl
bGwyOwogICAgICAgIGV4dGVybiBjZWxsIFB1c2hEb3duTGlzdFBvaW50ZXI7CiAgICAgICAgZXh0
ZXJuIGNlbGwgQ29tcENvbnN0OwoKICAgICAgICBleHRlcm4gY29kZXB0ciBQcm9ncmFtQ291bnRl
cjsKICAgICAgICBleHRlcm4gY29kZXB0ciBDb250aW51YXRpb25Qb2ludGVyOwogICAgICAgIGV4
dGVybiBjb2RlcHRyIFNpbXBsZUNhbGxDb250aW51YXRpb25Qb2ludGVyOwogICAgICAgIGV4dGVy
biBjZWxsX2ludCBIZWFwQV9Ob1RyYWlsU2l6ZTsKCiAgICAgICAgZXh0ZXJuIGNlbGxfcHRyIFN5
bWJvbDsKICAgICAgICBleHRlcm4gY2VsbF9wdHIgQXNzZXJ0OwoKfQojIDUyICJhbGwuaCIgMgoj
IDEgIm1hY2hpbmUuaCIgMQojIDkgIm1hY2hpbmUuaCIKZXh0ZXJuICJDIiB7Cgp2b2lkIExvb3BJ
bml0KCk7Cgp2b2lkIExvb3BUZXJtKCk7Cgp2b2lkIExvb3BUZXJtX0NsZWFyKCk7CgoKdm9pZCBU
cmFpbE92ZXJ3cml0ZTIoY2VsbCk7CnZvaWQgRmFpbCgpOwoKCgp2b2lkIFN3aXRjaEhlYXAoKTsK
CmNlbGwgU2V0VHJhaWxQb2ludDIoY29kZXB0ciByZXRwKTsKdm9pZCBUcmFpbEFnYWluMihjZWxs
IGNwLCBjb2RlcHRyIHJldHApOwp2b2lkIFRyYWlsQmFjazIoY2VsbCBjcCk7CnZvaWQgV3JpdGVI
ZWFwMihjZWxsIGNwLCBjZWxsIGMpOwp2b2lkIFB1dEhlYXAoY2VsbCBjKTsKCn0KaW5saW5lIHZv
aWQgVHJhaWxPdmVyd3JpdGUoY2VsbF9wdHIgY3ApIHsgVHJhaWxPdmVyd3JpdGUyKFBUUjJjKGNw
KSk7IH0KaW5saW5lIHZvaWQgVHJhaWxPdmVyd3JpdGUoY2VsbCBjKSB7IFRyYWlsT3ZlcndyaXRl
MihjKTsgfQoKaW5saW5lIHZvaWQgV3JpdGVIZWFwKGNlbGxfcHRyIGNwLGNlbGwgYyl7V3JpdGVI
ZWFwMihQVFIyYyhjcCksYyk7fQoKaW5saW5lIGNlbGxfcHRyIFNldFRyYWlsUG9pbnQoY29kZXB0
ciByKXtyZXR1cm4gYzJQVFIoU2V0VHJhaWxQb2ludDIocikpO30KCmlubGluZSB2b2lkIFRyYWls
QWdhaW4oY2VsbF9wdHIgY3AsY29kZXB0ciByKXtUcmFpbEFnYWluMihQVFIyYyhjcCkscik7fQoK
aW5saW5lIHZvaWQgVHJhaWxCYWNrKGNlbGxfcHRyIGNwKXtUcmFpbEJhY2syKFBUUjJjKGNwKSk7
fQojIDUzICJhbGwuaCIgMgojIDEgImZzcC5oIiAxCiMgMzggImZzcC5oIgojIDEgInNzcF9tYWNy
by5oIiAxCiMgMTQgInNzcF9tYWNyby5oIgppbmxpbmUgY2VsbF9wdHIgUEEoY2VsbF9wdHIgYSxp
bnQgYikgewogICAgICAgIHJldHVybiBjMlBUUiggKCBQVFIyYyhjMlBUUihQVFIyYyhhKSkgKyAo
aW50KSgoYikpKSApICk7Cn0KIyAzOSAiZnNwLmgiIDIKIyAxICJtZW1hbGxvYy5oIiAxCiMgMzUg
Im1lbWFsbG9jLmgiCnR5cGVkZWYgY29uc3Qgdm9pZCAqIGNvbnN0X3ZvaWRfcDsKIyA0OCAibWVt
YWxsb2MuaCIKY2xhc3MgbGlsZmVzX2FsbG9jYXRvcl9pbnN0YW5jZQp7CnByaXZhdGU6CiAgICAg
ICAgc3RydWN0IGxpbmtsaXN0CiAgICAgICAgewogICAgICAgICAgICAgICAgbGlua2xpc3QgKm5l
eHQ7CiAgICAgICAgICAgICAgICBzaXplX3Qgc2l6ZTsKICAgICAgICB9OwoKCiAgICAgICAgc3Ry
dWN0IG1hbGxvY2xpc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICBtYWxsb2NsaXN0ICpuZXh0
OwogICAgICAgIH07CgoKICAgICAgICBsaW5rbGlzdCAqZnJlZWxpbms7CgogICAgICAgIG1hbGxv
Y2xpc3QgKnJvb3Q7CgogICAgICAgIGludCBuZnJlZTsKCiAgICAgICAgaW50IGZyZWVsaW1pdDsK
CiAgICAgICAgaW50IG5yZWY7CgoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGFsbG9jdW5pdCA9
IDY1NTM2IC0gc2l6ZW9mKG1hbGxvY2xpc3QpOwoKICAgICAgICBzdGF0aWMgY29uc3QgaW50IGlu
aWZyZWVsaW1pdCA9IDI1NjsKCgpwdWJsaWM6CiAgICAgICAgbGlsZmVzX2FsbG9jYXRvcl9pbnN0
YW5jZSgpIHRocm93KCkgeyBmcmVlbGluayA9IF9fbnVsbDsgcm9vdCA9IF9fbnVsbDsgbmZyZWUg
PSAwOyBmcmVlbGltaXQgPSBpbmlmcmVlbGltaXQ7IG5yZWYgPSAxO30KCiAgICAgICAgfmxpbGZl
c19hbGxvY2F0b3JfaW5zdGFuY2UoKSB0aHJvdygpOwoKICAgICAgICB2b2lkIGdhcmJhZ2VfY29s
bGVjdGlvbigpIHRocm93KGJhZF9hbGxvYyk7CgoKICAgICAgICBpbnQgSW5jUmVmKCkgeyByZXR1
cm4gKytucmVmOyB9CgogICAgICAgIGludCBEZWNSZWYoKSB7IHJldHVybiAtLW5yZWY7IH0KCgog
ICAgICAgIHZvaWQgKmFsbG9jYXRlKHNpemVfdCBuKSB0aHJvdyhiYWRfYWxsb2MpOwoKICAgICAg
ICB2b2lkIGRlYWxsb2NhdGUodm9pZCAqcCwgc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYyk7Cgog
ICAgICAgIHZvaWQgdW5saW5rX21hbGxvY2xpc3QobWFsbG9jbGlzdCAqeCkgdGhyb3coYmFkX2Fs
bG9jKTsKCgpwcml2YXRlOgogICAgICAgIHZvaWQgKnJlc2VydmVfbmV3X2FyZWEoc2l6ZV90IG4p
IHRocm93KGJhZF9hbGxvYyk7CgogICAgICAgIHZvaWQgZnJlZV9hcmVhKHZvaWQgKnApIHRocm93
KCk7Cgp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIGxpbGZlc19hbGxvY2F0b3IK
ewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CgogICAgICAgIHR5cGVkZWYg
c2l6ZV90IHNpemVfdHlwZTsKCiAgICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90
eXBlOwoKCiAgICAgICAgdHlwZWRlZiBUKiBwb2ludGVyOwoKICAgICAgICB0eXBlZGVmIGNvbnN0
IFQqIGNvbnN0X3BvaW50ZXI7CgogICAgICAgIHR5cGVkZWYgVCYgcmVmZXJlbmNlOwoKICAgICAg
ICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsKCiAgICAgICAgdGVtcGxhdGUgPGNs
YXNzIFU+IHN0cnVjdCByZWJpbmQgeyB0eXBlZGVmIGxpbGZlc19hbGxvY2F0b3I8VT4gb3RoZXI7
IH07Cgpwcml2YXRlOgoKICAgICAgICBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlICppbnN0OwoK
CnB1YmxpYzoKICAgICAgICBsaWxmZXNfYWxsb2NhdG9yKCkgdGhyb3coKSB7IGluc3QgPSBuZXcg
bGlsZmVzX2FsbG9jYXRvcl9pbnN0YW5jZTsgfQoKICAgICAgICB+bGlsZmVzX2FsbG9jYXRvcigp
IHRocm93KCkgeyBpZiggaW5zdCAmJiBpbnN0LT5EZWNSZWYoKSA9PSAwICkgZGVsZXRlIGluc3Q7
IH0KCiAgICAgICAgbGlsZmVzX2FsbG9jYXRvcihjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZ0
KSB0aHJvdygpIHsgaW5zdCA9IHQuaW5zdDsgaW5zdC0+SW5jUmVmKCk7IH0KCgogICAgICAgIHZv
aWQgZGVzdHJveV9hbGxvY2F0b3IoKSB0aHJvdygpIHsgZGVsZXRlIGluc3Q7IGluc3QgPSBfX251
bGw7IH0KCgogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8VD4mIG9wZXJhdG9yPShjb25zdCBsaWxm
ZXNfYWxsb2NhdG9yPFQ+ICZ0KSB0aHJvdygpIHsgaW5zdC0+RGVjUmVmKCk7IGluc3QgPSB0Lmlu
c3Q7IGluc3QtPkluY1JlZigpOyByZXR1cm4gKnRoaXM7IH0KCgogICAgICAgIHRlbXBsYXRlIDxj
bGFzcyBVPiBsaWxmZXNfYWxsb2NhdG9yKGNvbnN0IGxpbGZlc19hbGxvY2F0b3I8VT4gJnQpIHRo
cm93KCkgeyBpbnN0ID0gdC5HZXRJbnN0YW5jZSgpOyBpbnN0LT5JbmNSZWYoKTsgfQoKICAgICAg
ICBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlICpHZXRJbnN0YW5jZSgpIGNvbnN0IHRocm93KCkg
eyByZXR1cm4gaW5zdDsgfQoKCiAgICAgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbikg
dGhyb3coYmFkX2FsbG9jKSB7IHJldHVybiAocG9pbnRlcikgaW5zdC0+YWxsb2NhdGUobiAqIHNp
emVvZihUKSk7IH0KCiAgICAgICAgcG9pbnRlciBhbGxvY2F0ZShzaXplX3R5cGUgbiwgY29uc3Rf
dm9pZF9wIGhpbnQpIHRocm93KGJhZF9hbGxvYykgeyByZXR1cm4gYWxsb2NhdGUobik7IH0KCiAg
ICAgICAgdm9pZCAqYWxsb2NhdGVfYnl0ZXMoc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykgeyBy
ZXR1cm4gaW5zdC0+YWxsb2NhdGUobik7IH0KCgogICAgICAgIHZvaWQgZGVhbGxvY2F0ZShwb2lu
dGVyIHAsIHNpemVfdHlwZSBuKSB0aHJvdyhiYWRfYWxsb2MpIHsgaW5zdC0+ZGVhbGxvY2F0ZShw
LCBuICogc2l6ZW9mKFQpKTsgfQoKICAgICAgICB2b2lkIGRlYWxsb2NhdGVfYnl0ZXModm9pZCAq
cCwgc2l6ZV90IG4pIHRocm93KGJhZF9hbGxvYykgeyByZXR1cm4gaW5zdC0+ZGVhbGxvY2F0ZShw
LCBuKTsgfQoKCiAgICAgICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKSB7IHJl
dHVybiAweDdmZmZmZmZjIC8gc2l6ZW9mKFQpOyB9CgoKICAgICAgICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIHAsIGNvbnN0IFQmIHZhbCkgeyBuZXcocCkgVCh2YWwpOyB9CgogICAgICAgIHZvaWQg
ZGVzdHJveShwb2ludGVyIHApIHsgcC0+flQoKTsgfQoKCiAgICAgICAgcG9pbnRlciBhZGRyZXNz
KHJlZmVyZW5jZSByKSBjb25zdCB7IHJldHVybiAmcjsgfQoKICAgICAgICBjb25zdF9wb2ludGVy
IGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIHIpIGNvbnN0IHsgcmV0dXJuICZyOyB9CgoKICAgICAg
ICB2b2lkIGdjKCkgeyBpbnN0LT5nYXJiYWdlX2NvbGxlY3Rpb24oKTsgfQoKCiAgICAgICAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PShjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZhLCBjb25zdCBs
aWxmZXNfYWxsb2NhdG9yPFQ+ICZiKSB0aHJvdygpIHsgcmV0dXJuIGEuaW5zdCA9PSBiLmluc3Q7
IH0KCiAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IhPShjb25zdCBsaWxmZXNfYWxsb2NhdG9y
PFQ+ICZhLCBjb25zdCBsaWxmZXNfYWxsb2NhdG9yPFQ+ICZiKSB0aHJvdygpIHsgcmV0dXJuIGEu
aW5zdCAhPSBiLmluc3Q7IH0KCgogICAgICAgIGZyaWVuZCBjbGFzcyBsaWxmZXNfYWxsb2NhdG9y
X2luc3RhbmNlOwp9OwojIDIwNCAibWVtYWxsb2MuaCIKaW5saW5lIHZvaWQgKmxpbGZlc19hbGxv
Y2F0b3JfaW5zdGFuY2U6OnJlc2VydmVfbmV3X2FyZWEoc2l6ZV90IHN6KSB0aHJvdyhiYWRfYWxs
b2MpCnsKCiAgICAgICAgdm9pZCAqeCA9IG1hbGxvYyhzeik7CiAgICAgICAgaWYoIHggPT0gX19u
dWxsICkKICAgICAgICAgICAgICAgIHRocm93IGJhZF9hbGxvYygpOwogICAgICAgIHJldHVybiB4
Owp9CgppbmxpbmUgdm9pZCBsaWxmZXNfYWxsb2NhdG9yX2luc3RhbmNlOjpmcmVlX2FyZWEodm9p
ZCAqcCkgdGhyb3coKQp7CgogICAgICAgIGZyZWUocCk7Cn0KIyA0MCAiZnNwLmgiIDIKCgoKCgoK
Y2xhc3MgU2hhcmVMaXN0OwoKY2xhc3MgbWFjaGluZTsKIyA2MCAiZnNwLmgiCmNsYXNzIEZTUAp7
CnByb3RlY3RlZDoKICAgICAgICBjZWxsIGM7CgoKICAgICAgICBlbnVtIG5vaW5pdF9UIHtub2lu
aXR9OwogICAgICAgIEZTUChub2luaXRfVCkgeyB9CgpwdWJsaWM6CiAgICAgICAgZW51bSBJTlZB
TElEX1Qge0NFTExfSU5WQUxJRF99OwoKICAgICAgICBGU1AoSU5WQUxJRF9UKSB7IGMgPSBDRUxM
X0lOVkFMSUQ7IH0KCiAgICAgICAgRlNQKGNvbnN0IEZTUCAmZikgeyBjID0gZi5jOyB9CgogICAg
ICAgIEZTUCAmIG9wZXJhdG9yPShjb25zdCBGU1AgJmYpIHsgYyA9IGYuYzsgcmV0dXJuICp0aGlz
OyB9CgogICAgICAgIEZTUCh2b2lkKSB7IGNvbnN0cnVjdG9yKCk7IH0KICAgICAgICBleHBsaWNp
dCBGU1AobWFjaGluZSAqKSB7IGNvbnN0cnVjdG9yKCk7IH0KICAgICAgICBleHBsaWNpdCBGU1Ao
bWFjaGluZSAmKSB7IGNvbnN0cnVjdG9yKCk7IH0KCiAgICAgICAgZXhwbGljaXQgRlNQKGNlbGxf
cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQogICAgICAgIEZTUChtYWNoaW5lICosIGNlbGxf
cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQogICAgICAgIEZTUChtYWNoaW5lICYsIGNlbGxf
cHRyIGlhKSB7IGNvbnN0cnVjdG9yKGlhKTsgfQoKCgoKICAgICAgICBleHBsaWNpdCBGU1AobWlu
dCBpKSB7IGNvbnN0cnVjdG9yKGkpOyB9CiAgICAgICAgRlNQKG1hY2hpbmUgKiwgbWludCBpKSB7
IGNvbnN0cnVjdG9yKGkpOyB9CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgbWludCBpKSB7IGNvbnN0
cnVjdG9yKGkpOyB9CgogICAgICAgIGV4cGxpY2l0IEZTUChtZmxvYXQgZCkgeyBjb25zdHJ1Y3Rv
cihkKTsgfQogICAgICAgIEZTUChtYWNoaW5lICosIG1mbG9hdCBkKSB7IGNvbnN0cnVjdG9yKGQp
OyB9CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgbWZsb2F0IGQpIHsgY29uc3RydWN0b3IoZCk7IH0K
CiAgICAgICAgZXhwbGljaXQgRlNQKGNvbnN0IGNoYXIgKnMpIHsgY29uc3RydWN0b3Iocyk7IH0K
ICAgICAgICBGU1AobWFjaGluZSAqLCBjb25zdCBjaGFyICpzKSB7IGNvbnN0cnVjdG9yKHMpOyB9
CiAgICAgICAgRlNQKG1hY2hpbmUgJiwgY29uc3QgY2hhciAqcykgeyBjb25zdHJ1Y3RvcihzKTsg
fQoKICAgICAgICBleHBsaWNpdCBGU1AoY29uc3Qgc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMu
Y19zdHIoKSk7IH0KICAgICAgICBGU1AobWFjaGluZSAqLCBjb25zdCBzdHJpbmcgJnMpIHsgY29u
c3RydWN0b3Iocy5jX3N0cigpKTsgfQogICAgICAgIEZTUChtYWNoaW5lICYsIGNvbnN0IHN0cmlu
ZyAmcykgeyBjb25zdHJ1Y3RvcihzLmNfc3RyKCkpOyB9CgogICAgICAgIGV4cGxpY2l0IEZTUChj
b25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMuY19zdHIoKSk7IH0KICAgICAgICBGU1Ao
bWFjaGluZSAqLCBjb25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMuY19zdHIoKSk7IH0K
ICAgICAgICBGU1AobWFjaGluZSAmLCBjb25zdCBsc3RyaW5nICZzKSB7IGNvbnN0cnVjdG9yKHMu
Y19zdHIoKSk7IH0KCiAgICAgICAgRlNQKGNlbGwgaWMpIHsgY29uc3RydWN0b3IoaWMpOyB9CiAg
ICAgICAgRlNQKG1hY2hpbmUgKiwgY2VsbCBpYykgeyBjb25zdHJ1Y3RvcihpYyk7IH0KICAgICAg
ICBGU1AobWFjaGluZSAmLCBjZWxsIGljKSB7IGNvbnN0cnVjdG9yKGljKTsgfQoKCiAgICAgICAg
dm9pZCBjb25zdHJ1Y3Rvcih2b2lkKSB7IGNvbnN0cnVjdG9yKFZBUjJjKFRZUEVfYm90KSk7IH0K
CiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihtaW50IGkpIHsgYyA9IElOVDJjKGkpOyB9CgogICAg
ICAgIHZvaWQgY29uc3RydWN0b3IobWZsb2F0IGQpOwoKCiAgICAgICAgdm9pZCBjb25zdHJ1Y3Rv
cihjb25zdCBjaGFyICpzKTsKCiAgICAgICAgdm9pZCBjb25zdHJ1Y3RvcihjZWxsIGljKSB7IGlm
KCAoKCgoY2VsbF9pbnQpKGljKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2lu
dClUX1BUUiA8PCAwKSkgfHwgKCgoKGNlbGxfaW50KShpYykpICYgKChjZWxsX2ludCkweGYgPDwg
MCkpID09ICgoY2VsbF9pbnQpVF9JTlQgPDwgMCkpICkgYyA9IGljOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IGMg
PSBIZWFwQV9Qb2ludGVyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoSGVhcEFf
UG9pbnRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEhlYXBBX1BvaW50ZXIgPSAoIFBUUjJjKGMyUFRSKEhl
YXBBX1BvaW50ZXIpICsgKGludCkoMSkpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwID0gaWM7IH0gfQoK
ICAgICAgICB2b2lkIGNvbnN0cnVjdG9yKGNlbGxfcHRyIGlwKSB7IGMgPSBQVFIyYyhpcCk7IH0K
CgoKICAgICAgICBtYWNoaW5lICpHZXRNYWNoaW5lKCkgY29uc3QgeyByZXR1cm4gX19udWxsOyB9
CgogICAgICAgIGNlbGxfcHRyIEdldEFkZHJlc3MoKSBjb25zdCB7IDsgcmV0dXJuIGMyUFRSKGMp
OyB9CgogICAgICAgIGNlbGxfcHRyIEdldEFkZHIoKSBjb25zdCB7IHJldHVybiBHZXRBZGRyZXNz
KCk7IH0KCgogICAgICAgIEZTUCBEZXJlZigpOwoKICAgICAgICBGU1AgRGVyZWYoKSBjb25zdDsK
CiAgICAgICAgRlNQIEZvbGxvd050aChpbnQgaSkgY29uc3Q7CgogICAgICAgIGNlbGwgR2V0Q2Vs
bCgpIGNvbnN0IHsgcmV0dXJuIGM7IH0KCiAgICAgICAgY2VsbCBSZWFkQ2VsbCgpOwoKICAgICAg
ICBjZWxsIFJlYWRDZWxsKCkgY29uc3Q7CgoKICAgICAgICBib29sIF9Jc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gYyAhPSBDRUxMX0lOVkFMSUQ7IH0KCiAgICAgICAgYm9vbCBJc1ZhbGlkKCkgY29u
c3QgewogICAgICAgICAgICAgICAgYm9vbCByZXQgPSAoIFJlYWRDZWxsKCkgIT0gQ0VMTF9JTlZB
TElEICk7CiAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgIH0KCiAgICAgICAgYm9v
bCBJc0ludmFsaWQoKSBjb25zdCB7CiAgICAgICAgICAgICAgICBib29sIHJldCA9ICggUmVhZENl
bGwoKSA9PSBDRUxMX0lOVkFMSUQgKTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAg
ICAgfQoKCgogICAgICAgIGNvbnN0IHR5cGUgKkdldFR5cGUoKSBjb25zdCA7CgoKCiAgICAgICAg
Ym9vbCBJc0xlYWYoKSB7IHJldHVybiAhKCgoKGNlbGxfaW50KShSZWFkQ2VsbCgpKSkgJiAoKGNl
bGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1NUUiA8PCAwKSk7IH0KCgogICAgICAg
IGJvb2wgSXNOb2RlKCkgY29uc3QgeyByZXR1cm4gKCgoKGNlbGxfaW50KShSZWFkQ2VsbCgpKSkg
JiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1NUUiA8PCAwKSk7IH0KCgog
ICAgICAgIGJvb2wgSXNTdHIoKSBjb25zdCB7IHJldHVybiAoKCgoY2VsbF9pbnQpKFJlYWRDZWxs
KCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxfaW50KVRfU1RSIDw8IDApKTsg
fQoKICAgICAgICBib29sIElzVmFyKCkgY29uc3QgeyByZXR1cm4gKCgoKGNlbGxfaW50KShSZWFk
Q2VsbCgpKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX1ZBUiA8PCAw
KSk7IH0KCiAgICAgICAgYm9vbCBJc0ludGVnZXIoKSBjb25zdCB7IHJldHVybiAoKCgoY2VsbF9p
bnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxfaW50KVRf
SU5UIDw8IDApKTsgfQoKICAgICAgICBib29sIElzRmxvYXQoKSBjb25zdCB7IHJldHVybiAoKCgo
Y2VsbF9pbnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxf
aW50KVRfRkxPIDw8IDApKTsgfQoKICAgICAgICBib29sIElzQ2hhcigpIGNvbnN0IHsgcmV0dXJu
ICgoKChjZWxsX2ludCkoUmVhZENlbGwoKSkpICYgKChjZWxsX2ludCkweGYgPDwgMCkpID09ICgo
Y2VsbF9pbnQpVF9DSFIgPDwgMCkpOyB9CgogICAgICAgIGJvb2wgSXNTdHJpbmcoKSBjb25zdCB7
IHJldHVybiAoKCgoY2VsbF9pbnQpKFJlYWRDZWxsKCkpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDAp
KSA9PSAoKGNlbGxfaW50KVRfU1RHIDw8IDApKTsgfQoKCiAgICAgICAgbWludCBSZWFkSW50ZWdl
cigpIGNvbnN0IHsgcmV0dXJuIGMySU5UKFJlYWRDZWxsKCkpOyB9CgogICAgICAgIG1mbG9hdCBS
ZWFkRmxvYXQoKSBjb25zdDsKCgogICAgICAgIGxzdHJpbmcgUmVhZFN0cmluZygpIGNvbnN0OwoK
CgogICAgICAgIGJvb2wgQ2hlY2tGZWF0dXJlKGNvbnN0IHR5cGUgKmYpIGNvbnN0IHsgcmV0dXJu
IEdldFR5cGUoKS0+R2V0SW5kZXgoZikgIT0gLTE7IH0KCgpwdWJsaWM6CgogICAgICAgIGJvb2wg
Q29lcmNlKGNvbnN0IHR5cGUgKnQpIHsgcmV0dXJuIENvZXJjZSh0LT5HZXRTZXJpYWxObygpKTsg
fQoKICAgICAgICBib29sIENvZXJjZSh0c2VyaWFsIHRzKTsKCgogICAgICAgIGJvb2wgQ29lcmNl
T3JGYWlsKGNvbnN0IHR5cGUgKnQpIHsgcmV0dXJuIENvZXJjZU9yRmFpbCh0LT5HZXRTZXJpYWxO
bygpKTsgfQoKICAgICAgICBib29sIENvZXJjZU9yRmFpbCh0c2VyaWFsIHRzKTsKCgoKCiAgICAg
ICAgRlNQIEZvbGxvdyhjb25zdCB0eXBlKiB0KSB7IHJldHVybiBGb2xsb3codC0+R2V0U2VyaWFs
Tm8oKSk7IH0KCiAgICAgICAgRlNQIEZvbGxvdyh0c2VyaWFsIGZzKTsKCgoKICAgICAgICBGU1Ag
Rm9sbG93SWZFeGlzdChjb25zdCB0eXBlKiB0KSB7cmV0dXJuIEZvbGxvd0lmRXhpc3QodC0+R2V0
U2VyaWFsTm8oKSk7IH0KCiAgICAgICAgRlNQIEZvbGxvd0lmRXhpc3QodHNlcmlhbCBmcyk7CgoK
CiAgICAgICAgYm9vbCBVbmlmeShGU1AgZik7CgoKCiAgICAgICAgYm9vbCBVbmlmeU9yRmFpbChG
U1ApOwoKCgogICAgICAgIEZTUCBDb3B5KHZvaWQpIGNvbnN0OwoKICAgICAgICBGU1AgUmVDb3B5
KGludCBzaXplKSBjb25zdDsKCiAgICAgICAgRlNQIFJlQ29weShjZWxsX3B0ciBwdHIsIGludCBz
aXplKSBjb25zdDsKCiAgICAgICAgYm9vbCBFcXVpdihjZWxsIGRlc3QpIGNvbnN0OwoKCiAgICAg
ICAgRlNQIERpZmYoY29uc3QgRlNQICZmKSBjb25zdDsKCgpwcm90ZWN0ZWQ6CiAgICAgICAgc3Rh
dGljIGNlbGxfcHRyIENvcHlJbnRlcm5hbChjZWxsX3B0ciwgY2VsbF9wdHIsIGNlbGxfcHRyKTsK
ICAgICAgICBzdGF0aWMgYm9vbCBFcXVpdkludGVybmFsKGNlbGwsY2VsbCxpbnQmKTsKcHVibGlj
OgoKCgoKCgogICAgICAgIG91dGZvcm0gRGlzcGxheUFWTSgpIGNvbnN0OwoKICAgICAgICBvdXRm
b3JtIERpc3BsYXlBVk0oU2hhcmVMaXN0ICZzbCkgY29uc3Q7CgogICAgICAgIG91dGZvcm0gRGlz
cGxheUFWTU1pbmltdW0oKSBjb25zdDsKCiAgICAgICAgb3V0Zm9ybSBEaXNwbGF5QVZNTWluaW11
bShTaGFyZUxpc3QgJiwgY29uc3QgdHlwZSogdCkgY29uc3Q7CiAgICAgICAgb3V0Zm9ybSBEaXNw
bGF5TGlMRmVTKCkgY29uc3Q7CgogICAgICAgIG91dGZvcm0gRGlzcGxheUxpTEZlUyhTaGFyZUxp
c3QgJiwgY29uc3QgdHlwZSAqdCA9IGJvdCkgY29uc3Q7CgogICAgICAgIHN0YXRpYyBjb25zdCBG
U1AgaW52YWxpZDsKfTsKIyAyODUgImZzcC5oIgpjbGFzcyBTaGFyZUxpc3QKewpwdWJsaWM6CiAg
ICAgICAgc3RydWN0IEFkZHJSZWZQYWlyCiAgICAgICAgewogICAgICAgICAgICAgICAgY2VsbF9w
dHIgYWRkcjsKCiAgICAgICAgICAgICAgICBpbnQgcmVmOwoKCiAgICAgICAgICAgICAgICBzdGF0
aWMgaW50IGNtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKCiAgICAgICAgfTsKCnBy
b3RlY3RlZDoKICAgICAgICBtYWNoaW5lICptYWNoOwoKICAgICAgICBWYXJBcnJheTxBZGRyUmVm
UGFpcj4gbWFyazsKCiAgICAgICAgVmFyQXJyYXk8QWRkclJlZlBhaXI+IHNoYXJlOwoKCnB1Ymxp
YzoKICAgICAgICBTaGFyZUxpc3QoKSB7IG1hY2ggPSBfX251bGw7IH0KCgogICAgICAgIGNvbnN0
IFZhckFycmF5PEFkZHJSZWZQYWlyPiAmTWFya0FycmF5KCkgeyByZXR1cm4gbWFyazsgfQoKICAg
ICAgICBjb25zdCBWYXJBcnJheTxBZGRyUmVmUGFpcj4gJlNoYXJlQXJyYXkoKSB7IHJldHVybiBz
aGFyZTsgfQoKCiAgICAgICAgdm9pZCBBZGRNYXJrKEZTUCBmKTsKCiAgICAgICAgdm9pZCBNYWtl
U2hhcmUoKTsKCiAgICAgICAgaW50IFNlYXJjaFNoYXJlKEZTUCBmKTsKCiAgICAgICAgaW50IEdl
dFNoYXJlQ291bnQoaW50IGlkeCkgeyByZXR1cm4gKytzaGFyZVtpZHhdLnJlZjsgfQoKfTsKIyAz
MzkgImZzcC5oIgpjbGFzcyBMaW5lYXJGU1AKewpwcm90ZWN0ZWQ6CiAgICAgICAgY2VsbCBjOwoK
ICAgICAgICB2b2lkIENvbnN0cnVjdG9yKEZTUCBmKTsKCiAgICAgICAgdm9pZCBDb25zdHJ1Y3Rv
cihjb25zdCBMaW5lYXJGU1AgJmYpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBj
ID0gZi5jOyBpZiggKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0g
KChjZWxsX2ludClUX1BUUiA8PCAwKSkgJiYgSXNWYWxpZCgpICkgewoKCgogICAgICAgICAgICAg
ICAgICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoYyk7ICoocC0xKSA9IElOVDJjKGMySU5UKCoo
cC0xKSkrMSk7IH0gfQoKICAgICAgICB2b2lkIENvbnN0cnVjdG9yKEZTUCBmLCBsaWxmZXNfYWxs
b2NhdG9yPGNlbGw+IGFsbG9jKTsKCiAgICAgICAgdm9pZCBDb25zdHJ1Y3Rvcihjb25zdCBMaW5l
YXJGU1AgJmYsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2MpOwoKICAgICAgICB2b2lkIERl
c3RydWN0b3IoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZigg
KCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2ludClU
X1BUUiA8PCAwKSkgJiYgSXNWYWxpZCgpICkgewoKCgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNlbGxfcHRyIHAgPSBjMlBUUihjKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKHAtMSkgPSBJTlQyYyhjMklOVCgqKHAtMSkpLTEpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCBjMklOVCgqKHAtMSkpID09IDAgKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVsZXRlW10gKHAtMik7CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIH0KCgpwdWJsaWM6CiAgICAgICAgTGluZWFyRlNQKCkgeyBj
ID0gQ0VMTF9JTlZBTElEOyB9CgogICAgICAgIExpbmVhckZTUChGU1AgZikgeyBDb25zdHJ1Y3Rv
cihmKTsgfQogICAgICAgIExpbmVhckZTUChjb25zdCBMaW5lYXJGU1AgJmYpIHsgQ29uc3RydWN0
b3IoZik7IH0KCiAgICAgICAgTGluZWFyRlNQKEZTUCBmLCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+
IGFsbG9jKSB7IENvbnN0cnVjdG9yKGYsIGFsbG9jKTsgfQogICAgICAgIExpbmVhckZTUChjb25z
dCBMaW5lYXJGU1AgJmYsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2MpIHsgQ29uc3RydWN0
b3IoZiwgYWxsb2MpOyB9CgoKICAgICAgICB+TGluZWFyRlNQKCkgeyBEZXN0cnVjdG9yKCk7IH0K
CgogICAgICAgIHNpemVfdCBHZXRTaXplKCkgY29uc3QgeyBpZiggKCgoKGNlbGxfaW50KShjKSkg
JiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2ludClUX1BUUiA8PCAwKSkgKSByZXR1
cm4gYzJJTlQoYzJQVFIoYylbLTJdKTsgZWxzZSByZXR1cm4gMDsgfQoKCiAgICAgICAgb3BlcmF0
b3IgY29uc3QgRlNQICYoKSBjb25zdCB7IHJldHVybiAqKGNvbnN0IEZTUCAqKSh2b2lkICopdGhp
czsgfQoKCiAgICAgICAgTGluZWFyRlNQICYgb3BlcmF0b3I9KEZTUCBmKSB7IERlc3RydWN0b3Io
KTsgQ29uc3RydWN0b3IoZik7IHJldHVybiAqdGhpczsgfQogICAgICAgIExpbmVhckZTUCAmIG9w
ZXJhdG9yPShjb25zdCBMaW5lYXJGU1AgJmYpIHsgRGVzdHJ1Y3RvcigpOyBDb25zdHJ1Y3Rvcihm
KTsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgICB2b2lkIERlYWxsb2MobGlsZmVzX2FsbG9jYXRv
cjxjZWxsPiBhbGxvYyk7CgoKICAgICAgICBGU1AgQ29weSgpIGNvbnN0OwoKICAgICAgICBjZWxs
IEdldENlbGwoKSBjb25zdCB7IHJldHVybiBjOyB9CgoKICAgICAgICBjb25zdCB0eXBlICpHZXRU
eXBlKCkgY29uc3QgeyBGU1AgZihjMlBUUihjKSk7IHJldHVybiBmLkdldFR5cGUoKTsgfQoKCiAg
ICAgICAgYm9vbCBJc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gYyAhPSBDRUxMX0lOVkFMSUQ7IH0K
CiAgICAgICAgYm9vbCBJc0ludmFsaWQoKSBjb25zdCB7IHJldHVybiBjID09IENFTExfSU5WQUxJ
RDsgfQoKCiAgICAgICAgYm9vbCBFcXVpdihjb25zdCBMaW5lYXJGU1AgJmYpIGNvbnN0OwoKICAg
ICAgICBib29sIExlc3NUaGFuKGNvbnN0IExpbmVhckZTUCAmZikgY29uc3Q7CgogICAgICAgIGZy
aWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgTGluZWFyRlNQICZhLCBjb25zdCBMaW5lYXJGU1Ag
JmIpIHsgcmV0dXJuIGEuYyA9PSBiLmM7IH0KCgoKICAgICAgICBvdXRmb3JtIERpc3BsYXlBVk0o
KSBjb25zdCB7IHJldHVybiBvcGVyYXRvciBjb25zdCBGU1AgJigpLkRpc3BsYXlBVk0oKTsgfQoK
ICAgICAgICBzdGF0aWMgY29uc3QgTGluZWFyRlNQIGludmFsaWQ7CgogICAgICAgIGZyaWVuZCB1
aW50IEhhc2hGdW5jdGlvbihjb25zdCBMaW5lYXJGU1AgJnApOwoKICAgICAgICBmcmllbmQgY2xh
c3MgaXNlcmlhbGl6ZXI7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBUb2JqLCBjbGFzcyBBbGxvYyA9
IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgTGluZWFyRlNQSGFzaCA6IHB1YmxpYyBIYXNoPExp
bmVhckZTUCwgVG9iaiwgQWxsb2M+CnsKICAgICAgICB0eXBlZGVmIEhhc2g8TGluZWFyRlNQLCBU
b2JqLCBBbGxvYz4gaGFzaF90OwpwdWJsaWM6CiAgICAgICAgICAgICAgICBMaW5lYXJGU1BIYXNo
KCkgOiBIYXNoPExpbmVhckZTUCwgVG9iaiwgQWxsb2M+KCkgeyB9CiAgICAgICAgICAgICAgICBM
aW5lYXJGU1BIYXNoKHVuc2lnbmVkIGksIHR5cGVuYW1lIGhhc2hfdDo6YWxsb2NhdG9yX3QgaWFs
bG9jID0gdHlwZW5hbWUgaGFzaF90OjphbGxvY2F0b3JfdCgpKSA6IEhhc2g8TGluZWFyRlNQLCBU
b2JqLCBBbGxvYz4oaSwgaWFsbG9jKSB7IH0KICAgICAgICAgICAgICAgIExpbmVhckZTUEhhc2go
Y29uc3QgSGFzaDxMaW5lYXJGU1AsIFRvYmosIEFsbG9jPiAmaCkgOiBIYXNoPExpbmVhckZTUCwg
VG9iaiwgQWxsb2M+KGgpIHsgfQogICAgICAgICAgICAgICAgTGluZWFyRlNQSGFzaChjb25zdCBJ
bnRlZ2VySGFzaDxUb2JqPiAmaCkgOiBIYXNoPExpbmVhckZTUCwgVG9iaiwgQWxsb2M+KGgpIHsg
fQp9OwoKdWludCBIYXNoRnVuY3Rpb24oY29uc3QgTGluZWFyRlNQICZwKTsKCgppbmxpbmUgYm9v
bCBIYXNoS2V5RXF1YWwoY29uc3QgTGluZWFyRlNQICZwLCBjb25zdCBMaW5lYXJGU1AgJnEpCnsK
ICAgICAgICByZXR1cm4gcC5FcXVpdihxKTsKfQoKCgpleHRlcm4gIkMiIHZvaWQgYXNtX3JlY29w
eShjZWxsIGZyb20sIGludCBzaXplKTsKZXh0ZXJuICJDIiB2b2lkIGFzbV9yZWNvcHlfdG9fbGlu
ZWFyKGNlbGwgdG8sIGNlbGwgZnJvbSwgaW50IHNpemUpOwpleHRlcm4gIkMiIHZvaWQgYXNtX3Jl
Y29weV9mcm9tX2xpbmVhcihjZWxsIGMpOwoKIyAxICJzc3BleHQuaCIgMQojIDM1ICJzc3BleHQu
aCIKIyAxICJoYXNoLmgiIDEKIyAzNiAic3NwZXh0LmgiIDIKCgojIDEgImZzcC5oIiAxCiMgMzkg
InNzcGV4dC5oIiAyCiMgNjQgInNzcGV4dC5oIgpleHRlcm4gIkMiIGJvb2wgTWFpbkxvb3AoY29k
ZXB0cik7CmV4dGVybiAiQyIgYm9vbCBVbmlmeUxvb3AoY29kZXB0cixjZWxsLGNlbGwpOwojIDc3
ICJzc3BleHQuaCIKY2xhc3MgTGluZWFyRlNQOwoKc3RydWN0IEpFQ0luZm8gewogICAgICAgIExp
bmVhckZTUCBmc3A7CiAgICAgICAgaW50IG5mZWF0dXJlczsKCiAgICAgICAgSkVDSW5mbyhpbnQg
bmYgPSAwKSB7IG5mZWF0dXJlcyA9IG5mOyB9CiAgICAgICAgSkVDSW5mbyhjb25zdCBMaW5lYXJG
U1AgJmRlZiwgaW50IG5mPTAgKTogZnNwKGRlZikgeyBuZmVhdHVyZXMgPSBuZjsgfQp9OwoKZXh0
ZXJuIFRBcnJheTIgPGNvZGVwdHIsIHRzZXJpYWwgLCB0c2VyaWFsPiBDVGFibGU7CmV4dGVybiBU
QXJyYXkgPGNvZGVwdHIsIHRzZXJpYWw+IENUYWJsZV9ib3Q7CmV4dGVybiBUQXJyYXkyIDxjb2Rl
cHRyLCB0c2VyaWFsICwgdHNlcmlhbD4gVVRhYmxlOwpleHRlcm4gVEFycmF5MiA8dHNlcmlhbCwg
dHNlcmlhbCAsIHRzZXJpYWw+IFRUYWJsZTsKZXh0ZXJuIFRBcnJheTIgPHVpbnQsIHRzZXJpYWwg
LCB0c2VyaWFsPiBPVGFibGU7CmV4dGVybiBUQXJyYXkyPGNsYXNzIENvZXJjZUluZm8qLHRzZXJp
YWwsdHNlcmlhbD4gQ0lUYWJsZTsKZXh0ZXJuIFRBcnJheTI8Y2xhc3MgVW5pZnlJbmZvKix0c2Vy
aWFsLHRzZXJpYWw+IFVJVGFibGU7CmV4dGVybiBUQXJyYXlGIEZUYWJsZTsKZXh0ZXJuIFRTaW1w
bGVBcnJheSA8Y2xhc3MgRmVhdHVyZUluZm8qICwgdHNlcmlhbD4gQlRhYmxlOwpleHRlcm4gVFNp
bXBsZUFycmF5IDxKRUNJbmZvICwgdHNlcmlhbD4gRVRhYmxlOwpleHRlcm4gVEFycmF5IDxMaW5l
YXJGU1AsIHRzZXJpYWw+IEF0dHJUYWJsZTsKZXh0ZXJuIFRBcnJheSA8TGluZWFyRlNQLCB0c2Vy
aWFsPiBDb21wVGFibGU7CmV4dGVybiBUQXJyYXkyIDxMaW5lYXJGU1AsIHRzZXJpYWwsIHRzZXJp
YWw+IENvbXBBVGFibGU7CmV4dGVybiBUQXJyYXkyIDxMaW5lYXJGU1AsIHRzZXJpYWwsIHRzZXJp
YWw+IENvbXBVVGFibGU7CmV4dGVybiBjaGFyICoqVE5hbWVzOwpleHRlcm4gaW50IFROYW1lRGVh
bDsKCmV4dGVybiBpbnQgTlR5cGVzOwpleHRlcm4gaW50IE5UeXBlc19vcmlnOwoKZXh0ZXJuIGNv
ZGVwdHIgc3RhcnRfcG9pbnQ7CmV4dGVybiBjb2RlcHRyIHN0YXJ0X3BvaW50X2luaXQ7CiMgMTIw
ICJzc3BleHQuaCIKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2ZhaWw7CmV4dGVybiAiQyIgY29kZSBs
YWJlbF9pbnZhbGlkOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fbm90aGluZzsKZXh0ZXJuICJD
IiBjb2RlIGxhYmVsX21ha2VfY29lcmNlY29kZTsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX21ha2Vf
dW5pZnljb2RlOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfbWFrZV9jb2VyY2Vjb2RlX2NvbXBsZXg7
CmV4dGVybiAiQyIgY29kZSBsYWJlbF9tYWtlX3VuaWZ5Y29kZV9jb21wbGV4OwpleHRlcm4gIkMi
IGNvZGUgbGFiZWxfZHluYW1pYzsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2JlZ2ludW5pZnk7CmV4
dGVybiAiQyIgY29kZSBsYWJlbF9leGl0bG9vcF9mYWlsOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxf
ZXhpdGxvb3Bfc3VjY2VzczsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2dldF9jb21wX2E7CmV4dGVy
biAiQyIgY29kZSBsYWJlbF9nZXRfY29tcF91OwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fY2hn
c3RyOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fY2hnc3RyMjsKZXh0ZXJuICJDIiBjb2RlIGxh
YmVsX2RvX2NvZXJjZTsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2RvX2NvZXJjZTI7CmV4dGVybiAi
QyIgY29kZSBsYWJlbF9kb191bmlmeTE7CmV4dGVybiAiQyIgY29kZSBsYWJlbF9kb191bmlmeTFf
eGNoZzsKZXh0ZXJuICJDIiBjb2RlIGxhYmVsX2RvX3VuaWZ5MjsKZXh0ZXJuICJDIiBjb2RlIGxh
YmVsX2RvX3VuaWZ5Ml94Y2hnOwpleHRlcm4gIkMiIGNvZGUgbGFiZWxfZG9fdW5pZnkzOwpleHRl
cm4gIkMiIGNvZGUgbGFiZWxfZG9fdW5pZnkzX3hjaGc7CmV4dGVybiAiQyIgY29kZSBsYWJlbF9t
YW51YWxfY2hvaWNlcG9pbnQ7CiMgMTU1ICJzc3BleHQuaCIKaW5saW5lIGNlbGwgTG93ZXJDZWxs
KGNlbGwgYSwgY2VsbCBiKSB7CiAgICAgICAgY2VsbF9wdHIgcGEgPSBjMlBUUihhKTsKICAgICAg
ICBjZWxsX3B0ciBwYiA9IGMyUFRSKGIpOwogICAgICAgIGlmIChwYSA8IHBiKSByZXR1cm4gUFRS
MmMocGEpOwogICAgICAgIGVsc2UgcmV0dXJuIFBUUjJjKHBiKTsKfQppbmxpbmUgY2VsbCBVcHBl
ckNlbGwoY2VsbCBhLCBjZWxsIGIpIHsKICAgICAgICBjZWxsX3B0ciBwYSA9IGMyUFRSKGEpOwog
ICAgICAgIGNlbGxfcHRyIHBiID0gYzJQVFIoYik7CiAgICAgICAgaWYgKHBhID4gcGIpIHJldHVy
biBQVFIyYyhwYSk7CiAgICAgICAgZWxzZSByZXR1cm4gUFRSMmMocGIpOwp9CmlubGluZSBpbnQg
Q0RJRkYoY2VsbCBhLCBjZWxsIGIpIHsKICAgICAgICByZXR1cm4gYzJQVFIoYikgLSBjMlBUUihh
KTsKfQppbmxpbmUgaW50IElubmVyKGNlbGwgYywgY2VsbF9wdHIgbWluLCBjZWxsX3B0ciBtYXgp
IHsKICAgICAgICBjZWxsX3B0ciBwID0gYzJQVFIoYyk7CiAgICAgICAgcmV0dXJuIChtaW4gPD0g
cCAmJiBwIDwgbWF4KTsKfQojIDE5MyAic3NwZXh0LmgiCnN0cnVjdCBQZW50cnl7CiAgdHNlcmlh
bCBwbm87CiAgY29kZXB0ciBhZGRyOwp9OwojIDIwNSAic3NwZXh0LmgiCnN0cnVjdCBIQVNIX0lU
RU0gewogICAgICAgIGNlbGwgaW5zdGFuY2U7CiAgICAgICAgY29kZXB0ciBsYWJlbDsKfTsKc3Ry
dWN0IEhBU0hfSVRFTV9UWVBFIHsKICAgICAgICB0c2VyaWFsIHR5cGU7CiAgICAgICAgaW50KiBs
aXN0Owp9OwpzdHJ1Y3QgSEFTSF9JVEVNX0xBQkVMIHsKICAgICAgICBjaGFyKiBsYWJlbF9zdHI7
CiAgICAgICAgY29kZXB0ciBsYWJlbDsKICAgICAgICBjaGFyKiBHZXRLZXkodm9pZCkgeyByZXR1
cm4gbGFiZWxfc3RyOyB9Cn07CnN0cnVjdCBIQVNIX0lORk8gewogICAgICAgIGludCBpbnRfbGVu
OwogICAgICAgIEhBU0hfSVRFTSogaW50X2luZm87CiAgICAgICAgaW50IHN0Z19sZW47CiAgICAg
ICAgSEFTSF9JVEVNKiBzdGdfaW5mbzsKICAgICAgICBpbnQgdHlwZV9sZW47CiAgICAgICAgSEFT
SF9JVEVNX1RZUEUqIHR5cGVfaW5mbzsKICAgICAgICBpbnQgbGFiZWxfbGVuOwogICAgICAgIEhB
U0hfSVRFTV9MQUJFTCogbGFiZWxfaW5mbzsKICAgICAgICBpbnQgbmZlYXR1cmU7Cn07CnN0cnVj
dCBIQVNIX0NMQVVTRUlORk8gewogICAgICAgIGNvZGVwdHIqIGRpc2pfbGFiZWxzOwogICAgICAg
IGludCBuZmVhdHVyZTsKICAgICAgICBpbnQqIGNsYXVzZTsKICAgICAgICBjaGFyKiBrZXk7CiAg
ICAgICAgY2hhciogR2V0S2V5KHZvaWQpIHsgcmV0dXJuIGtleTsgfQp9OwoKc3RydWN0IEhBU0gg
ewpwcml2YXRlOgogICAgICAgIGludCBkZWFsOwogICAgICAgIGludCBtYXNrOwogICAgICAgIEhB
U0hfSVRFTSogaGFzaGVzOwogICAgICAgIGludCBudW1iZXI7CiAgICAgICAgaW50IGlzX2RldGVy
bWluZWQ7CiAgICAgICAgU3RyaW5nSGFzaDxIQVNIX0lURU1fTEFCRUw+IGxhYmVsX2hhc2g7CiAg
ICAgICAgY29kZXB0ciogZGlzal9sYWJlbHM7CiAgICAgICAgSEFTSF9JTkZPKiBpbmZvOwogICAg
ICAgIGludCogYnVpbHRpbl90eXBlX2luZm9bMl07CiAgICAgICAgY2hhciogYm90X3N0cmluZzsK
ICAgICAgICBpbnQgbmZlYXR1cmU7CiAgICAgICAgdm9pZCBFeHBhbmQodm9pZCk7CiAgICAgICAg
aW50IENhbGNIYXNoKGNlbGwpOwogICAgICAgIGludCBDYWxjSGFzaChjZWxsLGNlbGwpOwogICAg
ICAgIEhBU0hfSVRFTSYgX0dldEhhc2goY2VsbCxjZWxsKTsKICAgICAgICBjb2RlcHRyIERldGVy
bWluaXNtKHRzZXJpYWwpOwogICAgICAgIGNvZGVwdHIgTWFrZUNob2ljZUxhYmVsKGNoYXIqLCB0
c2VyaWFsKTsKcHVibGljOgogICAgICAgIGludCBjbGF1c2VsaXN0X2xlbjsKICAgICAgICBIQVNI
KEhBU0hfSU5GTyopOwogICAgICAgIH5IQVNIKCk7CiAgICAgICAgSEFTSF9DTEFVU0VJTkZPKiBH
ZXRDbGF1c2VJbmZvKHRzZXJpYWwpOwogICAgICAgIHZvaWQgU2V0U2VlZChIQVNIX0lURU0pOwog
ICAgICAgIEhBU0hfSVRFTSBHZXRIYXNoKGNlbGwgYSxjZWxsIGIpIHsKICAgICAgICAgICAgICAg
IHJldHVybiBfR2V0SGFzaChhLGIpOwogICAgICAgIH0KICAgICAgICB2b2lkIFNldEFsbFR5cGUo
dHNlcmlhbCoqLCBjaGFyKiwgY2hhcioqKTsKICAgICAgICB2b2lkIEFwcGVuZFR5cGUodHNlcmlh
bCk7Cn07CgpleHRlcm4gc3RydWN0IEhBU0gqIGFsbF9oYXNoW107CmV4dGVybiBzdHJ1Y3QgSEFT
SF9JTkZPKiBhbGxfaGFzaF9pbmZvW107CmV4dGVybiBpbnQgYWxsX2hhc2hfZGVhbDsKCmV4dGVy
biBjb2RlcHRyKiBfZGlzal9sYWJlbDsKZXh0ZXJuIGludCBfbmZlYXR1cmU7CmV4dGVybiBpbnQg
SW5pdGlhbGl6ZU1vZGU7CgpjbGFzcyBUeXBlSW5mbyB7CiAgICAgICAgVHlwZUluZm8oKSB7fTsK
cHVibGljOgogICAgICAgIGxzdHJpbmcgZm5hbWU7CiAgICAgICAgdHNlcmlhbCBmOwogICAgICAg
IGxzdHJpbmcgY25hbWU7CiAgICAgICAgdHNlcmlhbCBjOwogICAgICAgIGludCBwcmlvcml0eTsK
ICAgICAgICBzdGF0aWMgVHlwZUluZm8qIF9uZXcoaW50IHNpemUpIHsKICAgICAgICAgICAgICAg
IFR5cGVJbmZvKiBhciA9IG5ldyBUeXBlSW5mb1tzaXplXTsKICAgICAgICAgICAgICAgIGludCBp
O2ZvciAoaT0wO2k8c2l6ZTtpKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJbaV0uZm5h
bWUuZm9yY2VfaW5pdCgpOwogICAgICAgICAgICAgICAgICAgICAgICBhcltpXS5jbmFtZS5mb3Jj
ZV9pbml0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGFyW2ldLmYgPSBUU19JTlZBTElEOwog
ICAgICAgICAgICAgICAgICAgICAgICBhcltpXS5jID0gVFNfSU5WQUxJRDsKICAgICAgICAgICAg
ICAgICAgICAgICAgYXJbaV0ucHJpb3JpdHkgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgcmV0dXJuIGFyOwogICAgICAgIH0KfTsKCmNsYXNzIEZlYXR1cmVJbmZvIHsKcHVi
bGljOgogICAgICAgIHRzZXJpYWwgZmVhdHVyZTsKICAgICAgICB0c2VyaWFsIHBhcmVudDsKICAg
ICAgICB0c2VyaWFsIGNoaWxkOwogICAgICAgIHNob3J0IGZsYWc7CiAgICAgICAgaW50IHByaW9y
aXR5OwogICAgICAgIGludCBGZWF0dXJlTmV3KHZvaWQpIHsgcmV0dXJuIGZsYWcgJiAxOyB9CiAg
ICAgICAgaW50IENoaWxkTmV3KHZvaWQpIHsgcmV0dXJuIGZsYWcgJiAyOyB9CiAgICAgICAgaW50
IExhc3Qodm9pZCkgeyByZXR1cm4gZmxhZyAmIDQ7IH0KICAgICAgICB2b2lkIFNldEZlYXR1cmVO
ZXcodm9pZCkgeyBmbGFnIHw9IDE7fQogICAgICAgIHZvaWQgU2V0Q2hpbGROZXcodm9pZCkge2Zs
YWcgfD0gMjt9CiAgICAgICAgZnJpZW5kIGludCBvcGVyYXRvcj4oY2xhc3MgRmVhdHVyZUluZm8m
LCBjbGFzcyBGZWF0dXJlSW5mbyYpOwp9OwoKY2xhc3MgQ29lcmNlSW5mbyB7CiAgICAgICAgcHVi
bGljOgogICAgICAgICAgICAgICAgY2VsbCBjb2VyY2VfaGVhZDsKCiAgICAgICAgdm9pZCAqIG9w
ZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiYgYWxsb2MpIHsg
cmV0dXJuIGFsbG9jLmFsbG9jYXRlX2J5dGVzKHNpemUpOyB9Cn07CmNsYXNzIENvZXJjZUluZm8x
IDogcHVibGljIENvZXJjZUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGlu
dCBxdWV1ZV9udW07CiAgICAgICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHM7CiAgICAgICAgICAg
ICAgICBjZWxsX2ludCogcXVldWVfY2VsbHM7Cn07CmNsYXNzIENvZXJjZUluZm8yIDogcHVibGlj
IENvZXJjZUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCBlcXVhbF9u
dW07CiAgICAgICAgICAgICAgICBpbnQqIGVxdWFsX2FkZHM7CiAgICAgICAgICAgICAgICBpbnQg
Y2VsbF9udW07CiAgICAgICAgICAgICAgICBpbnQqIGNlbGxfYWRkczsKICAgICAgICAgICAgICAg
IGNlbGxfaW50KiBjZWxsczsKfTsKY2xhc3MgQ29lcmNlSW5mbzMgOiBwdWJsaWMgQ29lcmNlSW5m
bzIgewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCBxdWV1ZV9udW07CiAgICAg
ICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHM7CiAgICAgICAgICAgICAgICBjZWxsX2ludCogcXVl
dWVfY2VsbHM7Cn07CgpjbGFzcyBVbmlmeUluZm8gewogICAgICAgIHB1YmxpYzoKICAgICAgICAg
ICAgICAgIGNlbGwgdW5pZnlfaGVhZDsKCiAgICAgICAgdm9pZCAqIG9wZXJhdG9yIG5ldyhzaXpl
X3Qgc2l6ZSwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiYgYWxsb2MpIHsgcmV0dXJuIGFsbG9jLmFs
bG9jYXRlX2J5dGVzKHNpemUpOyB9Cn07CmNsYXNzIFVuaWZ5SW5mbzEgOiBwdWJsaWMgVW5pZnlJ
bmZvIHsKICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAg
ICAgIGludCogYWRkczsKICAgICAgICAgICAgICAgIGludCB2cV9uOyBpbnQqIHZxX2FkZHM7IGNl
bGxfaW50KiB2cV9jZWxsczsKfTsKY2xhc3MgVW5pZnlJbmZvMyA6IHB1YmxpYyBVbmlmeUluZm8g
ewogICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgICAgIGludCogYWRkczEsKiBhZGRzMjsKICAg
ICAgICAgICAgICAgIGludCBuMSxuMixuMzsKICAgICAgICAgICAgICAgIGludCBxdWV1ZXM7CiAg
ICAgICAgICAgICAgICBpbnQqIHF1ZXVlX2FkZHMxLCogcXVldWVfYWRkczI7CiAgICAgICAgICAg
ICAgICBjZWxsX2ludCogY2VsbHM7CiAgICAgICAgICAgICAgICBpbnQgbjsKICAgICAgICAgICAg
ICAgIGludCB2cV9uOyBpbnQqIHZxX2FkZHM7IGNlbGxfaW50KiB2cV9jZWxsczsKfTsKCmV4dGVy
biAiQyIgdm9pZCBkZWJ1Z19wcmludChpbnQgbGV2ZWwsY2hhciogZm9ybWF0LC4uLik7CmV4dGVy
biAiQyIgdm9pZCBNYWtlQ29lcmNlQ29kZShjZWxsIGMxLCBjZWxsIGMyKTsKZXh0ZXJuICJDIiB2
b2lkIE1ha2VVbmlmeUNvZGUoY2VsbCBjMSwgY2VsbCBjMik7CmV4dGVybiAiQyIgdm9pZCBNYWtl
Q29lcmNlQ29kZUNvbXBsZXgoY2VsbCBjMSwgY2VsbCBjMik7CmV4dGVybiAiQyIgdm9pZCBNYWtl
VW5pZnlDb2RlQ29tcGxleChjZWxsIGMxLCBjZWxsIGMyKTsKIyA0NTYgImZzcC5oIiAyCgppbmxp
bmUgRlNQIExpbmVhckZTUDo6Q29weSgpIGNvbnN0CnsKICAgICAgICA7CgoKCiAgICAgICAgaWYo
ICEgKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4MyA8PCAwKSkgPT0gKChjZWxsX2lu
dClUX1BUUiA8PCAwKSkgKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKCEgKCgoKGNlbGxf
aW50KShjKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChjZWxsX2ludClUX0lOVCA8PCAw
KSkgKQogICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJJbnRlcm5hbCBlcnJvcjogQ29w
eSBFcnJvciEgYyA9ICIgPDwgYyA8PCBlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIEZTUChj
KTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgICAgIEZTUCBy
ZXQoSGVhcEFfUG9pbnRlcik7CgoKCgoKCiAgICAgICAgICAgICAgICBhc21fcmVjb3B5X2Zyb21f
bGluZWFyKGMpOwogICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICB9Cn0KCmlubGlu
ZSBGU1AgRlNQOjpSZUNvcHkoaW50IHNpemUpIGNvbnN0CnsKICAgICAgICBjZWxsIHRtcCA9IEhl
YXBBX1BvaW50ZXI7CiAgICAgICAgYXNtX3JlY29weShjLCBzaXplKTsKCiAgICAgICAgcmV0dXJu
IEZTUCh0bXApOwp9CiMgNTQgImFsbC5oIiAyCgojIDEgImJ1aWx0aW4yLmgiIDEKCgoKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3NldGptcC5o
IiAzCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZXRqbXAuaCIgMSAzCiMg
MzYgIi91c3IvaW5jbHVkZS9iaXRzL3NldGptcC5oIiAzCnR5cGVkZWYgaW50IF9fam1wX2J1Zls2
XTsKIyAzMSAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9zaWdzZXQuaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9zZXRqbXAuaCIgMiAzCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfX2ptcF9idWZfdGFnCiAgewoKCgoKICAgIF9fam1wX2J1ZiBfX2ptcGJ1ZjsK
ICAgIGludCBfX21hc2tfd2FzX3NhdmVkOwogICAgX19zaWdzZXRfdCBfX3NhdmVkX21hc2s7CiAg
fSBqbXBfYnVmWzFdOwoKCgoKZXh0ZXJuIGludCBzZXRqbXAgKGptcF9idWYgX19lbnYpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBfX3NpZ3NldGptcCAoc3RydWN0IF9fam1wX2J1Zl90YWcg
X19lbnZbMV0sIGludCBfX3NhdmVtYXNrKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX3NldGpt
cCAoc3RydWN0IF9fam1wX2J1Zl90YWcgX19lbnZbMV0pIHRocm93ICgpOwojIDc2ICIvdXNyL2lu
Y2x1ZGUvc2V0am1wLmgiIDMKCgoKCmV4dGVybiB2b2lkIGxvbmdqbXAgKHN0cnVjdCBfX2ptcF9i
dWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX2xvbmdqbXAgKHN0cnVjdCBfX2pt
cF9idWZfdGFnIF9fZW52WzFdLCBpbnQgX192YWwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19qbXBfYnVmX3RhZyBz
aWdqbXBfYnVmWzFdOwojIDEwOCAiL3Vzci9pbmNsdWRlL3NldGptcC5oIiAzCmV4dGVybiB2b2lk
IHNpZ2xvbmdqbXAgKHNpZ2ptcF9idWYgX19lbnYsIGludCBfX3ZhbCkKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKfQojIDkgImJ1aWx0aW4yLmgiIDIKCgoK
ZXh0ZXJuIGNvbnN0IHR5cGUgKiBsaXN0LCAqIGNvbnMsICogbmlsOwpleHRlcm4gY29uc3QgdHlw
ZSAqIGhkLCAqIHRsOwoKZXh0ZXJuIGNvbnN0IHR5cGUgKiBwcmVkOwpleHRlcm4gY29uc3QgdHlw
ZSAqIHRfcHJlZFszMl07CmV4dGVybiBjb25zdCB0eXBlICogcHJlZDA7CmV4dGVybiB0c2VyaWFs
IGZfYXJnWzMyXTsKCmV4dGVybiBjb25zdCB0eXBlICogdF9pbnQ7CmV4dGVybiBjb25zdCB0eXBl
ICogdF9jaHI7CgpleHRlcm4gY29uc3QgdHlwZSAqIHRfZmVhdHVyZTsKZXh0ZXJuIGNvbnN0IHR5
cGUgKiB0X2VxdWFsOwpleHRlcm4gdHNlcmlhbCBuZXdfZmVhdHVyZV90eXBlOwpleHRlcm4gdHNl
cmlhbCBmZWF0bmFtZV9zZXJpYWwsIGFwcHR5cGVfc2VyaWFsLCBwcmlvcml0eV9zZXJpYWw7CmV4
dGVybiB0c2VyaWFsIGZlYXRtb2Rfc2VyaWFsLCBhcHBtb2Rfc2VyaWFsOwoKCmV4dGVybiBjb25z
dCB0eXBlICogdF9uZXd0eXBlOwpleHRlcm4gaW50IG1heGFyZzsKCmV4dGVybiBqbXBfYnVmIGhh
bHRfYnVmOwpleHRlcm4gaW50IGV4aXRjb2RlOwoKZXh0ZXJuIGNvbnN0IHR5cGUqIG5ld3R5cGVf
ZmVhdHVyZShsc3RyaW5nKTsKIyA1NiAiYWxsLmgiIDIKIyAxICJtb2R1bGUuaCIgMQojIDI3ICJt
b2R1bGUuaCIKY2xhc3MgdHlwZTsKY2xhc3MgbWFjaGluZTsKCgojIDEgImhhc2guaCIgMQojIDMy
ICJtb2R1bGUuaCIgMgoKCmV4dGVybiAiQyIgY2xhc3MgbW9kdWxlKiBsYWJlbF9jdXJyZW50X21v
ZHVsZTsKIyA5MSAibW9kdWxlLmgiCmNsYXNzIG1vZHVsZQp7CnB1YmxpYzoKICAgICAgICBlbnVt
IG5ld19tb2R1bGVfdHlwZQoKICAgICAgICB7CiAgICAgICAgICAgICAgICBOTVRfTk9ORSA9IDAs
CiAgICAgICAgICAgICAgICBOTVRfSU5DTFVERSA9IDEsCiAgICAgICAgICAgICAgICBOTVRfRU5T
VVJFID0gMiwKICAgICAgICAgICAgICAgIE5NVF9FTlNVUkVfSU5fUFJPRyA9IDMsCiAgICAgICAg
ICAgICAgICBOTVRfQ09OU1VMVCA9IDQsCiAgICAgICAgICAgICAgICBOTVRfSU5JVElBTElaRSA9
IDgsCiAgICAgICAgICAgICAgICBOTVRfQlVJTFRJTiA9IDksCiAgICAgICAgICAgICAgICBOTVRf
RU5TVVJFX1dJVEhPVVRfQlVJTFRJTiA9IDEwLAogICAgICAgICAgICAgICAgTk1UX0VOU1VSRV9X
SVRIT1VUX0JVSUxUSU5fSU5fUFJPRyA9IDExCiAgICAgICAgfTsKCnByb3RlY3RlZDoKICAgICAg
ICBzdGQ6OnN0cmluZyBuYW1lOwoKICAgICAgICBzdGQ6OnN0cmluZyBkZWZuYW1lOwoKICAgICAg
ICBTdHJpbmdIYXNoPHR5cGU+IGhhc2g7CgogICAgICAgIFZhckFycmF5PG1vZHVsZSAqPiByZWV4
cG9ydGxpc3Q7CgoKICAgICAgICBWYXJBcnJheTxtb2R1bGUgKj4gbm9leHBvcnRsaXN0OwoKCiAg
ICAgICAgbW9kdWxlICpwcmV2X21vZHVsZTsKCiAgICAgICAgYm9vbCBJbnRlcmZhY2VNb2RlOwoK
ICAgICAgICBuZXdfbW9kdWxlX3R5cGUgbm10OwoKCiAgICAgICAgc3RhdGljIFN0cmluZ0hhc2g8
bW9kdWxlPiBtb2R1bGVsaXN0X2hhc2g7CgogICAgICAgIHN0YXRpYyBWYXJBcnJheTxtb2R1bGUq
PiBtb2R1bGVfc3RhY2s7CgogICAgICAgIHN0YXRpYyBpbnQgbW9kdWxlX3N0YWNrX3BvaW50OwoK
CiAgICAgICAgc3RhdGljIG1vZHVsZSAqbV91c2VyOwoKICAgICAgICBzdGF0aWMgbW9kdWxlICpt
X2NvcmU7CgogICAgICAgIHN0YXRpYyBtb2R1bGUgKm1fYnVpbHRpbjsKCgogICAgICAgIHN0YXRp
YyBtb2R1bGUgKipvcmlnaW5hbF9tb2R1bGVzOwoKICAgICAgICBzdGF0aWMgaW50IG9yaWdpbmFs
X2xlbjsKCgogICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBtb2R1bGVfcHJlZml4OwoKCnByaXZh
dGU6CiAgICAgICAgc3RhdGljIHZvaWQgaW5pdCgpOwoKICAgICAgICBzdGF0aWMgdm9pZCB0ZXJt
KCk7CgogICAgICAgIHN0YXRpYyB2b2lkIGluaXQyKCk7CgogICAgICAgIHN0YXRpYyBJbml0RnVu
Y3Rpb24gSUY7CiAgICAgICAgc3RhdGljIEluaXRGdW5jdGlvbiBJRjI7CiAgICAgICAgc3RhdGlj
IFRlcm1GdW5jdGlvbiBURjsKCgpwdWJsaWM6CiAgICAgICAgbW9kdWxlKGNvbnN0IGNoYXIgKmlu
YW1lLCBuZXdfbW9kdWxlX3R5cGUgaW5tdCA9IE5NVF9OT05FKTsKICAgICAgICB+bW9kdWxlKCkg
eyB9CgoKCgogICAgICAgIGJvb2wgSXNSZWdpc3RlcmVkKCkgeyByZXR1cm4gbmFtZSAhPSAiIjsg
fQoKCiAgICAgICAgdm9pZCBSZWdpc3Rlcihjb25zdCBzdHJpbmcgJnN0cikgeyBpZiggSXNSZWdp
c3RlcmVkKCkgKSBfQWJvcnQoKCJEdXBsaWNhdGVkIG1vZHVsZSBuYW1lIHJlZ2lzdGVyIiksICJt
b2R1bGUuaCIsIDE3Mik7IHN0cmluZyBzdHIyID0gc3RyOyBpZiggc3RyID09ICIiICkgc3RyMiA9
IGRlZm5hbWU7IG5hbWUgPSBtb2R1bGVfcHJlZml4ICsgc3RyMjsgbW9kdWxlbGlzdF9oYXNoLkFk
ZE9yUmVwbGFjZSh0aGlzKTsgfQoKICAgICAgICB2b2lkIFJlZ2lzdGVyKCkgeyBSZWdpc3Rlcigi
Iik7IH0KCgogICAgICAgIGNvbnN0IGNoYXIgKkdldEtleSgpIGNvbnN0IHsgcmV0dXJuIG5hbWUu
Y19zdHIoKTsgfQoKICAgICAgICBjb25zdCBzdHJpbmcgJkdldE5hbWUoKSBjb25zdCB7IHJldHVy
biBuYW1lOyB9CgogICAgICAgIGNvbnN0IHN0cmluZyAmR2V0RGVmTmFtZSgpIGNvbnN0IHsgcmV0
dXJuIGRlZm5hbWU7IH0KCgogICAgICAgIHZvaWQgQWRkKHR5cGUgKnQpIHtpZiggISBJc1JlZ2lz
dGVyZWQoKSApIFJlZ2lzdGVyKCk7IGhhc2guQWRkT3JSZXBsYWNlKHQpOyB9CgogICAgICAgIHR5
cGUgKlNlYXJjaChjb25zdCBjaGFyICpzdHIpIGNvbnN0IHsgcmV0dXJuIGhhc2guRmluZChzdHIp
OyB9CiAgICAgICAgdHlwZSAqU2VhcmNoKHN0cmluZyBzKSBjb25zdCB7IHJldHVybiBoYXNoLkZp
bmQocy5jX3N0cigpKTsgfQoKCiAgICAgICAgYm9vbCBJc0V4cG9ydGluZyhjb25zdCB0eXBlICp0
KSBjb25zdDsKCiAgICAgICAgYm9vbCBJc1VzYWJsZShjb25zdCB0eXBlICp0KSBjb25zdDsKCgog
ICAgICAgIHZvaWQgU2V0SW50ZXJmYWNlTW9kZShib29sIGZsYWcpIHsgSW50ZXJmYWNlTW9kZSA9
IGZsYWc7IH0KCiAgICAgICAgYm9vbCBHZXRJbnRlcmZhY2VNb2RlKHZvaWQpIGNvbnN0IHsgcmV0
dXJuIEludGVyZmFjZU1vZGU7IH0KCiAgICAgICAgbmV3X21vZHVsZV90eXBlIEdldE1vZHVsZVR5
cGUoKSBjb25zdHsgcmV0dXJuIG5tdDsgfQoKCiAgICAgICAgdm9pZCBTZXRQcmV2TW9kdWxlKG1v
ZHVsZSAqbW9kKSB7IHByZXZfbW9kdWxlID0gbW9kOyB9CgogICAgICAgIG1vZHVsZSAqIEdldFBy
ZXZNb2R1bGUoKSB7IHJldHVybiBwcmV2X21vZHVsZTsgfQoKCiAgICAgICAgc3RhdGljIHZvaWQg
U2V0TW9kdWxlUHJlZml4KHN0ZDo6c3RyaW5nIHByZWZpeG5hbWUpIHsgbW9kdWxlX3ByZWZpeCA9
IHByZWZpeG5hbWU7IH0KCiAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6c3RyaW5nICYgR2V0TW9k
dWxlUHJlZml4KHZvaWQpIHtyZXR1cm4gbW9kdWxlX3ByZWZpeDt9CgoKICAgICAgICB2b2lkIElt
cG9ydChtb2R1bGUgKm1vZCwgYm9vbCByZWV4cG9ydCk7CgogICAgICAgIHZvaWQgSW1wb3J0KG1v
ZHVsZSAqbW9kKSB7IEltcG9ydChtb2QsIEdldEludGVyZmFjZU1vZGUoKSk7IH0KCgogICAgICAg
IHN0YXRpYyB2b2lkIFNldEN1cnJlbnRNb2R1bGUobW9kdWxlICptb2QpIHsgbGFiZWxfY3VycmVu
dF9tb2R1bGUgPSBtb2Q7Cn0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqU2VhcmNoTW9kdWxlKGNv
bnN0IGNoYXIgKm5hbWUpIHsgaWYoICpuYW1lID09ICdcMCcpIHJldHVybiBDdXJyZW50TW9kdWxl
KCk7IGVsc2UgeyBtb2R1bGUgKm0gPSBtb2R1bGVsaXN0X2hhc2guRmluZChtb2R1bGVfcHJlZml4
ICsgbmFtZSk7IHJldHVybiBtID8gbSA6IG1vZHVsZWxpc3RfaGFzaC5GaW5kKG5hbWUpOyB9fQog
ICAgICAgIHN0YXRpYyBtb2R1bGUgKlNlYXJjaE1vZHVsZShzdHJpbmcgcykgeyByZXR1cm4gU2Vh
cmNoTW9kdWxlKHMuY19zdHIoKSk7Cn0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqQ29yZU1vZHVs
ZSgpIHsgcmV0dXJuIG1fY29yZTsgfQoKICAgICAgICBzdGF0aWMgbW9kdWxlICpCdWlsdGluTW9k
dWxlKCkgeyByZXR1cm4gbV9idWlsdGluOyB9CgogICAgICAgIHN0YXRpYyBtb2R1bGUgKlVzZXJN
b2R1bGUoKSB7IHJldHVybiBtX3VzZXI7IH0KCiAgICAgICAgc3RhdGljIG1vZHVsZSAqQ3VycmVu
dE1vZHVsZSgpIHsgcmV0dXJuIGxhYmVsX2N1cnJlbnRfbW9kdWxlOyB9CgogICAgICAgIHN0YXRp
YyBtb2R1bGUgKk9yaWdpbmFsTW9kdWxlKGludCBuKSB7IGlmIChuIDwgb3JpZ2luYWxfbGVuKSBy
ZXR1cm4gb3JpZ2luYWxfbW9kdWxlc1tuXTsgcmV0dXJuIF9fbnVsbDsgfQoKICAgICAgICBzdGF0
aWMgdm9pZCBQdXNoTW9kdWxlKG1vZHVsZSogbW9kKSB7CiAgICAgICAgICAgICAgICBpZiAobW9k
dWxlX3N0YWNrX3BvaW50IDwgbW9kdWxlX3N0YWNrLkdldFNpemUoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgbW9kdWxlX3N0YWNrW21vZHVsZV9zdGFja19wb2ludF0gPSBtb2Q7CiAgICAgICAg
ICAgICAgICBlbHNlCgogICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfc3RhY2suTmV4dCgp
ID0gbW9kOwogICAgICAgICAgICAgICAgbW9kdWxlX3N0YWNrX3BvaW50Kys7CiAgICAgICAgfQoK
ICAgICAgICBzdGF0aWMgbW9kdWxlICpQb3BNb2R1bGUodm9pZCkgewogICAgICAgICAgICAgICAg
aWYgKG1vZHVsZV9zdGFja19wb2ludCA9PSAwKSByZXR1cm4gMDsKICAgICAgICAgICAgICAgIGVs
c2UgcmV0dXJuIG1vZHVsZV9zdGFja1stLW1vZHVsZV9zdGFja19wb2ludF07CiAgICAgICAgfQoK
CgoKICAgICAgICBzdGF0aWMgdm9pZCBMaXN0TW9kdWxlcygpOwoKICAgICAgICB2b2lkIFNob3dM
aXN0KHZvaWQpOwoKfTsKIyA1NyAiYWxsLmgiIDIKIyAyMiAiYXJyYXkuY3BwIiAyCgojIDEgImJ1
aWx0aW4uaCIgMQojIDEwICJidWlsdGluLmgiCiMgMSAiYnVpbHRpbnRhYmxlLmgiIDEKIyAxOSAi
YnVpbHRpbnRhYmxlLmgiCmVudW0gQnVpbHRpblR5cGUgewogIEJVSUxUSU5fUFJFRCwKICBCVUlM
VElOX0RJUkVDVElWRSwKICBCVUlMVElOX1BSRURfV0lUSF9NT0RVTEUsCiAgQlVJTFRJTl9QUkVE
X09WRVJMT0FELAogIEJVSUxUSU5fUFJFRF9XSVRIX05BTUUsCiAgQlVJTFRJTl9BUklUSCwKICBC
VUlMVElOX0FSSVRIX1VOQVJZLAogIEJVSUxUSU5fVFlQRV9GMiwKICBCVUlMVElOX1RZUEVfRiwK
ICBCVUlMVElOX1RZUEUsCn07CgoKY2xhc3MgYnVpbHRpbl90YWJsZXsKCiAgYnVpbHRpbl90YWJs
ZSAqbmV4dDsKCiAgYnVpbHRpbl90YWJsZSAqcHJldmlvdXM7CgogIHN0YXRpYyBidWlsdGluX3Rh
YmxlICpsYXN0OwoKICBzdGF0aWMgaW50IGNvdW50ZXI7Cgpwcm90ZWN0ZWQ6CiAgc3RyaW5nIG5h
bWU7CgogIHN0cmluZyBmaWxlbmFtZTsKCiAgQnVpbHRpblR5cGUgYnVpbHRpbnR5cGU7CgoKcHVi
bGljOgogIGJ1aWx0aW5fdGFibGUoc3RyaW5nIGlfbmFtZSAsc3RyaW5nIGlfZmlsZW5hbWUgLCBC
dWlsdGluVHlwZSBpX2J1aWx0aW50eXBlKTsKCiAgfmJ1aWx0aW5fdGFibGUoKTsKCiAgdmlydHVh
bCB2b2lkIFNob3coKXtjb3V0IDw8ICJidWlsdGluX3RhYmxlIFNob3coKS4uLiI8PCBlbmRsO30K
ICBzdHJpbmcgY29uc3QgR2V0TmFtZSgpeyByZXR1cm4gbmFtZTt9CiAgdmlydHVhbCBpbnQgY29u
c3QgR2V0QXJpdHkoKSB7IHJldHVybiAtMTsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldElk
TmFtZSgpIHsgcmV0dXJuICIiOyB9CiAgdmlydHVhbCBzdHJpbmcgY29uc3QgR2V0UE5hbWUoKSB7
IHJldHVybiAiIjsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldEZlYXR1cmUoKSB7IHJldHVy
biAiIjsgfQogIHZpcnR1YWwgc3RyaW5nIGNvbnN0IEdldFR5cGVOYW1lKCkgeyByZXR1cm4gIiI7
IH0KICBidWlsdGluX3RhYmxlKiBHZXROZXh0KCl7cmV0dXJuIG5leHQ7fQogIGJ1aWx0aW5fdGFi
bGUqIEdldFByZXZpb3VzKCl7cmV0dXJuIHByZXZpb3VzO30KICB2b2lkIFNldE5leHQoYnVpbHRp
bl90YWJsZSAqaXQpeyBuZXh0ID0gaXQ7IH0KICBzdHJpbmcgY29uc3QgR2V0RmlsZW5hbWUoKXsg
cmV0dXJuIGZpbGVuYW1lO30KICBCdWlsdGluVHlwZSBjb25zdCBHZXRCdWlsdGluVHlwZSgpeyBy
ZXR1cm4gYnVpbHRpbnR5cGU7fQogIHN0YXRpYyBidWlsdGluX3RhYmxlKiBTZWFyY2goY29uc3Qg
c3RyaW5nIG5hbWUpewogICAgYnVpbHRpbl90YWJsZSAqaXQgPSBidWlsdGluX3RhYmxlOjpHZXRG
aXJzdCgpOwogICAgd2hpbGUoaXQgIT0gX19udWxsKXsKICAgICAgaWYobmFtZSA9PSBpdC0+R2V0
TmFtZSgpKQogICAgICAgIHJldHVybiBpdDsKICAgICAgZWxzZQogICAgICAgIGl0ID0gaXQtPkdl
dE5leHQoKTsKICAgIH0KICAgIHJldHVybiBfX251bGw7CiAgfQogIHN0YXRpYyBidWlsdGluX3Rh
YmxlKiBHZXRGaXJzdCgpewoKICAgIGJ1aWx0aW5fdGFibGUgKml0ID0gYnVpbHRpbl90YWJsZTo6
R2V0TGFzdCgpOwoKICAgIHdoaWxlKGl0ICE9IF9fbnVsbCl7CgogICAgICBpZihpdC0+R2V0UHJl
dmlvdXMoKSA9PSBfX251bGwpCiAgICAgICAgcmV0dXJuIGl0OwogICAgICBlbHNlCiAgICAgICAg
aXQgPSBpdC0+R2V0UHJldmlvdXMoKTsKICAgIH0KCiAgICByZXR1cm4gaXQ7CiAgfQogIHN0YXRp
YyBidWlsdGluX3RhYmxlKiBHZXRMYXN0KCl7cmV0dXJuIGxhc3Q7fQogIHN0YXRpYyBzdHJpbmcg
Y2Fub25pY2FsKHN0cmluZyBzdHIpOwogIHN0YXRpYyB2b2lkIFNob3dBbGwoKTsKfTsKCgpjbGFz
cyBidWlsdGluX3ByZWRfdGFibGU6IHB1YmxpYyBidWlsdGluX3RhYmxlewogIHN0cmluZyBpZG5h
bWU7CgogIHN0cmluZyBwbmFtZTsKCiAgaW50IGFyaXR5OwoKCnB1YmxpYzoKICBidWlsdGluX3By
ZWRfdGFibGUoc3RyaW5nIGlfbmFtZSwgc3RyaW5nIGlfaWRuYW1lLCBzdHJpbmcgaV9wbmFtZSwg
aW50IGlfYXJpdHksc3RyaW5nIGlfZmlsZW5hbWUsIEJ1aWx0aW5UeXBlIGlfYnVpbHRpbnR5cGUp
OwoKICB+YnVpbHRpbl9wcmVkX3RhYmxlKCk7CgogIHZvaWQgU2hvdygpOwogIHN0cmluZyBjb25z
dCBHZXRJZE5hbWUoKXsgcmV0dXJuIGlkbmFtZTt9CiAgc3RyaW5nIGNvbnN0IEdldFBOYW1lKCl7
IHJldHVybiBwbmFtZTt9CiAgaW50IGNvbnN0IEdldEFyaXR5KCl7IHJldHVybiBhcml0eTt9Cgp9
OwoKCmNsYXNzIGJ1aWx0aW5fdHlwZV90YWJsZTogcHVibGljIGJ1aWx0aW5fdGFibGV7CiAgc3Ry
aW5nIGlkbmFtZTsKCiAgc3RyaW5nIGZlYXQ7CgoKcHVibGljOgogIGJ1aWx0aW5fdHlwZV90YWJs
ZShzdHJpbmcgaV90bmFtZSAsIHN0cmluZyBpX2lkbmFtZSwgc3RyaW5nIGlfZmVhdCwgc3RyaW5n
IGlfZmlsZW5hbWUsQnVpbHRpblR5cGUgaV9idWlsdGludHlwZSk7CgogIH5idWlsdGluX3R5cGVf
dGFibGUoKTsKCiAgdm9pZCBTaG93KCk7CiAgc3RyaW5nIGNvbnN0IEdldElkTmFtZSgpeyByZXR1
cm4gaWRuYW1lO30KICBzdHJpbmcgY29uc3QgR2V0VHlwZU5hbWUoKXsgcmV0dXJuIG5hbWU7fQog
IHN0cmluZyBjb25zdCBHZXRGZWF0dXJlKCl7IHJldHVybiBmZWF0O30KfTsKIyAxMSAiYnVpbHRp
bi5oIiAyCiMgMjg0ICJidWlsdGluLmgiCmNsYXNzIG1hY2hpbmUgewogICAgICAgIGJvb2wgcmV0
OwpwdWJsaWM6CiAgICAgICAgbWFjaGluZSh2b2lkKSB7IHJldCA9IHRydWU7fQogICAgICAgIGJv
b2wgcmV0Y29kZSh2b2lkKSB7IHJldHVybiByZXQ7fQogICAgICAgIHZvaWQgRmFpbCh2b2lkKSB7
IHJldCA9IGZhbHNlO30KfTsKIyAyNCAiYXJyYXkuY3BwIiAyCgojIDEgInNlcmlhbGl6ZS5oIiAx
CiMgMjggInNlcmlhbGl6ZS5oIgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMSAzCiMg
NjUgIi91c3IvaW5jbHVkZS9jKysvMy4yL21hcCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF90cmVlLmgiIDEgMwojIDkxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBfUmJfdHJlZV9jb2xvciB7IF9NX3Jl
ZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsKCiAgc3RydWN0IF9SYl90cmVlX25vZGVfYmFz
ZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CgogICAgX1Ji
X3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFzZV9wdHIgX01fcGFyZW50OwogICAgX0Jhc2Vf
cHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01fcmlnaHQ7CgogICAgc3RhdGljIF9CYXNlX3B0
cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQogICAgewogICAgICB3aGlsZSAoX194LT5f
TV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0K
CiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19tYXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7
CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAg
ICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAg
IHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQogICAgewog
ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CiAgICAgIF9WYWwg
X01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgog
IHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9iYXNlOjpfQmFzZV9wdHIgX0Jhc2VfcHRyOwog
ICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCiAgICBfQmFzZV9wdHIgX01f
bm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9k
ZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+
X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01fbm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAg
ICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgICB9CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAg
ICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9yaWdodCkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAgICAgX195ID0gX195LT5fTV9wYXJl
bnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kp
CiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgfQogICAgfQoKICAgIHZvaWQKICAg
IF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfTV9y
ZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUp
CiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX3JpZ2h0OwogICAgICBlbHNlIGlmIChfTV9u
b2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9N
X25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAg
ICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgX01fbm9kZSA9IF9feTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195ID0gX01f
bm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICAgICAg
ICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgfQogICAgICAgICAgX01fbm9kZSA9
IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIHN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6
IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCiAgICB7CiAgICAgIHR5cGVkZWYgX1ZhbCB2
YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9Q
dHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwg
X1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNv
bnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAgY29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4gX1NlbGY7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtfdHlwZTsKCiAgICAgIF9SYl90cmVlX2l0ZXJh
dG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9k
ZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVyYXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkg
eyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7
IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3Bl
cmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg
ICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAg
IF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgX1NlbGYgX190bXAg
PSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAg
ICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVyYXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsg
cmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgogICAgICBvcGVyYXRvci0tKGludCkKICAgICAg
ewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICAgICAgX01fZGVjcmVtZW50KCk7CiAg
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Zh
bCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGluZSBib29sCiAgICBvcGVy
YXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBf
X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAg
ICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBf
X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBj
b25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBf
X3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVmLCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwg
X1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwg
X1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1Zh
bCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9W
YWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBj
b25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl
OyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9i
YXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgICBfX3gtPl9NX3JpZ2h0ID0gX195LT5f
TV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAhPTApCiAgICAgIF9feS0+X01fbGVmdC0+X01f
cGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBp
ZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX194ID09
IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9
IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAg
X195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxp
bmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwg
X1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSog
X195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICAg
IGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAgIF9feS0+X01fcmlnaHQtPl9NX3BhcmVudCA9
IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9
PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9N
X3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsK
ICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICBfX3ktPl9N
X3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9p
ZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVf
bm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9feC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICB3
aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAgICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xv
ciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5f
TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgICAgIHsKICAgICAgICAgICAgX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdo
dDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9i
bGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAg
ICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAg
ICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAo
X194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgICAg
IF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAg
ICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsK
ICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01f
cGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBlbHNl
CiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5f
TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3kt
Pl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01f
Y29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0
KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9w
YXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19y
b290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01f
cGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0
ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAg
fQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jvb3QtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg
fQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNlKgogIF9SYl90cmVlX3JlYmFsYW5jZV9mb3Jf
ZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3osCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yaWdodG1vc3QpCiAgewogICAg
X1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f
eCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogICAgaWYgKF9f
eS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgZWxzZQogICAg
ICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAg
ICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAg
ICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX2xl
ZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgIH0KICAgIGlmIChfX3kg
IT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195Owog
ICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01fbGVmdDsKICAgICAgICBpZiAoX195ICE9IF9f
ei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9N
X3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3Bh
cmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAg
ICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICAgICAgICBfX3otPl9NX3Jp
Z2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAg
X194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9f
cm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBf
X3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgICAgICBlbHNl
CiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICAgICAgX195LT5f
TV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgICAgICBzdGQ6OnN3YXAoX195LT5fTV9jb2xv
ciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195ID0gX196OwoKICAgICAgfQogICAgZWxzZQog
ICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgIGlmIChf
X3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFyZW50OwogICAgICAgIGlm
IChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19yb290ID0gX194OwogICAgICAgIGVsc2UKICAg
ICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgICAgIF9f
ei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICAgICAgaWYgKF9fbGVmdG1vc3QgPT0g
X196KQogICAgICAgICAgaWYgKF9fei0+X01fcmlnaHQgPT0gMCkKICAgICAgICAgICAgX19sZWZ0
bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19sZWZ0
bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOwogICAgICAgIGlmIChf
X3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBpZiAoX196LT5fTV9sZWZ0ID09IDApCiAgICAg
ICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICAgICAgZWxzZQogICAg
ICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gp
OwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xvciAhPSBfTV9yZWQpCiAgICAgIHsKICAgICAg
ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBf
TV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJl
bnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2Js
YWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsK
ICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAg
ICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAg
ICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5f
TV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3gg
PSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+
X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMAogICAgICAg
ICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVm
dCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICAg
ICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBf
X3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAg
ICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgaWYg
KF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29s
b3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194
X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAg
ICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAg
ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfUmJf
dHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAg
X193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9y
aWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAgICAgICAgICAgIChfX3ctPl9N
X2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9
PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01f
Y29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAg
ICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAgfHwgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9
PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBp
ZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAg
ICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAg
ICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3csIF9fcm9vdCk7CiAgICAgICAgICAgICAg
ICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwog
ICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAg
ICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01f
bGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgaWYgKF9feCkgX194LT5fTV9j
b2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICByZXR1cm4gX195OwogIH0KCgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNz
PgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZQogICAgewogICAgcHVibGljOgogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3I7IH0KCiAgICAgIF9SYl90cmVlX2Fs
bG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfTV9ub2RlX2FsbG9j
YXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVuYW1l
IF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlw
ZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPiogX01f
aGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsg
cmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAg
IF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgICB7IF9NX25vZGVfYWxs
b2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAs
IF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Fs
bG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwog
ICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2Nh
dG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3Jf
dHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICBfUmJfdHJlZV9u
b2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46Ol9BbGxvY190eXBlCiAgICAgIF9BbGxvY190
eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0
dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9wdXRf
bm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkgeyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShf
X3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8
X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJh
aXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgewogICAgICB0eXBlZGVmIF9S
Yl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAgIF9BbGxvYywgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jhc2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICAgICAgX1JiX3RyZWVfYmFz
ZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFk
ZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5fUmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9k
ZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBh
cmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJl
ZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlw
ZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxvYz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgog
ICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVm
IF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVfbm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5
cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlwZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAg
IHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsK
ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5
cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlwZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6
ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAg
ICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpn
ZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9n
ZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9NX3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFz
ZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25z
dCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01f
Z2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9N
X3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg
ICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBfTGlua190eXBlCiAgICAgIF9NX2Ns
b25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9fdG1w
ID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9N
X2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAg
ICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAg
ICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9MaW5rX3R5cGUgX19wKQogICAgICB7CiAgICAg
ICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9f
cCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFy
ZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5rX3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25z
dCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9CgogICAgICBf
TGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBl
JikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yaWdo
dG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7
IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194
KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBf
TGlua190eXBlJgogICAgICBfU19yaWdodChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5r
X3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAg
IF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9N
X3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtf
dHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBj
b25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZh
bHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAgIHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAg
ICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAg
ICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0
dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5
cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJiko
X194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19wYXJl
bnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7
IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAgICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkg
eyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0
aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlP
ZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShfX3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90
cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtf
dHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9T
X21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJf
dHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5
cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBlIF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5r
X3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9CgogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwg
cG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVf
dHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICBjb25zdF9pdGVyYXRv
cjsKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf
cmV2ZXJzZV9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y
PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHByaXZhdGU6CiAgICAgIGl0ZXJhdG9yCiAgICAgIF9N
X2luc2VydChfQmFzZV9wdHIgX194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBf
X3YpOwoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu
a190eXBlIF9fcCk7CgogICAgICB2b2lkCiAgICAgIF9NX2VyYXNlKF9MaW5rX3R5cGUgX194KTsK
CiAgICBwdWJsaWM6CgogICAgICBfUmJfdHJlZSgpCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3Jf
dHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoKQogICAgICB7IF9NX2Vt
cHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29t
cCkKICAgICAgICA6IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBf
TV9rZXlfY29tcGFyZShfX2NvbXApCiAgICAgIHsgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOyB9Cgog
ICAgICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKQogICAgICAgIDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv
bXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1Ji
X3RyZWUoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz4mIF9feCkKICAgICAgICA6IF9CYXNlKF9feC5nZXRfYWxsb2NhdG9yKCkpLCBfTV9ub2RlX2Nv
dW50KDApLAogICAgICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9feC5fTV9rZXlfY29tcGFy
ZSkKICAgICAgewogICAgICAgIGlmIChfX3guX01fcm9vdCgpID09IDApCiAgICAgICAgICBfTV9l
bXB0eV9pbml0aWFsaXplKCk7CiAgICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBf
U19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwogICAgICAgICAgICBfTV9yb290KCkgPSBfTV9j
b3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgIF9NX2xlZnRtb3N0KCkg
PSBfU19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1Nf
bWF4aW11bShfTV9yb290KCkpOwogICAgICAgICAgfQogICAgICAgIF9NX25vZGVfY291bnQgPSBf
X3guX01fbm9kZV9jb3VudDsKICAgICAgfQoKICAgICAgfl9SYl90cmVlKCkgeyBjbGVhcigpOyB9
CgogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYK
ICAgICAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gpOwoKICAgIHByaXZhdGU6CiAgICAgIHZvaWQgX01fZW1wdHlfaW5p
dGlhbGl6ZSgpCiAgICAgIHsKICAgICAgICBfU19jb2xvcihfTV9oZWFkZXIpID0gX01fcmVkOwoK
ICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7
CiAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgIH0KCiAgICBwdWJsaWM6
CgogICAgICBfQ29tcGFyZQogICAgICBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX2tleV9j
b21wYXJlOyB9CgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpIHsgcmV0dXJuIF9NX2xlZnRt
b3N0KCk7IH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gX01fbGVmdG1vc3QoKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkgeyByZXR1cm4g
X01faGVhZGVyOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdCB7IHJl
dHVybiBfTV9oZWFkZXI7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkg
eyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihlbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVy
YXRvcihlbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIHsgcmV0
dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl
cmF0b3IKICAgICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io
YmVnaW4oKSk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9u
b2RlX2NvdW50ID09IDA7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gX01fbm9kZV9jb3VudDsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkg
Y29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQoKICAgICAgdm9pZAogICAgICBzd2FwKF9S
Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3QpCiAgICAg
IHsKICAgICAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01faGVhZGVyKTsKICAgICAgICBz
dGQ6OnN3YXAoX01fbm9kZV9jb3VudCwgX190Ll9NX25vZGVfY291bnQpOwogICAgICAgIHN0ZDo6
c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICAgICAgfQoKCiAgICAg
IHBhaXI8aXRlcmF0b3IsYm9vbD4KICAgICAgaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBl
JiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9f
cG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICBpdGVyYXRvcgogICAgICBp
bnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KTsK
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAg
IGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KTsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2b2lk
CiAgICAgIGluc2VydF9lcXVhbChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRv
ciBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsK
CiAgICAgIHNpemVfdHlwZQogICAgICBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg
IHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KTsKCiAg
ICAgIHZvaWQKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtleV90
eXBlKiBfX2xhc3QpOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpCiAgICAgIHsKICAgICAgICBp
ZiAoX01fbm9kZV9jb3VudCAhPSAwKQogICAgICAgICAgewogICAgICAgICAgICBfTV9lcmFzZShf
TV9yb290KCkpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAg
ICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9NX2hlYWRl
cjsKICAgICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICB9CiAgICAgIH0KCgog
ICAgICBpdGVyYXRvcgogICAgICBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg
IGl0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CgogICAgICBpdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194
KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0OwoKICAgICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4KICAgICAgZXF1YWxf
cmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBj
b25zdF9pdGVyYXRvcj4KICAgICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CgoKICAgICAgYm9vbAogICAgICBfX3JiX3ZlcmlmeSgpIGNvbnN0OwogICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu
ZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJl
dHVybiBfX3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICBlcXVhbChfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0
b3I8KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9
PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVu
YW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXks
X1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkK
ICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK
ICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkKICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAg
ICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3ggPCBf
X3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh
bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKICAgIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIG9wZXJhdG9y
PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194KQogICAgewogICAgICBpZiAodGhpcyAhPSAmX194KQogICAgICAgIHsKCiAgICAgICAgICBj
bGVhcigpOwogICAgICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICAgICAgICBfTV9rZXlfY29t
cGFyZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgICAgICAgIGlmIChfX3guX01fcm9vdCgpID09
IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSAwOwogICAgICAgICAg
ICAgIF9NX2xlZnRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0
KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194Ll9NX3Jvb3QoKSwgX01faGVh
ZGVyKTsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290KCkp
OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShfTV9yb290KCkpOwog
ICAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9p
bnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBjb25zdCBfVmFsJiBfX3YpCiAg
ICB7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87CiAgICAgIF9MaW5r
X3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgICAgIF9MaW5rX3R5cGUgX196OwoKICAg
ICAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgICAgIF9NX2tleV9j
b21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKQogICAgICAgIHsKICAgICAg
ICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBfU19sZWZ0KF9feSkgPSBf
X3o7CgogICAgICAgICAgaWYgKF9feSA9PSBfTV9oZWFkZXIpCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBfTV9yb290KCkgPSBfX3o7CiAgICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBf
X3o7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgp
KQogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHsKICAgICAgICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7CiAgICAgICAgICBf
U19yaWdodChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01fcmlnaHRtb3N0KCkp
CiAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgIH0KICAgICAgX1NfcGFy
ZW50KF9feikgPSBfX3k7CiAgICAgIF9TX2xlZnQoX196KSA9IDA7CiAgICAgIF9TX3JpZ2h0KF9f
eikgPSAwOwogICAgICBfUmJfdHJlZV9yZWJhbGFuY2UoX196LCBfTV9oZWFkZXItPl9NX3BhcmVu
dCk7CiAgICAgICsrX01fbm9kZV9jb3VudDsKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feik7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L
ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVhbChjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAg
IF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jv
b3QoKTsKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9feSA9IF9f
eDsKICAgICAgICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICAg
ICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9fdik7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl
LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBwYWly
PHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjppdGVyYXRvciwKICAgIGJvb2w+CiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWwmIF9fdikKICAg
IHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194
ID0gX01fcm9vdCgpOwogICAgICBib29sIF9fY29tcCA9IHRydWU7CiAgICAgIHdoaWxlIChfX3gg
IT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX2NvbXAgPSBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKTsKICAgICAgICAg
IF9feCA9IF9fY29tcCA/IF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQog
ICAgICBpdGVyYXRvciBfX2ogPSBpdGVyYXRvcihfX3kpOwogICAgICBpZiAoX19jb21wKQogICAg
ICAgIGlmIChfX2ogPT0gYmVnaW4oKSkKICAgICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJv
b2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgICAgZWxzZQogICAgICAg
ICAgLS1fX2o7CiAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX19qLl9NX25vZGUpLCBf
S2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9N
X2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9y
LGJvb2w+KF9faiwgZmFsc2UpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv
bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWws
IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksIF9WYWwsIF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPjo6CiAgICBpbnNlcnRfdW5p
cXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9WYWwmIF9fdikKICAgIHsKICAgICAgaWYg
KF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXItPl9NX2xlZnQpCiAgICAgICAgewoKICAg
ICAgICAgIGlmIChzaXplKCkgPiAwICYmCiAgICAgICAgICAgICAgX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAgICAgICAgICAg
IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs
IF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShf
X3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlcikKICAgICAgICB7CgogICAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tl
eShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHJldHVy
biBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgaXRlcmF0b3IgX19iZWZvcmUgPSBfX3Bvc2l0aW9uOwog
ICAgICAgICAgLS1fX2JlZm9yZTsKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXko
X19iZWZvcmUuX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkKICAgICAgICAgICAgICAmJiBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9N
X25vZGUpID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9fYmVmb3Jl
Ll9NX25vZGUsIF9fdik7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJu
IF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsK
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91
bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGluc2VydF9lcXVh
bChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChf
X3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAg
ICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgICFfTV9rZXlfY29tcGFyZShfU19r
ZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAg
cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg
X192KTsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192
KTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFk
ZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUo
KShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgICAgICAgcmV0dXJuIF9NX2lu
c2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
cmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsK
ICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19i
ZWZvcmU7CiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg
X1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpKQogICAgICAgICAgICAgICYmICFfTV9rZXlfY29tcGFy
ZShfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlm
IChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJu
IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bv
c2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJ
PgogICAgICB2b2lkCiAgICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPjo6
CiAgICAgIGluc2VydF9lcXVhbChfSUkgX19maXJzdCwgX0lJIF9fbGFzdCkKICAgICAgewogICAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAgIGluc2Vy
dF9lcXVhbCgqX19maXJzdCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw
ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ21wLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CiAgICB2b2lkCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShfSUkgX19m
aXJzdCwgX0lJIF9fbGFzdCkKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgIGluc2VydF91bmlxdWUoKl9fZmlyc3QpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjplcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9
CiAgICAgICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX19wb3Np
dGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX3JpZ2h0KTsK
ICAgICAgZGVzdHJveV9ub2RlKF9feSk7CiAgICAgIC0tX01fbm9kZV9jb3VudDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpz
aXplX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjplcmFzZShjb25zdCBfS2V5JiBfX3gpCiAgICB7CiAgICAgIHBhaXI8aXRlcmF0b3IsaXRl
cmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9feCk7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0
YW5jZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogICAgICBlcmFzZShfX3AuZmlyc3QsIF9fcC5z
ZWNvbmQpOwogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBf
S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9Lb1YsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlu
a190eXBlIF9fcCkKICAgIHsKCiAgICAgIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2Rl
KF9feCk7CiAgICAgIF9fdG9wLT5fTV9wYXJlbnQgPSBfX3A7CgogICAgICB0cnkKICAgICAgICB7
CiAgICAgICAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAgICAgICAgX190b3AtPl9NX3JpZ2h0
ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICAgICAgICBfX3AgPSBfX3RvcDsK
ICAgICAgICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICAgICAgICB3aGlsZSAoX194ICE9IDAp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9NX2Nsb25lX25v
ZGUoX194KTsKICAgICAgICAgICAgICBfX3AtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgICAgICAg
X195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAg
ICAgICAgICAgICAgICBfX3ktPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3kp
OwogICAgICAgICAgICAgIF9fcCA9IF9feTsKICAgICAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9f
eCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAg
ICAgICAgICBfTV9lcmFzZShfX3RvcCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAg
IHJldHVybiBfX3RvcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfTV9lcmFzZShfTGlua190eXBlIF9feCkKICAgIHsKCiAg
ICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfTV9lcmFzZShfU19yaWdo
dChfX3gpKTsKICAgICAgICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgICAg
ICAgZGVzdHJveV9ub2RlKF9feCk7CiAgICAgICAgICBfX3ggPSBfX3k7CiAgICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5
T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgewog
ICAgICBpZiAoX19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgICAgICBj
bGVhcigpOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFz
ZShfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBf
VmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwg
dHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXJhc2UoY29uc3QgX0tleSogX19maXJzdCwgY29u
c3QgX0tleSogX19sYXN0KQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAg
ICAgICAgZXJhc2UoKl9fZmlyc3QrKyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9W
YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9L
ZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9f
aykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICgh
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9f
eCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChf
X3gpOwoKICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgcmV0dXJuIChf
X2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkg
PwogICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBf
Q29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0
IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7
CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICB3aGlsZSAoX194ICE9IDAp
CiAgICAgICB7CiAgICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykp
CiAgICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwogICAgICAgfQogICAgIGNvbnN0X2l0ZXJh
dG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICAgcmV0dXJuIChfX2ogPT0gZW5kKCkg
fHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAgICAgZW5k
KCkgOiBfX2o7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWws
IHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBjb3VudChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBl
cXVhbF9yYW5nZShfX2spOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0
LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1Ji
X3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJf
Ym91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194
ICE9IDApCiAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAg
ICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAg
ICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl
eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46OgogICAgbG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAog
ICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBf
X3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKCFfTV9r
ZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgICAgIF9feSA9IF9feCwgX194ID0g
X1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7
CgogICAgICByZXR1cm4gY29uc3RfaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAg
X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBw
ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAo
X194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQog
ICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAg
ICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBpdGVyYXRvcihfX3kpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6CiAgICB1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spIGNvbnN0
CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBl
IF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoX01f
a2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9
IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gp
OwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg
ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUKICAgIHBh
aXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46Oml0ZXJhdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgogICAgX1JiX3RyZWU8X0tleSxfVmFs
LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZXF1YWxfcmFuZ2UoY29uc3QgX0tl
eSYgX19rKQogICAgeyByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxvd2VyX2JvdW5k
KF9fayksIHVwcGVyX2JvdW5kKF9faykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5
cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUKICBwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXks
IF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25z
dF9pdGVyYXRvcj4KICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9j
PgogIDo6ZXF1YWxfcmFuZ2UoY29uc3QgX0tleSYgX19rKSBjb25zdAogIHsKICAgIHJldHVybiBw
YWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9f
aykpOwogIH0KCiAgaW5saW5lIGludAogIF9fYmxhY2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNl
KiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSogX19yb290KQogIHsKICAgIGlmIChfX25vZGUg
PT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICBpbnQgX19zdW0gPSAwOwogICAgZG8KICAgICAgewog
ICAgICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9NX2JsYWNrKQogICAgICAgICAgKytfX3N1
bTsKICAgICAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgICAgIGJyZWFrOwogICAgICAg
IF9fbm9kZSA9IF9fbm9kZS0+X01fcGFyZW50OwogICAgICB9CiAgICB3aGlsZSAoMSk7CiAgICBy
ZXR1cm4gX19zdW07CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs
LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw
ZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl
LF9Db21wYXJlLF9BbGxvYz46Ol9fcmJfdmVyaWZ5KCkgY29uc3QKICAgIHsKICAgIGlmIChfTV9u
b2RlX2NvdW50ID09IDAgfHwgYmVnaW4oKSA9PSBlbmQoKSkKICAgICAgcmV0dXJuIF9NX25vZGVf
Y291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgICAgX01faGVhZGVyLT5fTV9s
ZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRlcjsKCiAg
ICBpbnQgX19sZW4gPSBfX2JsYWNrX2NvdW50KF9NX2xlZnRtb3N0KCksIF9NX3Jvb3QoKSk7CiAg
ICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVuZCgpOyArK19f
aXQpCiAgICAgIHsKICAgICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX2l0Ll9N
X25vZGU7CiAgICAgICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICAgICAgX0xp
bmtfdHlwZSBfX1IgPSBfU19yaWdodChfX3gpOwoKICAgICAgICBpZiAoX194LT5fTV9jb2xvciA9
PSBfTV9yZWQpCiAgICAgICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9NX3JlZCkK
ICAgICAgICAgICAgICB8fCAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX01fcmVkKSkKICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9T
X2tleShfX3gpLCBfU19rZXkoX19MKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
aWYgKF9fUiAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX19SKSwgX1Nfa2V5KF9feCkpKQogICAg
ICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tf
Y291bnQoX194LCBfTV9yb290KCkpICE9IF9fbGVuKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICB9CgogICAgaWYgKF9NX2xlZnRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t
aW5pbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfTV9yaWdodG1v
c3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01fcm9vdCgpKSkKICAgICAg
cmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgICB9Cn0KIyA2NyAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAu
aCIgMSAzCiMgNjYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCm5hbWVz
cGFjZSBzdGQKewojIDc3ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tl
eT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBf
VHA+ID4gPgpjbGFzcyBtYXAKewoKIAogIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5IGtleV90
eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRfdHlwZTsK
ICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Nv
bXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs
YXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAgICBfQ29t
cGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChfX2MpIHt9
CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9feCwgY29u
c3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5maXJzdCwg
X195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90
eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90eXBl
Piwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJs
aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5
cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5
cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXplX3R5
cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNlX3R5
cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxs
b2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK
ICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX3Qu
aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig
X19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90
Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8X0tleSxf
VHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwgX1RwLCBf
Q29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJldHVy
biAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBf
TV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7IHJl
dHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlwZSBn
ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoK
CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogIHJldmVyc2VfaXRl
cmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoK
CgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoK
CgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5y
ZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0K
CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoKICBzaXpl
X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAyMjEg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgX1RwJiBvcGVyYXRvcltd
KGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9f
ayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBrZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0
KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFsdWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICBy
ZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CgogIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDQgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixib29sPiBpbnNl
cnQoY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVl
KF9feCk7IH0KIyAyNjEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg
aXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gp
CiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KCgoKCgoK
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf
dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIv
Yml0cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsgX01f
dC5lcmFzZShfX3Bvc2l0aW9uKTsgfQojIDI5NyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfbWFwLmgiIDMKICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1
cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgMzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9tYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0
KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2b2lkIGNsZWFy
KCkgeyBfTV90LmNsZWFyKCk7IH0KIyAzMzIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs
X21hcC5oIiAzCiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBf
TV90LmZpbmQoX194KTsgfQojIDM0NSAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFw
LmgiIDMKICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsg
cmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiMgMzU0ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRz
L3N0bF9tYXAuaCIgMwogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0K
IyAzNjkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgaXRlcmF0b3Ig
bG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90Lmxvd2VyX2JvdW5k
KF9feCk7IH0KIyAzODIgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAg
Y29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiMgMzkzICIvdXNyL2luY2x1ZGUv
YysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOyB9CiMgNDAzICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIHVwcGVy
X2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVy
X2JvdW5kKF9feCk7CiAgfQojIDQyMyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFw
LmgiIDMKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlw
ZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyA0NDMgIi91
c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRv
cixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFz
cyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3Bl
cmF0b3I9PSAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mLAogICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7CiAgdGVtcGxhdGUgPGNs
YXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBv
cGVyYXRvcjwgKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s
aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0Fs
bG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf
VHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0o
Y29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShf
X3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OCAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvbWFwIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1h
cC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2Mg
PSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv
cjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg
X195KTsKIyA5MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgpjbGFzcyBtdWx0aW1hcAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYgX0tleSBr
ZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5
cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVfdHlwZTsKICB0eXBlZGVm
IF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21wYXJlIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJpZW5kIGNs
YXNzIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgcHJvdGVjdGVkOgogICAg
X0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19j
KSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90eXBlJiBfX3gs
IGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1cm4gY29tcChfX3guZmly
c3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlwZWRlZiBfUmJfdHJlZTxr
ZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1ZV90
eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90Owpw
dWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRv
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNl
X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFy
ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7IH0KICBleHBsaWNpdCBtdWx0aW1hcChjb25zdCBfQ29t
cGFyZSYgX19jb21wLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxv
Y2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF9lcXVhbChfX2ZpcnN0LCBfX2xhc3QpOyB9
CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX0Nv
bXBhcmUmIF9fY29tcCwKICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxs
b2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyBfTV90Lmluc2VydF9lcXVh
bChfX2ZpcnN0LCBfX2xhc3QpOyB9CiAgbXVsdGltYXAoY29uc3QgbXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHsgfQoKICBtdWx0aW1hcDxf
S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAgIHJl
dHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJldHVy
biBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25zdCB7
IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3JfdHlw
ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0K
CgoKCgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKCiAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KCgoK
CgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgoKICBjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgcmV2ZXJz
ZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CgoKCgoKCiAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LnJiZWdpbigp
OyB9CgoKCgoKCiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gX01fdC5yZW5kKCk7
IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBf
TV90LnJlbmQoKTsgfQoKCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHko
KTsgfQoKCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQoK
CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9
CgogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsg
X01fdC5zd2FwKF9feC5fTV90KTsgfQojIDI0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9z
dGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gp
IHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAyNTkgIi91c3IvaW5jbHVkZS9j
KysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNl
cnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiMgMjcwICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y
PgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiMgMjg0
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBlcmFz
ZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KIyAyOTcg
Ii91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBzaXplX3R5cGUg
ZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMg
MzA5ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgdm9pZCBl
cmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2Uo
X19maXJzdCwgX19sYXN0KTsgfQoKCgoKCgogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsg
fQojIDMzMiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7
IH0KIyAzNDUgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBj
b25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZmluZChfX3gpOyB9CgoKCgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBf
X3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQojIDM2NSAiL3Vzci9pbmNsdWRl
L2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzc4
ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgY29uc3RfaXRl
cmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CgoKCgoKCiAgaXRlcmF0b3IgdXBwZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KCgoK
CgoKCiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiMgNDEzICIvdXNyL2lu
Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxpdGVyYXRvcixpdGVy
YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu
ZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDMxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0
bF9tdWx0aW1hcC5oIiAzCiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1
YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1
YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xh
c3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGlt
YXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNs
YXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChj
b25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5f
TV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBt
dWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3gg
PT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kg
PCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9f
eSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAh
KF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAs
X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2OSAiL3Vz
ci9pbmNsdWRlL2MrKy8zLjIvbWFwIiAyIDMKIyAyOSAic2VyaWFsaXplLmgiIDIKIyAxICIvdXNy
L2luY2x1ZGUvYysrLzMuMi9zZXQiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYysrLzMuMi9zZXQi
IDMKCgojIDEgIi91c3IvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3NldC5oIiAxIDMKIyA2NiAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfc2V0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAg
ICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4gPgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xh
c3Mgc2V0CnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBl
ZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwogIHR5
cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVl
PGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICBfSWRlbnRpdHk8dmFsdWVf
dHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9wb2ludGVyIHBvaW50
ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0
X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3Ig
aXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNv
bnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6
OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm
IHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAg
c2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQg
c2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRv
cl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9y
IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBh
bGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgc2V0KF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29t
cCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAg
ICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFz
dCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90
KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIG9wZXJhdG9yPShjb25z
dCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0gX194Ll9N
X3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29u
c3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21w
KCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJl
Z2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig
cmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0
IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBf
TV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYg
X194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5z
ZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFpcjx0eXBlbmFtZSBfUmVwX3R5cGU6
Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91bmlxdWUoX194KTsKICAgIHJldHVy
biBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIH0KICBpdGVy
YXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7
CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsK
ICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24s
IF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy
dChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9N
X3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJh
dG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRv
ciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlv
bik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1
cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9y
IF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX2ZpcnN0LCAo
X1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigp
OyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAg
IHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgpID8gMCA6IDE7CiAgfQoKCgogIGl0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7
IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgY29uc3Rf
aXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0
dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29u
c3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9
CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9CiAgcGFpcjxpdGVyYXRvcixp
dGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9N
X3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVy
YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJu
IF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjIwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL3N0bF9zZXQuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xhc3Mg
X0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mLCBj
b25zdCBzZXQ8X0sxLF9DMSxfQTE+Jik7CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0Mx
LCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBzZXQ8X0sxLF9DMSxf
QTE+JiwgY29uc3Qgc2V0PF9LMSxfQzEsX0ExPiYpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01f
dCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBzZXQ8X0tleSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi
b29sIG9wZXJhdG9yIT0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHNldDxf
S2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcjw9KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
IHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBzZXQ8
X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSB2b2lkIHN3YXAoc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAg
ICAgICAgIHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7
Cn0KCn0KIyA2OCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvc2V0IiAyIDMKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aXNldC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9zdGxfbXVsdGlzZXQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgIGNsYXNz
IF9BbGxvYyA9IGFsbG9jYXRvcjxfS2V5PiA+CmNsYXNzIG11bHRpc2V0OwoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp
OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xh
c3MgX0FsbG9jPgpjbGFzcyBtdWx0aXNldAp7CgogCiAgOwoKcHVibGljOgoKCgogIHR5cGVkZWYg
X0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21w
YXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0
ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAg
ICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw
ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGlzZXQoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh
dG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtdWx0aXNldChjb25zdCBfQ29tcGFyZSYgX19jb21w
LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0
b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkp
CiAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIG11bHRpc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21w
LAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgp
KQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9f
bGFzdCk7IH0KCiAgbXVsdGlzZXQoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIDogX01fdChfX3guX01fdCkge30KCiAgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxs
b2M+JgogIG9wZXJhdG9yPShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f
eCkgewogICAgX01fdCA9IF9feC5fTV90OwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICBrZXlf
Y29tcGFyZSBrZXlfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQogIHZh
bHVlX2NvbXBhcmUgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsg
fQogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV90Lmdl
dF9hbGxvY2F0b3IoKTsgfQoKICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
YmVnaW4oKTsgfQogIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0K
ICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmJlZ2luKCk7
IH0KICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsg
fQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5
cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9z
aXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhfc2l6ZSgpOyB9CiAgdm9pZCBzd2FwKG11bHRp
c2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0K
CgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBf
TV90Lmluc2VydF9lcXVhbChfX3gpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19w
b3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF9l
cXVhbCgoX1JlcF9pdGVyYXRvciYpX19wb3NpdGlvbiwgX194KTsKICB9CgogIHRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90
LmVyYXNlKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uKTsKICB9CiAgc2l6ZV90eXBlIGVyYXNl
KGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVyYXNlKF9feCk7CiAgfQog
IHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIF9NX3Qu
ZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fZmlyc3QsIChfUmVwX2l0ZXJhdG9yJilfX2xhc3QpOwog
IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBzaXplX3R5cGUgY291bnQo
Y29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5jb3VudChfX3gpOyB9CgoK
CiAgaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQo
X194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Qg
eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBpdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBr
ZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBj
b25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3Vu
ZChjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gp
OwogIH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBj
b25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICBwYWlyPGl0ZXJh
dG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSB7CiAgICByZXR1
cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0
X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KIyAyMjEgIi91c3IvaW5jbHVkZS9jKysv
My4yL2JpdHMvc3RsX211bHRpc2V0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBf
QzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtdWx0aXNldDxf
SzEsX0MxLF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9L
MSxfQzEsX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9DMSwgY2xhc3MgX0Ex
PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+JiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYpOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v
bCBvcGVyYXRvcjwoY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog
IHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21w
YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195
KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGlzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgbXVsdGlzZXQ8X0tleSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjkgIi91c3IvaW5j
bHVkZS9jKysvMy4yL3NldCIgMiAzCiMgMzAgInNlcmlhbGl6ZS5oIiAyCiMgNDggInNlcmlhbGl6
ZS5oIgpjbGFzcyBvc2VyaWFsaXplcgp7CiAgICAgICAgb3N0cmVhbSYgb3M7CgogICAgICAgIHNl
dDx0c2VyaWFsPiBzZXJpYWxpemVkOwoKICAgICAgICB2b2lkIG91dHB1dCggdWludDMyX3QgbCAp
OwoKICAgICAgICB2b2lkIGNoZWNrX3BhcmVudF9zZXJpYWxpemVkKHRzZXJpYWwgcyk7CgoKcHVi
bGljOgogICAgICAgIG9zZXJpYWxpemVyKG9zdHJlYW0mIGlvcyk7CgogICAgICAgIH5vc2VyaWFs
aXplcigpOwoKCiAgICAgICAgb3NlcmlhbGl6ZXImIG9wZXJhdG9yIDw8KGNlbGwgYyk7CgogICAg
ICAgIG9zZXJpYWxpemVyJiBvcGVyYXRvciA8PChMaW5lYXJGU1AgZik7Cgp9OwojIDgzICJzZXJp
YWxpemUuaCIKY2xhc3MgaXNlcmlhbGl6ZXIKewogICAgICAgIGlzdHJlYW0mIGlzOwoKICAgICAg
ICBtYXA8dHNlcmlhbCx0c2VyaWFsPiBzZXJpYWxtYXA7CgoKICAgICAgICB1aW50MzJfdCBpbnB1
dCgpOwoKCnB1YmxpYzoKICAgICAgICBpc2VyaWFsaXplcihpc3RyZWFtJiBpaXMpOwoKICAgICAg
ICB+aXNlcmlhbGl6ZXIoKSB7IH0KCgogICAgICAgIGlzZXJpYWxpemVyJiBvcGVyYXRvciA+Pihj
ZWxsICZjKTsKCiAgICAgICAgaXNlcmlhbGl6ZXImIG9wZXJhdG9yID4+KExpbmVhckZTUCAmZik7
Cgp9OwojIDI2ICJhcnJheS5jcHAiIDIKCiMgMSAiYXJyYXkuaCIgMQojIDEzICJhcnJheS5oIgpl
bnVtIER1bW15S2V5CnsKICAgICAgICBkdW1teXZhbAp9OwoKCnRlbXBsYXRlIDxjbGFzcyBUb2Jq
LCBjbGFzcyBBbGxvYyA9IGFsbG9jYXRvcjxUb2JqICo+ID4KY2xhc3MgUHNldWRvSGFzaAp7CnB1
YmxpYzoKICAgICAgICB0eXBlZGVmIEFsbG9jIGFsbG9jYXRvcl90OwogICAgICAgIHR5cGVkZWYg
VG9iaiBvYmpfdDsKCnByaXZhdGU6CiAgICAgICAgVG9iaiAqKnRhYmxlOwogICAgICAgIGludCBi
YXNlOwogICAgICAgIGludCBzaXplOwogICAgICAgIGFsbG9jYXRvcl90IGFsbG9jOwoKcHVibGlj
OgogICAgICAgIFBzZXVkb0hhc2goaW50IGluaXNpemUsIHVuc2lnbmVkIGluaWJhc2UsIGFsbG9j
YXRvcl90IGlhbGxvYyA9IGFsbG9jYXRvcl90KCkpIHsKICAgICAgICAgICAgICAgIGJhc2UgPSBp
bmliYXNlOwogICAgICAgICAgICAgICAgc2l6ZSA9IGluaXNpemU7CiAgICAgICAgICAgICAgICBh
bGxvYyA9IGlhbGxvYzsKICAgICAgICAgICAgICAgIHRhYmxlID0gbmV3IFRvYmoqW3NpemVdOwog
ICAgICAgICAgICAgICAgaW50IGk7Zm9yIChpPTA7aTxzaXplO2krKykgewogICAgICAgICAgICAg
ICAgICAgICAgICB0YWJsZVtpXSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICAgIHZvaWQgRXhwYW5kKHZvaWQpIHsKICAgICAgICAgICAgICAgIFRvYmoqKiBuZXdfdGFibGUg
PSBhbGxvYy5hbGxvY2F0ZShzaXplKjIpOwogICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAg
ICAgICAgICBmb3IgKGk9MDtpPHNpemU7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5l
d190YWJsZVtpXSA9IHRhYmxlW2ldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
Zm9yICg7aTxzaXplKjI7aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ld190YWJsZVtp
XSA9IDA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBhbGxvYy5kZWFsbG9jYXRl
KHRhYmxlLCBzaXplKTsKICAgICAgICAgICAgICAgIHNpemUgKj0gMjsKICAgICAgICAgICAgICAg
IHRhYmxlID0gbmV3X3RhYmxlOwogICAgICAgIH0KICAgICAgICB+UHNldWRvSGFzaCgpIHsKCiAg
ICAgICAgfQogICAgICAgIFRvYmogKkFkZChUb2JqICpkYXRhKSB7CiAgICAgICAgICAgICAgICBp
bnQga2V5ID0gKGludCkoZGF0YS0+R2V0S2V5KCkpOwogICAgICAgICAgICAgICAgd2hpbGUoc2l6
ZSA8PSBrZXkpIEV4cGFuZCgpOwogICAgICAgICAgICAgICAgVG9iaiogcmV0ID0gdGFibGVba2V5
LWJhc2VdOwogICAgICAgICAgICAgICAgdGFibGVba2V5LWJhc2VdID0gZGF0YTsKICAgICAgICAg
ICAgICAgIHJldHVybiByZXQ7CiAgICAgICAgfQogICAgICAgIFRvYmogKkFkZE9yUmVwbGFjZShU
b2JqICpkYXRhKSB7CiAgICAgICAgICAgICAgICBpbnQga2V5ID0gKGludCkoZGF0YS0+R2V0S2V5
KCkpOwogICAgICAgICAgICAgICAgd2hpbGUoc2l6ZSA8PSBrZXkpIEV4cGFuZCgpOwogICAgICAg
ICAgICAgICAgVG9iaiogcmV0ID0gdGFibGVba2V5LWJhc2VdOwogICAgICAgICAgICAgICAgdGFi
bGVba2V5LWJhc2VdID0gZGF0YTsKICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CiAgICAgICAg
fQogICAgICAgIFRvYmogKkZpbmQodWxvbmcga2V5KSB7CiAgICAgICAgICAgICAgICByZXR1cm4g
dGFibGVba2V5LWJhc2VdOwogICAgICAgIH0KCiAgICAgICAgdm9pZCAqb3BlcmF0b3IgbmV3KHNp
emVfdCBzaXplKSB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhzaXplKTsgfQogICAgICAgIHZvaWQg
Km9wZXJhdG9yIG5ldyhzaXplX3Qgc2l6ZSwgYWxsb2NhdG9yX3QmIGFsbG9jKSB7IHJldHVybiBh
bGxvYy5hbGxvY2F0ZV9ieXRlcyhzaXplKTsgfQp9OwoKCgoKCmNsYXNzIEFycmF5RW50cnlCYXNl
OwoKY2xhc3MgQXJyYXlNYWtlcgp7CiAgICAgICAgQXJyYXlNYWtlciAqbmV4dDsKcHJvdGVjdGVk
OgogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gYWxsb2M7CnB1YmxpYzoKICAgICAgICBB
cnJheU1ha2VyKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxs
b2MpIDogbmV4dChfbmV4dCksIGFsbG9jKGlhbGxvYykgeyB9CiAgICAgICAgdmlydHVhbCB+QXJy
YXlNYWtlcigpIHsgZGVsZXRlIG5leHQ7IH0KCiAgICAgICAgQXJyYXlNYWtlciAqTmV4dCgpIHsg
cmV0dXJuIG5leHQ7IH0KICAgICAgICBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+JiBHZXRBbGxvYygp
IHsgcmV0dXJuIGFsbG9jOyB9CiAgICAgICAgdm9pZCBTZXRBbGxvYyhjb25zdCBsaWxmZXNfYWxs
b2NhdG9yPGNlbGw+JiBuZXdhbGxvYykgeyBhbGxvYyA9IG5ld2FsbG9jOyBpZiggbmV4dCAhPSBf
X251bGwgKSBuZXh0LT5TZXRBbGxvYyhuZXdhbGxvYyk7IH0KCiAgICAgICAgdmlydHVhbCBpbnQg
U2l6ZSgpIHsgcmV0dXJuIC0xOyB9CiAgICAgICAgdmlydHVhbCBpbnQgQmFzZSgpIHsgcmV0dXJu
IC0xOyB9CgogICAgICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpID0gMDsK
ICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICpNYWtlRW50cnkodW5zaWduZWQgbG9uZyBr
KSB7IE1ha2VFbnRyeSgpOyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVh
bCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KGNvbnN0IGNoYXIgKmspIHsgTWFrZUVudHJ5KCk7
IGFib3J0KCk7IHJldHVybiBfX251bGw7fQogICAgICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2Ug
Kk1ha2VFbnRyeShMaW5lYXJGU1AgaykgeyBNYWtlRW50cnkoKTsgYWJvcnQoKTsgcmV0dXJuIF9f
bnVsbDsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveUVudHJ5KEFycmF5RW50cnlCYXNl
ICopID0gMDsKfTsKCmNsYXNzIEFycmF5TWFrZXJTZW50aW5lbCA6IHB1YmxpYyBBcnJheU1ha2Vy
CnsKcHVibGljOgogICAgICAgIEFycmF5TWFrZXJTZW50aW5lbChsaWxmZXNfYWxsb2NhdG9yPGNl
bGw+ICZpYWxsb2MpIDogQXJyYXlNYWtlcihfX251bGwsIGlhbGxvYykge30KCiAgICAgICAgdmly
dHVhbCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KCkgeyBfQWJvcnQoKCJJbnRlcm5hbCBFcnJv
cjogQXJyYXlNYWtlclNlbnRpbmVsOjpNYWtlRW50cnkiKSwgImFycmF5LmgiLCAxMTUpOyByZXR1
cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVhbCB2b2lkIERlc3Ryb3lFbnRyeShBcnJheUVudHJ5
QmFzZSAqKSB7IF9BYm9ydCgoIkludGVybmFsIEVycm9yOiBBcnJheU1ha2VyU2VudGluZWw6OkRl
c3Ryb3lFbnRyeSIpLCAiYXJyYXkuaCIsIDExNik7IH0KfTsKCmNsYXNzIEFyZ0J1ZjsKCnRlbXBs
YXRlIDxjbGFzcyBBUlJBWUJBU0U+CmNsYXNzIEFycmF5TWFrZXJUZW1wbGF0ZSA6IHB1YmxpYyBB
cnJheU1ha2VyCnsKICAgICAgICBpbnQgc2l6ZTsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQVJSQVlCQVNFOjp2YWx1ZV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlclRl
bXBsYXRlKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxsb2Ms
IGludCBfc2l6ZSA9IDApIDogQXJyYXlNYWtlcihfbmV4dCwgaWFsbG9jKSB7IHNpemUgPSBfc2l6
ZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4gc2l6ZTsgfQogICAgICAg
IHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50cnkoKTsKICAgICAgICB2aXJ0dWFsIEFycmF5RW50
cnlCYXNlICpNYWtlRW50cnkodW5zaWduZWQgbG9uZykgeyBhYm9ydCgpOyByZXR1cm4gX19udWxs
OyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5QmFzZSAqTWFrZUVudHJ5KGNvbnN0IGNoYXIg
KikgeyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5
QmFzZSAqTWFrZUVudHJ5KExpbmVhckZTUCkgeyBhYm9ydCgpOyByZXR1cm4gX19udWxsOyB9Cgog
ICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2UgKik7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0UgKkFycmF5TWFrZXJUZW1wbGF0ZTxB
UlJBWUJBU0U+OjpNYWtlRW50cnkoKQp7CiAgICAgICAgQVJSQVlCQVNFKiByZXQgPSBuZXcgKGxp
bGZlc19hbGxvY2F0b3I8QVJSQVlCQVNFPihhbGxvYykuYWxsb2NhdGUoMSkpIEFSUkFZQkFTRShk
dW1teXZhbCwgdGhpcyk7CiAgICAgICAgcmV0dXJuIHJldDsKfQoKdGVtcGxhdGUgPGNsYXNzIEFS
UkFZQkFTRT4Kdm9pZCBBcnJheU1ha2VyVGVtcGxhdGU8QVJSQVlCQVNFPjo6RGVzdHJveUVudHJ5
KEFycmF5RW50cnlCYXNlICpwYikKewogICAgICAgIEFSUkFZQkFTRSAqcCA9IGR5bmFtaWNfY2Fz
dDxBUlJBWUJBU0UgKj4ocGIpOwogICAgICAgIHAtPkRlc3Ryb3kodGhpcyk7CiAgICAgICAgcC0+
fkFSUkFZQkFTRSgpOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8QVJSQVlCQVNFPihhbGxvYyku
ZGVhbGxvY2F0ZShwLDEpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBBUlJBWUJBU0U+CmNsYXNzIEFy
cmF5TWFrZXJJbnRUZW1wbGF0ZSA6IHB1YmxpYyBBcnJheU1ha2VyCnsKICAgICAgICBpbnQgc2l6
ZTsKICAgICAgICBpbnQgYmFzZTsKcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQVJS
QVlCQVNFOjp2YWx1ZV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlckludFRlbXBsYXRl
KEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxsb2MsIGludCBf
c2l6ZSwgaW50IF9iYXNlKSA6IEFycmF5TWFrZXIoX25leHQsIGlhbGxvYykgeyBzaXplID0gX3Np
emU7IGJhc2UgPSBfYmFzZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4g
c2l6ZTsgfQogICAgICAgIHZpcnR1YWwgaW50IEJhc2UoKSB7IHJldHVybiBiYXNlOyB9CiAgICAg
ICAgdmlydHVhbCBBUlJBWUJBU0UgKk1ha2VFbnRyeSgpOwogICAgICAgIHZpcnR1YWwgQXJyYXlF
bnRyeUJhc2UgKk1ha2VFbnRyeSh1bnNpZ25lZCBsb25nIGspIHsgYWJvcnQoKTsgfQogICAgICAg
IHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeShjb25zdCBjaGFyICprKSB7IGFib3J0
KCk7IH0KICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICpNYWtlRW50cnkoTGluZWFyRlNQ
IGspIHsgYWJvcnQoKTsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJveUVudHJ5KEFycmF5
RW50cnlCYXNlICopOwp9OwoKdGVtcGxhdGUgPGNsYXNzIEFSUkFZQkFTRT4KQVJSQVlCQVNFICpB
cnJheU1ha2VySW50VGVtcGxhdGU8QVJSQVlCQVNFPjo6TWFrZUVudHJ5KCkKewogICAgICAgIEFS
UkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZQkFTRT4oYWxsb2MpLmFs
bG9jYXRlKDEpKSBBUlJBWUJBU0UoZHVtbXl2YWwsIHRoaXMpOwogICAgICAgIHJldHVybiByZXQ7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBBUlJBWUJBU0U+CnZvaWQgQXJyYXlNYWtlckludFRlbXBsYXRl
PEFSUkFZQkFTRT46OkRlc3Ryb3lFbnRyeShBcnJheUVudHJ5QmFzZSAqcGIpCnsKICAgICAgICBB
UlJBWUJBU0UgKnAgPSBkeW5hbWljX2Nhc3Q8QVJSQVlCQVNFICo+KHBiKTsKICAgICAgICBwLT5E
ZXN0cm95KHRoaXMpOwogICAgICAgIHAtPn5BUlJBWUJBU0UoKTsKICAgICAgICBsaWxmZXNfYWxs
b2NhdG9yPEFSUkFZQkFTRT4oYWxsb2MpLmRlYWxsb2NhdGUocCwxKTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgQVJSQVlCQVNFPgpjbGFzcyBBcnJheU1ha2VyS2V5VGVtcGxhdGUgOiBwdWJsaWMgQXJy
YXlNYWtlcgp7CiAgICAgICAgaW50IHNpemU7CnB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEFSUkFZQkFTRTo6aGFzaGtleV90IGhhc2hrZXlfdDsKCiAgICAgICAgQXJyYXlNYWtlcktl
eVRlbXBsYXRlKEFycmF5TWFrZXIgKl9uZXh0LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZpYWxs
b2MsIGludCBfc2l6ZSA9IDApIDogQXJyYXlNYWtlcihfbmV4dCwgaWFsbG9jKSB7IHNpemUgPSBf
c2l6ZTsgfQoKICAgICAgICB2aXJ0dWFsIGludCBTaXplKCkgeyByZXR1cm4gc2l6ZTsgfQogICAg
ICAgIHZpcnR1YWwgQXJyYXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpIHsgX0Fib3J0KCgiSW50ZXJu
YWwgRXJyb3I6IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTo6TWFrZUVudHJ5IiksICJhcnJheS5oIiwg
MjA1KTsgcmV0dXJuIF9fbnVsbDsgfQogICAgICAgIHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50
cnkoaGFzaGtleV90IGtleSk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJy
YXlFbnRyeUJhc2UgKik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0Ug
KkFycmF5TWFrZXJLZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpNYWtlRW50cnkoaGFzaGtleV90IGtl
eSkKewogICAgICAgIEFSUkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZ
QkFTRT4oYWxsb2MpLmFsbG9jYXRlKDEpKSBBUlJBWUJBU0Uoa2V5LCB0aGlzKTsKICAgICAgICBy
ZXR1cm4gcmV0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgp2b2lkIEFycmF5TWFrZXJL
ZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2UgKnBiKQp7
CiAgICAgICAgQVJSQVlCQVNFICpwID0gZHluYW1pY19jYXN0PEFSUkFZQkFTRSAqPihwYik7CiAg
ICAgICAgcC0+RGVzdHJveSh0aGlzKTsKICAgICAgICBwLT5+QVJSQVlCQVNFKCk7CiAgICAgICAg
bGlsZmVzX2FsbG9jYXRvcjxBUlJBWUJBU0U+KGFsbG9jKS5kZWFsbG9jYXRlKHAsMSk7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIEFSUkFZQkFTRT4KY2xhc3MgQXJyYXlNYWtlckludEtleVRlbXBsYXRl
IDogcHVibGljIEFycmF5TWFrZXIKewogICAgICAgIGludCBzaXplOwogICAgICAgIGludCBiYXNl
OwpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBUlJBWUJBU0U6Omhhc2hrZXlfdCBo
YXNoa2V5X3Q7CgogICAgICAgIEFycmF5TWFrZXJJbnRLZXlUZW1wbGF0ZShBcnJheU1ha2VyICpf
bmV4dCwgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPiAmaWFsbG9jLCBpbnQgX3NpemUsIGludCBfYmFz
ZSkgOiBBcnJheU1ha2VyKF9uZXh0LCBpYWxsb2MpIHsgc2l6ZSA9IF9zaXplOyBiYXNlID0gX2Jh
c2U7IH0KCiAgICAgICAgdmlydHVhbCBpbnQgU2l6ZSgpIHsgcmV0dXJuIHNpemU7IH0KICAgICAg
ICB2aXJ0dWFsIGludCBCYXNlKCkgeyByZXR1cm4gYmFzZTsgfQogICAgICAgIHZpcnR1YWwgQXJy
YXlFbnRyeUJhc2UgKk1ha2VFbnRyeSgpIHsgX0Fib3J0KCgiSW50ZXJuYWwgRXJyb3I6IEFycmF5
TWFrZXJJbnRLZXlUZW1wbGF0ZTo6TWFrZUVudHJ5IiksICJhcnJheS5oIiwgMjQxKTsgcmV0dXJu
IF9fbnVsbDsgfQogICAgICAgIHZpcnR1YWwgQVJSQVlCQVNFICpNYWtlRW50cnkoaGFzaGtleV90
IGtleSk7CgogICAgICAgIHZpcnR1YWwgdm9pZCBEZXN0cm95RW50cnkoQXJyYXlFbnRyeUJhc2Ug
Kik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgQVJSQVlCQVNFPgpBUlJBWUJBU0UgKkFycmF5TWFrZXJJ
bnRLZXlUZW1wbGF0ZTxBUlJBWUJBU0U+OjpNYWtlRW50cnkoaGFzaGtleV90IGtleSkKewogICAg
ICAgIEFSUkFZQkFTRSogcmV0ID0gbmV3IChsaWxmZXNfYWxsb2NhdG9yPEFSUkFZQkFTRT4oYWxs
b2MpLmFsbG9jYXRlKDEpKSBBUlJBWUJBU0Uoa2V5LCB0aGlzKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IEFSUkFZQkFTRT4Kdm9pZCBBcnJheU1ha2VySW50S2V5VGVtcGxhdGU8QVJSQVlCQVNFPjo6RGVz
dHJveUVudHJ5KEFycmF5RW50cnlCYXNlICpwYikKewogICAgICAgIEFSUkFZQkFTRSAqcCA9IGR5
bmFtaWNfY2FzdDxBUlJBWUJBU0UgKj4ocGIpOwogICAgICAgIHAtPkRlc3Ryb3kodGhpcyk7CiAg
ICAgICAgcC0+fkFSUkFZQkFTRSgpOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8QVJSQVlCQVNF
PihhbGxvYykuZGVhbGxvY2F0ZShwLDEpOwp9CiMgMzAyICJhcnJheS5oIgplbnVtIEZMIHsgS0lO
VCwgS1NUUixLRlMgLCBLRVksCiAgICAgICAgICAgICAgICBWRlMsIFZJTlQsIFZTVFIgLAogICAg
ICAgICAgICAgICAgSU5WQUxJRCAsIElOVkFMSURfVFlQRSAsIElOVkFMSURfRlN9OwoKCmNsYXNz
IEFyZ0J1ZiB7CiAgICAgICAgaW50IHBvczsKICAgICAgICBpbnQgZmxhZzsKICAgICAgICBpbnQg
c2l6ZTsKICAgICAgICBpbnQgYmFzZTsKcHVibGljOgogICAgICAgIEFyZ0J1ZigpIHsgfQogICAg
ICAgIH5BcmdCdWYoKSB7IH0KCiAgICAgICAgdm9pZCBTZXRGbGFnKEZMIF9mbGFnICwgaW50IG51
bSkgewogICAgICAgICAgICAgICAgZmxhZyA9IChpbnQoX2ZsYWcpIDw8IDE2KSArIG51bTsKICAg
ICAgICB9CiAgICAgICAgdm9pZCBTZXRLZXkoaW50IF9zaXplICwgaW50IF9iYXNlKSB7CiAgICAg
ICAgICAgICAgICBiYXNlID0gX2Jhc2U7CiAgICAgICAgICAgICAgICBzaXplID0gX3NpemU7CiAg
ICAgICAgfQpwdWJsaWM6CiAgICAgICAgRkwgRmxhZyh2b2lkKSB7IHJldHVybiBGTChmbGFnID4+
IDE2KTsgfQogICAgICAgIGludCBOdW1iZXIodm9pZCkgeyByZXR1cm4gZmxhZyAmIDB4ZmZmOyB9
CiAgICAgICAgaW50IFNpemUodm9pZCkgeyByZXR1cm4gc2l6ZTsgfQogICAgICAgIGludCBCYXNl
KHZvaWQpIHsgcmV0dXJuIGJhc2U7IH0KICAgICAgICB2b2lkIEluaXQodm9pZCkgeyBmbGFnID0g
c2l6ZSA9IGJhc2UgPSAwOyB9CiAgICAgICAgdm9pZCBTaG93KHZvaWQpIHsgY291dCA8PCAiZmxh
ZzogIiA8PCBoZXggPDwgZmxhZyA8PCAiICBzaXplOiAiIDw8IHNpemUgPDwgIiAgYmFzZTogIiA8
PCBiYXNlIDw8IGRlYyA8PCBlbmRsOyB9CiAgICAgICAgdm9pZCBTZXRWYWx1ZSh0c2VyaWFsLGlu
dCk7CiAgICAgICAgdm9pZCBTZXRLZXkoRlNQJixpbnQpOwogICAgICAgIHZvaWQgU2V0UmVzdWx0
RmxhZyh2b2lkKSB7CiAgICAgICAgICAgICAgICBmbGFnIHw9IDB4ODAwMDsKICAgICAgICB9CiAg
ICAgICAgaW50IFJlc3VsdEZsYWcodm9pZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZsYWcg
JiAweDgwMDA7CiAgICAgICAgfQoKICAgICAgICBBcnJheU1ha2VyICpNYWtlQXJyYXlNYWtlcihB
cmdCdWYgKnByZXYsIEFycmF5TWFrZXIgKm5leHQsIGxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gJmFs
bG9jKTsKfTsKIyAzNjYgImFycmF5LmgiCmNsYXNzIEludEZpbCB7CnB1YmxpYzoKICAgICAgICB0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaGFzaGtleV90OwogICAgICAgIHN0YXRpYyBoYXNoa2V5X3Qg
R2VuS2V5IChGU1AgZiwgQXJyYXlNYWtlciAqKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gR2Vu
S2V5KGYpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaGFzaGtleV90IEdlbktleSAoRlNQIGYp
IHsKICAgICAgICAgICAgICAgIGNlbGwgYyA9IGYuUmVhZENlbGwoKTsKICAgICAgICAgICAgICAg
IGlmICgoKCgoY2VsbF9pbnQpKGMpKSAmICgoY2VsbF9pbnQpMHhmIDw8IDApKSA9PSAoKGNlbGxf
aW50KVRfSU5UIDw8IDApKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYzJJTlQo
Yyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBjb3V0
IDw8ICJOb24taW50ZWdlciBjYW5ub3QgdXNlIGFzIGEga2V5IG9mIGFuIGludGVnZXIgYXJyYXlc
biI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMjE0NzQ4MzY0N0wgKiAyVUwgKyAx
KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgRGVzdHJv
eUtleSAoaGFzaGtleV90LCBBcnJheU1ha2VyICopIHsgfQogICAgICAgIHN0YXRpYyB2b2lkIERl
c3Ryb3lLZXkgKGhhc2hrZXlfdCkgeyB9CiAgICAgICAgc3RhdGljIEZTUCBHZW5GU1AoaGFzaGtl
eV90IGgpCiAgICAgICAgewoKICAgICAgICAgICAgICAgIHJldHVybiBGU1AoSU5UMmMoaCkpOwog
ICAgICAgIH0KICAgICAgICBzdGF0aWMgYm9vbCBFcXVpdihoYXNoa2V5X3QgaDEsIGhhc2hrZXlf
dCBoMikKICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gaDEgPT0gaDI7CiAgICAgICAg
fQogICAgICAgIHN0YXRpYyB2b2lkIFNlcmlhbGl6ZVRvU3RyZWFtKGhhc2hrZXlfdCBmLCBvc2Vy
aWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIG9zIDw8IElOVDJjKGYpOwogICAgICAgIH0K
ICAgICAgICBzdGF0aWMgdm9pZCBUZXJtaW5hdGVTdHJlYW0ob3NlcmlhbGl6ZXIgJm9zKSB7CiAg
ICAgICAgICAgICAgICBvcyA8PCBDRUxMX0lOVkFMSUQ7CiAgICAgICAgfQogICAgICAgIHN0YXRp
YyBib29sIFJlYWRGcm9tU3RyZWFtKGhhc2hrZXlfdCAmZiwgaXNlcmlhbGl6ZXIgJmlzKSB7CiAg
ICAgICAgICAgICAgICBjZWxsIGM7CiAgICAgICAgICAgICAgICBpcyA+PiBjOwogICAgICAgICAg
ICAgICAgaWYoIGMgPT0gQ0VMTF9JTlZBTElEICkKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgZiA9IGMySU5UKGMpOwogICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKCmNsYXNzIENlbGxGaWwgewpwdWJsaWM6CiAgICAg
ICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGhhc2hrZXlfdDsKICAgICAgICBzdGF0aWMgaGFzaGtl
eV90IEdlbktleSAoRlNQIGYsIEFycmF5TWFrZXIgKikgewogICAgICAgICAgICAgICAgcmV0dXJu
IEdlbktleShmKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGhhc2hrZXlfdCBHZW5LZXkgKEZT
UCBmKSB7CiAgICAgICAgICAgICAgICBjZWxsIGMgPSBmLlJlYWRDZWxsKCk7CiAgICAgICAgICAg
ICAgICBpZiAoKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4ZiA8PCAwKSkgPT0gKChj
ZWxsX2ludClUX1NUUiA8PCAwKSkgfHwgKCgoKGNlbGxfaW50KShjKSkgJiAoKGNlbGxfaW50KTB4
MyA8PCAwKSkgPT0gKChjZWxsX2ludClUX1BUUiA8PCAwKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgY291dCA8PCAiU3RydWN0dXJlIG9yIHZhcmlhYmxlIGNhbm5vdCB1c2UgYXMgYSBrZXkg
b2YgYSBzdHJpbmcgaGFzaFxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKChj
ZWxsX2ludCkoYykpOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMg
dm9pZCBEZXN0cm95S2V5IChoYXNoa2V5X3QsIEFycmF5TWFrZXIgKikgeyB9CiAgICAgICAgc3Rh
dGljIHZvaWQgRGVzdHJveUtleSAoaGFzaGtleV90KSB7IH0KICAgICAgICBzdGF0aWMgRlNQIEdl
bkZTUChoYXNoa2V5X3QgaCkKICAgICAgICB7CgogICAgICAgICAgICAgICAgcmV0dXJuIEZTUCgo
KGNlbGwpKGgpKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBib29sIEVxdWl2KGhhc2hrZXlf
dCBoMSwgaGFzaGtleV90IGgyKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBoMSA9
PSBoMjsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgU2VyaWFsaXplVG9TdHJlYW0oaGFz
aGtleV90IGYsIG9zZXJpYWxpemVyICZvcykgewogICAgICAgICAgICAgICAgb3MgPDwgKChjZWxs
KShmKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB2b2lkIFRlcm1pbmF0ZVN0cmVhbShvc2Vy
aWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIG9zIDw8IENFTExfSU5WQUxJRDsKICAgICAg
ICB9CiAgICAgICAgc3RhdGljIGJvb2wgUmVhZEZyb21TdHJlYW0oaGFzaGtleV90ICZmLCBpc2Vy
aWFsaXplciAmaXMpIHsKICAgICAgICAgICAgICAgIGNlbGwgYzsKICAgICAgICAgICAgICAgIGlz
ID4+IGM7CiAgICAgICAgICAgICAgICBpZiggYyA9PSBDRUxMX0lOVkFMSUQgKQogICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICBmID0gKChjZWxsX2lu
dCkoYykpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQp9OwoKCmNsYXNz
IEZTRmlsIHsKcHVibGljOgogICAgICAgIHN0YXRpYyBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+IGRl
ZmFsbG9jOwogICAgICAgIHR5cGVkZWYgTGluZWFyRlNQIGhhc2hrZXlfdDsKICAgICAgICBzdGF0
aWMgaGFzaGtleV90IEdlbktleSAoRlNQIGYsIEFycmF5TWFrZXIgKm0pIHsKICAgICAgICAgICAg
ICAgIHJldHVybiBMaW5lYXJGU1AoZiwgbS0+R2V0QWxsb2MoKSk7CiAgICAgICAgfQogICAgICAg
IHN0YXRpYyBoYXNoa2V5X3QgR2VuS2V5IChGU1AgZikgewogICAgICAgICAgICAgICAgcmV0dXJu
IExpbmVhckZTUChmKTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHZvaWQgRGVzdHJveUtleSAo
aGFzaGtleV90ICZmLCBBcnJheU1ha2VyICptKSB7CiAgICAgICAgICAgICAgICBmLkRlYWxsb2Mo
bS0+R2V0QWxsb2MoKSk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB2b2lkIERlc3Ryb3lLZXkg
KGhhc2hrZXlfdCAmZikgewogICAgICAgIH0KICAgICAgICBzdGF0aWMgRlNQIEdlbkZTUChoYXNo
a2V5X3QgaCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1AgZiA9IGguQ29weSgpOwoKICAg
ICAgICAgICAgICAgIHJldHVybiBmOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgYm9vbCBFcXVp
dihoYXNoa2V5X3QgaDEsIGhhc2hrZXlfdCBoMikKICAgICAgICB7CiAgICAgICAgICAgICAgICBy
ZXR1cm4gaDEuRXF1aXYoaDIpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgdm9pZCBTZXJpYWxp
emVUb1N0cmVhbShoYXNoa2V5X3QgZiwgb3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAgICAg
ICBvcyA8PCBmOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgdm9pZCBUZXJtaW5hdGVTdHJlYW0o
b3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAgICAgICBvcyA8PCBMaW5lYXJGU1A6OmludmFs
aWQ7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyBib29sIFJlYWRGcm9tU3RyZWFtKGhhc2hrZXlf
dCAmZiwgaXNlcmlhbGl6ZXIgJmlzKSB7CiAgICAgICAgICAgICAgICBpcyA+PiBmOwogICAgICAg
ICAgICAgICAgcmV0dXJuIGYuSXNWYWxpZCgpOwogICAgICAgIH0KfTsKCgoKCgpjbGFzcyBBcnJh
eUVudHJ5QmFzZQp7CnB1YmxpYzoKICAgICAgICBzdGF0aWMgQXJyYXlFbnRyeUJhc2UgKmVycm9y
OwogICAgICAgIHN0YXRpYyBBcnJheUVudHJ5QmFzZSAqZ29vZF9maW5pc2g7CiAgICAgICAgc3Rh
dGljIEFycmF5RW50cnlCYXNlICpyZW1vdmVfbWU7CgogICAgICAgIEFycmF5RW50cnlCYXNlKCkg
eyB9CiAgICAgICAgdmlydHVhbCB+QXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICB2aXJ0dWFs
IEFycmF5RW50cnlCYXNlICogR2V0KEZTUCBrZXkpIHsgcmV0dXJuIGVycm9yOyB9CiAgICAgICAg
dmlydHVhbCBBcnJheUVudHJ5QmFzZSAqIEVxdWl2KEFycmF5RW50cnlCYXNlICopIHsgcmV0dXJu
IGVycm9yOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5QmFzZSAqIFNldChGU1Aga2V5LCBB
cnJheU1ha2VyICopIHsgcmV0dXJuIGVycm9yOyB9CiAgICAgICAgdmlydHVhbCBBcnJheUVudHJ5
QmFzZSAqIFJlbW92ZShGU1Aga2V5LCBBcnJheU1ha2VyICopIHsgcmV0dXJuIGVycm9yOyB9CiAg
ICAgICAgdmlydHVhbCB2b2lkIFNlcmlhbGl6ZVRvU3RyZWFtKG9zZXJpYWxpemVyICYpIHsgfQog
ICAgICAgIHZpcnR1YWwgYm9vbCBSZWFkRnJvbVN0cmVhbShpc2VyaWFsaXplciAmLCBBcnJheU1h
a2VyICopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgdmlydHVhbCBib29sIEtleUxpc3QoRlNQ
IHJldCkgeyB9CiAgICAgICAgdmlydHVhbCB2b2lkIERlc3Ryb3koQXJyYXlNYWtlciAqKSB7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgS0VZPgpjbGFzcyBBcnJheUVudHJ5IDogcHVibGljIEFycmF5
RW50cnlCYXNlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgS0VZIGhhc2hrZXlfdDsKCnByaXZh
dGU6CiAgICAgICAgaGFzaGtleV90IGtleTsKCnB1YmxpYzoKICAgICAgICBBcnJheUVudHJ5KGhh
c2hrZXlfdCBfa2V5KSA6IEFycmF5RW50cnlCYXNlKCksIGtleShfa2V5KSB7IH0KICAgICAgICBB
cnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICopIDogQXJyYXlFbnRyeUJhc2Uo
KSwga2V5KF9rZXkpIHsgfQoKICAgICAgICBjb25zdCBoYXNoa2V5X3QgJkdldEtleSgpIHsgcmV0
dXJuIGtleTsgfQp9OwoKdGVtcGxhdGUgPD4KY2xhc3MgQXJyYXlFbnRyeTxMaW5lYXJGU1A+IDog
cHVibGljIEFycmF5RW50cnlCYXNlCnsKcHVibGljOgogICAgICAgIHR5cGVkZWYgTGluZWFyRlNQ
IGhhc2hrZXlfdDsKCnByaXZhdGU6CiAgICAgICAgaGFzaGtleV90IGtleTsKCnB1YmxpYzoKICAg
ICAgICBBcnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5KSA6IEFycmF5RW50cnlCYXNlKCksIGtleShf
a2V5KSB7IH0KICAgICAgICBBcnJheUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICop
IDogQXJyYXlFbnRyeUJhc2UoKSwga2V5KF9rZXkpIHsgfQoKICAgICAgICBjb25zdCBoYXNoa2V5
X3QgJkdldEtleSgpIHsgcmV0dXJuIGtleTsgfQoKICAgICAgICB2aXJ0dWFsIHZvaWQgRGVzdHJv
eShBcnJheU1ha2VyICptKSB7IGtleS5EZWFsbG9jKG0tPkdldEFsbG9jKCkpOyB9Cn07CgoKdGVt
cGxhdGUgPD4KY2xhc3MgQXJyYXlFbnRyeTxEdW1teUtleT4gOiBwdWJsaWMgQXJyYXlFbnRyeUJh
c2UKewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBEdW1teUtleSBoYXNoa2V5X3Q7CgpwdWJsaWM6
CiAgICAgICAgQXJyYXlFbnRyeSgpIDogQXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICBBcnJh
eUVudHJ5KEFycmF5TWFrZXIgKikgOiBBcnJheUVudHJ5QmFzZSgpIHsgfQogICAgICAgIEFycmF5
RW50cnkoaGFzaGtleV90IF9rZXkpIDogQXJyYXlFbnRyeUJhc2UoKSB7IH0KICAgICAgICBBcnJh
eUVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICopIDogQXJyYXlFbnRyeUJhc2UoKSB7
IH0KCiAgICAgICAgY29uc3QgaGFzaGtleV90IEdldEtleSgpIHsgcmV0dXJuIGR1bW15dmFsOyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIEtFWSwgY2xhc3MgRklMVEVSPgpjbGFzcyBBcnJheVJlc3Vs
dEVudHJ5IDogcHVibGljIEFycmF5RW50cnk8S0VZPgp7CnB1YmxpYzoKICAgICAgICB0eXBlZGVm
IHR5cGVuYW1lIEFycmF5RW50cnk8S0VZPjo6aGFzaGtleV90IGhhc2hrZXlfdDsKICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEZJTFRFUjo6aGFzaGtleV90IHZhbHVlX3Q7CiAgICAgICAgdHlwZWRl
ZiBGSUxURVIgZmlsdGVyX3Q7CgogICAgICAgIHZhbHVlX3QgdmFsOwoKICAgICAgICBBcnJheVJl
c3VsdEVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyICpfYW0pIDogQXJyYXlFbnRyeTxL
RVk+KF9rZXkpIHsgfQoKICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlKiBTZXQoRlNQIGtl
eSwgQXJyYXlNYWtlciAqbSkgewogICAgICAgICAgICAgICAgZmlsdGVyX3Q6OkRlc3Ryb3lLZXko
dmFsLCBtKTsKICAgICAgICAgICAgICAgIHZhbCA9IGZpbHRlcl90OjpHZW5LZXkoa2V5LCBtKTsK
ICAgICAgICAgICAgICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwg
QXJyYXlFbnRyeUJhc2UqIEdldChGU1Aga2V5KSB7CiAgICAgICAgICAgICAgICBpZigga2V5LlVu
aWZ5KCBmaWx0ZXJfdDo6R2VuRlNQKHZhbCkgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBBcnJheUVudHJ5QmFzZTo6Z29vZF9maW5pc2g7CiAgICAgICAgICAgICAgICBlbHNlIHJl
dHVybiBBcnJheUVudHJ5QmFzZTo6ZXJyb3I7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgQXJy
YXlFbnRyeUJhc2UqIEVxdWl2KEFycmF5UmVzdWx0RW50cnk8S0VZLCBGSUxURVI+ICpyKSB7CiAg
ICAgICAgICAgICAgICBpZiggZmlsdGVyX3Q6OkVxdWl2KCAoKEFycmF5UmVzdWx0RW50cnk8S0VZ
LCBGSUxURVI+ICopciktPnZhbCwgdmFsICkgKSByZXR1cm4gX19udWxsOwogICAgICAgICAgICAg
ICAgZWxzZSByZXR1cm4gQXJyYXlFbnRyeUJhc2U6OmVycm9yOwogICAgICAgIH0KICAgICAgICB2
aXJ0dWFsIEFycmF5RW50cnlCYXNlICogUmVtb3ZlKEZTUCAsIEFycmF5TWFrZXIgKmFtKSB7CiAg
ICAgICAgICAgICAgICBmaWx0ZXJfdDo6RGVzdHJveUtleSh2YWwsIGFtKTsKICAgICAgICAgICAg
ICAgIHJldHVybiBfX251bGw7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgdm9pZCBTZXJpYWxp
emVUb1N0cmVhbShvc2VyaWFsaXplciAmb3MpIHsKICAgICAgICAgICAgICAgIGZpbHRlcl90OjpT
ZXJpYWxpemVUb1N0cmVhbSh2YWwsIG9zKTsKICAgICAgICB9CiAgICAgICAgdmlydHVhbCBib29s
IFJlYWRGcm9tU3RyZWFtKGlzZXJpYWxpemVyICZpcykgewogICAgICAgICAgICAgICAgcmV0dXJu
IGZpbHRlcl90OjpSZWFkRnJvbVN0cmVhbSh2YWwsIGlzKTsKICAgICAgICB9CiAgICAgICAgdmly
dHVhbCBib29sIEtleUxpc3QoRlNQIHJldCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1Ag
ZiA9IGZpbHRlcl90OjpHZW5GU1AodmFsKTsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJlc3Vs
dCEgIiA8PCBlbmRsIDw8IGYuRGlzcGxheUFWTSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAgICBp
ZiggISAoIHJldC5Db2VyY2UoY29ucykgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dC5Gb2xsb3coaGQpLlVuaWZ5KGYpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQu
Rm9sbG93KHRsKS5Db2VyY2UobmlsKSApICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KfTsKIyA2
NDIgImFycmF5LmgiCnRlbXBsYXRlIDxjbGFzcyBLRVksIGNsYXNzIEhBU0gsIGNsYXNzIEZJTFRF
Uj4KY2xhc3MgQXJyYXlIYXNoRW50cnk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgS0VZLCBjbGFzcyBFTlRS
WSwgY2xhc3MgQUxMT0MsIGNsYXNzIEZJTFRFUj4KY2xhc3MgQXJyYXlIYXNoRW50cnk8S0VZLCBQ
c2V1ZG9IYXNoPEVOVFJZLCBBTExPQz4sIEZJTFRFUj46IHB1YmxpYyBBcnJheUVudHJ5PEtFWT4K
ewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheUVudHJ5PEtFWT46Omhhc2hr
ZXlfdCBoYXNoa2V5X3Q7CiAgICAgICAgdHlwZWRlZiBQc2V1ZG9IYXNoPEVOVFJZLCBBTExPQz4g
aGFzaF90OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRklMVEVSOjpoYXNoa2V5X3QgdmFsdWVf
dDsKICAgICAgICB0eXBlZGVmIEZJTFRFUiBmaWx0ZXJfdDsKICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIGhhc2hfdDo6b2JqX3QgZW50cnlfdDsKCnByaXZhdGU6CiAgICAgICAgaGFzaF90IGhhc2g7
CgpwdWJsaWM6CiAgICAgICAgQXJyYXlIYXNoRW50cnkoaGFzaGtleV90IF9rZXksIEFycmF5TWFr
ZXIqIF9hbSkgOiBBcnJheUVudHJ5PEtFWT4oX2tleSksIGhhc2goX2FtLT5TaXplKCksIF9hbS0+
QmFzZSgpLCBsaWxmZXNfYWxsb2NhdG9yPGVudHJ5X3QgKj4oX2FtLT5HZXRBbGxvYygpKSkgeyB9
CgogICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIFNldChGU1AgZWxlbWVudF9rZXksIEFycmF5
TWFrZXIgKmFtKSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5L
ZXkoZWxlbWVudF9rZXksIGFtKTsKICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4q
IHZhbHVlID0gaGFzaC5GaW5kKGtleSk7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gX19u
dWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKEFycmF5RW50cnk8dmFsdWVf
dD4gKikoYW0tPk1ha2VFbnRyeShrZXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICBoYXNoLkFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0
cm95S2V5KGtleSwgYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0K
ICAgICAgICBBcnJheUVudHJ5PHZhbHVlX3Q+KiBHZXQoRlNQIGVsZW1lbnRfa2V5KSB7CiAgICAg
ICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwog
ICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5
KTsKICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAg
ICAgICByZXR1cm4gdmFsdWU7CiAgICAgICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIEtFWSwgY2xh
c3MgSEFTSCwgY2xhc3MgRklMVEVSPgpjbGFzcyBBcnJheUhhc2hFbnRyeSA6IHB1YmxpYyBBcnJh
eUVudHJ5PEtFWT4KewpwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBBcnJheUVudHJ5
PEtFWT46Omhhc2hrZXlfdCBoYXNoa2V5X3Q7CiAgICAgICAgdHlwZWRlZiBIQVNIIGhhc2hfdDsK
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEZJTFRFUjo6aGFzaGtleV90IHZhbHVlX3Q7CiAgICAg
ICAgdHlwZWRlZiBGSUxURVIgZmlsdGVyX3Q7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBoYXNo
X3Q6Om9ial90IGVudHJ5X3Q7Cgpwcml2YXRlOgogICAgICAgIGhhc2hfdCBoYXNoOwoKcHVibGlj
OgogICAgICAgIEFycmF5SGFzaEVudHJ5KGhhc2hrZXlfdCBfa2V5LCBBcnJheU1ha2VyKiBfYW0p
IDogQXJyYXlFbnRyeTxLRVk+KF9rZXkpLCBoYXNoKF9hbS0+U2l6ZSgpLCBsaWxmZXNfYWxsb2Nh
dG9yPGVudHJ5X3QgKj4oX2FtLT5HZXRBbGxvYygpKSkgeyB9CgogICAgICAgIEFycmF5RW50cnk8
dmFsdWVfdD4qIFNldChGU1AgZWxlbWVudF9rZXksIEFycmF5TWFrZXIgKmFtKSB7CiAgICAgICAg
ICAgICAgICB2YWx1ZV90IGtleSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXksIGFtKTsK
ICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHZhbHVlID0gaGFzaC5GaW5kKGtl
eSk7CiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gX19udWxsKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlID0gKEFycmF5RW50cnk8dmFsdWVfdD4gKikoYW0tPk1ha2VFbnRyeShr
ZXkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICBo
YXNoLkFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl90OjpEZXN0cm95S2V5KGtleSwgYW0pOwogICAg
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgIH0KICAgICAgICBBcnJheUVudHJ5PHZh
bHVlX3Q+KiBHZXQoRlNQIGVsZW1lbnRfa2V5KSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtl
eSA9IGZpbHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwogICAgICAgICAgICAgICAgQXJyYXlF
bnRyeTx2YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5KTsKICAgICAgICAgICAgICAgIGZp
bHRlcl90OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CiAg
ICAgICAgfQoKICAgICAgICB2aXJ0dWFsIEFycmF5RW50cnlCYXNlICogUmVtb3ZlKEZTUCBlbGVt
ZW50X2tleSwgQXJyYXlNYWtlciAqKSB7CiAgICAgICAgICAgICAgICB2YWx1ZV90IGtleSA9IGZp
bHRlcl90OjpHZW5LZXkoZWxlbWVudF9rZXkpOwogICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2
YWx1ZV90PiogdmFsdWUgPSBoYXNoLkZpbmQoa2V5KTsKICAgICAgICAgICAgICAgIGZpbHRlcl90
OjpEZXN0cm95S2V5KGtleSk7CiAgICAgICAgICAgICAgICBpZiggdmFsdWUgPT0gX19udWxsICkK
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdvb2RfZmluaXNoOwogICAgICAgICAgICAg
ICAgaWYoIHZhbHVlID09IEFycmF5RW50cnlCYXNlOjpyZW1vdmVfbWUgKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAgICAgICBoYXNoLkRlbGV0ZSh2YWx1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBnb29kX2ZpbmlzaDsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2aXJ0
dWFsIHZvaWQgU2VyaWFsaXplVG9TdHJlYW0ob3NlcmlhbGl6ZXIgJm9zKSB7CiAgICAgICAgICAg
ICAgICBmb3IoIGludCBpPTA7IGk8aGFzaC5HZXRUYWJsZVNpemUoKTsgaSsrICkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlFbnRyeTx2YWx1ZV90PiogcCA9
IGhhc2guUGljayhpKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHAgIT0gX19udWxsICkK
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbHRlcl90OjpTZXJpYWxpemVUb1N0cmVhbShwLT5HZXRLZXkoKSwgb3MpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHAtPlNlcmlhbGl6ZVRvU3RyZWFtKG9zKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZmlsdGVy
X3Q6OlRlcm1pbmF0ZVN0cmVhbShvcyk7CiAgICAgICAgfQogICAgICAgIHZpcnR1YWwgYm9vbCBS
ZWFkRnJvbVN0cmVhbShpc2VyaWFsaXplciAmaXMsIEFycmF5TWFrZXIgKmFtKQogICAgICAgIHsK
ICAgICAgICAgICAgICAgIHZhbHVlX3Qga2V5OwogICAgICAgICAgICAgICAgd2hpbGUoIGZpbHRl
cl90OjpSZWFkRnJvbVN0cmVhbShrZXksIGlzKSApCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHZhbHVlID0gaGFzaC5GaW5kKGtl
eSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBfX251bGwpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChBcnJheUVudHJ5PHZhbHVlX3Q+ICop
KGFtLT5NYWtlRW50cnkoa2V5KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2guQWRkKHZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+UmVhZEZyb21T
dHJlYW0oIGlzLCBhbS0+TmV4dCgpICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmlydHVhbCBib29sIEtleUxpc3QoRlNQ
IHJldCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBGU1AgZ2VuKHJldCk7CgogICAgICAgICAg
ICAgICAgZm9yKCBpbnQgaT0wOyBpPGhhc2guR2V0VGFibGVTaXplKCk7IGkrKyApCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5RW50cnk8dmFsdWVfdD4qIHAg
PSBoYXNoLlBpY2soaSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBwICE9IF9fbnVsbCAp
CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGU1AgZiA9IGZpbHRlcl90OjpHZW5GU1AocC0+R2V0S2V5KCkpOwoKCgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmKCAhICggZ2VuLkNvZXJjZShjb25zKSAmJgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbi5Gb2xsb3coaGQpLlVuaWZ5KGYp
ICkgKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuID0gZ2VuLkZvbGxvdyh0bCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiggISBnZW4uQ29l
cmNlKG5pbCkgKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgIH0KfTsKIyA4MTIgImFycmF5LmgiCmNsYXNzIEFycmF5IHsKICAgICAgICBBcnJh
eU1ha2VyKiBtYWtlcjsKICAgICAgICBBcnJheUVudHJ5QmFzZSogcm9vdDsKICAgICAgICBpbnQg
a2V5cyx2YWx1ZXM7CiAgICAgICAgaW50IGFyaXR5OwogICAgICAgIGludCBpbnZhbGlkX2ZsYWc7
CiAgICAgICAgdHNlcmlhbCBzZXJpYWxfbnVtYmVyOwogICAgICAgIGxpbGZlc19hbGxvY2F0b3I8
Y2VsbD4gKmFsbG9jcDsKCnB1YmxpYzoKICAgICAgICBBcnJheShGU1AgcHJlZCk7CiAgICAgICAg
fkFycmF5KCkgewogICAgICAgICAgICAgICAgZGVsZXRlIG1ha2VyOwogICAgICAgICAgICAgICAg
YWxsb2NwLT5kZXN0cm95X2FsbG9jYXRvcigpOwogICAgICAgICAgICAgICAgZGVsZXRlIGFsbG9j
cDsKICAgICAgICB9CiAgICAgICAgc3RhdGljIEFycmF5JiBTZWFyY2goY2VsbCBwcmVkKTsKICAg
ICAgICBpbnQgSW52YWxpZCh2b2lkKSB7IHJldHVybiBpbnZhbGlkX2ZsYWcgPT0gMTsgfQogICAg
ICAgIHVsb25nIEdldEtleSh2b2lkKSB7IHJldHVybiBzZXJpYWxfbnVtYmVyOyB9CgogICAgICAg
IGJvb2wgU2V0KGNlbGwgcHJlZCk7CiAgICAgICAgYm9vbCBHZXQoY2VsbCBwcmVkKTsKICAgICAg
ICBib29sIFJlbW92ZShjZWxsIHByZWQpOwogICAgICAgIHZvaWQgQ2xlYXJBbGwoKTsKICAgICAg
ICB2b2lkIERlc3Ryb3koKTsKICAgICAgICBib29sIEVxdWl2KGNlbGwgZWxlbTEsIGNlbGwgZWxl
bTIpOwoKICAgICAgICBib29sIFNlcmlhbGl6ZShjZWxsIHByZWQsIHN0cmluZyBmbmFtZSk7CiAg
ICAgICAgYm9vbCBEZXNlcmlhbGl6ZShjZWxsIHAxLCBzdHJpbmcgZm5hbWUpOwoKICAgICAgICBi
b29sIEtleUxpc3QoY2VsbCBwcmVkLCBGU1AgcmV0KTsKfTsKCnRlbXBsYXRlIGNsYXNzIEludGVn
ZXJIYXNoPGNsYXNzIEFycmF5PjsKIyAyOCAiYXJyYXkuY3BwIiAyCgoKIyAxICIvdXNyL2luY2x1
ZGUvYysrLzMuMi9mc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVh
bSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9pMzg2LWxpbnV4L2JpdHMvYmFzaWNf
ZmlsZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvaTM4Ni1saW51eC9iaXRzL2Jh
c2ljX2ZpbGUuaCIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIF9fYmFzaWNfZmlsZTsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIF9f
YmFzaWNfZmlsZTxjaGFyPgogICAgewoKICAgICAgX19jX2ZpbGUqIF9NX2NmaWxlOwoKICAgICAg
Ym9vbCBfTV9jZmlsZV9jcmVhdGVkOwoKICAgIHB1YmxpYzoKICAgICAgX19iYXNpY19maWxlKF9f
Y19sb2NrKiBfX2xvY2sgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgX01fb3Blbl9tb2RlKGlvc19i
YXNlOjpvcGVubW9kZSBfX21vZGUsIGludCYgX19wX21vZGUsIGludCYgX19yd19tb2RlLAogICAg
ICAgICAgICAgICAgICAgY2hhciogX19jX21vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgogICAg
ICBvcGVuKGNvbnN0IGNoYXIqIF9fbmFtZSwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgaW50
IF9fcHJvdCA9IDA2NjQpOwoKICAgICAgX19iYXNpY19maWxlKgogICAgICBzeXNfb3BlbihfX2Nf
ZmlsZSogX19maWxlLCBpb3NfYmFzZTo6b3Blbm1vZGUpOwoKICAgICAgX19iYXNpY19maWxlKgog
ICAgICBzeXNfb3BlbihpbnQgX19mZCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSwgYm9vbCBf
X2RlbCk7CgogICAgICBpbnQKICAgICAgc3lzX2dldGMoKTsKCiAgICAgIGludAogICAgICBzeXNf
dW5nZXRjKGludCk7CgogICAgICBfX2Jhc2ljX2ZpbGUqCiAgICAgIGNsb3NlKCk7CgogICAgICBi
b29sCiAgICAgIGlzX29wZW4oKSBjb25zdDsKCiAgICAgIGludAogICAgICBmZCgpOwoKICAgICAg
fl9fYmFzaWNfZmlsZSgpOwoKICAgICAgc3RyZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hh
ciogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihj
aGFyKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbW9mZgogICAgICBzZWVrb2Zm
KHN0cmVhbW9mZiBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
OwoKICAgICAgc3RyZWFtb2ZmCiAgICAgIHNlZWtwb3Moc3RyZWFtb2ZmIF9fcG9zLAogICAgICAg
ICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFz
ZTo6b3V0KTsKCiAgICAgIGludAogICAgICBzeW5jKCk7CiAgICB9Owp9CiMgNDkgIi91c3IvaW5j
bHVkZS9jKysvMy4yL2ZzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWYg
OiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1Ymxp
YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlw
ZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUg
cG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9m
Zl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRz
X3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRlZiBfX2Jhc2lj
X2ZpbGU8Y2hhcj4gX19maWxlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5
cGU6OnN0YXRlX3R5cGUgX19zdGF0ZV90eXBlOwogICAgICB0eXBlZGVmIGNvZGVjdnQ8Y2hhcl90
eXBlLCBjaGFyLCBfX3N0YXRlX3R5cGU+IF9fY29kZWN2dF90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fY29kZWN2dF90eXBlOjpyZXN1bHQgX19yZXNfdHlwZTsKICAgICAgdHlwZWRlZiBj
dHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBpb3NfYmFz
ZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2sgX01fbG9jazsKCgogICAgICBfX2Zp
bGVfdHlwZSBfTV9maWxlOwoKCiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9jdXI7CiAgICAg
IF9fc3RhdGVfdHlwZSBfTV9zdGF0ZV9iZWc7CgoKICAgICAgYm9vbCBfTV9idWZfYWxsb2NhdGVk
OwoKCiAgICAgIGJvb2wgX01fbGFzdF9vdmVyZmxvd2VkOwoKCgogICAgICBjaGFyX3R5cGUqIF9N
X2ZpbGVwb3M7CgogICAgcHVibGljOgoKICAgICAgYmFzaWNfZmlsZWJ1ZigpOwoKICAgICAgdmly
dHVhbAogICAgICB+YmFzaWNfZmlsZWJ1ZigpCiAgICAgIHsKICAgICAgICB0aGlzLT5jbG9zZSgp
OwogICAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgYm9v
bAogICAgICBpc19vcGVuKCkgY29uc3QgeyByZXR1cm4gX01fZmlsZS5pc19vcGVuKCk7IH0KCiAg
ICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywgaW9zX2Jhc2U6
Om9wZW5tb2RlIF9fbW9kZSk7CgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAgY2xvc2UoKTsK
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZvaWQKICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVm
ZmVyKCk7CgogICAgICB2b2lkCiAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CgoK
ICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dtYW55YygpOwojIDE0MCAiL3Vzci9p
bmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBpbnRfdHlwZQogICAgICBfTV91bmRlcmZs
b3dfY29tbW9uKGJvb2wgX19idW1wKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5k
ZXJmbG93KCkgeyByZXR1cm4gX01fdW5kZXJmbG93X2NvbW1vbihmYWxzZSk7IH0KCiAgICAgIHZp
cnR1YWwgaW50X3R5cGUKICAgICAgdWZsb3coKSB7IHJldHVybiBfTV91bmRlcmZsb3dfY29tbW9u
KHRydWUpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlw
ZSBfX2MgPSBfVHJhaXRzOjplb2YoKSk7CiMgMTYwICIvdXNyL2luY2x1ZGUvYysrLzMuMi9mc3Ry
ZWFtIiAzCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgX19j
ID0gX1RyYWl0czo6ZW9mKCkpOwojIDE3MCAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIg
MwogICAgICBpbnRfdHlwZQogICAgICBfTV9yZWFsbHlfb3ZlcmZsb3coaW50X3R5cGUgX19jID0g
X1RyYWl0czo6ZW9mKCkpOwoKCgogICAgICB2b2lkCiAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJu
YWwoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSwgc3RyZWFtc2l6ZSYsIHN0cmVhbXNpemUmKTsKCiAg
ICAgIHZpcnR1YWwgX19zdHJlYW1idWZfdHlwZSoKICAgICAgc2V0YnVmKGNoYXJfdHlwZSogX19z
LCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYo
b2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlv
c19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsK
CiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3BvcywKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkKICAgICAgewogICAg
ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu
ZDsKCgoKICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgewoKICAgICAgICAgICAgb2Zm
X3R5cGUgX19vZmYgPSBfTV9vdXRfY3VyIC0gX01fb3V0X2VuZDsKICAgICAgICAgICAgX01fcmVh
bGx5X292ZXJmbG93KCk7CiAgICAgICAgICAgIGlmIChfX29mZikKICAgICAgICAgICAgICBfTV9m
aWxlLnNlZWtvZmYoX19vZmYsIGlvc19iYXNlOjpjdXIpOwogICAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgIF9NX2ZpbGUuc3luYygpOwogICAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9
IGZhbHNlOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAg
ICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUK
ICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgewogICAg
ICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwoKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAg
ICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKF9fcmV0IDwgX19uICYmIF9NX2luX2N1ciA8IF9N
X2luX2VuZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAqX19zID0gKl9NX2luX2N1
cjsKICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICArK19fczsKICAgICAg
ICAgICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgX01fcGJh
Y2tfZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAg
ICAgIF9fcmV0ICs9IF9fc3RyZWFtYnVmX3R5cGU6OnhzZ2V0bihfX3MsIF9fbiAtIF9fcmV0KTsK
ICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog
ICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7
CiAgICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwogICAgICAgIHJldHVybiBfX3N0cmVhbWJ1Zl90
eXBlOjp4c3B1dG4oX19zLCBfX24pOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX291dHB1
dF91bnNoaWZ0KCk7CiMgMjUxICIvdXNyL2luY2x1ZGUvYysrLzMuMi9mc3RyZWFtIiAzCiAgICAg
IHZvaWQKICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGlm
IChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9N
X2J1ZiwgX01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAg
ICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgICBfTV9maWxlcG9zID0gX01f
YnVmOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3NldF9kZXRlcm1pbmF0ZShvZmZfdHlw
ZSBfX29mZikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jh
c2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7
CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1
ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgICB0aGlz
LT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIF9NX2ZpbGVwb3MgPSBfTV9i
dWYgKyBfX29mZjsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWluYXRl
KHZvaWQpCiAgICAgIHsKICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlmIChf
TV9idWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Omlu
KQogICAgICAgICAgICAgIF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9j
dXIgPT0gX01faW5fZW5kOwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQp
CiAgICAgICAgICAgICAgX19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01fb3V0
X2N1ciA9PSBfTV9vdXRfZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg
ICAgfQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGJhc2ljX2ZpbGVidWY8Y2hhcj46OmludF90
eXBlCiAgICBiYXNpY19maWxlYnVmPGNoYXI+OjpfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19i
dW1wKTsKCgogIHRlbXBsYXRlPD4KICAgIGJhc2ljX2ZpbGVidWY8d2NoYXJfdD46OmludF90eXBl
CiAgICBiYXNpY19maWxlYnVmPHdjaGFyX3Q+OjpfTV91bmRlcmZsb3dfY29tbW9uKGJvb2wgX19i
dW1wKTsKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
dHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfZmls
ZWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2ZpbGVidWZfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoK
ICAgIHByaXZhdGU6CiAgICAgIF9fZmlsZWJ1Zl90eXBlIF9NX2ZpbGVidWY7CgogICAgcHVibGlj
OgoKCiAgICAgIGJhc2ljX2lmc3RyZWFtKCkKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwp
LCBfTV9maWxlYnVmKCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsgfQojIDMzNyAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICBleHBsaWNpdAogICAgICBiYXNp
Y19pZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1Zigp
CiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KCZfTV9maWxlYnVmKTsKICAgICAgICB0aGlzLT5v
cGVuKF9fcywgX19tb2RlKTsKICAgICAgfQoKICAgICAgfmJhc2ljX2lmc3RyZWFtKCkKICAgICAg
eyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCiAg
ICAgIGJvb2wKICAgICAgaXNfb3BlbigpIHsgcmV0dXJuIF9NX2ZpbGVidWYuaXNfb3BlbigpOyB9
CgogICAgICB2b2lkCiAgICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxlYnVm
Lm9wZW4oX19zLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pKQogICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBjbG9zZSgp
CiAgICAgIHsKICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKCgoKCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19v
ZnN0cmVhbSA6IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPgogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9U
cmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Omlu
dF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3Nf
dHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5
cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJh
aXRzX3R5cGU+IF9fZmlsZWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hh
cl90eXBlLCB0cmFpdHNfdHlwZT4gX19vc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAg
X19maWxlYnVmX3R5cGUgX01fZmlsZWJ1ZjsKCiAgICBwdWJsaWM6CgoKICAgICAgYmFzaWNfb2Zz
dHJlYW0oKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYoKQogICAg
ICB7IHRoaXMtPmluaXQoJl9NX2ZpbGVidWYpOyB9CiMgNDE0ICIvdXNyL2luY2x1ZGUvYysrLzMu
Mi9mc3RyZWFtIiAzCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29mc3RyZWFtKGNvbnN0IGNo
YXIqIF9fcywKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9
IGlvc19iYXNlOjpvdXR8aW9zX2Jhc2U6OnRydW5jKQogICAgICA6IF9fb3N0cmVhbV90eXBlKF9f
bnVsbCksIF9NX2ZpbGVidWYoKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1
Zik7CiAgICAgICAgdGhpcy0+b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNp
Y19vZnN0cmVhbSgpCiAgICAgIHsgfQoKCgoKCgogICAgICBfX2ZpbGVidWZfdHlwZSoKICAgICAg
cmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fZmlsZWJ1Zl90eXBlKj4o
Jl9NX2ZpbGVidWYpOyB9CgoKCgoKICAgICAgYm9vbAogICAgICBpc19vcGVuKCkgeyByZXR1cm4g
X01fZmlsZWJ1Zi5pc19vcGVuKCk7IH0KIyA0NTAgIi91c3IvaW5jbHVkZS9jKysvMy4yL2ZzdHJl
YW0iIDMKICAgICAgdm9pZAogICAgICBvcGVuKGNvbnN0IGNoYXIqIF9fcywKICAgICAgICAgICBp
b3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjp0cnVu
YykKICAgICAgewogICAgICAgIGlmICghX01fZmlsZWJ1Zi5vcGVuKF9fcywgX19tb2RlIHwgaW9z
X2Jhc2U6Om91dCkpCiAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGNsb3NlKCkKICAgICAgewogICAgICAgIGlmICgh
X01fZmlsZWJ1Zi5jbG9zZSgpKQogICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICB9CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW0gOiBwdWJsaWMgYmFzaWNf
aW9zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBiYXNpY19maWxlYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fZmlsZWJ1Zl90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lv
c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5
cGU+IF9faW9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBfX2ZpbGVidWZfdHlwZSBf
TV9maWxlYnVmOwoKICAgIHB1YmxpYzoKCgogICAgICBiYXNpY19mc3RyZWFtKCkKICAgICAgOiBf
X2lvc3RyZWFtX3R5cGUoX19udWxsKSwgX01fZmlsZWJ1ZigpCiAgICAgIHsgdGhpcy0+aW5pdCgm
X01fZmlsZWJ1Zik7IH0KIyA1MDYgIi91c3IvaW5jbHVkZS9jKysvMy4yL2ZzdHJlYW0iIDMKICAg
ICAgZXhwbGljaXQKICAgICAgYmFzaWNfZnN0cmVhbShjb25zdCBjaGFyKiBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlv
c19iYXNlOjpvdXQpCiAgICAgIDogX19pb3N0cmVhbV90eXBlKF9fbnVsbCksIF9NX2ZpbGVidWYo
KQogICAgICB7CiAgICAgICAgdGhpcy0+aW5pdCgmX01fZmlsZWJ1Zik7CiAgICAgICAgdGhpcy0+
b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgIH0KCiAgICAgIH5iYXNpY19mc3RyZWFtKCkKICAgICAg
eyB9CgoKCgoKCiAgICAgIF9fZmlsZWJ1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19maWxlYnVmX3R5cGUqPigmX01fZmlsZWJ1Zik7IH0KCgoK
CgogICAgICBib29sCiAgICAgIGlzX29wZW4oKSB7IHJldHVybiBfTV9maWxlYnVmLmlzX29wZW4o
KTsgfQojIDU0MiAiL3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMwogICAgICB2b2lkCiAg
ICAgIG9wZW4oY29uc3QgY2hhciogX19zLAogICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBf
X21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7CiAgICAgICAgaWYg
KCFfTV9maWxlYnVmLm9wZW4oX19zLCBfX21vZGUpKQogICAgICAgICAgc2V0c3RhdGUoaW9zX2Jh
c2U6OmZhaWxiaXQpOwogICAgICB9CgoKICAgICAgdm9pZAogICAgICBjbG9zZSgpCiAgICAgIHsK
ICAgICAgICBpZiAoIV9NX2ZpbGVidWYuY2xvc2UoKSkKICAgICAgICAgIHNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgfQogICAgfTsKfQoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Mr
Ky8zLjIvYml0cy9mc3RyZWFtLnRjYyIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9jKysvMy4yL2Jp
dHMvZnN0cmVhbS50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBfTV9hbGxvY2F0ZV9pbnRlcm5hbF9idWZmZXIoKQogICAgewogICAg
ICBpZiAoIV9NX2J1ZiAmJiBfTV9idWZfc2l6ZV9vcHQpCiAgICAgICAgewogICAgICAgICAgX01f
YnVmX3NpemUgPSBfTV9idWZfc2l6ZV9vcHQ7CgoKICAgICAgICAgIF9NX2J1ZiA9IG5ldyBjaGFy
X3R5cGVbX01fYnVmX3NpemVdOwogICAgICAgICAgX01fYnVmX2FsbG9jYXRlZCA9IHRydWU7CiAg
ICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIF9N
X2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCkKICAgIHsKICAgICAgaWYgKF9NX2J1Zl9hbGxvY2F0
ZWQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX2J1ZjsKICAgICAgICAgIF9NX2J1
ZiA9IF9fbnVsbDsKICAgICAgICAgIF9NX2J1Zl9hbGxvY2F0ZWQgPSBmYWxzZTsKICAgICAgICAg
IHRoaXMtPnNldGcoX19udWxsLCBfX251bGwsIF9fbnVsbCk7CiAgICAgICAgICB0aGlzLT5zZXRw
KF9fbnVsbCwgX19udWxsKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBiYXNpY19maWxlYnVmKCkgOiBfX3N0cmVhbWJ1Zl90eXBlKCksIF9NX2ZpbGUoJl9N
X2xvY2spLAogICAgX01fc3RhdGVfY3VyKF9fc3RhdGVfdHlwZSgpKSwgX01fc3RhdGVfYmVnKF9f
c3RhdGVfdHlwZSgpKSwKICAgIF9NX2J1Zl9hbGxvY2F0ZWQoZmFsc2UpLCBfTV9sYXN0X292ZXJm
bG93ZWQoZmFsc2UpCiAgICB7IF9NX2J1Zl91bmlmaWVkID0gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxl
YnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZW4oY29uc3QgY2hhciogX19zLCBpb3NfYmFzZTo6b3Bl
bm1vZGUgX19tb2RlKQogICAgewogICAgICBfX2ZpbGVidWZfdHlwZSAqX19yZXQgPSBfX251bGw7
CiAgICAgIGlmICghdGhpcy0+aXNfb3BlbigpKQogICAgICAgIHsKICAgICAgICAgIF9NX2ZpbGUu
b3BlbihfX3MsIF9fbW9kZSk7CiAgICAgICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgX01fYWxsb2NhdGVfaW50ZXJuYWxfYnVmZmVyKCk7CiAgICAg
ICAgICAgICAgX01fbW9kZSA9IF9fbW9kZTsKICAgICAgICAgICAgICBfTV9zZXRfaW5kZXRlcm1p
bmF0ZSgpOwoKICAgICAgICAgICAgICBpZiAoKF9fbW9kZSAmIGlvc19iYXNlOjphdGUpCiAgICAg
ICAgICAgICAgICAgICYmIHRoaXMtPnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmVuZCwgX19tb2RlKSA8
IDApCiAgICAgICAgICAgICAgICB0aGlzLT5jbG9zZSgpOwogICAgICAgICAgICAgIF9fcmV0ID0g
dGhpczsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt
ZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46Ol9fZmlsZWJ1Zl90eXBlKgogICAgYmFz
aWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGNsb3NlKCkKICAgIHsKICAgICAgX19m
aWxlYnVmX3R5cGUgKl9fcmV0ID0gX19udWxsOwogICAgICBpZiAodGhpcy0+aXNfb3BlbigpKQog
ICAgICAgIHsKICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RwdXQgPSBfTV9vdXRfY3VyICYmIF9NX291dF9iZWcg
PCBfTV9vdXRfZW5kOwogICAgICAgICAgaWYgKF9fdGVzdHB1dAogICAgICAgICAgICAgICYmIHRy
YWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9yZWFsbHlfb3ZlcmZsb3coX19lb2YpLCBfX2VvZikp
CiAgICAgICAgICAgIHJldHVybiBfX3JldDsKCgogICAgICAgICAgX01fbW9kZSA9IGlvc19iYXNl
OjpvcGVubW9kZSgwKTsKICAgICAgICAgIF9NX2Rlc3Ryb3lfaW50ZXJuYWxfYnVmZmVyKCk7CiAg
ICAgICAgICBfTV9wYmFja19kZXN0cm95KCk7CiMgMTMyICIvdXNyL2luY2x1ZGUvYysrLzMuMi9i
aXRzL2ZzdHJlYW0udGNjIiAzCiAgICAgICAgICBpZiAoX01fZmlsZS5jbG9zZSgpKQogICAgICAg
ICAgICBfX3JldCA9IHRoaXM7CiAgICAgICAgfQoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0g
ZmFsc2U7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHNob3dtYW55YygpCiAgICB7CiAgICAgIHN0cmVhbXNpemUg
X19yZXQgPSAtMTsKICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9NX21vZGUgJiBpb3NfYmFzZTo6aW47
CgogICAgICBpZiAoX190ZXN0aW4gJiYgdGhpcy0+aXNfb3BlbigpKQogICAgICAgIF9fcmV0ID0g
X01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBmYWxzZTsK
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0
cz46OmludF90eXBlCiAgICBiYXNpY19maWxlYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcGJh
Y2tmYWlsKGludF90eXBlIF9faSkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNf
dHlwZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6Omlu
OwoKICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX190ZXN0cGIg
PSBfTV9pbl9iZWcgPCBfTV9pbl9jdXI7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2kpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp
dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19pLCBfX3JldCk7CgogICAgICAgICAgaWYgKF9fdGVzdHBi
KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYg
aW9zX2Jhc2U6Om91dDsKICAgICAgICAgICAgICBib29sIF9fdGVzdGVxID0gdHJhaXRzX3R5cGU6
OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0xXSk7CgoKCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rl
b2YgJiYgX190ZXN0ZXEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01f
aW5fY3VyOwogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICAgICAg
ICAgIC0tX01fb3V0X2N1cjsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBfX2k7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAgICAgaWYg
KF9fdGVzdG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAgICAgICAg
ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19pKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBlbHNlIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAgICAgaWYgKF9fdGVz
dG91dCkKICAgICAgICAgICAgICAgICAgICAtLV9NX291dF9jdXI7CiAgICAgICAgICAgICAgICAg
IF9NX3BiYWNrX2NyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAqX01faW5fY3VyID0gX19jOwog
ICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZWVrb2ZmKC0xLCBpb3NfYmFzZTo6Y3VyKTsKICAgICAgICAgICAgICB0aGlzLT51bmRlcmZsb3co
KTsKICAgICAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX19jLCAqX01faW5fY3VyKSkKICAgICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19jcmVhdGUoKTsK
ICAgICAgICAgICAgICAgICAgICAgICpfTV9pbl9jdXIgPSBfX2M7CiAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICBfX3JldCA9IF9faTsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3Rf
ZW9mKF9faSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dl
ZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0No
YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0
ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9IF9NX291dF9jdXIg
JiYgX01fb3V0X2N1ciA8IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwogICAgICBib29sIF9fdGVzdG91
dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwoKICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAg
ICB7CiAgICAgICAgICBpZiAoX190ZXN0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
Kl9NX291dF9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAg
ICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6
Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBf
X3JldCA9IHRoaXMtPl9NX3JlYWxseV9vdmVyZmxvdyhfX2MpOwogICAgICAgIH0KCiAgICAgIF9N
X2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNlOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJh
c2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBfTV9jb252ZXJ0X3RvX2V4dGVybmFs
KF9DaGFyVCogX19pYnVmLCBzdHJlYW1zaXplIF9faWxlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RyZWFtc2l6ZSYgX19lbGVuLCBzdHJlYW1zaXplJiBfX3BsZW4pCiAgICB7CiAgICAg
IGNvbnN0IGxvY2FsZSBfX2xvYyA9IHRoaXMtPmdldGxvYygpOwogICAgICBjb25zdCBfX2NvZGVj
dnRfdHlwZSYgX19jdnQgPSB1c2VfZmFjZXQ8X19jb2RlY3Z0X3R5cGU+KF9fbG9jKTsKCiAgICAg
IGlmIChfX2N2dC5hbHdheXNfbm9jb252KCkgJiYgX19pbGVuKQogICAgICAgIHsKICAgICAgICAg
IF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihyZWludGVycHJldF9jYXN0PGNoYXIqPihfX2lidWYp
LCBfX2lsZW4pOwogICAgICAgICAgX19wbGVuICs9IF9faWxlbjsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICB7CgogICAgICAgICAgaW50IF9fZXh0X211bHRpcGxpZXIgPSBfX2N2dC5lbmNv
ZGluZygpOwogICAgICAgICAgaWYgKF9fZXh0X211bHRpcGxpZXIgPT0gLTEgfHwgX19leHRfbXVs
dGlwbGllciA9PSAwKQogICAgICAgICAgICBfX2V4dF9tdWx0aXBsaWVyID0gc2l6ZW9mKGNoYXJf
dHlwZSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fYmxlbiA9IF9faWxlbiAqIF9fZXh0X211bHRp
cGxpZXI7CiAgICAgICAgICBjaGFyKiBfX2J1ZiA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0
aW5fYWxsb2NhKF9fYmxlbikpOwogICAgICAgICAgY2hhciogX19iZW5kOwogICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2llbmQ7CiAgICAgICAgICBfX3Jlc190eXBlIF9fciA9IF9fY3Z0Lm91
dChfTV9zdGF0ZV9jdXIsIF9faWJ1ZiwgX19pYnVmICsgX19pbGVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19pZW5kLCBfX2J1ZiwgX19idWYgKyBfX2JsZW4sIF9fYmVu
ZCk7CgogICAgICAgICAgaWYgKF9fciAhPSBjb2RlY3Z0X2Jhc2U6OmVycm9yKQogICAgICAgICAg
ICBfX2JsZW4gPSBfX2JlbmQgLSBfX2J1ZjsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9f
YmxlbiA9IDA7CgogICAgICAgICAgaWYgKF9fYmxlbikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihfX2J1ZiwgX19ibGVuKTsKICAgICAgICAgICAg
ICBfX3BsZW4gKz0gX19ibGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX3IgPT0g
Y29kZWN2dF9iYXNlOjpwYXJ0aWFsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2lyZXN1bWUgPSBfX2llbmQ7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X3JsZW4gPSBfTV9vdXRfZW5kIC0gX19pZW5kOwogICAgICAgICAgICAgIF9fciA9IF9fY3Z0Lm91
dChfTV9zdGF0ZV9jdXIsIF9faXJlc3VtZSwgX19pcmVzdW1lICsgX19ybGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2llbmQsIF9fYnVmLCBfX2J1ZiArIF9fYmxlbiwgX19iZW5k
KTsKICAgICAgICAgICAgICBpZiAoX19yICE9IGNvZGVjdnRfYmFzZTo6ZXJyb3IpCiAgICAgICAg
ICAgICAgICBfX3JsZW4gPSBfX2JlbmQgLSBfX2J1ZjsKICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBfX3JsZW4gPSAwOwogICAgICAgICAgICAgIGlmIChfX3JsZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZWxlbiArPSBfTV9maWxlLnhzcHV0bihfX2J1
ZiwgX19ybGVuKTsKICAgICAgICAgICAgICAgICAgX19wbGVuICs9IF9fcmxlbjsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIF9NX3JlYWxseV9vdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAgICAgIGlu
dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVzdHB1dCA9
IF9NX291dF9jdXIgJiYgX01fb3V0X2JlZyA8IF9NX291dF9lbmQ7CiAgICAgIGJvb2wgX190ZXN0
dW5idWZmZXJlZCA9IF9NX2ZpbGUuaXNfb3BlbigpICYmICFfTV9idWZfc2l6ZV9vcHQ7CgogICAg
ICBpZiAoX190ZXN0cHV0IHx8IF9fdGVzdHVuYnVmZmVyZWQpCiAgICAgICAgewoKICAgICAgICAg
IHN0cmVhbXNpemUgX19lbGVuID0gMDsKICAgICAgICAgIHN0cmVhbXNpemUgX19wbGVuID0gMDsK
CgoKCiAgICAgICAgICBpZiAoX01fZmlsZXBvcyAmJiBfTV9maWxlcG9zICE9IF9NX291dF9iZWcp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX29mZiA9IF9NX291dF9iZWcg
LSBfTV9maWxlcG9zOwogICAgICAgICAgICAgIF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jh
c2U6OmN1cik7CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmICghX190ZXN0dW5idWZmZXJl
ZCkKICAgICAgICAgICAgX01fY29udmVydF90b19leHRlcm5hbChfTV9vdXRfYmVnLCBfTV9vdXRf
ZW5kIC0gX01fb3V0X2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vs
ZW4sIF9fcGxlbik7CgoKCiAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf
X2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy
X3R5cGUgX19wZW5kaW5nID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAg
ICAgICAgIF9NX2NvbnZlcnRfdG9fZXh0ZXJuYWwoJl9fcGVuZGluZywgMSwgX19lbGVuLCBfX3Bs
ZW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZWxlbiA9PSBfX3BsZW4pCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIF9NX3NldF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgICAg
ICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoIV9NX2ZpbGUuc3luYygpKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAgICAg
ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IHRydWU7CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgdHlwZW5hbWUgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfX3N0cmVhbWJ1Zl90
eXBlKgogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNldGJ1ZihjaGFy
X3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGlmICghdGhpcy0+aXNfb3Bl
bigpICYmIF9fcyA9PSAwICYmIF9fbiA9PSAwKQogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDA7
CiAgICAgIGVsc2UgaWYgKF9fcyAmJiBfX24pCiAgICAgICAgewoKCgoKCiAgICAgICAgICBfTV9k
ZXN0cm95X2ludGVybmFsX2J1ZmZlcigpOwoKCiAgICAgICAgICBfTV9idWYgPSBfX3M7CiAgICAg
ICAgICBfTV9idWZfc2l6ZV9vcHQgPSBfTV9idWZfc2l6ZSA9IF9fbjsKICAgICAgICAgIF9NX3Nl
dF9pbmRldGVybWluYXRlKCk7CiAgICAgICAgfQogICAgICBfTV9sYXN0X292ZXJmbG93ZWQgPSBm
YWxzZTsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBf
VHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwgaW9zX2Jh
c2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlw
ZShvZmZfdHlwZSgtMSkpOwogICAgICBib29sIF9fdGVzdGluID0gKGlvc19iYXNlOjppbiAmIF9N
X21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gKGlvc19iYXNlOjpv
dXQgJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwoKCiAgICAgIGludCBfX3dpZHRoID0gdXNlX2Zh
Y2V0PF9fY29kZWN2dF90eXBlPihfTV9idWZfbG9jYWxlKS5lbmNvZGluZygpOwogICAgICBpZiAo
X193aWR0aCA8IDApCiAgICAgICAgX193aWR0aCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZmFpbCA9
IF9fb2ZmICE9IDAgJiYgX193aWR0aCA8PSAwOwoKICAgICAgaWYgKHRoaXMtPmlzX29wZW4oKSAm
JiAhX190ZXN0ZmFpbCAmJiAoX190ZXN0aW4gfHwgX190ZXN0b3V0KSkKICAgICAgICB7CgogICAg
ICAgICAgX01fcGJhY2tfZGVzdHJveSgpOwoKICAgICAgICAgIGlmIChfX3dheSAhPSBpb3NfYmFz
ZTo6Y3VyIHx8IF9fb2ZmICE9IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlw
ZSBfX2NvbXB1dGVkX29mZiA9IF9fd2lkdGggKiBfX29mZjsKCiAgICAgICAgICAgICAgYm9vbCBf
X3Rlc3RnZXQgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fZW5kOwogICAgICAgICAg
ICAgIGJvb2wgX190ZXN0cHV0ID0gX01fb3V0X2N1ciAmJiBfTV9vdXRfYmVnIDwgX01fb3V0X2Vu
ZDsKCgogICAgICAgICAgICAgIGlmIChfX3Rlc3RwdXQgfHwgX01fbGFzdF9vdmVyZmxvd2VkKQog
ICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgdGhpcy0+c3luYygpOwoKICAgICAg
ICAgICAgICAgICAgX01fb3V0cHV0X3Vuc2hpZnQoKTsKICAgICAgICAgICAgICAgIH0KCiAgICAg
ICAgICAgICAgZWxzZSBpZiAoX190ZXN0Z2V0ICYmIF9fd2F5ID09IGlvc19iYXNlOjpjdXIpCiAg
ICAgICAgICAgICAgICBfX2NvbXB1dGVkX29mZiArPSBfTV9pbl9jdXIgLSBfTV9maWxlcG9zOwoK
ICAgICAgICAgICAgICBfX3JldCA9IF9NX2ZpbGUuc2Vla29mZihfX2NvbXB1dGVkX29mZiwgX193
YXksIF9fbW9kZSk7CiAgICAgICAgICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUoKTsKICAgICAg
ICAgICAgfQoKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3Jl
dCA9IF9NX2ZpbGUuc2Vla29mZihfX29mZiwgaW9zX2Jhc2U6OmN1ciwgX19tb2RlKTsKICAgICAg
ICAgICAgICBfX3JldCArPSBtYXgoX01fb3V0X2N1ciwgX01faW5fY3VyKSAtIF9NX2ZpbGVwb3M7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9NX2xhc3Rfb3ZlcmZsb3dlZCA9IGZhbHNl
OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJh
aXRzPjo6cG9zX3R5cGUKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz
ZWVrcG9zKHBvc190eXBlIF9fcG9zLCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewoK
CiAgICAgIHJldHVybiB0aGlzLT5zZWVrb2ZmKG9mZl90eXBlKF9fcG9zKSwgaW9zX2Jhc2U6OmJl
ZywgX19tb2RlKTsKCiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2ZpbGVidWY8X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBfTV9vdXRwdXRfdW5zaGlmdCgpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfZmlsZWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGJvb2wg
X190ZXN0YmVnID0gZ3B0cigpID09IGViYWNrKCkgJiYgcHB0cigpID09IHBiYXNlKCk7CgogICAg
ICBpZiAoX190ZXN0YmVnICYmIF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgewogICAg
ICAgICAgX01fYnVmX2xvY2FsZSA9IF9fbG9jOwogICAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0
ID0gdHJ1ZTsKICAgICAgICB9CgoKCgoKICAgICAgX01fbGFzdF9vdmVyZmxvd2VkID0gZmFsc2U7
CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19maWxlYnVmPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pZnN0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgYmFzaWNfb2ZzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz
IGJhc2ljX2ZzdHJlYW08Y2hhcj47CgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfZmls
ZWJ1Zjx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaWZzdHJlYW08d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19mc3RyZWFtPHdjaGFyX3Q+OwoKfQojIDU2NSAi
L3Vzci9pbmNsdWRlL2MrKy8zLjIvZnN0cmVhbSIgMiAzCiMgMzEgImFycmF5LmNwcCIgMgojIDQ1
ICJhcnJheS5jcHAiCmxpbGZlc19hbGxvY2F0b3I8Y2VsbD4gRlNGaWw6OmRlZmFsbG9jOwoKZXh0
ZXJuIGludCBkZWJ1Z19sZXZlbDsKCgoKCnN0YXRpYyB0c2VyaWFsIGFycmF5X2Jhc2Vfc2VyaWFs
OwpzdGF0aWMgdHNlcmlhbCBhcnJheV9zaXplX3NlcmlhbDsKc3RhdGljIHRzZXJpYWwgYXJndW1l
bnRfc2VyaWFsWzIwXTsKCmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfZnNfdHlw
ZV9mKCAia2V5X2ZzIiAsICJrZXlfZnMiICwgIltib3RdICsgW0FSUkFZX1NJWkVcXF0uIiAsICJh
cnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90
eXBlX2tleV9mc19zZXJpYWw7CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfaW50
ZWdlcl90eXBlX2YoICJrZXlfaW50ZWdlciIgLCAia2V5X2ludGVnZXIiICwgIlsna2V5X2ZzJ10g
KyBbQVJSQVlfQkFTRVxcXS4iICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1RZUEVfRik7IGV4dGVy
biAiQyIgdHNlcmlhbCBidWlsdGluX3R5cGVfa2V5X2ludGVnZXJfc2VyaWFsOwpidWlsdGluX3R5
cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X2ludGhhc2hfdHlwZV9mKCAia2V5X2ludGhhc2giICwg
ImtleV9pbnRoYXNoIiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5fVFlQ
RV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfaW50aGFzaF9zZXJpYWw7
CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19rZXlfc3RyaW5nX3R5cGVfZiggImtleV9z
dHJpbmciICwgImtleV9zdHJpbmciICwgIlsna2V5X2ZzJ10uIiAsICJhcnJheS5jcHAiICwgQlVJ
TFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90eXBlX2tleV9zdHJpbmdf
c2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X2Zsb2F0X3R5cGVfZigg
ImtleV9mbG9hdCIgLCAia2V5X2Zsb2F0IiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAs
IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfZmxv
YXRfc2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fa2V5X3R5cGVfdHlwZV9m
KCAia2V5X3R5cGUiICwgImtleV90eXBlIiAsICJbJ2tleV9mcyddLiIgLCAiYXJyYXkuY3BwIiAs
IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9rZXlfdHlw
ZV9zZXJpYWw7CmJ1aWx0aW5fdHlwZV90YWJsZSBidWlsdGluaW5mb19hcnJheV92YWx1ZV90eXBl
XzEoICJhcnJheV92YWx1ZSIgLCAiYXJyYXlfdmFsdWUiICwgIiIgLCAiYXJyYXkuY3BwIiAsIEJV
SUxUSU5fVFlQRSk7IGV4dGVybiAiQyIgdHNlcmlhbCBidWlsdGluX3R5cGVfYXJyYXlfdmFsdWVf
c2VyaWFsOwpidWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfdmFsdWVfaW50ZWdl
cl90eXBlX2YoICJhcnJheV92YWx1ZV9pbnRlZ2VyIiAsICJhcnJheV92YWx1ZV9pbnRlZ2VyIiAs
ICJbJ2FycmF5X3ZhbHVlJ10uIiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRl
cm4gIkMiIHRzZXJpYWwgYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2ludGVnZXJfc2VyaWFsOwpi
dWlsdGluX3R5cGVfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfdmFsdWVfZmxvYXRfdHlwZV9mKCAi
YXJyYXlfdmFsdWVfZmxvYXQiICwgImFycmF5X3ZhbHVlX2Zsb2F0IiAsICJbJ2FycmF5X3ZhbHVl
J10uIiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9UWVBFX0YpOyBleHRlcm4gIkMiIHRzZXJpYWwg
YnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2Zsb2F0X3NlcmlhbDsKYnVpbHRpbl90eXBlX3RhYmxl
IGJ1aWx0aW5pbmZvX2FycmF5X3ZhbHVlX3R5cGVfdHlwZV9mKCAiYXJyYXlfdmFsdWVfdHlwZSIg
LCAiYXJyYXlfdmFsdWVfdHlwZSIgLCAiWydhcnJheV92YWx1ZSddLiIgLCAiYXJyYXkuY3BwIiAs
IEJVSUxUSU5fVFlQRV9GKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9hcnJheV92
YWx1ZV90eXBlX3NlcmlhbDsKYnVpbHRpbl90eXBlX3RhYmxlIGJ1aWx0aW5pbmZvX2FycmF5X3Zh
bHVlX3N0cmluZ190eXBlX2YoICJhcnJheV92YWx1ZV9zdHJpbmciICwgImFycmF5X3ZhbHVlX3N0
cmluZyIgLCAiWydhcnJheV92YWx1ZSddLiIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5fVFlQRV9G
KTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV9hcnJheV92YWx1ZV9zdHJpbmdfc2Vy
aWFsOwoKYnVpbHRpbl90eXBlX3RhYmxlIGJ1aWx0aW5pbmZvX3Vuc3BlY2lmaWVkX2tleV90eXBl
XzEoICJ1bnNwZWNpZmllZF9rZXkiICwgInVuc3BlY2lmaWVkX2tleSIgLCAiIiAsICJhcnJheS5j
cHAiICwgQlVJTFRJTl9UWVBFKTsgZXh0ZXJuICJDIiB0c2VyaWFsIGJ1aWx0aW5fdHlwZV91bnNw
ZWNpZmllZF9rZXlfc2VyaWFsOwoKdHNlcmlhbCBwcmVkX3R5cGU7CgoKdHNlcmlhbCB0c2V0c2V0
KGNvbnN0IGNoYXIqIHRuYW1lKSB7CiAgY291dCA8PCAidHNldCgpIGluIGFycmF5LmNwcCB0bmFt
ZSA9ICAiIDw8IHRuYW1lIDw8IGVuZGw7CiAgICAgICAgY29uc3QgdHlwZSogdCA9IG1vZHVsZTo6
QnVpbHRpbk1vZHVsZSgpLT5TZWFyY2godG5hbWUpOwogICAgICAgIGlmICh0ID09IF9fbnVsbCkg
dCA9IG1vZHVsZTo6Q29yZU1vZHVsZSgpLT5TZWFyY2godG5hbWUpOwogICAgICAgIGlmICh0ID09
IF9fbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICIgRVJST1IhIE5PVCBG
T1VORCAiIDw8IHRuYW1lIDw8IGVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm4gVFNfSU5WQUxJ
RDsKICAgICAgICB9CiAgICAgICAgZWxzZSByZXR1cm4gdC0+R2V0U2VyaWFsTm8oKTsKfQoKCnN0
YXRpYyB2b2lkIGluaXQodm9pZCkKewoKICAgICAgICBwcmVkX3R5cGUgPSB0c2V0c2V0KCJwcmVk
Iik7CgogICAgICAgIGFycmF5X2Jhc2Vfc2VyaWFsID0gdHNldHNldCgiQVJSQVlfQkFTRVxcIik7
CiAgICAgICAgYXJyYXlfc2l6ZV9zZXJpYWwgPSB0c2V0c2V0KCJBUlJBWV9TSVpFXFwiKTsKCgoK
ICAgICAgICBmb3IgKGludCBpPTA7aTwxNTtpKyspIHsKICAgICAgICAgICAgICAgIG9zdHJpbmdz
dHJlYW0gb3NzOwogICAgICAgICAgICAgICAgb3NzIDw8ICJhcmciIDw8IGkrMSA8PCAiXFwiOwog
ICAgICAgICAgICAgICAgYXJndW1lbnRfc2VyaWFsW2ldID0gdHNldHNldChvc3Muc3RyKCkuY19z
dHIoKSk7CiAgICAgICAgfQp9CgpzdGF0aWMgSW5pdEZ1bmN0aW9uIElGKGluaXQsMjApOwojIDEx
MiAiYXJyYXkuY3BwIgp2b2lkIEFyZ0J1Zjo6U2V0VmFsdWUodHNlcmlhbCB0cyxpbnQgbnVtKQp7
CgogICAgICAgIGlmICh0cyA9PSBidWlsdGluX3R5cGVfYXJyYXlfdmFsdWVfc2VyaWFsKSBTZXRG
bGFnKFZGUyxudW0pOwogICAgICAgIGVsc2UgaWYgKHRzID09IGJ1aWx0aW5fdHlwZV9hcnJheV92
YWx1ZV9mbG9hdF9zZXJpYWwpIFNldEZsYWcoVkZTLG51bSk7CiAgICAgICAgZWxzZSBpZiAodHMg
PT0gYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX3N0cmluZ19zZXJpYWwpIFNldEZsYWcoVkZTLG51
bSk7CiAgICAgICAgZWxzZSBpZiAodHMgPT0gYnVpbHRpbl90eXBlX2FycmF5X3ZhbHVlX2ludGVn
ZXJfc2VyaWFsKSBTZXRGbGFnKFZJTlQsbnVtKTsKICAgICAgICBlbHNlIGlmICh0cyA9PSBidWls
dGluX3R5cGVfYXJyYXlfdmFsdWVfdHlwZV9zZXJpYWwpIFNldEZsYWcoVlNUUixudW0pOwogICAg
ICAgIGVsc2UgU2V0RmxhZyhJTlZBTElEX1RZUEUsbnVtKTsKfTsKCmlubGluZSBpbnQgTWFrZUJv
dW5kVmFsdWUoaW50IHNpemUpCnsKCgoKCiAgICAgICAgaW50IHMgPSAxOwogICAgICAgIHdoaWxl
KDEpIHsKICAgICAgICAgICAgICAgIGlmIChzID49IHNpemUpIHJldHVybiBzOwogICAgICAgICAg
ICAgICAgcyAqPSAyOwogICAgICAgIH0KfQoKdm9pZCBBcmdCdWY6OlNldEtleShGU1AmIGFyZyxp
bnQgbnVtKQp7CgogICAgICAgIGlmIChjMlNUUlNvclZBUlMoYXJnLlJlYWRDZWxsKCkpID09IGJ1
aWx0aW5fdHlwZV9rZXlfdHlwZV9zZXJpYWwgfHwKICAgICAgICAgICBjMlNUUlNvclZBUlMoYXJn
LlJlYWRDZWxsKCkpID09IGJ1aWx0aW5fdHlwZV9rZXlfaW50aGFzaF9zZXJpYWwgKSB7CiAgICAg
ICAgICAgICAgICBpbnQgc2l6ZSA9IDB4MjA7CgogICAgICAgICAgICAgICAgaWYgKGFyZy5Jc05v
ZGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICBGU1AgZiA9IGFyZy5Gb2xsb3dJZkV4aXN0
KGFycmF5X3NpemVfc2VyaWFsKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuSXNWYWxp
ZCgpICYmIGYuSXNJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZSA9IGMySU5UKGYuUmVhZENlbGwoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICBTZXRLZXkoTWFrZUJvdW5kVmFsdWUoc2l6ZSksLTEpO1NldEZsYWcoS1NUUixudW0pOwogICAg
ICAgIH0gZWxzZSBpZiAoYzJTVFJTb3JWQVJTKGFyZy5SZWFkQ2VsbCgpKSA9PSBidWlsdGluX3R5
cGVfa2V5X2ZzX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgYzJTVFJTb3JWQVJTKGFyZy5S
ZWFkQ2VsbCgpKSA9PSBidWlsdGluX3R5cGVfa2V5X3N0cmluZ19zZXJpYWwgfHwKICAgICAgICAg
ICAgICAgICAgIGMyU1RSU29yVkFSUyhhcmcuUmVhZENlbGwoKSkgPT0gYnVpbHRpbl90eXBlX2tl
eV9mbG9hdF9zZXJpYWwpIHsKICAgICAgICAgICAgICAgIGludCBzaXplID0gMHgyMDsKCiAgICAg
ICAgICAgICAgICBpZiAoYXJnLklzTm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEZT
UCBmID0gYXJnLkZvbGxvd0lmRXhpc3QoYXJyYXlfc2l6ZV9zZXJpYWwpOwogICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZi5Jc1ZhbGlkKCkgJiYgZi5Jc0ludGVnZXIoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplID0gYzJJTlQoZi5SZWFkQ2VsbCgpKTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIFNldEtleShNYWtlQm91bmRWYWx1ZShzaXplKSwtMSk7
U2V0RmxhZyhLRlMsbnVtKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaW50IHNp
emUgPSAtMTsKICAgICAgICAgICAgICAgIGludCBiYXNlID0gLTE7CgoKICAgICAgICAgICAgICAg
IGlmIChhcmcuSXNOb2RlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgRlNQIGYxID0gYXJn
LkZvbGxvd0lmRXhpc3QoYXJyYXlfc2l6ZV9zZXJpYWwpOwogICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoZjEuSXNWYWxpZCgpICYmIGYxLklzSW50ZWdlcigpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemUgPSBjMklOVChmMS5SZWFkQ2VsbCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgRlNQIGYyID0gYXJnLkZvbGxvd0lmRXhpc3QoYXJyYXlfYmFzZV9zZXJpYWwpOwog
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZjIuSXNWYWxpZCgpICYmIGYyLklzSW50ZWdlcigp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBjMklOVChmMi5SZWFkQ2Vs
bCgpKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSAtMSAm
JiBiYXNlICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFNldEtleShzaXplLGJhc2Up
O1NldEZsYWcoS0lOVCxudW0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgIGNvdXQgPDwgImtleV9pbnRlZ2VyIG11c3QgYmUgc3BlY2lmaWVzIEFSUkFZ
X1NJWkUgYW5kIEFSUkFZX0JBU0VcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIFNldEZsYWco
SU5WQUxJRF9GUyxudW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1
cm47Cn0KIyAyMzIgImFycmF5LmNwcCIKc3RhdGljIEFycmF5RW50cnlCYXNlIGFycmF5X2VudHJ5
X2Jhc2VfZXJyb3I7CkFycmF5RW50cnlCYXNlICpBcnJheUVudHJ5QmFzZTo6ZXJyb3IgPSAmIGFy
cmF5X2VudHJ5X2Jhc2VfZXJyb3I7CnN0YXRpYyBBcnJheUVudHJ5QmFzZSBhcnJheV9lbnRyeV9i
YXNlX2dvb2RfZmluaXNoOwpBcnJheUVudHJ5QmFzZSAqQXJyYXlFbnRyeUJhc2U6Omdvb2RfZmlu
aXNoID0gJiBhcnJheV9lbnRyeV9iYXNlX2dvb2RfZmluaXNoOwpzdGF0aWMgQXJyYXlFbnRyeUJh
c2UgYXJyYXlfZW50cnlfYmFzZV9yZW1vdmVfbWU7CkFycmF5RW50cnlCYXNlICpBcnJheUVudHJ5
QmFzZTo6cmVtb3ZlX21lID0gJiBhcnJheV9lbnRyeV9iYXNlX3JlbW92ZV9tZTsKCkFycmF5TWFr
ZXIgKkFyZ0J1Zjo6TWFrZUFycmF5TWFrZXIoQXJnQnVmICpwcmV2LCBBcnJheU1ha2VyICpuZXh0
LCBsaWxmZXNfYWxsb2NhdG9yPGNlbGw+ICZhbGxvYykKewogICAgICAgIEFycmF5TWFrZXIgKnJl
dDsKICAgICAgICBzd2l0Y2goIEZsYWcoKSApCiAgICAgICAgewogICAgICAgIGNhc2UgVklOVDoK
ICAgICAgICAgICAgICAgIGlmIChwcmV2ID09IF9fbnVsbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gbmV3IEFycmF5TWFrZXJUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRyeTxEdW1teUtl
eSwgSW50RmlsPiA+KG5leHQsIGFsbG9jKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHByZXYtPkZsYWcoKSA9PSBLRlMg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5
VGVtcGxhdGU8IEFycmF5UmVzdWx0RW50cnk8TGluZWFyRlNQLCBJbnRGaWw+ID4obmV4dCwgYWxs
b2MpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRy
eTx1bG9uZyAsIEludEZpbD4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBWU1RSOgogICAgICAgICAgICAgICAgaWYg
KHByZXYgPT0gX19udWxsKQogICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlN
YWtlclRlbXBsYXRlPCBBcnJheVJlc3VsdEVudHJ5PER1bW15S2V5LCBDZWxsRmlsPiA+KG5leHQs
IGFsbG9jKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgaWYoIHByZXYtPkZsYWcoKSA9PSBLRlMgKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5UmVz
dWx0RW50cnk8IExpbmVhckZTUCwgQ2VsbEZpbCA+ID4obmV4dCwgYWxsb2MpOwogICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
bmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlSZXN1bHRFbnRyeTwgdWxvbmcgLCBDZWxs
RmlsID4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBi
cmVhazsKCiAgICAgICAgY2FzZSBWRlM6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251
bGwpCiAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8
IEFycmF5UmVzdWx0RW50cnk8RHVtbXlLZXksIEZTRmlsPiA+KG5leHQsIGFsbG9jKTsKICAgICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg
aWYoIHByZXYtPkZsYWcoKSA9PSBLRlMgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5UmVzdWx0RW50cnk8TGluZWFy
RlNQLCBGU0ZpbD4gPihuZXh0LCBhbGxvYyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRl
bXBsYXRlPCBBcnJheVJlc3VsdEVudHJ5PHVsb25nICwgRlNGaWw+ID4obmV4dCwgYWxsb2MpOwog
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgS0lO
VDoKICAgICAgICAgICAgICAgIGlmIChwcmV2ID09IF9fbnVsbCkKICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJJbnRUZW1wbGF0ZTwgQXJyYXlIYXNoRW50cnk8RHVt
bXlLZXksIFBzZXVkb0hhc2g8IEFycmF5RW50cnk8dWxvbmc+LCBsaWxmZXNfYWxsb2NhdG9yPCBB
cnJheUVudHJ5PHVsb25nPiogPiA+LCBJbnRGaWw+ID4obmV4dCwgYWxsb2MsIHNpemUsIGJhc2Up
OwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgICBpZiggcHJldi0+RmxhZygpID09IEtGUyApCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJJbnRLZXlUZW1wbGF0ZTwgQXJyYXlIYXNoRW50
cnk8IExpbmVhckZTUCwgUHNldWRvSGFzaDwgQXJyYXlFbnRyeTx1bG9uZz4sIGxpbGZlc19hbGxv
Y2F0b3I8IEFycmF5RW50cnk8dWxvbmc+KiA+ID4sIEludEZpbD4gPihuZXh0LCBhbGxvYywgc2l6
ZSwgYmFzZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlckludEtleVRlbXBsYXRlPCBBcnJheUhh
c2hFbnRyeTwgdWxvbmcgLCBQc2V1ZG9IYXNoPCBBcnJheUVudHJ5PHVsb25nPiwgbGlsZmVzX2Fs
bG9jYXRvcjwgQXJyYXlFbnRyeTx1bG9uZz4qID4gPiwgSW50RmlsPiA+KG5leHQsIGFsbG9jLCBz
aXplLCBiYXNlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwoKICAg
ICAgICBjYXNlIEtTVFI6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251bGwpCiAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8IEFycmF5SGFz
aEVudHJ5PER1bW15S2V5LCBJbnRlZ2VySGFzaDwgQXJyYXlFbnRyeTx1bG9uZz4sIGxpbGZlc19h
bGxvY2F0b3I8IEFycmF5RW50cnk8dWxvbmc+KiA+ID4sIENlbGxGaWw+ID4obmV4dCwgYWxsb2Ms
IHNpemUpOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgICBpZiggcHJldi0+RmxhZygpID09IEtGUyApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlIYXNo
RW50cnk8IExpbmVhckZTUCwgSW50ZWdlckhhc2g8IEFycmF5RW50cnk8dWxvbmc+LCBsaWxmZXNf
YWxsb2NhdG9yPCBBcnJheUVudHJ5PHVsb25nPiogPiA+LCBDZWxsRmlsPiA+KG5leHQsIGFsbG9j
LCBzaXplKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyS2V5VGVtcGxhdGU8IEFycmF5SGFzaEVu
dHJ5PCB1bG9uZyAsIEludGVnZXJIYXNoPCBBcnJheUVudHJ5PHVsb25nPiwgbGlsZmVzX2FsbG9j
YXRvcjwgQXJyYXlFbnRyeTx1bG9uZz4qID4gPiwgQ2VsbEZpbD4gPihuZXh0LCBhbGxvYywgc2l6
ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2Fz
ZSBLRlM6CiAgICAgICAgICAgICAgICBpZiAocHJldiA9PSBfX251bGwpCiAgICAgICAgICAgICAg
ICAgICAgICAgIHJldCA9IG5ldyBBcnJheU1ha2VyVGVtcGxhdGU8IEFycmF5SGFzaEVudHJ5PER1
bW15S2V5LCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4sIGxpbGZlc19hbGxv
Y2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihuZXh0LCBhbGxvYywg
c2l6ZSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIGlmKCBwcmV2LT5GbGFnKCkgPT0gS0ZTICkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRlbXBsYXRlPCBBcnJheUhhc2hF
bnRyeTwgTGluZWFyRlNQLCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4sIGxp
bGZlc19hbGxvY2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihuZXh0
LCBhbGxvYywgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBuZXcgQXJyYXlNYWtlcktleVRlbXBsYXRlPCBBcnJh
eUhhc2hFbnRyeTwgdWxvbmcgLCBMaW5lYXJGU1BIYXNoPCBBcnJheUVudHJ5PExpbmVhckZTUD4s
IGxpbGZlc19hbGxvY2F0b3I8IEFycmF5RW50cnk8TGluZWFyRlNQPiogPiA+LCBGU0ZpbD4gPihu
ZXh0LCBhbGxvYywgc2l6ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVh
azsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlVua25vd24hISIg
PDwgZW5kbDsKICAgICAgICAgICAgICAgIHJldCA9IF9fbnVsbDsKCiAgICAgICAgfQogICAgICAg
IHJldHVybiByZXQ7Cn0KIyAzNDUgImFycmF5LmNwcCIKc3RhdGljIEludGVnZXJIYXNoPEFycmF5
PiBhcnJheV9oYXNoOwoKQXJyYXk6OkFycmF5KEZTUCBwcmVkX2ZzKQp7CiAgICAgICAgYWxsb2Nw
ID0gbmV3IGxpbGZlc19hbGxvY2F0b3I8Y2VsbD47CgoKCgoKCgogICAgICAgIHNlcmlhbF9udW1i
ZXIgPSBjMlNUUlMocHJlZF9mcy5SZWFkQ2VsbCgpKTsKICAgICAgICBpbnQgTiA9IHR5cGU6OlNl
cmlhbChzZXJpYWxfbnVtYmVyKS0+R2V0TkZlYXR1cmVzKCk7CiAgICAgICAgYXJpdHk9TjsKCgoK
ICAgICAgICBBcmdCdWYgKiBhcmdfYnVmID0gbmV3IEFyZ0J1ZltOXTsKICAgICAgICA7CiAgICAg
ICAgaW50IGk7CiAgICAgICAgaW52YWxpZF9mbGFnID0gMDsKICAgICAgICBmb3IoIGk9MDsgaTxO
OyBpKysgKQogICAgICAgICAgICAgICAgYXJnX2J1ZltpXS5Jbml0KCk7CiAgICAgICAgQXJnQnVm
KiBrZXkgPSBhcmdfYnVmOwogICAgICAgIEFyZ0J1ZiogdmFsdWUgPSAmYXJnX2J1ZltOLTFdOwog
ICAgICAgIGtleXMgPSAwO3ZhbHVlcyA9IDA7CiAgICAgICAgZm9yIChpPTA7aTxOO2krKykgewoK
ICAgICAgICAgICAgICAgIEZTUCBhcmdfTiA9IHByZWRfZnMuRm9sbG93KGFyZ3VtZW50X3Nlcmlh
bFtpXSk7CgogICAgICAgICAgICAgICAgaWYgKCAhIChhcmdfTi5Jc1ZhcigpIHx8IGFyZ19OLklz
U3RyKCkgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9mbGFnID0gMTsKICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICB0c2VyaWFsIGFyZ19zID0gYzJTVFJTb3JWQVJTKGFyZ19OLlJlYWRDZWxsKCkpOwog
ICAgICAgICAgICAgICAgaWYgKGFyZ19zID09IGJ1aWx0aW5fdHlwZV9rZXlfaW50ZWdlcl9zZXJp
YWwgfHwKICAgICAgICAgICAgICAgICAgICAgICAgYXJnX3MgPT0gYnVpbHRpbl90eXBlX2tleV90
eXBlX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgICAgICBhcmdfcyA9PSBidWlsdGluX3R5
cGVfa2V5X2ludGhhc2hfc2VyaWFsIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zID09
IGJ1aWx0aW5fdHlwZV9rZXlfc3RyaW5nX3NlcmlhbCB8fAogICAgICAgICAgICAgICAgICAgICAg
ICBhcmdfcyA9PSBidWlsdGluX3R5cGVfa2V5X2Zsb2F0X3NlcmlhbCB8fAogICAgICAgICAgICAg
ICAgICAgICAgICBhcmdfcyA9PSBidWlsdGluX3R5cGVfa2V5X2ZzX3NlcmlhbCkgewoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICgqa2V5KyspLlNldEtleShhcmdfTixpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAga2V5cysrOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICgqdmFsdWUtLSkuU2V0VmFsdWUoYXJnX3MsaSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgIHZhbHVlcysrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAg
Zm9yIChpPTA7aTxOO2krKykgewogICAgICAgICAgICAgICAgaWYgKGFyZ19idWZbaV0uRmxhZygp
ID49IElOVkFMSUQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY291dDw8ImRlY2xhcmUgZnVu
Y3Rpb24gOiBpbnZhbGlkIGFyZ3VtZW50IC5cbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGNv
dXQ8PCBpIDw8ICJ0aCBhcmd1bWVudCBpcyAiOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YXJnX2J1ZltpXS5GbGFnKCkgPT0gSU5WQUxJRF9UWVBFKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvdXQgPDwgIm5vIHN1cHBvcnRlZCB0eXBlLlxuIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoYXJnX2J1ZltpXS5GbGFnKCkgPT0gSU5WQUxJRF9GUykKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJpbnRlZ2VyIGJ1dCBpbnZhbGlkIGZl
YXR1cmVzLlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvdXQgPDwgInVua25vd24gLi4uIFxuIjsKICAgICAgICAgICAgICAg
ICAgICAgICAgaW52YWxpZF9mbGFnID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgICAgaWYgKGtleXMgIT0gMCkgewogICAgICAgICAgICAgICAga2V5Wy0xXS5TZXRSZXN1bHRG
bGFnKCk7CiAgICAgICAgfQoKCgoKCgoKICAgICAgICBpZiAoIWludmFsaWRfZmxhZykgewogICAg
ICAgICAgICAgICAgQXJyYXkqIHJldCA9IGFycmF5X2hhc2guQWRkKHRoaXMpOwogICAgICAgICAg
ICAgICAgaWYgKHJldCAhPSBfX251bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY291dCA8
PCAiRHVwbGljYXRlIGFycmF5IGRlY2xhcmF0aW9uLlxuIjsKICAgICAgICAgICAgICAgICAgICAg
ICAgYXJyYXlfaGFzaC5BZGQocmV0KTsKICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZF9m
bGFnID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFyZ19idWZbTi0xXS5GbGFnKCkg
PT0gS0ZTICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1ha2VyID0gbmV3IEFycmF5TWFrZXJLZXlUZW1wbGF0ZTwgQXJyYXlFbnRyeTwg
TGluZWFyRlNQID4gPihfX251bGwsICphbGxvY3ApOwogICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIGFyZ19idWZbTi0xXS5GbGFnKCkgPT0g
S1NUUiB8fCBhcmdfYnVmW04tMV0uRmxhZygpID09IEtJTlQgKQogICAgICAgICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFrZXIgPSBuZXcgQXJyYXlN
YWtlcktleVRlbXBsYXRlPCBBcnJheUVudHJ5PCB1bG9uZyA+ID4oX19udWxsLCAqYWxsb2NwKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
YWtlciA9IG5ldyBBcnJheU1ha2VyU2VudGluZWwoKmFsbG9jcCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCBpbnQgaT1OLTE7IGk+MDsgaS0t
ICkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ha2VyID0gYXJnX2J1ZltpXS5NYWtlQXJyYXlNYWtlcigmYXJnX2J1ZltpLTFdLCBtYWtl
ciwgKmFsbG9jcCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgbWFrZXIgPSBhcmdfYnVmWzBdLk1ha2VBcnJheU1ha2VyKF9fbnVsbCwgbWFrZXIsICph
bGxvY3ApOwogICAgICAgICAgICAgICAgICAgICAgICByb290ID0gX19udWxsOwogICAgICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxldGVbXSBhcmdfYnVmOwogICAgICAgIHJldHVy
bjsKfQoKdm9pZCBBcnJheTo6Q2xlYXJBbGwoKSB7CiAgICAgICAgYWxsb2NwLT5kZXN0cm95X2Fs
bG9jYXRvcigpOwogICAgICAgIGRlbGV0ZSBhbGxvY3A7CiAgICAgICAgcm9vdCA9IF9fbnVsbDsK
ICAgICAgICBhbGxvY3AgPSBuZXcgbGlsZmVzX2FsbG9jYXRvcjxjZWxsPjsKICAgICAgICBtYWtl
ci0+U2V0QWxsb2MoKmFsbG9jcCk7Cn0KCnZvaWQgQXJyYXk6OkRlc3Ryb3koKSB7CiAgICAgICAg
YWxsb2NwLT5kZXN0cm95X2FsbG9jYXRvcigpOwogICAgICAgIGRlbGV0ZSBhbGxvY3A7CiAgICAg
ICAgcm9vdCA9IF9fbnVsbDsKICAgICAgICBhcnJheV9oYXNoLkRlbGV0ZSh0aGlzKTsKICAgICAg
ICBkZWxldGUgdGhpczsKfQoKQXJyYXkmIEFycmF5OjpTZWFyY2goY2VsbCBwcmVkKSB7CgogICAg
ICAgIHRzZXJpYWwgcyA9IGMyU1RSUyhGU1AocHJlZCkuUmVhZENlbGwoKSk7CiAgICAgICAgcmV0
dXJuICooYXJyYXlfaGFzaC5GaW5kKHMpKTsKfQoKYm9vbCBBcnJheTo6U2V0KGNlbGwgcHJlZCkK
ewogICAgICAgIEZTUCBwcmVkX2ZzKHByZWQpOwoKCgoKCgoKICAgICAgICBpZiggcm9vdCA9PSBf
X251bGwgKQogICAgICAgICAgICAgICAgcm9vdCA9IG1ha2VyLT5NYWtlRW50cnkoKTsKICAgICAg
ICA7CgogICAgICAgIEFycmF5RW50cnlCYXNlICpjdXJyZW50ID0gcm9vdDsKICAgICAgICBBcnJh
eU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGZvciAoaW50IGk9MDsgaTxhcml0eTsgaSsrKSB7
CgoKCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBwID0gcC0+TmV4dCgpOwogICAg
ICAgICAgICAgICAgRlNQIGYgPSBwcmVkX2ZzLkZvbGxvdyhhcmd1bWVudF9zZXJpYWxbaV0pOwog
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPlNldChmLCBwKTsKICAgICAgICB9CiAg
ICAgICAgcmV0dXJuIGN1cnJlbnQgIT0gQXJyYXlFbnRyeUJhc2U6OmVycm9yOwp9Cgpib29sIEFy
cmF5OjpHZXQoY2VsbCBwcmVkKQp7CiAgICAgICAgRlNQIHByZWRfZnMocHJlZCk7CiMgNTE2ICJh
cnJheS5jcHAiCiAgICAgICAgQXJyYXlFbnRyeUJhc2UgKmN1cnJlbnQgPSByb290OwoKICAgICAg
ICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgIHsKCgoKICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZvciAoaW50IGk9MDsgaTxhcml0eTsgaSsrKSB7
CiAgICAgICAgICAgICAgICBpZiggY3VycmVudCA9PSBfX251bGwgKQogICAgICAgICAgICAgICAg
ewoKCgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICB9CgoKCiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+R2V0KHByZWRfZnMuRm9s
bG93KGFyZ3VtZW50X3NlcmlhbFtpXSkpOwogICAgICAgIH0KICAgICAgICBpZiggY3VycmVudCA9
PSBfX251bGwgfHwgY3VycmVudCA9PSBBcnJheUVudHJ5QmFzZTo6ZXJyb3IgKQogICAgICAgIHsK
CgoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgoKCgoKICAgICAgICBy
ZXR1cm4gdHJ1ZTsKfQoKYm9vbCBBcnJheTo6RXF1aXYoY2VsbCBwMSwgY2VsbCBwMikKewogICAg
ICAgIEZTUCBwMV9mcyhwMSksIHAyX2ZzKHAyKTsKCgoKCgoKCiAgICAgICAgaWYoIHJvb3QgPT0g
X19udWxsICkKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgQXJyYXlFbnRy
eUJhc2UgKmMxLCAqYzI7CgogICAgICAgIGlmKCBrZXlzID09IDAgKQogICAgICAgIHsKICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewoK
CgogICAgICAgICAgICAgICAgYzEgPSByb290LT5HZXQocDFfZnMuRm9sbG93KGFyZ3VtZW50X3Nl
cmlhbFswXSkpOwogICAgICAgICAgICAgICAgYzIgPSByb290LT5HZXQocDJfZnMuRm9sbG93KGFy
Z3VtZW50X3NlcmlhbFswXSkpOwogICAgICAgICAgICAgICAgZm9yIChpbnQgaT0xOyBpPGtleXM7
IGkrKykgewoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZiggYzEgPT0gX19udWxsIHx8IGMy
ID09IF9fbnVsbCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGMxLT5HZXQocDFfZnMuRm9sbG93KGFyZ3Vt
ZW50X3NlcmlhbFtpXSkpOwogICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGMyLT5HZXQocDJf
ZnMuRm9sbG93KGFyZ3VtZW50X3NlcmlhbFtpXSkpOwogICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgIHJldHVybiBjMS0+RXF1aXYoYzIpOwogICAgICAgIH0KfQoKYm9vbCBBcnJheTo6
UmVtb3ZlKGNlbGwgcHJlZCkKewogICAgICAgIEZTUCBwcmVkX2ZzKHByZWQpOwoKCgoKCgoKICAg
ICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgICAgICAgICAgcm9vdCA9IG1ha2VyLT5N
YWtlRW50cnkoKTsKICAgICAgICA7CgogICAgICAgIEFycmF5RW50cnlCYXNlICpjdXJyZW50ID0g
cm9vdDsKICAgICAgICBBcnJheU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGZvciAoaW50IGk9
MDsgaTxhcml0eTsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBG
U1AgZiA9IHByZWRfZnMuRm9sbG93KGFyZ3VtZW50X3NlcmlhbFtpXSk7CiAgICAgICAgICAgICAg
ICBjdXJyZW50ID0gY3VycmVudC0+UmVtb3ZlKGYsIHApOwogICAgICAgIH0KICAgICAgICByZXR1
cm4gY3VycmVudCAhPSBBcnJheUVudHJ5QmFzZTo6ZXJyb3I7Cn0KCgpib29sIEFycmF5OjpLZXlM
aXN0KGNlbGwgYywgRlNQIHJldCkKewogICAgICAgIEZTUCBmcyhjKTsKCgoKCgoKCiAgICAgICAg
QXJyYXlFbnRyeUJhc2UgKmMxID0gcm9vdDsKCiAgICAgICAgaWYoIHJvb3QgPT0gX19udWxsICkK
ICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnMuQ29lcmNlKG5pbCk7CiAgICAgICAg
fQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8
a2V5czsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjMSA9PSBfX251bGwg
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgICAgRlNQIGFyZyA9IGZzLkZvbGxvdyhhcmd1bWVudF9zZXJpYWxbaV0pOwog
ICAgICAgICAgICAgICAgICAgICAgICBpZiggYXJnLkdldFR5cGUoKS0+R2V0U2VyaWFsTm8oKSA9
PSBidWlsdGluX3R5cGVfdW5zcGVjaWZpZWRfa2V5X3NlcmlhbCApCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGMxLT5H
ZXQoYXJnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBjMS0+S2V5
TGlzdChyZXQpOwogICAgICAgIH0KfQoKYm9vbCBBcnJheTo6U2VyaWFsaXplKGNlbGwgYywgc3Ry
aW5nIGZuYW1lKQp7CiAgICAgICAgRlNQIGZzKGMpOwoKCgoKCgoKICAgICAgICBBcnJheUVudHJ5
QmFzZSAqYzEgPSByb290OwoKICAgICAgICBvZnN0cmVhbSBvZnMoZm5hbWUuY19zdHIoKSk7CiAg
ICAgICAgaWYoIG9mcy5iYWQoKSApCiAgICAgICAgewogICAgICAgICAgICAgICAgZG8geyBvc3Ry
aW5nc3RyZWFtIG9zczsgb3NzIDw8ICJDYW5ub3Qgb3BlbiBzZXJpYWxpemluZyBmaWxlIGZvciB3
cml0ZTogIiArIGZuYW1lOyBfUnVuV2Fybihvc3Muc3RyKCkpOyB9IHdoaWxlKGZhbHNlKTsKICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgb3NlcmlhbGl6ZXIg
b3Mob2ZzKTsKCiAgICAgICAgaWYoIHJvb3QgPT0gX19udWxsICkKICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICBlbHNlCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgZm9y
IChpbnQgaT0wOyBpPGtleXM7IGkrKykgewoKCgogICAgICAgICAgICAgICAgICAgICAgICBpZigg
YzEgPT0gX19udWxsICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgICAgICAgIEZTUCBhcmcgPSBmcy5Gb2xsb3coYXJndW1lbnRf
c2VyaWFsW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYoIGFyZy5HZXRUeXBlKCktPkdl
dFNlcmlhbE5vKCkgPT0gYnVpbHRpbl90eXBlX3Vuc3BlY2lmaWVkX2tleV9zZXJpYWwgKQogICAg
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEt
PlNlcmlhbGl6ZVRvU3RyZWFtKG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICBjMSA9IGMxLT5HZXQoYXJnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IGMxLT5TZXJpYWxpemVUb1N0cmVhbShvcyk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICB9Cn0KCgpib29sIEFycmF5OjpEZXNlcmlhbGl6ZShjZWxsIHAxLCBzdHJpbmcgZm5h
bWUpCnsKICAgICAgICBGU1AgZnMocDEpOwoKCgoKCgoKICAgICAgICBBcnJheUVudHJ5QmFzZSAq
YzEgPSByb290OwoKICAgICAgICBBcnJheU1ha2VyICpwID0gbWFrZXI7CgogICAgICAgIGlmc3Ry
ZWFtIGlmcyhmbmFtZS5jX3N0cigpKTsKICAgICAgICBpZiggaWZzLmJhZCgpICkgewogICAgICAg
ICAgICAgICAgZG8geyBvc3RyaW5nc3RyZWFtIG9zczsgb3NzIDw8ICJDYW5ub3Qgb3BlbiBzZXJp
YWxpemVkIGZpbGU6ICIgKyBmbmFtZTsgX1J1bldhcm4ob3NzLnN0cigpKTsgfSB3aGlsZShmYWxz
ZSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfTsKICAgICAgICBpc2Vy
aWFsaXplciBpcyhpZnMpOwoKICAgICAgICBpZiggcm9vdCA9PSBfX251bGwgKQogICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UKICAgICAgICB7CgoKCiAgICAgICAgICAg
ICAgICBmb3IgKGludCBpPTA7IGk8a2V5czsgaSsrKSB7CgoKCiAgICAgICAgICAgICAgICAgICAg
ICAgIGlmKCBjMSA9PSBfX251bGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgRlNQIGFyZyA9IGZzLkZvbGxvdyhh
cmd1bWVudF9zZXJpYWxbaV0pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiggYXJnLkdldFR5
cGUoKS0+R2V0U2VyaWFsTm8oKSA9PSBidWlsdGluX3R5cGVfdW5zcGVjaWZpZWRfa2V5X3Nlcmlh
bCApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjMS0+UmVhZEZyb21TdHJlYW0oaXMscCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgYzEgPSBjMS0+R2V0KGFyZyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHAg
PSBwLT5OZXh0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjMS0+UmVhZEZy
b21TdHJlYW0oaXMscCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9Cn0K
IyA3NjAgImFycmF5LmNwcCIKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX2RlY2xhcmVf
YXJyYXlfcHJpbWl0aXZlXzEoICJkZWNsYXJlX2FycmF5X3ByaW1pdGl2ZSIgLCAiZGVjbGFyZV9h
cnJheV9wcmltaXRpdmUiICwgIiIgLCAxICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1BSRUQpOyBi
b29sIGJ1aWx0aW5fZGVjbGFyZV9hcnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoRlNQIGFyZyk7
IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX2RlY2xhcmVfYXJyYXlfcHJpbWl0aXZlXzEgKGNlbGwg
YzEpIHsgRlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2RlY2xhcmVf
YXJyYXlfcHJpbWl0aXZlXzEiKSA8PCBlbmRsOyBib29sIHJldCA9IGJ1aWx0aW5fZGVjbGFyZV9h
cnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoYXJnKTsgY291dCA8PCAiTGVhdmUgIiA8PCAoImJ1
aWx0aW5fZGVjbGFyZV9hcnJheV9wcmltaXRpdmVfMSIpIDw8IChyZXQgPyAiIHN1Y2Nlc3MiIDog
IiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5fZGVjbGFyZV9h
cnJheV9wcmltaXRpdmVfMV9pbnRlcm5hbCAoRlNQIGFyZykKewoKICBpZihwcmVkX3R5cGUgPT0g
VFNfSU5WQUxJRCl7CiAgICBjb3V0IDw8ICJwcmVkX3R5cGUgaXMgVFNfSU5WQUxJRCEhIiA8PCBl
bmRsOwogIH0KICBlbHNlewogICAgY291dCA8PCAicHJlZF90eXBlIGlzIHZhbGlkIiA8PCBlbmRs
OwogIH0KICAgICAgICBpZiAoIWFyZy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAg
ICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ2RlY2xhcmVf
YXJyYXknIG5lZWRzIHByZWQuIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgY291dCA8PCBhcmcu
RGlzcGxheUFWTSgpOwogICAgICAgICAgICAgICAgY291dCA8PCBwcmVkX3R5cGUgPDwgZW5kbDsK
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGFyZy5H
ZXRUeXBlKCktPkdldE5GZWF0dXJlcygpID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwg
IlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0LWluIGZ1bmN0aW9uICdkZWNsYXJlX2FycmF5JyBuZWVk
cyBwcmVkIHdpdGggYXJndW1lbnQuIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgIH0KCgogICAgICAgIEFycmF5JiBhciA9ICpuZXcgQXJyYXkoYXJnKTsKICAg
ICAgICBpZiAoYXIuSW52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJSdW50aW1l
IEVycm9yIGluIGRlY2xhcmVfYXJyYXlfcHJpbWl0aXZlIDogY2Fubm90IGNyZWF0ZSBhcnJheSAi
IDw8IGFyZy5HZXRUeXBlKCktPkdldE5hbWUoKSA8PCBlbmRsOwogICAgICAgICAgICAgICAgZGVs
ZXRlICZhcjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAg
cmV0dXJuIHRydWU7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19jbGVhcl9hcnJh
eV8xKCAiY2xlYXJfYXJyYXkiICwgImNsZWFyX2FycmF5IiAsICIiICwgMSAsICJhcnJheS5jcHAi
ICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKEZT
UCBhcmcpOyBleHRlcm4gIkMiIGJvb2wgYnVpbHRpbl9jbGVhcl9hcnJheV8xIChjZWxsIGMxKSB7
IEZTUCBhcmcoYzEpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9jbGVhcl9hcnJheV8x
IikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKGFy
Zyk7IGNvdXQgPDwgIkxlYXZlICIgPDwgKCJidWlsdGluX2NsZWFyX2FycmF5XzEiKSA8PCAocmV0
ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7IH0gYm9vbCBi
dWlsdGluX2NsZWFyX2FycmF5XzFfaW50ZXJuYWwgKEZTUCBhcmcpCnsKICAgICAgICBwcm9mIHBy
b2ZfX19MSU5FX18oImNsZWFyIGFycmF5Iik7CgoKCiAgICAgICAgaWYgKCFhcmcuQ29lcmNlKHBy
ZWRfdHlwZSkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1
aWx0LWluIGZ1bmN0aW9uICdjbGVhcl9hcnJheScgbmVlZHMgcHJlZC4iIDw8IGVuZGw7CiAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICBjZWxsIGMwID0gYXJnLlJlYWRD
ZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJyYXk6OlNlYXJjaChjMCk7CiAgICAgICAgaWYg
KCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBw
cmVkaWNhdGUgY2xlYXJfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAg
ICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlIjsKICAgICAgICAgICAgICAg
IGNvdXQgPDwgYXJnLkdldFR5cGUoKS0+R2V0TmFtZSgpIDw8IGVuZGw7CiAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBhci5DbGVhckFsbCgpOwogICAgICAg
IHJldHVybiB0cnVlOwp9CgpidWlsdGluX3ByZWRfdGFibGUgYnVpbHRpbmluZm9fZGVsZXRlX2Fy
cmF5XzEoICJkZWxldGVfYXJyYXkiICwgImRlbGV0ZV9hcnJheSIgLCAiIiAsIDEgLCAiYXJyYXku
Y3BwIiAsIEJVSUxUSU5fUFJFRCk7IGJvb2wgYnVpbHRpbl9kZWxldGVfYXJyYXlfMV9pbnRlcm5h
bCAoRlNQIGFyZyk7IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX2RlbGV0ZV9hcnJheV8xIChjZWxs
IGMxKSB7IEZTUCBhcmcoYzEpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9kZWxldGVf
YXJyYXlfMSIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9kZWxldGVfYXJyYXlfMV9pbnRl
cm5hbCAoYXJnKTsgY291dCA8PCAiTGVhdmUgIiA8PCAoImJ1aWx0aW5fZGVsZXRlX2FycmF5XzEi
KSA8PCAocmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7
IH0gYm9vbCBidWlsdGluX2RlbGV0ZV9hcnJheV8xX2ludGVybmFsIChGU1AgYXJnKQp7CiAgICAg
ICAgcHJvZiBwcm9mX19fTElORV9fKCJkZWxldGUgYXJyYXkiKTsKCgoKICAgICAgICBpZiAoIWFy
Zy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUg
V2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ2RlbGV0ZV9hcnJheScgbmVlZHMgcHJlZC4iIDw8
IGVuZGw7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgIGNlbGwg
YzAgPSBhcmcuUmVhZENlbGwoKTsKICAgICAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMw
KTsKICAgICAgICBpZiAoJmFyID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10
aW1lIFdhcm5pbmc6IHByZWRpY2F0ZSBkZWxldGVfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAg
ICAgICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlICI7
CiAgICAgICAgICAgICAgICBjb3V0IDw8IGFyZy5HZXRUeXBlKCktPkdldE5hbWUoKSA8PCBlbmRs
OwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgYXIuQ2xl
YXJBbGwoKTsKICAgICAgICBhci5EZXN0cm95KCk7CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCmJ1
aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19zZXRfYXJyYXlfMSggInNldF9hcnJheSIgLCAi
c2V0X2FycmF5IiAsICIiICwgMSAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBi
dWlsdGluX3NldF9hcnJheV8xX2ludGVybmFsIChGU1AgYXJnKTsgZXh0ZXJuICJDIiBib29sIGJ1
aWx0aW5fc2V0X2FycmF5XzEgKGNlbGwgYzEpIHsgRlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVy
ICIgPDwgKCJidWlsdGluX3NldF9hcnJheV8xIikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGlu
X3NldF9hcnJheV8xX2ludGVybmFsIChhcmcpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRp
bl9zZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAiIHN1Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5k
bDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5fc2V0X2FycmF5XzFfaW50ZXJuYWwgKEZTUCBh
cmcpCnsKICAgICAgICBwcm9mIHByb2ZfX19MSU5FX18oInNldCBhcnJheSIpOwojIDg2MCAiYXJy
YXkuY3BwIgogICAgICAgIGlmICghYXJnLkNvZXJjZShwcmVkX3R5cGUpKSB7CiAgICAgICAgICAg
ICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsZGluIGZ1bmN0aW9uICdzZXRfYXJy
YXknIG5lZWRzIHByZWQuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
IH0KCiAgICBjZWxsIGMwID0gYXJnLlJlYWRDZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJy
YXk6OlNlYXJjaChjMCk7CiAgICAgICAgaWYgKCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBj
b3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUgc2V0X2FycmF5LzEgY2FuIGJlIHVz
ZWQgdG8gXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQg
cHJlZGljYXRlIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgoKICAg
ICAgICBpZiAoYXIuU2V0KGMwKSA9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgY291dCA8PCAi
UnVuLXRpbWUgV2FybmluZzogcHJlZGljYXRlIHNldF9hcnJheS8xIGNhbm5vdCBzZXQuIjsKICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7
CgoKCgoKCjsKfQoKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX3Vuc2V0X2FycmF5XzEo
ICJ1bnNldF9hcnJheSIgLCAidW5zZXRfYXJyYXkiICwgIiIgLCAxICwgImFycmF5LmNwcCIgLCBC
VUlMVElOX1BSRUQpOyBib29sIGJ1aWx0aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoRlNQIGFy
Zyk7IGV4dGVybiAiQyIgYm9vbCBidWlsdGluX3Vuc2V0X2FycmF5XzEgKGNlbGwgYzEpIHsgRlNQ
IGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX3Vuc2V0X2FycmF5XzEiKSA8
PCBlbmRsOyBib29sIHJldCA9IGJ1aWx0aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoYXJnKTsg
Y291dCA8PCAiTGVhdmUgIiA8PCAoImJ1aWx0aW5fdW5zZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAi
IHN1Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0
aW5fdW5zZXRfYXJyYXlfMV9pbnRlcm5hbCAoRlNQIGFyZykKewogICAgICAgIHByb2YgcHJvZl9f
X0xJTkVfXygidW5zZXQgYXJyYXkiKTsKIyA5MDcgImFycmF5LmNwcCIKICAgICAgICBpZiAoIWFy
Zy5Db2VyY2UocHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUg
V2FybmluZzogYnVpbHQtaW4gZnVuY3Rpb24gJ3JlbW92ZV9hcnJheScgbmVlZHMgcHJlZC5cbiI7
CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgIGNlbGwgYzAgPSBh
cmcuUmVhZENlbGwoKTsKICAgICAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAg
ICAgICBpZiAoJmFyID09IDApIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdh
cm5pbmc6IHByZWRpY2F0ZSByZW1vdmVfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAg
ICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlIjsKICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGFyLlJlbW92ZShjMCk7
CiAgICAgICAgcmV0dXJuIHRydWU7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19n
ZXRfYXJyYXlfMSggImdldF9hcnJheSIgLCAiZ2V0X2FycmF5IiAsICIiICwgMSAsICJhcnJheS5j
cHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2dldF9hcnJheV8xX2ludGVybmFsIChG
U1AgYXJnKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fZ2V0X2FycmF5XzEgKGNlbGwgYzEpIHsg
RlNQIGFyZyhjMSk7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2dldF9hcnJheV8xIikg
PDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2dldF9hcnJheV8xX2ludGVybmFsIChhcmcpOyBj
b3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9nZXRfYXJyYXlfMSIpIDw8IChyZXQgPyAiIHN1
Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5f
Z2V0X2FycmF5XzFfaW50ZXJuYWwgKEZTUCBhcmcpCnsKICAgICAgICBwcm9mIHByb2ZfX19MSU5F
X18oImdldCBhcnJheSIpOwoKCgogICAgICAgIGlmICghYXJnLkNvZXJjZShwcmVkX3R5cGUpKSB7
CiAgICAgICAgICAgICAgICBjb3V0IDw8ICJidWlsZGluIGZ1bmN0aW9uICdnZXRfYXJyYXknIG5l
ZWRzIHByZWQuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAg
ICBjZWxsIGMwID0gYXJnLlJlYWRDZWxsKCk7CiAgICAgICAgQXJyYXkmIGFyID0gQXJyYXk6OlNl
YXJjaChjMCk7CiAgICAgICAgaWYgKCZhciA9PSAwKSB7CiAgICAgICAgICAgICAgICBjb3V0PDwg
InByZWRpY2F0ZSBnZXRfYXJyYXkvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAg
ICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGljYXRlICI7CiAgICAgICAgY291dCA8
PCBhcmcuR2V0VHlwZSgpLT5HZXROYW1lKCkgPDwgZW5kbDsKICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhci5HZXQoYzApOwp9CgpidWlsdGlu
X3ByZWRfdGFibGUgYnVpbHRpbmluZm9fYXJyYXlfZGlmZmVyZW50XzIoICJhcnJheV9kaWZmZXJl
bnQiICwgImFycmF5X2RpZmZlcmVudCIgLCAiIiAsIDIgLCAiYXJyYXkuY3BwIiAsIEJVSUxUSU5f
UFJFRCk7IGJvb2wgYnVpbHRpbl9hcnJheV9kaWZmZXJlbnRfMl9pbnRlcm5hbCAoRlNQIGFyZzEs
IEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzIgKGNl
bGwgYzEsIGNlbGwgYzIpIHsgRlNQIGFyZzEoYzEpO0ZTUCBhcmcyKGMyKTsgY291dCA8PCAiRW50
ZXIgIiA8PCAoImJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzIiKSA8PCBlbmRsOyBib29sIHJldCA9
IGJ1aWx0aW5fYXJyYXlfZGlmZmVyZW50XzJfaW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8
ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9hcnJheV9kaWZmZXJlbnRfMiIpIDw8IChyZXQgPyAiIHN1
Y2Nlc3MiIDogIiBmYWlsdXJlIikgPDwgZW5kbDsgcmV0dXJuIHJldDsgfSBib29sIGJ1aWx0aW5f
YXJyYXlfZGlmZmVyZW50XzJfaW50ZXJuYWwgKEZTUCBhcmcxLCBGU1AgYXJnMikKewoKCiAgICAg
ICAgaWYgKCFhcmcxLkNvZXJjZShwcmVkX3R5cGUpKSB7CiAgICAgICAgICAgICAgICBjb3V0IDw8
ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlfZGlmZmVyZW50JyBu
ZWVkcyBwcmVkLlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAg
ICAgICAgaWYgKGFyZzEuR2V0VHlwZSgpICE9IGFyZzIuR2V0VHlwZSgpKSB7CiAgICAgICAgICAg
ICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlf
ZGlmZmVyZW50JyBjYW5ub3QgYmUgdXNlZCB0byB0d28gaW5kZXBlbmRlbnQgYXJyYXlzLlxuIjsK
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgY2VsbCBjMCA9IGFy
ZzEuUmVhZENlbGwoKTsKICAgIGNlbGwgYzEgPSBhcmcyLlJlYWRDZWxsKCk7CiAgICBBcnJheSYg
YXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAgIGlmICgmYXIgPT0gMCkgewogICAgICAgICAgICBj
b3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUgZ2V0X2FycmF5LzEgY2FuIGJlIHVz
ZWQgdG8gIgogICAgICAgICAgICAgICAgICAgICJvbmx5IGRlY2xhcmVfYXJyYXknZWQgcHJlZGlj
YXRlIiA8PCBlbmRsOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgICAgIHJl
dHVybiBhci5FcXVpdihjMCxjMSk7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19h
cnJheV9zZXJpYWxpemVfMiggImFycmF5X3NlcmlhbGl6ZSIgLCAiYXJyYXlfc2VyaWFsaXplIiAs
ICIiICwgMiAsICJhcnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2FycmF5
X3NlcmlhbGl6ZV8yX2ludGVybmFsIChGU1AgYXJnMSwgRlNQIGFyZzIpOyBleHRlcm4gIkMiIGJv
b2wgYnVpbHRpbl9hcnJheV9zZXJpYWxpemVfMiAoY2VsbCBjMSwgY2VsbCBjMikgeyBGU1AgYXJn
MShjMSk7RlNQIGFyZzIoYzIpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9hcnJheV9z
ZXJpYWxpemVfMiIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9hcnJheV9zZXJpYWxpemVf
Ml9pbnRlcm5hbCAoYXJnMSwgYXJnMik7IGNvdXQgPDwgIkxlYXZlICIgPDwgKCJidWlsdGluX2Fy
cmF5X3NlcmlhbGl6ZV8yIikgPDwgKHJldCA/ICIgc3VjY2VzcyIgOiAiIGZhaWx1cmUiKSA8PCBl
bmRsOyByZXR1cm4gcmV0OyB9IGJvb2wgYnVpbHRpbl9hcnJheV9zZXJpYWxpemVfMl9pbnRlcm5h
bCAoRlNQIGFyZzEsIEZTUCBhcmcyKQp7CgoKICAgICAgICBpZiAoIWFyZzEuQ29lcmNlKHByZWRf
dHlwZSkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0
LWluIGZ1bmN0aW9uICdhcnJheV9zZXJpYWxpemUnIG5lZWRzIHByZWQuXG4iOwogICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoISBhcmcyLklzU3RyaW5n
KCkpIHsKICAgICAgICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IDJuZCBhcmd1
bWVudCBvZiBidWlsdC1pbiBmdW5jdGlvbiAnYXJyYXlfc2VyaWFsaXplJyBzaG91bGQgYmUgYSBz
dHJpbmcuXG4iOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICBj
ZWxsIGMwID0gYXJnMS5SZWFkQ2VsbCgpOwogICAgY2VsbCBjMSA9IGFyZzIuUmVhZENlbGwoKTsK
ICAgIEFycmF5JiBhciA9IEFycmF5OjpTZWFyY2goYzApOwogICAgaWYgKCZhciA9PSAwKSB7CiAg
ICAgICAgICAgIGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IHByZWRpY2F0ZSBhcnJheV9zZXJp
YWxpemUvMSBjYW4gYmUgdXNlZCB0byAiCiAgICAgICAgICAgICAgICAgICAgIm9ubHkgZGVjbGFy
ZV9hcnJheSdlZCBwcmVkaWNhdGUiIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgIH0KCiAgICAgICAgcmV0dXJuIGFyLlNlcmlhbGl6ZShjMCxzdHJpbmcoYXJnMi5SZWFkU3Ry
aW5nKCkpKTsKfQoKYnVpbHRpbl9wcmVkX3RhYmxlIGJ1aWx0aW5pbmZvX2FycmF5X2Rlc2VyaWFs
aXplXzIoICJhcnJheV9kZXNlcmlhbGl6ZSIgLCAiYXJyYXlfZGVzZXJpYWxpemUiICwgIiIgLCAy
ICwgImFycmF5LmNwcCIgLCBCVUlMVElOX1BSRUQpOyBib29sIGJ1aWx0aW5fYXJyYXlfZGVzZXJp
YWxpemVfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1
aWx0aW5fYXJyYXlfZGVzZXJpYWxpemVfMiAoY2VsbCBjMSwgY2VsbCBjMikgeyBGU1AgYXJnMShj
MSk7RlNQIGFyZzIoYzIpOyBjb3V0IDw8ICJFbnRlciAiIDw8ICgiYnVpbHRpbl9hcnJheV9kZXNl
cmlhbGl6ZV8yIikgPDwgZW5kbDsgYm9vbCByZXQgPSBidWlsdGluX2FycmF5X2Rlc2VyaWFsaXpl
XzJfaW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9h
cnJheV9kZXNlcmlhbGl6ZV8yIikgPDwgKHJldCA/ICIgc3VjY2VzcyIgOiAiIGZhaWx1cmUiKSA8
PCBlbmRsOyByZXR1cm4gcmV0OyB9IGJvb2wgYnVpbHRpbl9hcnJheV9kZXNlcmlhbGl6ZV8yX2lu
dGVybmFsIChGU1AgYXJnMSwgRlNQIGFyZzIpCnsKCgogICAgICAgIGlmICghYXJnMS5Db2VyY2Uo
cHJlZF90eXBlKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzog
YnVpbHQtaW4gZnVuY3Rpb24gJ2FycmF5X3NlcmlhbGl6ZScgbmVlZHMgcHJlZC5cbiI7CiAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmICghIGFyZzIuSXNT
dHJpbmcoKSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogMm5k
IGFyZ3VtZW50IG9mIGJ1aWx0LWluIGZ1bmN0aW9uICdhcnJheV9zZXJpYWxpemUnIHNob3VsZCBi
ZSBhIHN0cmluZy5cbiI7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoK
ICAgIGNlbGwgYzAgPSBhcmcxLlJlYWRDZWxsKCk7CiAgICBjZWxsIGMxID0gYXJnMi5SZWFkQ2Vs
bCgpOwogICAgQXJyYXkmIGFyID0gQXJyYXk6OlNlYXJjaChjMCk7CiAgICBpZiAoJmFyID09IDAp
IHsKICAgICAgICAgICAgY291dCA8PCAiUnVuLXRpbWUgV2FybmluZzogcHJlZGljYXRlIGFycmF5
X3NlcmlhbGl6ZS8xIGNhbiBiZSB1c2VkIHRvICIKICAgICAgICAgICAgICAgICAgICAib25seSBk
ZWNsYXJlX2FycmF5J2VkIHByZWRpY2F0ZSIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgfQoKICAgICAgICByZXR1cm4gYXIuRGVzZXJpYWxpemUoYzAsc3RyaW5nKGFyZzIu
UmVhZFN0cmluZygpKSk7Cn0KCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19hcnJheV9r
ZXlsaXN0XzIoICJhcnJheV9rZXlsaXN0IiAsICJhcnJheV9rZXlsaXN0IiAsICIiICwgMiAsICJh
cnJheS5jcHAiICwgQlVJTFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2FycmF5X2tleWxpc3RfMl9p
bnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYXJy
YXlfa2V5bGlzdF8yIChjZWxsIGMxLCBjZWxsIGMyKSB7IEZTUCBhcmcxKGMxKTtGU1AgYXJnMihj
Mik7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJidWlsdGluX2FycmF5X2tleWxpc3RfMiIpIDw8IGVu
ZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9hcnJheV9rZXlsaXN0XzJfaW50ZXJuYWwgKGFyZzEsIGFy
ZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9hcnJheV9rZXlsaXN0XzIiKSA8PCAo
cmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVybiByZXQ7IH0gYm9v
bCBidWlsdGluX2FycmF5X2tleWxpc3RfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBhcmcyKQp7
CgoKICAgICAgICBpZiAoIWFyZzEuQ29lcmNlKHByZWRfdHlwZSkpIHsKICAgICAgICAgICAgICAg
IGNvdXQgPDwgIlJ1bi10aW1lIFdhcm5pbmc6IGJ1aWx0LWluIGZ1bmN0aW9uICdhcnJheV9rZXls
aXN0JyBuZWVkcyBwcmVkLlxuIjsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICB9CgogICAgY2VsbCBjMCA9IGFyZzEuUmVhZENlbGwoKTsKICAgIGNlbGwgYzEgPSBhcmcyLlJl
YWRDZWxsKCk7CiAgICBBcnJheSYgYXIgPSBBcnJheTo6U2VhcmNoKGMwKTsKICAgIGlmICgmYXIg
PT0gMCkgewogICAgICAgICAgICBjb3V0IDw8ICJSdW4tdGltZSBXYXJuaW5nOiBwcmVkaWNhdGUg
YXJyYXlfa2V5bGlzdC8xIGNhbiBiZSB1c2VkIHRvICIKICAgICAgICAgICAgICAgICAgICAib25s
eSBkZWNsYXJlX2FycmF5J2VkIHByZWRpY2F0ZSIgPDwgZW5kbDsKICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgfQoKICAgICAgICBib29sIHJldCA9IGFyLktleUxpc3QoIGMwLGFyZzIgKTsK
CiAgICByZXR1cm4gcmV0Owp9CgoKCmJ1aWx0aW5fcHJlZF90YWJsZSBidWlsdGluaW5mb19iX2Vx
dWl2XzIoICJiX2VxdWl2IiAsICJiX2VxdWl2IiAsICIiICwgMiAsICJhcnJheS5jcHAiICwgQlVJ
TFRJTl9QUkVEKTsgYm9vbCBidWlsdGluX2JfZXF1aXZfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZT
UCBhcmcyKTsgZXh0ZXJuICJDIiBib29sIGJ1aWx0aW5fYl9lcXVpdl8yIChjZWxsIGMxLCBjZWxs
IGMyKSB7IEZTUCBhcmcxKGMxKTtGU1AgYXJnMihjMik7IGNvdXQgPDwgIkVudGVyICIgPDwgKCJi
dWlsdGluX2JfZXF1aXZfMiIpIDw8IGVuZGw7IGJvb2wgcmV0ID0gYnVpbHRpbl9iX2VxdWl2XzJf
aW50ZXJuYWwgKGFyZzEsIGFyZzIpOyBjb3V0IDw8ICJMZWF2ZSAiIDw8ICgiYnVpbHRpbl9iX2Vx
dWl2XzIiKSA8PCAocmV0ID8gIiBzdWNjZXNzIiA6ICIgZmFpbHVyZSIpIDw8IGVuZGw7IHJldHVy
biByZXQ7IH0gYm9vbCBidWlsdGluX2JfZXF1aXZfMl9pbnRlcm5hbCAoRlNQIGFyZzEsIEZTUCBh
cmcyKQp7CiAgcHJvZiBwcm9mX19fTElORV9fKCJiX2VxdWl2Iik7CiAgY2VsbCBjMCA9IGFyZzEu
UmVhZENlbGwoKTsKICBjZWxsIGMxID0gYXJnMi5SZWFkQ2VsbCgpOwogIHJldHVybiBGU1AoYzAp
LkVxdWl2KGMxKTsKfQoKc3RhdGljIHZvaWQgdGVybSh2b2lkKQp7CiAgICAgICAgZm9yKGludCBp
PTA7IGk8YXJyYXlfaGFzaC5HZXRUYWJsZVNpemUoKTsgaSsrICkKICAgICAgICB7CiAgICAgICAg
ICAgICAgICBpZiggYXJyYXlfaGFzaC5QaWNrKGkpICkKICAgICAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGFycmF5X2hhc2guUGljayhpKTsKICAgICAgICB9CiAgICAgICAgRlNGaWw6OmRlZmFs
bG9jLmRlc3Ryb3lfYWxsb2NhdG9yKCk7Cn0KCnN0YXRpYyBUZXJtRnVuY3Rpb24gVEYodGVybSwy
MCk7Cg==


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