public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/5496: complier produces nonesense error messages
@ 2002-01-25 13:26 jsberg
  0 siblings, 0 replies; only message in thread
From: jsberg @ 2002-01-25 13:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5496
>Category:       c++
>Synopsis:       complier produces nonesense error messages
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 25 13:26:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     J. Scott Berg
>Release:        gcc-3.0.3
>Organization:
>Environment:
Linux kernel 2.4.16, i686
glibc-2.2.4
binutils 2.11.2 (FSF)
>Description:
In compiling the attached code with 

c++ -Wall -ansi -pedantic -c test05.ii

I get the error (note the binary cruft before 'redeclared')

Sum.h: In instantiation of `FreeLie::Sum<double>::const_iterator':
test05.cxx:18:   instantiated from `std::ostream& operator<<(std::ostream&, const FreeLie::Sum<COEF>&) [with COEF = double]'
test05.cxx:33:   instantiated from here
Sum.h:40: `
>How-To-Repeat:

>Fix:

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

IyAxICJ0ZXN0MDUuY3h4IgojIDEgIkhhbGxCYXNpcy5oIiAxCgoKCiMgMSAiQmFzaXMuaCIgMQoK
CgojIDEgIkJhc2lzRWxlbWVudC5oIiAxCgoKCm5hbWVzcGFjZSBGcmVlTGllIHsKCiAgdHlwZWRl
ZiB1bnNpZ25lZCBsb25nIGluZGV4X3R5cGU7CgoKCiAgY2xhc3MgQmFzaXNFbGVtZW50IHsKICAg
IGZyaWVuZCBjbGFzcyBCYXNpczsKCiAgICBCYXNpc0VsZW1lbnQoKTsKICAgIH5CYXNpc0VsZW1l
bnQoKTsKCgogICAgdm9pZCBtYWtlKHVuc2lnbmVkIGlkXywgdW5zaWduZWQgbmFfKTsKCiAgICB2
b2lkIG1ha2UoaW5kZXhfdHlwZSBpZF8sIGNvbnN0IEJhc2lzRWxlbWVudCYgbF8sIGNvbnN0IEJh
c2lzRWxlbWVudCYgcl8pOwoKICAgIEJhc2lzRWxlbWVudChjb25zdCBCYXNpc0VsZW1lbnQmKTsK
ICAgIEJhc2lzRWxlbWVudCYgb3BlcmF0b3I9KGNvbnN0IEJhc2lzRWxlbWVudCYpOwoKICBwdWJs
aWM6CgogICAgdW5zaWduZWQgd2VpZ2h0KCkgY29uc3Q7CgogICAgdW5zaWduZWQgd2VpZ2h0KHVu
c2lnbmVkIGkpIGNvbnN0OwoKICAgIHVuc2lnbmVkIHdlaWdodChjb25zdCB1bnNpZ25lZCAqdykg
Y29uc3Q7CiAgICBpbmRleF90eXBlIGluZGV4KCkgY29uc3Q7CiAgICBjb25zdCBCYXNpc0VsZW1l
bnQmIGxlZnQoKSBjb25zdDsKICAgIGNvbnN0IEJhc2lzRWxlbWVudCYgcmlnaHQoKSBjb25zdDsK
ICBwcml2YXRlOgogICAgaW5kZXhfdHlwZSBpZDsKICAgIGNvbnN0IEJhc2lzRWxlbWVudCAqbCwq
cjsKICAgIHVuc2lnbmVkIG5hLG8sKmE7CiAgfTsKCn0KIyA1ICJCYXNpcy5oIiAyCiMgMSAiU3Vt
LmgiIDEKCgoKIyAxICJCYXNpc0VsZW1lbnQuaCIgMQojIDUgIlN1bS5oIiAyCgojIDEgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL21hcCIgMSAzCiMgMzEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L21hcCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21hcC5oIiAxIDMK
IyA2MCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDMKCgojIDEgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMSAzCiMgODUgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDY0ICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDMKIyAxICIv
b3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMu
aCIgMSAzCiMgMzcgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI4
MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2NkZWZz
LmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMiAiL3Vzci9p
bmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMwoj
IDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDM4ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgi
IDIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2xpbWl0cy5oIiAxIDMKIyAzNyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytjb25maWcuaCIgMiAzCiMgNjUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3Mg
X1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVmIF9U
MiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIoKSA6
IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9U
MiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
X1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZpcnN0
KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA9
PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3guZmly
c3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAmJiBf
X3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBf
VDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29u
c3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
cGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVy
biBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBi
b29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEsIF9U
Mj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9f
eSk7Cn0KIyAxMzkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwp0
ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1h
a2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9f
eCwgX195KTsKfQoKfQojIDY3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAyIDMKCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFp
dHMuaCIgMSAzCiMgNDggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMu
aCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz
L2MrK2NvbmZpZy5oIiAxIDMKIyA1MCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy90eXBl
X3RyYWl0cy5oIiAyIDMKIyA4NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3Ry
YWl0cy5oIiAzCnRlbXBsYXRlIDxib29sIF9UcnV0aD4gc3RydWN0IF9Cb29sIHt9Owp0eXBlZGVm
IF9Cb29sPHRydWU+IF9fdHJ1ZV90eXBlOwp0eXBlZGVmIF9Cb29sPGZhbHNlPiBfX2ZhbHNlX3R5
cGU7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgdGhpc19kdW1teV9tZW1iZXJfbXVzdF9iZV9maXJzdDsKIyAxMTAgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
ZmFsc2VfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFs
c2VfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFs
c2VfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4g
ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRz
PGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBl
X3RyYWl0czxzaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBl
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBp
c19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1
bnNpZ25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
Y29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7
Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25n
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFp
dHM8bG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVs
dF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25n
IGRvdWJsZT4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJh
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgX190eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxz
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+
IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0
IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1
bnNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190
cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgaW50PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0
ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50
ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7
CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf
SXNfaW50ZWdlcjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PiBzdHJ1Y3QgX0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9O
b3JtYWw7Cn07CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNf
bm9ybWFsX2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRh
aW5lcj4gPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MCAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMSAzCiMgMzcgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDE0NyAiL29wdC9nY2Mv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMwp0
eXBlZGVmIGludCBwdHJkaWZmX3Q7CiMgMTk5ICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50
IHNpemVfdDsKIyAzOSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6
ZV90Owp9CiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIg
MiAzCiMgNDAgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKIyAxICIvb3B0L2djYy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vz
ci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19y
ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUg
KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKTsKCgoKCgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs
IF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0
ICh2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
bWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9p
ZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3
bWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19z
LCBpbnQgX19jLCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4g
Y2hhciAqc3RybmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCmV4dGVybiBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry
bmNhdCAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3NyYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg
ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNt
cCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJj
b2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgojIDEgIi91c3Iv
aW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5
cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19s
b2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNv
bnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9
ICpfX2xvY2FsZV90OwojIDEwOSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgpleHRlcm4g
aW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwg
X19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAq
X19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKCgpleHRlcm4gY2hh
ciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAiL3Vzci9pbmNsdWRlL3N0
cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19j
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJy
Y2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRl
cm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVq
ZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBz
aXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpz
dHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX2FjY2VwdCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpzdHJzdHIg
KF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmNh
c2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRsZSkK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGNoYXIg
KnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAoY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cnRva19yIChjaGFyICpf
X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90
IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVk
bGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rl
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpfX3Jl
c3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmxl
biAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl
X3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9fYnVmLCBzaXplX3QgX19i
dWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19z
cmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgYnpl
cm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBiY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqaW5kZXgg
KF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19w
dXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f
YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgZmZz
IChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRl
cm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChsb25nIGxvbmcgaW50IF9f
bGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu
IGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gaW50IHN0
cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRl
cm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IF9fc3RybmNhc2VjbXBf
bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNo
YXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzdHJ2ZXJz
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqc3Ryc2lnbmFsIChp
bnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNweSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9f
c3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4
dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoK
CmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhy
b3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQojIDQxICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDIgMwojIDY2ICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5nLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg
OjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwogIHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6
c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjpt
ZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNpbmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3Ry
bmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNpbmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ry
c3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5nIDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJy
b3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5nIDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoK
ICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBzaXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNo
cihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3ApLCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpz
dHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f
bik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBpbmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIq
IF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29u
c3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsK
CiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJu
IF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9
CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUgY2hhcioKICBzdHJzdHIoY2hhciogX19zMSwg
Y29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8
Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9CiMgNzIgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NsaW1pdHMuaCIgMwojIDEgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMC4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIvb3B0L2djYy9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL29w
dC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zeXNsaW1p
dHMuaCIgMSAzCgoKCgoKCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wLjMvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgMTI1ICIvb3B0L2djYy9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgi
IDIgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0u
aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9p
bmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRz
LmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIv
dXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwoj
IDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1
ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9s
aW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vz
ci9pbmNsdWRlL2JpdHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKIyAxMjYgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu
MC4zL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDggIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEyICIvb3B0L2dj
Yy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAy
IDMKIyAzOSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAyIDMK
IyA3MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg
MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzNyAi
L29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAz
CiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMg
MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAi
L29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAyIDMKIyA0MSAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIg
MwoKCgoKCgoKIyAxICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu
My9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
CmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAx
IDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5k
aWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5j
bHVkZS9lbmRpYW4uaCIgMiAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5o
IiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdh
aXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNp
Z25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1w
OjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQg
aW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAg
ICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVk
IGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAg
fSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoj
IDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQg
cXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBs
b25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5z
aW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25n
IGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi
IDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAq
X19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25n
IGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwg
KF9fY29uc3QgY2hhciAqX19ucHRyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1
bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp
bnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJu
IGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0
ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9u
ZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19s
b2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg
aW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9f
c3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2Mp
CiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRv
dWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xk
X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg
aW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18K
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFs
IChfX2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2Us
IGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwojIDM4NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25nIGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIv
dXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg
MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9iaXRz
L3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3Iv
aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4
Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5j
bHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hhcjsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f
dV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9uX18gdHlw
ZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0cy90eXBl
cy5oIiAzCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hh
ciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYg
dW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMy
X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVk
ZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYg
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19x
YWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2X3Q7CnR5cGVkZWYgX191X2ludCBfX3Vp
ZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190Owp0
eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7CnR5cGVk
ZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBp
bnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxp
bV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsKdHlwZWRlZiBfX3VfaW50IF9faWRf
dDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9fdmFsWzJdOwogIH0gX19mc2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNoYXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBs
b25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191c2Vjb25kc190Owp0eXBl
ZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190OwoK
dHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoK
dHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9f
Ymxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBfX2Jsa2NudF90Owp0eXBlZGVmIF9fcXVh
ZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRl
ZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2ZpbGNu
dF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNudDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVh
ZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxv
bmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3RfdXNjYWxh
cl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19z
b2NrbGVuX3Q7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMK
IyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9zY2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpz
dHJ1Y3QgX19zY2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMg
MjQgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsK
CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsK
CgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0
ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFy
YW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJk
c2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVf
dCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0
cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2Fp
dGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15
Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tl
eV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21f
Y291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1
Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBl
ZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoK
CnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRf
cndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9f
cndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNj
ciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7
CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7
CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9
IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9z
cGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sg
X19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0
aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYg
c3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0
eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS9i
aXRzL3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0
eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vfc2hvcnQgdV9zaG9ydDsKdHlwZWRl
ZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVfbG9uZzsKdHlwZWRlZiBfX3F1YWRf
dCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRfdDsKdHlwZWRlZiBfX2ZzaWRfdCBm
c2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlu
b190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90OwoKCgoKdHlwZWRlZiBfX2Rldl90
IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX21vZGVfdCBt
b2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190OwoKCgoKdHlwZWRlZiBfX3VpZF90
IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0
X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCnR5cGVkZWYgX19pZF90
IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRk
cl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tl
eV90IGtleV90OwojIDEzMiAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
CgoKdHlwZWRlZiBfX2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvdHlwZXMuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYg
X190aW1lX3QgdGltZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9p
bmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoK
CnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5jbHVk
ZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2lu
Y2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190
OwoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvb3B0L2dj
Yy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAx
IDMKIyAxNDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKIyAxOTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg
Mwp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7
CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7
CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9f
IChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MTZfdCBfX2F0dHJpYnV0ZV9f
ICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90IF9f
YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJX18pKSk7Cgp0eXBlZGVmIGlu
dCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX193b3JkX18pKSk7CiMgMjEy
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgi
IDEgMwojIDIxMyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5j
bHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lz
L3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5
ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3NlbGVjdC5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRz
L3NpZ3NldC5oIiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1
bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM1ICIvdXNyL2luY2x1ZGUv
c3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBfX3NpZ3NldF90IHNpZ3NldF90OwoKCgoKIyAx
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMK
c3RydWN0IHRpbWVzcGVjCiAgewogICAgbG9uZyBpbnQgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZf
bnNlYzsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVk
ZS9iaXRzL3RpbWUuaCIgMiAzCgoKCnN0cnVjdCB0aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZf
c2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07CiMgNDYgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fZmRfbWFzazsKCgoKCgoKCnR5
cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9tYXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNp
emVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBmZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9t
YXNrIGZkX21hc2s7CiMgODkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMKZXh0ZXJuICJD
IiB7CgoKCgoKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQgKl9fcmVzdHJp
Y3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3Jp
dGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19leGNlcHRmZHMs
CiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqX19yZXN0cmljdCBfX3RpbWVvdXQp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpf
X3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJp
Y3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX19l
eGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl
c3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICpf
X3Jlc3RyaWN0IF9fc2lnbWFzaykgdGhyb3cgKCk7CgoKfQojIDIxNiAiL3Vzci9pbmNsdWRlL3N5
cy90eXBlcy5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDEgMwoj
IDIxOSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoKCnR5cGVkZWYgX19ibGtzaXpl
X3QgYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CgoKCnR5cGVk
ZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7CgoKCnR5cGVkZWYgX19mc2ZpbGNudF90IGZzZmls
Y250X3Q7CiMgMjU3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBfX2Jsa2Nu
dDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0X3Q7CnR5
cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0KIyAzOTEgIi91c3IvaW5jbHVk
ZS9zdGRsaWIuaCIgMiAzCgoKCgoKCmV4dGVybiBsb25nIGludCByYW5kb20gKHZvaWQpIHRocm93
ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93ICgp
OwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIg
Kl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChjaGFyICpfX3N0YXRlYnVmKSB0aHJv
dyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsKICAgIGludDMyX3QgKmZwdHI7CiAg
ICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7CiAgICBpbnQgcmFuZF90eXBlOwog
ICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwogICAgaW50MzJfdCAqZW5kX3B0cjsK
ICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBz
dHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgaW5pdHN0YXRl
X3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4sCiAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgdGhyb3cgKCk7CgpleHRlcm4gdm9p
ZCBzcmFuZCAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcmFu
ZF9yICh1bnNpZ25lZCBpbnQgKl9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZG91Ymxl
IGRyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyYW5kNDggKHVuc2lnbmVk
IHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbHJhbmQ0
OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNpZ25lZCBzaG9y
dCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IG1yYW5kNDggKHZv
aWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBpbnQganJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50
IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9f
c2VlZHZhbCkgdGhyb3cgKCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgKnNlZWQ0OCAodW5z
aWduZWQgc2hvcnQgaW50IF9fc2VlZDE2dlszXSkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGxjb25n
NDggKHVuc2lnbmVkIHNob3J0IGludCBfX3BhcmFtWzddKSB0aHJvdyAoKTsKCgoKCgpzdHJ1Y3Qg
ZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50IF9feFszXTsKICAgIHVuc2ln
bmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fYzsKICAg
IHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9f
YTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jl
c3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBlcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0
IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSAqX19y
ZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBscmFuZDQ4X3IgKHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgbnJh
bmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAg
ICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBtcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZm
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBfX3Jlc3VsdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQganJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi
aVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJp
Y3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGludCAqX19yZXN0cmljdCBf
X3Jlc3VsdCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzcmFuZDQ4X3IgKGxvbmcgaW50IF9fc2Vl
ZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gaW50IHNlZWQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdLAogICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7Cgpl
eHRlcm4gaW50IGxjb25nNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10sCiAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikgdGhyb3cgKCk7
CiMgNTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIHZvaWQgKnJlYWxs
b2MgKHZvaWQgKl9fcHRyLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19tYWxsb2NfXykpOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoK
CgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgojIDEgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMwojIDEg
Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o
IiAyIDMKCgojIDEgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4z
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoK
ZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCk7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCmV4dGVy
biB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21lbWFsaWduICh2b2lkICoqX19tZW1w
dHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4gdm9pZCBhYm9ydCAodm9pZCkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgpleHRlcm4gaW50IGF0ZXhp
dCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgb25fZXhp
dCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqX19hcmcpLCB2b2lkICpfX2Fy
ZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0dXMpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9F
eGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChjaGFyICpfX3N0cmluZykgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0
IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
aW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjMgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQw
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBta3N0ZW1wNjQgKGNoYXIgKl9f
dGVtcGxhdGUpIHRocm93ICgpOwojIDY1MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy
biBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhy
b3cgKCk7CiMgNjcyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKnJlYWxw
YXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYg
aW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoK
dHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAq
YnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJf
Zm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVf
dCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5f
dCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50
IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBf
X2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0
ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5j
bHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBf
X25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmY3Z0IChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBp
bnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFmY3Z0IChsb25n
IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf
X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRl
cm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAq
X19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0X3IgKGRvdWJsZSBfX3ZhbHVlLCBp
bnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAg
aW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmN2dF9yIChkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAg
ICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAg
ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24s
CiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVu
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu
dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj
dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBtYmxlbiAo
X19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWJ0
b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFyKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3B3Y3Ms
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9f
Y29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMgODA4ICIvdXNyL2luY2x1ZGUvc3Rk
bGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIgKipfX3Jlc3RyaWN0IF9fb3B0aW9u
cCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29uc3QgKl9fcmVzdHJpY3QgX190b2tl
bnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3ZhbHVlcCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0IChpbnQgX19vZmxhZykgdGhyb3cg
KCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnB0
c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGlu
dCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBnZXRsb2FkYXZnIChk
b3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJvdyAoKTsKCgoKCgp9CiMgNDIgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMiAzCiMgNzMgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyA6OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVz
aW5nIDo6YWJzOwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0
b2k7CiAgdXNpbmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsK
ICB1c2luZyA6OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6
Z2V0ZW52OwogIHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7
CiAgdXNpbmcgOjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwog
IHVzaW5nIDo6cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2lu
ZyA6OnNyYW5kOwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6
c3RydG91bDsKICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6
d2N0b21iOwoKICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kp
OyB9CgogIGlubGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBs
ZGl2KF9faSwgX19qKTsgfQp9CiMgMTI1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90Owog
IHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkg
eyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBs
bGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAg
aW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxs
ZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0
dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcg
bG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0g
PSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0
cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0
cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1
c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9f
Z251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4
OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3Ry
dG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRv
dWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDc0ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDc1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9u
ZXciIDEgMwojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9uZXciIDMKIyAxICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9jc3RkZGVmIiAxIDMKIyA0MSAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvbmV3IiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwoj
IDM5ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsK
Cm5hbWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAg
ICBleGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3co
KTsKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoK
CgogIGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoK
ICAgIGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlv
bigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAo
KTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0
ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2
b2lkIHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhw
ZWN0ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7
CgoKICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMg
OTUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRf
ZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKfQojIDQyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9u
ZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2Fs
bG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJv
dygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qg
bm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBl
ZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVy
KG5ld19oYW5kbGVyKTsKfQojIDc2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9uZXciIDMKdm9p
ZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lk
ICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9p
ZCBvcGVyYXRvciBkZWxldGUodm9pZCAqKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZVtd
KHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBjb25zdCBz
dGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90
LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZv
aWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0
ZVtdKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlubGluZSB2b2lk
ICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJvdygpIHsgcmV0dXJu
IHBsYWNlOyB9CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCAq
cGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KCn0KIyA3NiAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdHJpbmdmd2QuaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdHJpbmdmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxj
bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0
IGNoYXJfdHJhaXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hh
cl90PjsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+
IHN0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKCn0KIyA0
MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDIgMwojIDEgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAxIDMKIyAzNSAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvY3N0ZGlvIiAxIDMKIyAzMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Y3N0ZGlvIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgi
IDEgMwojIDM3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwoj
IDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u
ZmlnLmgiIDEgMwojIDM4ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8u
aCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx
IDMKIyAzOSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDIgMwoj
IDQxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMwojIDEgIi9v
cHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8u
aCIgMSAzCiMgMzcgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4z
L2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAz
OCAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z
dGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ0ICIvb3B0L2dj
Yy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyA0NiAiL29wdC9nY2MvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1
NCAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z
dGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi9vcHQvZ2NjL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBl
ZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0df
Y29uZmlnLmgiIDIgMwoKCgoKIyAxICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4
LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMTIgIi9vcHQvZ2NjL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoj
IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu
aCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL29wdC9nY2MvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkg
Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIu
aCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewog
ICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJz
dGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1
Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7
CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0
ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwoj
IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2djb252
LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAzCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVk
ZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvb3B0
L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NP
TlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05P
TUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19H
Q09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09O
Vl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVt
CnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0g
MHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0
YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwg
c3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGludCwgaW50
KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVw
ICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9fZ2NvbnZf
c3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9fZ2NvbnZf
c3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBj
aGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
cXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf
X2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlwZWRlZiB2
b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2djb252X3Ry
YW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2djb252X3Ry
YW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFuc19lbmRf
ZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2NvbnZfdHJh
bnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1Y3QgX19n
Y29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIgKl9fbW9k
bmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hhciAqX190
b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9faW5pdF9m
Y3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVlZGVkX2Zy
b207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87CiAgaW50
IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2RhdGE7Cn07
CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWY7
CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoKCiAgaW50
IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAgX19tYnN0
YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0IF9fZ2Nv
bnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29udl9pbmZv
CnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVwczsKICBf
X2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0gKl9fZ2Nv
bnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlvbgp7
CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2dj
b252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBf
X2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0
cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191
aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNp
Z25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7
CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRlL2xpYmlv
LmgiIDMKIyAxICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p
bmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9s
aXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYw
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19G
SUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2Nr
X3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsK
ICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNs
dWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9v
aywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25v
Y29udgp9OwoKCgoKc3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3Ry
KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29k
ZWN2dF9kb19vdXQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNo
YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAq
LCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlm
dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVt
IF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQg
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVf
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29k
ZWN2dF9kb19lbmNvZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVj
dnRfZG9fYWx3YXlzX25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2Nv
ZGVjdnRfZG9fbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBz
aXplX3QpOwogIGludCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2Rl
Y3Z0ICopOwoKICBfR19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsK
CgpzdHJ1Y3QgX0lPX3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFy
X3QgKl9JT19yZWFkX2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9J
T193cml0ZV9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dy
aXRlX2VuZDsKICB3Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7
CgogIHdjaGFyX3QgKl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoK
ICB3Y2hhcl90ICpfSU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21i
c3RhdGVfdCBfSU9fbGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7Cgog
IHdjaGFyX3QgX3Nob3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxl
Owp9OwoKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3Jl
YWRfcHRyOwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNo
YXIqIF9JT193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dy
aXRlX2VuZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNo
YXIgKl9JT19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19z
YXZlX2VuZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJ
TEUgKl9jaGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29s
ZF9vZmZzZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIg
X3Z0YWJsZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xv
Y2s7CiMgMzA1ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoK
CiAgc3RydWN0IF9JT19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAq
X3dpZGVfZGF0YTsKCgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9m
IChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9w
bHVzOwoKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4g
c3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK
dHlwZWRlZiBfX3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19i
dWYsIHNpemVfdCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRl
X2ZuICh2b2lkICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3Nl
ZWtfZm4gKHZvaWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBl
ZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9f
cmVhZF9mbiBjb29raWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29v
a2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsK
Cgp0eXBlZGVmIHN0cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4g
KndyaXRlOwogIF9faW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBf
SU9fY29va2llX2lvX2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25z
X3QgY29va2llX2lvX2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRl
cm4gdm9pZCBfSU9fY29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUs
IGludCBfX3JlYWRfd3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19j
b29raWUsIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7
CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAo
X0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9J
T19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0
aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0
aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dl
dGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9f
YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklM
RSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnAp
IHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhy
b3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2
ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJu
IGludCBfSU9fdmZwcmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jl
c3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgp
OwpleHRlcm4gX19zc2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkg
dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNp
emVfdCkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAq
LCBfX29mZjY0X3QsIGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vl
a3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQg
X0lPX2ZyZWVfYmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50
X3QgX0lPX2dldHdjIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lP
X3B1dHdjICh3Y2hhcl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfSU9fZndpZGUgKF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDUg
Ii91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklM
RSAqIF9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4
dGVybiBpbnQgX0lPX3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3Qp
IHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90
LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEg
KF9JT19GSUxFICopIHRocm93ICgpOwoKCgp9CiMgNzUgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCgp0eXBlZGVmIF9f
Z251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL29wdC9nY2MvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBv
c190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM4ICIvb3B0
L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi
IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM5ICIvb3B0L2dj
Yy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIg
MwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxF
ICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5h
bWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hhciAqX19vbGQsIF9f
Y29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKnRtcGZpbGUgKHZv
aWQpIHRocm93ICgpOwojIDE2NyAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxlNjQgKHZvaWQp
IHRocm93ICgpOwoKCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgMTg3ICIvb3B0
L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgi
IDMKZXh0ZXJuIGNoYXIgKnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hh
ciAqX19wZngpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoK
CmV4dGVybiBpbnQgZmNsb3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IGZmbHVzaCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2Vh
bGwgKHZvaWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBG
SUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzEgIi9vcHQvZ2NjL2xpYi9n
Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4g
RklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cg
KCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp
bGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBj
aGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZv
aWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRl
cm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIg
Kl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFy
ICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRi
dWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMs
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVi
dWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklM
RSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJu
IGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcp
IHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6
ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsK
CgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmlj
dCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19w
cmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3Qg
X19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt
dCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50
Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19m
b3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy
ZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAy
LCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19m
b3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoK
CmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBn
ZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lk
KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBm
cHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0
ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3
IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdl
dHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry
ZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMg
KGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIF9fc3NpemVfdCBfX2dl
dGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24s
IGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jl
c3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gX19zc2l6ZV90IGdldGxpbmUgKGNo
YXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCAqX19yZXN0cmljdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpf
X3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAqX19z
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmdldGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZCAodm9pZCAqX19yZXN0cmljdCBfX3B0
ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq
X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19j
b25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3MpIHRocm93ICgpOwoKCgpl
eHRlcm4gc2l6ZV90IGZyZWFkX3VubG9ja2VkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXpl
X3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5s
b2NrZWQgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0s
IGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50
IGZ0ZWxsIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCByZXdpbmQgKEZJ
TEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA0OTggIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAo
RklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7Cgpl
eHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJp
Y3QgX19wb3MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3Ry
ZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3MpIHRocm93ICgpOwojIDUzMiAiL29wdC9nY2MvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVy
biBpbnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3do
ZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50
IGZzZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBm
ZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJf
dW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29u
c3QgY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBf
X2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVy
cjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRl
cm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm
aWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJ
TEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVz
KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3Rh
Y2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJp
Y3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJp
bnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJu
IHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDIgIi9vcHQv
Z2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIg
Mwp9CiMgNDIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAyIDMK
IyA4NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNw
YWNlIHN0ZAp7CiAgdXNpbmcgOjpGSUxFOwogIHVzaW5nIDo6ZnBvc190OwoKICB1c2luZyA6OmNs
ZWFyZXJyOwogIHVzaW5nIDo6ZmNsb3NlOwogIHVzaW5nIDo6ZmVvZjsKICB1c2luZyA6OmZlcnJv
cjsKICB1c2luZyA6OmZmbHVzaDsKICB1c2luZyA6OmZnZXRjOwogIHVzaW5nIDo6ZmdldHBvczsK
ICB1c2luZyA6OmZnZXRzOwogIHVzaW5nIDo6Zm9wZW47CiAgdXNpbmcgOjpmcHJpbnRmOwogIHVz
aW5nIDo6ZnB1dGM7CiAgdXNpbmcgOjpmcHV0czsKICB1c2luZyA6OmZyZWFkOwogIHVzaW5nIDo6
ZnJlb3BlbjsKICB1c2luZyA6OmZzY2FuZjsKICB1c2luZyA6OmZzZWVrOwogIHVzaW5nIDo6ZnNl
dHBvczsKICB1c2luZyA6OmZ0ZWxsOwogIHVzaW5nIDo6ZndyaXRlOwogIHVzaW5nIDo6Z2V0YzsK
ICB1c2luZyA6OmdldGNoYXI7CiAgdXNpbmcgOjpnZXRzOwogIHVzaW5nIDo6cGVycm9yOwogIHVz
aW5nIDo6cHJpbnRmOwogIHVzaW5nIDo6cHV0YzsKICB1c2luZyA6OnB1dGNoYXI7CiAgdXNpbmcg
OjpwdXRzOwogIHVzaW5nIDo6cmVtb3ZlOwogIHVzaW5nIDo6cmVuYW1lOwogIHVzaW5nIDo6cmV3
aW5kOwogIHVzaW5nIDo6c2NhbmY7CiAgdXNpbmcgOjpzZXRidWY7CiAgdXNpbmcgOjpzZXR2YnVm
OwogIHVzaW5nIDo6c3ByaW50ZjsKICB1c2luZyA6OnNzY2FuZjsKICB1c2luZyA6OnRtcGZpbGU7
CiAgdXNpbmcgOjp0bXBuYW07CiAgdXNpbmcgOjp1bmdldGM7CiAgdXNpbmcgOjp2ZnByaW50ZjsK
ICB1c2luZyA6OnZwcmludGY7CiAgdXNpbmcgOjp2c3ByaW50ZjsKfQojIDE0MiAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGlvLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7
CiAgdXNpbmcgOjpzbnByaW50ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7
CiAgdXNpbmcgOjp2c25wcmludGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3Rk
CnsKICB1c2luZyBfX2dudV9jeHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2Fu
ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50
ZjsKICB1c2luZyBfX2dudV9jeHg6OnZzc2NhbmY7Cn0KIyAzMiAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9j
c3RkZGVmIiAxIDMKIyAzNyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytpby5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBj
LWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgMTAyICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5nbGUuaCIgMSAzCiMgMzQgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5nbGUu
aCIgMwp0eXBlZGVmIGludCBfX2d0aHJlYWRfbXV0ZXhfdDsKIyAyMTEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1zaW5nbGUuaCIgMwpzdGF0aWMg
aW5saW5lIGludApfX2d0aHJlYWRfYWN0aXZlX3AgKHZvaWQpCnsKICByZXR1cm4gMDsKfQoKc3Rh
dGljIGlubGluZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICog
KQp7CiAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF90cnls
b2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5l
IGludApfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqICkKewogIHJl
dHVybiAwOwp9CiMgMTAzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2d0aHIuaCIgMiAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBs
b25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVm
IHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsK
CiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgoKICB0eXBlZGVmIEZJTEUg
X19jX2ZpbGVfdHlwZTsKCgogIHN0cnVjdCBfX2lvc19mbGFncwogIHsKICAgIHR5cGVkZWYgc2hv
cnQgX19pbnRfdHlwZTsKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19ib29sYWxwaGEg
PSAweDAwMDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19kZWMgPSAweDAwMDI7CiAg
ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19maXhlZCA9IDB4MDAwNDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2hleCA9IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2ludGVybmFsID0gMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
bGVmdCA9IDB4MDAyMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX29jdCA9IDB4MDA0
MDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3JpZ2h0ID0gMHgwMDgwOwogICAgc3Rh
dGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2NpZW50aWZpYyA9IDB4MDEwMDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3Nob3diYXNlID0gMHgwMjAwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1Nfc2hvd3BvaW50ID0gMHgwNDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1Nfc2hvd3BvcyA9IDB4MDgwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3Nr
aXB3cyA9IDB4MTAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VuaXRidWYgPSAw
eDIwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191cHBlcmNhc2UgPSAweDQwMDA7
CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hZGp1c3RmaWVsZCA9IDB4MDAyMCB8IDB4
MDA4MCB8IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jhc2VmaWVsZCA9
IDB4MDAwMiB8IDB4MDA0MCB8IDB4MDAwODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T
X2Zsb2F0ZmllbGQgPSAweDAxMDAgfCAweDAwMDQ7CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90
eXBlIF9TX2JhZGJpdCA9IDB4MDE7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19lb2Zi
aXQgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmFpbGJpdCA9IDB4MDQ7
CgoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FwcCA9IDB4MDE7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU19hdGUgPSAweDAyOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYmluID0gMHgwNDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2luID0gMHgw
ODsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX291dCA9IDB4MTA7CiAgICBzdGF0aWMg
Y29uc3QgX19pbnRfdHlwZSBfU190cnVuYyA9IDB4MjA7CiAgfTsKfQojIDQwICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfY3djaGFyLmgiIDEgMwojIDM3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jd2NoYXIuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2N0aW1lLmgiIDEgMwojIDM3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGlt
ZS5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAx
IDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMiAzCiMg
NDAgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91
c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
CgpleHRlcm4gIkMiIHsKCgoKCgoKCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1s
aW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNDMgIi91
c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDExOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1
Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91cjsKICBpbnQg
dG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93ZGF5OwogIGlu
dCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9mZjsKICBfX2Nv
bnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKc3RydWN0IGl0aW1lcnNwZWMKICB7CiAgICBz
dHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7
CiAgfTsKCgpzdHJ1Y3Qgc2lnZXZlbnQ7CiMgMTYzICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4
dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUg
KHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGlt
ZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0
cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJw
dGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpf
X3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0
IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVf
ciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGlt
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qg
X190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3Qg
Kl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0
IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19j
b25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1l
WzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoK
CgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7
CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7
CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1
Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3Qg
dG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xl
ZXAgKF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVz
cGVjICpfX3JlcykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lk
X3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xl
ZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19p
ZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xv
Y2tfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJp
Y3QgX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9f
dGltZXJpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190
aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190
aW1lcmlkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0
cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGlt
ZXJzcGVjICpfX3ZhbHVlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3Zl
cnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3Rp
bWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdl
dGRhdGUgKF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNs
dWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0
IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyA0MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3RpbWUuaCIgMiAzCiMgNTMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2N0aW1lLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpjbG9ja190OwogIHVzaW5n
IDo6dGltZV90OwogIHVzaW5nIDo6dG07CgogIHVzaW5nIDo6Y2xvY2s7CiAgdXNpbmcgOjpkaWZm
dGltZTsKICB1c2luZyA6Om1rdGltZTsKICB1c2luZyA6OnRpbWU7CiAgdXNpbmcgOjphc2N0aW1l
OwogIHVzaW5nIDo6Y3RpbWU7CiAgdXNpbmcgOjpnbXRpbWU7CiAgdXNpbmcgOjpsb2NhbHRpbWU7
CiAgdXNpbmcgOjpzdHJmdGltZTsKfQojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRz
L3N0ZF9jd2NoYXIuaCIgMiAzCiMgNDMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2N3Y2hhci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI4ICIvdXNyL2lu
Y2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj
IDEgIi9vcHQvZ2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv
c3RkaW8uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCgojIDEgIi9vcHQv
Z2NjL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkYXJnLmgi
IDEgMwojIDQxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgoKCgoKCgojIDEgIi9vcHQvZ2Nj
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgODUgIi91c3Iv
aW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAi
L3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVy
biB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgp
OwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3Jj
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndj
c25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Mx
LCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2Vj
bXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1
ZGUveGxvY2FsZS5oIiAxIDMKIyAxNDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCmV4dGVy
biBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hh
cl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f
czEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Nj
b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cg
KCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAog
ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBz
aXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3dj
c3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAo
X19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qg
d2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2No
YXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193
Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAq
X193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hh
cl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qg
d2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3dj
cyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxl
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2No
YXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
c2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJf
dCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpf
X3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3
Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhy
b3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBf
X2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
d2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29u
c3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0b3djICh3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
bWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAoY2hhciAq
X19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAgICBtYnN0
YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBfX21icmxl
biAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpleHRlcm4g
c2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAo
KTsKIyAyOTcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVybiBzaXplX3QgbWJzcnRvd2Nz
ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBf
X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3Bz
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93Y3MgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoKCgpleHRl
cm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBp
bnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg
KCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAo
KTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3Vx
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMg
NDA2ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgi
IDEgMwojIDQwNyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCgpleHRlcm4gbG9uZyBpbnQg
X193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19i
YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJf
dCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0
ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxl
X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhy
b3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5k
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAo
KTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50
ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRo
cm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4g
dW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFy
X3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cg
KCk7CiMgNTI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gd2NoYXJfdCAqd2NwY3B5
ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93ICgpOwoKCgpl
eHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0IHdjaGFyX3Qg
Kl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmd2lk
ZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmd3By
aW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7
CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgoKZXh0ZXJu
IGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAg
ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50
IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgpleHRl
cm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog
ICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwg
Li4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHN3
c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAgICAgdGhyb3cg
KCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog
ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7
CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0
ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3aW50X3QgZnB1
dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gd2lu
dF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4
dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4g
d2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAog
ICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpIHRo
cm93ICgpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3dj
LCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y191bmxv
Y2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdp
bnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBzaXplX3Qg
d2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
dHApIHRocm93ICgpOwojIDY4MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKfQojIDQ0ICIvb3B0
L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMiAzCiMgNTggIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVz
aW5nIDo6bWJzdGF0ZV90Owp9CiMgMTIyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OndpbnRfdDsKCiAgdXNpbmcg
OjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3czsKICB1c2luZyA6OmZw
dXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwogIHVzaW5nIDo6Zndwcmlu
dGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAgdXNpbmcgOjpnZXR3Y2hh
cjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAgdXNpbmcgOjptYnNpbml0
OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAgdXNpbmcgOjpwdXR3Y2hh
cjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsKICB1c2luZyA6OnVuZ2V0
d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2FuZjsKICB1c2luZyA6OnZz
d3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndwcmludGY7CiAgdXNpbmcg
Ojp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondjc2NhdDsKICB1c2luZyA6
Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3NjcHk7CiAgdXNpbmcgOjp3
Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3NsZW47CiAgdXNpbmcgOjp3
Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25jcHk7CiAgdXNpbmcgOjp3
Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0b2Q7CiAgdXNpbmcgOjp3
Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7CiAgdXNpbmcgOjp3Y3N0
b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwogIHVzaW5nIDo6d21lbWNt
cDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsKICB1c2luZyA6OndtZW1z
ZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoKICB1c2luZyA6Ondjc2No
cjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2Mp
CiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7
IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NwYnJrKHdjaGFy
X3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJyayhjb25zdF9jYXN0PGNv
bnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3Y3NyY2hyOwoKICBpbmxp
bmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1
cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MpOyB9CgogIHVz
aW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIod2NoYXJfdCogX19zMSwg
d2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90
Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAgaW5saW5lIHdjaGFyX3Qq
CiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogIHsgcmV0
dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jLCBfX24pOyB9
Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6d2NzdG9sZDsKICB1c2lu
ZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNp
bmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6d2NzdG9sbDsKICB1c2lu
ZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvZnBvcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9T
dGF0ZVQ+CiAgICBjbGFzcyBmcG9zCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9T
dGF0ZVQgX19zdGF0ZV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIHN0cmVhbW9mZiBfTV9vZmY7
CiAgICAgIF9fc3RhdGVfdHlwZSBfTV9zdDsKCiAgICBwdWJsaWM6CiAgICAgIF9fc3RhdGVfdHlw
ZQogICAgICBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3N0OyB9CgogICAgICB2b2lkCiAgICAg
IHN0YXRlKF9fc3RhdGVfdHlwZSBfX3N0KSB7IF9NX3N0ID0gX19zdDsgfQoKCgogICAgICBmcG9z
KCk6IF9NX29mZihzdHJlYW1vZmYoKSksIF9NX3N0KF9fc3RhdGVfdHlwZSgpKSB7IH0KCiAgICAg
IGZwb3Moc3RyZWFtb2ZmIF9fb2ZmLCBfX3N0YXRlX3R5cGUgX19zdCA9IF9fc3RhdGVfdHlwZSgp
KQogICAgICA6IF9NX29mZihfX29mZiksIF9NX3N0KF9fc3QpIHsgfQoKICAgICAgb3BlcmF0b3Ig
c3RyZWFtb2ZmKCkgY29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICBmcG9zJgogICAgICBv
cGVyYXRvcis9KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgKz0gX19vZmY7IHJldHVybiAqdGhp
czsgfQoKICAgICAgZnBvcyYKICAgICAgb3BlcmF0b3ItPShzdHJlYW1vZmYgX19vZmYpIHsgX01f
b2ZmIC09IF9fb2ZmOyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3Ir
KHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAgICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAg
ICBfX3QgKz0gX19vZmY7CiAgICAgICAgcmV0dXJuIF9fdDsKICAgICAgfQoKICAgICAgZnBvcwog
ICAgICBvcGVyYXRvci0oc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3Qo
KnRoaXMpOwogICAgICAgIF9fdCAtPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9
CgogICAgICBib29sCiAgICAgIG9wZXJhdG9yPT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9NX29mZiA9PSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIGJvb2wKICAgICAg
b3BlcmF0b3IhPShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2Zm
ICE9IF9fcG9zLl9NX29mZjsgfQoKICAgICAgc3RyZWFtb2ZmCiAgICAgIF9NX3Bvc2l0aW9uKCkg
Y29uc3QgeyByZXR1cm4gX01fb2ZmOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3Bvc2l0aW9uKHN0
cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgPSBfX29mZjsgfQogICAgfTsKCgogIHR5cGVkZWYgZnBv
czxtYnN0YXRlX3Q+IHN0cmVhbXBvczsKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gd3N0cmVh
bXBvczsKCn0KIyA0MiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi
IDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAz
CiMgMzQgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEg
Ii9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIv
b3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAg
X190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lk
KTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191
bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19m
YWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zZndkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmOwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFy
VD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5
cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJp
bmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2Nh
dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwK
ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz
cyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZmlsZWJ1
ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAg
ICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19mc3Ry
ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy
X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBjbGFzcyBpb3NfYmFzZTsK
CgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1
ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXI+IGlzdHJlYW07
CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19p
b3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxjaGFyPiBz
dHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNoYXI+IGlzdHJpbmdzdHJl
YW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9zdHJpbmdzdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08Y2hh
cj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFyPiBvZnN0cmVhbTsKICB0
eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCgogIHR5cGVkZWYgYmFzaWNfaW9z
PHdjaGFyX3Q+IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVh
bWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJl
YW08d2NoYXJfdD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+
IHdzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3Ry
aW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmlu
Z3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVm
IGJhc2ljX2lmc3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3Ry
ZWFtPHdjaGFyX3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4g
d2ZzdHJlYW07Cgp9CiMgNzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfdHlwZXMuaCIgMSAzCiMgNjkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDcxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKc3RydWN0
IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKc3RydWN0IG91dHB1dF9pdGVyYXRvcl90YWcge307CnN0
cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307
CnN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJh
dG9yX3RhZyB7fTsKc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIHt9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj
bGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBpbnB1dF9pdGVyYXRvciB7CiAgdHlwZWRlZiBpbnB1dF9p
dGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK
ICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50
ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRlcmF0b3Ig
ewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl
ZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5
cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yIHsK
ICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwog
IHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9j
YXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVm
ZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3Qg
cmFuZG9tX2FjY2Vzc19pdGVyYXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0
eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9DYXRlZ29yeSwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3QsCiAgICAgICAgICBjbGFzcyBfUG9p
bnRlciA9IF9UcCosIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmPgpzdHJ1Y3QgaXRlcmF0b3Igewog
IHR5cGVkZWYgX0NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwIHZhbHVl
X3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Bv
aW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIF9SZWZlcmVuY2UgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Owog
IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVm
IHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFs
dWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf
VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8Y29uc3QgX1RwKj4gewogIHR5cGVkZWYgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl
ZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAmIHJlZmVyZW5jZTsKfTsK
IyAxNzIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlw
ZXMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0
IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRl
cmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6
ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7CiAgcmV0dXJu
IHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29uc3QgX0l0ZXIm
KQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46
OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRlcmF0b3JfY2F0
ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRlZ29yeShfX2kp
OyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJiBf
X2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0
ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgp2
YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlwZShfX2kpOyB9
Cgp9CiMgNzkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg
MwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu
Y3MuaCIgMSAzCiMgNjkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y
X2Jhc2VfZnVuY3MuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2Vw
dF9jaGVjay5oIiAxIDMKIyAzNCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0
X2NoZWNrLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzYgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvY29uY2VwdF9jaGVjay5oIiAyIDMKIyA3MCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p
ZCBfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgaW5wdXRfaXRlcmF0b3Jf
dGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2Zp
cnN0OyArK19fbjsgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBj
bGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UmIF9fbiwgcmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgX19uICs9
IF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSYg
X19uKQp7CgogIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24sIGl0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBl
Cl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX2ZpcnN0OyArK19fbjsKICB9CiAgcmV0dXJu
IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICByZXR1cm4gX19sYXN0IC0gX19maXJz
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKewoKICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJhdG9yX2NhdGVn
b3J5CiAgICBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
Q2F0ZWdvcnkoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRGlzdGFu
Y2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfSW5wdXRJdGVyJiBfX2ksIF9EaXN0YW5jZSBfX24s
IGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB3aGlsZSAoX19uLS0pICsrX19pOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNl
PgppbmxpbmUgdm9pZCBfX2FkdmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlz
dGFuY2UgX19uLAogICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90
YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgaWYgKF9fbiA+IDApCiAgICB3aGls
ZSAoX19uLS0pICsrX19pOwogIGVsc2UKICAgIHdoaWxlIChfX24rKykgLS1fX2k7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19u
LAogICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgX19pICs9IF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIGFkdmFuY2UoX0lu
cHV0SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbikKewoKICBfX2FkdmFuY2UoX19pLCBfX24s
IGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9Cgp9CiMgODAgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDYzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9D
b250YWluZXI+CmNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250
YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAg
dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBs
aWNpdCBiYWNrX2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZf
X3gpIHt9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNv
bnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRh
aW5lci0+cHVzaF9iYWNrKF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2lu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
ICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJu
ICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKyso
aW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+Cmlu
bGluZSBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBiYWNrX2luc2VydGVyKF9Db250
YWluZXImIF9feCkgewogIHJldHVybiBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf
X3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250YWluZXIqIGNvbnRhaW5lcjsKcHVibGljOgogIHR5
cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBl
ZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0Nv
bnRhaW5lciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGZyb250X2luc2VydF9pdGVyYXRv
cjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6dmFs
dWVfdHlwZSYgX192YWx1ZSkgewogICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwog
ICAgcmV0dXJuICp0aGlzOwogIH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9D
b250YWluZXI+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0
b3I8X0NvbnRhaW5lcj4gZnJvbnRfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJu
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0NvbnRhaW5lcj4KY2xhc3MgaW5zZXJ0X2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Db250
YWluZXIqIGNvbnRhaW5lcjsKICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwpw
dWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0
cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVf
dHlwZTsKICB0eXBlZGVmIHZvaWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2lu
dGVyOwogIHR5cGVkZWYgdm9pZCByZWZlcmVuY2U7CgogIGluc2VydF9pdGVyYXRvcihfQ29udGFp
bmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIF9faSkKICAgIDogY29udGFp
bmVyKCZfX3gpLCBpdGVyKF9faSkge30KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAg
b3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUp
IHsKICAgIGl0ZXIgPSBjb250YWluZXItPmluc2VydChpdGVyLCBfX3ZhbHVlKTsKICAgICsraXRl
cjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBv
cGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgaW5zZXJ0X2l0ZXJhdG9yPF9Db250
YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxj
bGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+CmlubGluZQppbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4gaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194LCBfSXRlcmF0b3IgX19pKQp7CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBfX2l0ZXI7CiAgcmV0dXJuIGlu
c2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsIF9faXRlcihfX2kpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZmVyZW5j
ZSA9IF9UcCYsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UgPSBwdHJkaWZmX3Q+CmNsYXNzIHJl
dmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiByZXZlcnNlX2JpZGlyZWN0
aW9uYWxfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgX1RwLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gX1NlbGY7
CnByb3RlY3RlZDoKICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGN1cnJlbnQ7CnB1YmxpYzoKICB0
eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5
cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7
CgogIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcigpIHt9CiAgZXhwbGljaXQgcmV2ZXJz
ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IgX194KQogICAg
OiBjdXJyZW50KF9feCkge30KICBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIGJhc2UoKSBjb25zdCB7
IHJldHVybiBjdXJyZW50OyB9CiAgX1JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICBf
QmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3Rt
cDsKICB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvcioo
KSk7IH0KICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo
aXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRv
ci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVy
YXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAg
IHJldHVybiBfX3RtcDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAg
ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVm
LCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0
b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gX194LmJh
c2UoKSA9PSBfX3kuYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfUmVmLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yIT0oCiAg
ICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVm
LCBfRGlzdGFuY2U+JiBfX3gsCiAgICBjb25zdCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0
b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlzdGFuY2U+JiBfX3kpCnsKICByZXR1cm4gIShfX3gg
PT0gX195KTsKfQojIDIyMiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFzcyByZXZlcnNlX2l0ZXJhdG9y
CnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAg
ICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UKICAgICAgICAgIHJlZmVyZW5j
ZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICByZXZlcnNlX2l0ZXJhdG9yKCkg
e30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJl
bnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9TZWxmJiBfX3gpIDogY3VycmVu
dChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CiAgcmV2ZXJzZV9pdGVy
YXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgOiBjdXJyZW50KF9f
eC5iYXNlKCkpIHt9CgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJl
bnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1w
ID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAgcG9pbnRlciBvcGVyYXRvci0+
KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKyso
KSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9y
KysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0
dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9f
dG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2Vs
ZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxm
KGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUg
X19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg
b3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsKICAgIHJldHVybiBfU2VsZihj
dXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBlIF9f
bikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJlZmVyZW5j
ZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMg
KyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAg
cmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcmV2
ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0g
X195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4g
X195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAg
cmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5l
IGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYg
X195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRv
cj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5j
ZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwK
ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0
dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y
PgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Cm9wZXJhdG9yKyh0eXBlbmFtZSBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAg
ICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkgewogIHJldHVybiByZXZl
cnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9fbik7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBfRGlzdCA9IHB0cmRpZmZfdD4K
Y2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRv
cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBl
ZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsK
ICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwoKICBpc3RyZWFtX2l0ZXJhdG9yKCkgOiBf
TV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVhbV90
eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CgogIHJlZmVyZW5jZSBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQogIHBvaW50ZXIgb3BlcmF0b3It
PigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogIGlzdHJlYW1faXRlcmF0b3Im
IG9wZXJhdG9yKysoKSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGlz
dHJlYW1faXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlzdHJlYW1faXRlcmF0b3IgX190
bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIGJvb2wg
X01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAogICAgeyByZXR1cm4g
KF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9zdHJlYW0gPT0gX194Ll9NX3N0
cmVhbSk7IH0KCnByaXZhdGU6CiAgaXN0cmVhbV90eXBlKiBfTV9zdHJlYW07CiAgX1RwIF9NX3Zh
bHVlOwogIGJvb2wgX01fb2s7CgogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX29rID0gKF9NX3N0
cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAgIGlmIChfTV9vaykgewogICAg
ICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICBfTV9vayA9ICpfTV9zdHJlYW0gPyB0cnVl
IDogZmFsc2U7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25z
dCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAg
ICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlz
dD4mIF9feSkgewogIHJldHVybiBfX3guX01fZXF1YWwoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJv
b2wKb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz
LCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No
YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiAhX194Ll9NX2VxdWFsKF9feSk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hhciwg
Y2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpjbGFzcyBvc3RyZWFtX2l0ZXJh
dG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4g
b3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVu
Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNl
OwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19z
KSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcywg
Y29uc3QgX0NoYXJUKiBfX2MpCiAgICA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKF9fYykg
e30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUp
IHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChfTV9zdHJpbmcpICpfTV9zdHJl
YW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBvc3RyZWFtX2l0ZXJhdG9y
PF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAgb3N0cmVhbV9pdGVyYXRvcjxf
VHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBvc3RyZWFtX2l0ZXJhdG9yPF9U
cD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQpwcml2YXRlOgogIG9zdHJlYW1f
dHlwZSogX01fc3RyZWFtOwogIGNvbnN0IF9DaGFyVCogX01fc3RyaW5nOwp9OwojIDQ0NiAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmNsYXNzIF9fbm9ybWFsX2l0ZXJh
dG9yCiAgOiBwdWJsaWMgaXRlcmF0b3I8aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46Oml0ZXJh
dG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnBvaW50ZXIsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KewoKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBfTV9j
dXJyZW50OwoKcHVibGljOgogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf
Q29udGFpbmVyPiBub3JtYWxfaXRlcmF0b3JfdHlwZTsKICB0eXBlZGVmIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+IF9fdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190
eXBlOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHJhaXRzX3R5cGU6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHR5cGVu
YW1lIF9fdHJhaXRzX3R5cGU6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3RyYWl0c190eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfX3RyYWl0c190eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwoKICBfX25vcm1hbF9p
dGVyYXRvcigpIDogX01fY3VycmVudChfSXRlcmF0b3IoKSkgeyB9CgogIGV4cGxpY2l0IF9fbm9y
bWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogIGlubGluZSBfX25vcm1hbF9pdGVyYXRvcihj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlciwgX0NvbnRhaW5lcj4mIF9faSkKICAgIDogX01f
Y3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuICpfTV9jdXJyZW50OyB9CgogIHBvaW50ZXIKICBvcGVyYXRvci0+KCkgY29uc3Qg
eyByZXR1cm4gX01fY3VycmVudDsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRv
cisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3Jf
dHlwZQogIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJy
ZW50KyspOyB9CgoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBvcGVyYXRvci0tKCkgeyAtLV9N
X2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJh
dG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoK
ICByZWZlcmVuY2UKICBvcGVyYXRvcltdKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25z
dAogIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYK
ICBvcGVyYXRvcis9KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAr
PSBfX247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9y
Kyhjb25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9p
dGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZSYKICBv
cGVyYXRvci09KGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKQogIHsgX01fY3VycmVudCAtPSBf
X247IHJldHVybiAqdGhpczsgfQoKICBub3JtYWxfaXRlcmF0b3JfdHlwZQogIG9wZXJhdG9yLShj
b25zdCBkaWZmZXJlbmNlX3R5cGUmIF9fbikgY29uc3QKICB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICBkaWZmZXJlbmNlX3R5cGUKICBvcGVyYXRvci0o
Y29uc3Qgbm9ybWFsX2l0ZXJhdG9yX3R5cGUmIF9faSkgY29uc3QKICB7IHJldHVybiBfTV9jdXJy
ZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgY29uc3QgX0l0ZXJhdG9yJgogIGJhc2UoKSBjb25z
dCB7IHJldHVybiBfTV9jdXJyZW50OyB9Cn07CgoKCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRv
ckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29s
Cm9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIs
IF9Db250YWluZXI+JiBfX3JocykKeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2Uo
KTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwg
dHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfX25vcm1h
bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJl
dHVybiAhKF9fbGhzID09IF9fcmhzKTsgfQoKCgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JM
LCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApv
cGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0Nv
bnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0K
CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVu
YW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25v
cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9f
cmhzIDwgX19saHM7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9J
dGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf
X3JocykKeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0
ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5l
IGJvb2wKb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29u
dGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fbGhzIDwgX19yaHMpOyB9Cgp0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CmlubGluZSBf
X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+Cm9wZXJhdG9yKyh0eXBlbmFt
ZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX19uLAogICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u
dGFpbmVyPiYgX19pKQp7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cgp9CiMgODEgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyA4MiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9UcD4KaW5saW5l
IHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19iLCBf
VHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9fYjsKICAqX19iID0gX190bXA7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpp
bmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9Gb3J3YXJkSXRlcjIgX19i
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKF9fYSkpOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwogIF9fYiA9IF9fdG1wOwp9CgoK
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1Rw
JiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fYiA8IF9fYSkgcmV0dXJu
IF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9U
cCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikgewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChf
X2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNv
bnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2IsIF9fYSkp
IHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBf
X2I7IHJldHVybiBfX2E7Cn0KIyAxNjYgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHkoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy
YXRvcl90YWcsIF9EaXN0YW5jZSopCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f
cmVzdWx0LCArK19fZmlyc3QpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX091dHB1
dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyCl9fY29weShfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCwgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsIF9EaXN0YW5jZSop
CnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9f
bikgewogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgICArK19fcmVz
dWx0OwogIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGlu
ZSBfVHAqCl9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xh
c3QsIF9UcCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yo
X1RwKSAqIChfX2xhc3QgLSBfX2ZpcnN0KSk7CiAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAt
IF9fZmlyc3QpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJ
dGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCnsKICByZXR1cm4gX19jb3B5KF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpLAogICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0
ZXIgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVf
dHlwZSkKewogIHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAg
ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBf
X2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUg
X1RwKiBfX2NvcHlfYXV4MihfVHAqIF9fZmlyc3QsIF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlf
dHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KaW5saW5lIF9UcCogX19jb3B5X2F1eDIoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAq
IF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5
cGUpCnsKICByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1Rw
Pjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAg
cmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Ucml2aWFsKCkp
Owp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBfX3RydWVfdHlwZSkKewogIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9u
aTIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJl
dHVybiBfX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fdmFsdWVfdHlwZShf
X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1
dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y
bWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19j
b3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19sYXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFs
KCkpOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxf
aXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlf
bmkyKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBj
b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgIHR5cGVk
ZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05vcm1hbCBfX05v
cm1hbDsKICAgcmV0dXJuIF9fY29weV9uaTEoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19O
b3JtYWwoKSk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UqKQp7CiAgd2hp
bGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xh
c3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0
OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQm9v
bFR5cGU+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2gKewogIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjppdGVyYXRvcl9jYXRlZ29y
eQogICAgICAgICAgX0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlk
aXJlY3Rpb25hbEl0ZXIxPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7Cgog
IHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIyIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9f
bGFzdCwgX19yZXN1bHQsIF9DYXQoKSwgKF9EaXN0YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwg
X190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIGNvbnN0IHB0cmRpZmZfdCBfTnVt
ID0gX19sYXN0IC0gX19maXJzdDsKICAgIG1lbW1vdmUoX19yZXN1bHQgLSBfTnVtLCBfX2ZpcnN0
LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPGNv
bnN0IF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBf
VHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1
cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAg
ICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9CSTEsIGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9hdXgoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5h
bWUgX190eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5
cGU+CiAgICAgICAgICAgICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcgogICAgICAgICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRj
aDxfQkkxLCBfQkkyLCBfVHJpdmlhbD4KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkky
PgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfQkkx
IF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkgewogIHJldHVybiBf
QkkyKF9fY29weV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCkp
KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkky
IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSl7CiAgcmV0dXJuIF9fY29weV9iYWNrd2Fy
ZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBf
QkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9y
bWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5
cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3Jt
YWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJh
dG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBs
YXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgppbmxpbmUgX0JJMiBfX2NvcHlfYmFj
a3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jl
c3VsdCwgX19mYWxzZV90eXBlKSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJh
dG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0
cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFj
a3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKCgoKICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRl
cmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9p
bnB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX05vcm1hbCgpKTsKfQoKCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRl
cj4KcGFpcjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4gX19jb3B5X24oX0lucHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgZm9yICggOyBfX2NvdW50ID4gMDsgLS1fX2Nv
dW50KSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICAgICsrX19y
ZXN1bHQ7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPihfX2ZpcnN0
LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUkFJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX091dHB1dEl0ZXI+CmlubGluZSBwYWlyPF9SQUl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlf
bihfUkFJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9SQUl0ZXIg
X19sYXN0ID0gX19maXJzdCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JBSXRlciwgX091dHB1
dEl0ZXI+KF9fbGFzdCwgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu
bGluZSBwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPgpfX2NvcHlfbihfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9TaXplIF9fY291bnQsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
Y29weV9uKF9fZmlyc3QsIF9fY291bnQsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfX2l0
ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwg
X091dHB1dEl0ZXI+CmNvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsIF9P
dXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fY29weV9uKF9f
Zmlyc3QsIF9fY291bnQsIF9fcmVzdWx0KTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZCBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0g
X192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX1RwPgpfT3V0cHV0SXRlciBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19u
LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19uID4g
MDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4gX19m
aXJzdDsKfQoKCgppbmxpbmUgdm9pZCBmaWxsKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHVuc2ln
bmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyJiBf
X2MpCnsKICB1bnNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0LCBfX3Rt
cCwgX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoc2lnbmVkIGNoYXIqIF9f
Zmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVk
IGNoYXImIF9fYykKewogIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2ZpcnN0
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwp9
CgppbmxpbmUgdm9pZCBmaWxsKGNoYXIqIF9fZmlyc3QsIGNoYXIqIF9fbGFzdCwgY29uc3QgY2hh
ciYgX19jKQp7CiAgY2hhciBfX3RtcCA9IF9fYzsKICBtZW1zZXQoX19maXJzdCwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9TaXplPgppbmxpbmUgdW5zaWduZWQgY2hhciogZmlsbF9uKHVuc2lnbmVkIGNoYXIq
IF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7
CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5l
IHNpZ25lZCBjaGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgZmlsbChfX2ZpcnN0
LCBfX2ZpcnN0ICsgX19uLCBfX2MpOwogIHJldHVybiBfX2ZpcnN0ICsgX19uOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1NpemU+CmlubGluZSBjaGFyKiBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUg
X19uLCBjb25zdCBjaGFyJiBfX2MpCnsKICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9f
Yyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBfX247Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g
bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0
MSA9PSAqX19maXJzdDIpIHsKICAgICsrX19maXJzdDE7CiAgICArK19fZmlyc3QyOwogIH0KICBy
ZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNz
IF9CaW5hcnlQcmVkaWNhdGU+CnBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPiBtaXNtYXRj
aChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9w
cmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJz
dDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEs
IF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJ
dGVyMj4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytf
X2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghKCpfX2ZpcnN0MSA9PSAqX19maXJzdDIpKQog
ICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5w
dXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGlu
ZSBib29sIGVxdWFsKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGlmICghX19iaW5hcnlfcHJl
ZCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1
ZTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+
CmJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAgICBpZiAoKl9fZmlyc3Qx
IDwgKl9fZmlyc3QyKQogICAgICByZXR1cm4gdHJ1ZTsKICAgIGlmICgqX19maXJzdDIgPCAqX19m
aXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIx
LCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmlyc3QyKSB7CiAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIHRydWU7CiAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwog
IH0KICByZXR1cm4gX19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9
CgppbmxpbmUgYm9vbApsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFy
KiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19m
aXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz
dDIpCnsKICBjb25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0
IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0
ID0gbWVtY21wKF9fZmlyc3QxLCBfX2ZpcnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0
dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7Cn0KCmlu
bGluZSBib29sIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBj
b25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKewoKICByZXR1cm4gbGV4
aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNo
YXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz
cyBfSW5wdXRJdGVyMj4KaW50IF9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikK
ewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiAtMTsKICAgIGlmICgq
X19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiAxOwogICAgKytfX2ZpcnN0MTsKICAg
ICsrX19maXJzdDI7CiAgfQogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKSB7CiAgICByZXR1cm4g
IShfX2ZpcnN0MSA9PSBfX2xhc3QxKTsKICB9CiAgZWxzZSB7CiAgICByZXR1cm4gLTE7CiAgfQp9
CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmVfM3dheShjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDIpCnsKICBjb25zdCBwdHJkaWZmX3QgX19sZW4x
ID0gX19sYXN0MSAtIF9fZmlyc3QxOwogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjIgPSBfX2xhc3Qy
IC0gX19maXJzdDI7CiAgY29uc3QgaW50IF9fcmVzdWx0ID0gbWVtY21wKF9fZmlyc3QxLCBfX2Zp
cnN0MiwgbWluKF9fbGVuMSwgX19sZW4yKSk7CiAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl
c3VsdAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9f
bGVuMSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50Cl9fbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmVfM3dheShjb25zdCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25z
dCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikg
X19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj
aGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2ln
bmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW50IGxleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3
YXkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19sZXhp
Y29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19s
YXN0Mik7Cn0KCn0KIyA4NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdHJlZS5o
IiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMK
IyA1NyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwojIDEgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZv
aWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf
YWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAog
IF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9y
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxv
d19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0
IGNoYXIqIF9fcyk7Cn0KIyA1OCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o
IiAxIDMKIyA1OSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAz
CiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyA2
MCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyA2MSAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAxIDMKIyAzNyAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5o
IiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2Zl
YXR1cmVzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwojIDY1ICIvdXNy
L2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf
ZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hh
ciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f
KSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19j
b25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0
dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlv
biwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RkX2Nhc3NlcnQuaCIgMiAzCiMgNjIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsbG9jLmgiIDIgMwoKCgoKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA2MiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfdGhyZWFkcy5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDYzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF90aHJlYWRzLmgiIDIgMwojIDgwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF90aHJlYWRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgOTUgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKewoKCgoKICB0
eXBlZGVmIHNpemVfdCBfUkNfdDsKCgoKICAgdm9sYXRpbGUgX1JDX3QgX01fcmVmX2NvdW50OwoK
CgoKICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9yZWZfY291bnRfbG9jazsKICBfUmVmY291bnRfQmFz
ZShfUkNfdCBfX24pIDogX01fcmVmX2NvdW50KF9fbikKICAgIHsKCiAgICAgIF9fZ3RocmVhZF9t
dXRleF90IF9fdG1wID0gMDsKICAgICAgX01fcmVmX2NvdW50X2xvY2sgPSBfX3RtcDsKCgoKCgog
ICAgfQojIDE0MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CiAgdm9pZCBfTV9pbmNyKCkgewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3Vu
dF9sb2NrKTsKICAgICsrX01fcmVmX2NvdW50OwogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygm
X01fcmVmX2NvdW50X2xvY2spOwogIH0KICBfUkNfdCBfTV9kZWNyKCkgewogICAgX19ndGhyZWFk
X211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIHZvbGF0aWxlIF9SQ190IF9fdG1w
ID0gLS1fTV9yZWZfY291bnQ7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291
bnRfbG9jayk7CiAgICByZXR1cm4gX190bXA7CiAgfQojIDE5MiAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCn07CiMgMzEzICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKdGVtcGxhdGUgPGludCBfX2luc3Q+CnN0cnVjdCBf
U1RMX211dGV4X3NwaW4gewogIGVudW0geyBfX2xvd19tYXggPSAzMCwgX19oaWdoX21heCA9IDEw
MDAgfTsKCgogIHN0YXRpYyB1bnNpZ25lZCBfX21heDsKICBzdGF0aWMgdW5zaWduZWQgX19sYXN0
Owp9OwoKdGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2lu
c3Q+OjpfX21heCA9IF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+OjpfX2xvd19tYXg7Cgp0ZW1wbGF0
ZSA8aW50IF9faW5zdD4KdW5zaWduZWQgX1NUTF9tdXRleF9zcGluPF9faW5zdD46Ol9fbGFzdCA9
IDA7CiMgMzQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
c3RydWN0IF9TVExfbXV0ZXhfbG9jawp7CgoKCgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9NX2xv
Y2s7CiAgdm9pZCBfTV9pbml0aWFsaXplKCkgewojIDM3MSAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgfQogIHZvaWQgX01fYWNxdWlyZV9sb2NrKCkgewoK
CgogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX2xvY2spOwogIH0KICB2b2lkIF9NX3JlbGVh
c2VfbG9jaygpIHsKCgoKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogIH0K
IyA0ODIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwp9Owoj
IDUyMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVj
dCBfU1RMX2F1dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBfU1RMX2F1
dG9fbG9jayhfU1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsg
X01fbG9jay5fTV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9j
ay5fTV9yZWxlYXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShjb25zdCBf
U1RMX2F1dG9fbG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7
Cn07Cgp9CiMgNjggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDIg
MwojIDk3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4KY2xhc3MgX19tYWxsb2NfYWxsb2Nf
dGVtcGxhdGUgewoKcHJpdmF0ZToKCiAgc3RhdGljIHZvaWQqIF9TX29vbV9tYWxsb2Moc2l6ZV90
KTsKICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCosIHNpemVfdCk7CiAgc3RhdGlj
IHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7CgpwdWJsaWM6CgogIHN0YXRp
YyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFs
bG9jKF9fbik7CiAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fbWFsbG9j
KF9fbik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRl
KHZvaWQqIF9fcCwgc2l6ZV90ICkKICB7CiAgICBmcmVlKF9fcCk7CiAgfQoKICBzdGF0aWMgdm9p
ZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19zeikKICB7CiAg
ICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICBpZiAoMCA9PSBf
X3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhfX3AsIF9fbmV3X3N6KTsKICAgIHJl
dHVybiBfX3Jlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVy
KHZvaWQgKCpfX2YpKCkpKSgpCiAgewogICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2Fs
bG9jX29vbV9oYW5kbGVyOwogICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAg
ICByZXR1cm4oX19vbGQpOwogIH0KCn07CgoKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkICgq
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9fbWFsbG9jX2FsbG9jX29vbV9oYW5k
bGVyKSgpID0gMDsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKgpfX21hbGxvY19hbGxvY190
ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCnsKICAgIHZvaWQgKCog
X19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0OwoKICAgIGZvciAoOzsp
IHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRs
ZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikgeyBzdGQ6Ol9fdGhyb3df
YmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICAgICAg
X19yZXN1bHQgPSBtYWxsb2MoX19uKTsKICAgICAgICBpZiAoX19yZXN1bHQpIHJldHVybihfX3Jl
c3VsdCk7CiAgICB9Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp2b2lkKiBfX21hbGxvY19hbGxv
Y190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fcmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CnsKICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgIHZvaWQqIF9fcmVzdWx0
OwoKICAgIGZvciAoOzspIHsKICAgICAgICBfX215X21hbGxvY19oYW5kbGVyID0gX19tYWxsb2Nf
YWxsb2Nfb29tX2hhbmRsZXI7CiAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikg
eyBzdGQ6Ol9fdGhyb3dfYmFkX2FsbG9jKCk7IH0KICAgICAgICAoKl9fbXlfbWFsbG9jX2hhbmRs
ZXIpKCk7CiAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICBpZiAo
X19yZXN1bHQpIHJldHVybihfX3Jlc3VsdCk7CiAgICB9Cn0KCnR5cGVkZWYgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8MD4gbWFsbG9jX2FsbG9jOwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBf
QWxsb2M+CmNsYXNzIHNpbXBsZV9hbGxvYyB7CgpwdWJsaWM6CiAgICBzdGF0aWMgX1RwKiBhbGxv
Y2F0ZShzaXplX3QgX19uKQogICAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0Fs
bG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CiAgICBzdGF0aWMgX1RwKiBhbGxv
Y2F0ZSh2b2lkKQogICAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjphbGxvY2F0ZShzaXplb2Yg
KF9UcCkpOyB9CiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19u
KQogICAgICB7IGlmICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mIChfVHApKTsgfQogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAg
eyBfQWxsb2M6OmRlYWxsb2NhdGUoX19wLCBzaXplb2YgKF9UcCkpOyB9Cn07CgoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIGRlYnVnX2FsbG9jIHsKCnByaXZhdGU6CgogIGVudW0g
e19TX2V4dHJhID0gOH07CgoKCnB1YmxpYzoKCiAgc3RhdGljIHZvaWQqIGFsbG9jYXRlKHNpemVf
dCBfX24pCiAgewogICAgY2hhciogX19yZXN1bHQgPSAoY2hhciopX0FsbG9jOjphbGxvY2F0ZShf
X24gKyAoaW50KSBfU19leHRyYSk7CiAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICBy
ZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRyYTsKICB9CgogIHN0YXRpYyB2b2lkIGRlYWxs
b2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0gKGNo
YXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihzaXpl
X3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwgKCIqKHNpemVfdCopX19y
ZWFsX3AgPT0gX19uIiwgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgi
LCAyMTksIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgX0FsbG9jOjpkZWFsbG9jYXRl
KF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19leHRyYSk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVh
bGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogIHsK
ICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0
YXRpY19jYXN0PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAo
X19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiwgMjI2LCBfX1BSRVRUWV9GVU5DVElP
Tl9fKSwgMCkpKTsKICAgIGNoYXIqIF9fcmVzdWx0ID0gKGNoYXIqKQogICAgICBfQWxsb2M6OnJl
YWxsb2NhdGUoX19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3ogKyAoaW50KSBfU19leHRyYSk7CiAgICAq
KHNpemVfdCopX19yZXN1bHQgPSBfX25ld19zejsKICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQp
IF9TX2V4dHJhOwogIH0KCn07CiMgMjcwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxib29sIHRocmVhZHMsIGludCBpbnN0PgpjbGFzcyBfX2Rl
ZmF1bHRfYWxsb2NfdGVtcGxhdGUgewoKcHJpdmF0ZToKCgogIGVudW0ge19BTElHTiA9IDh9Owog
IGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogIGVudW0ge19ORlJFRUxJU1RTID0gMTZ9OwogIHN0
YXRpYyBzaXplX3QKICBfU19yb3VuZF91cChzaXplX3QgX19ieXRlcykKICAgIHsgcmV0dXJuICgo
KF9fYnl0ZXMpICsgKHNpemVfdCkgX0FMSUdOLTEpICYgfigoc2l6ZV90KSBfQUxJR04gLSAxKSk7
IH0KCiAgdW5pb24gX09iaiB7CiAgICAgICAgdW5pb24gX09iaiogX01fZnJlZV9saXN0X2xpbms7
CiAgICAgICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICB9OwoKICBzdGF0aWMgX09iaiogdm9s
YXRpbGUgX1NfZnJlZV9saXN0W107CgogIHN0YXRpYyBzaXplX3QgX1NfZnJlZWxpc3RfaW5kZXgo
c2l6ZV90IF9fYnl0ZXMpIHsKICAgICAgICByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOwogIH0KCgogIHN0YXRpYyB2b2lkKiBfU19yZWZp
bGwoc2l6ZV90IF9fbik7CgoKICBzdGF0aWMgY2hhciogX1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9f
c2l6ZSwgaW50JiBfX25vYmpzKTsKCgogIHN0YXRpYyBjaGFyKiBfU19zdGFydF9mcmVlOwogIHN0
YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCgog
ICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRvcl9sb2NrOwoKCgoKCiAg
ICBjbGFzcyBfTG9jazsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKICAgIGNsYXNzIF9Mb2NrIHsK
ICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgIF9Mb2NrKCkgeyB7IGlmICh0aHJlYWRzKSBfU19u
b2RlX2FsbG9jYXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9OyB9CiAgICAgICAgICAgIH5f
TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNl
X2xvY2soKTsgfTsgfQogICAgfTsKCnB1YmxpYzoKCgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShz
aXplX3QgX19uKQogIHsKICAgIHZvaWQqIF9fcmV0ID0gMDsKCiAgICBpZiAoX19uID4gKHNpemVf
dCkgX01BWF9CWVRFUykgewogICAgICBfX3JldCA9IG1hbGxvY19hbGxvYzo6YWxsb2NhdGUoX19u
KTsKICAgIH0KICAgIGVsc2UgewogICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QK
ICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgoKCgog
ICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CgogICAgICBfT2JqKiBfX3Jlc3VsdCA9ICpfX215
X2ZyZWVfbGlzdDsKICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAgICAgX19yZXQgPSBfU19y
ZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAgIGVsc2UgewogICAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fcmVzdWx0IC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIF9fcmV0ID0gX19y
ZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gX19yZXQ7CiAgfTsKCgogIHN0YXRpYyB2
b2lkIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX24gPiAo
c2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICBtYWxsb2NfYWxsb2M6OmRlYWxsb2NhdGUoX19wLCBf
X24pOwogICAgZWxzZSB7CiAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdAogICAg
ICAgICAgPSBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICBfT2Jq
KiBfX3EgPSAoX09iaiopX19wOwoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoKICAg
ICAgX19xIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAqX19t
eV9mcmVlX2xpc3QgPSBfX3E7CgogICAgfQogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUo
dm9pZCogX19wLCBzaXplX3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeik7Cgp9IDsKCnR5cGVk
ZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRydWUsIDA+IGFsbG9jOwp0eXBlZGVmIF9fZGVm
YXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4gc2luZ2xlX2NsaWVudF9hbGxvYzsKCnRlbXBs
YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+JikKewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1
cm4gZmFsc2U7Cn0KCgoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
Y2hhcioKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1
bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBfX25vYmpzKQp7CiAgICBjaGFyKiBfX3Jl
c3VsdDsKICAgIHNpemVfdCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgIHNp
emVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRfZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgaWYg
KF9fYnl0ZXNfbGVmdCA+PSBfX3RvdGFsX2J5dGVzKSB7CiAgICAgICAgX19yZXN1bHQgPSBfU19z
dGFydF9mcmVlOwogICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAg
ICByZXR1cm4oX19yZXN1bHQpOwogICAgfSBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXpl
KSB7CiAgICAgICAgX19ub2JqcyA9IChpbnQpKF9fYnl0ZXNfbGVmdC9fX3NpemUpOwogICAgICAg
IF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgIF9fcmVzdWx0ID0gX1Nf
c3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAg
ICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgICAgc2l6ZV90IF9fYnl0ZXNf
dG9fZ2V0ID0KICAgICAgICAgIDIgKiBfX3RvdGFsX2J5dGVzICsgX1Nfcm91bmRfdXAoX1NfaGVh
cF9zaXplID4+IDQpOwoKICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkgewogICAgICAgICAg
ICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgICAgICAg
ICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAg
ICAgICAgKChfT2JqKilfU19zdGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215
X2ZyZWVfbGlzdDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gKF9PYmoqKV9TX3N0YXJ0
X2ZyZWU7CiAgICAgICAgfQogICAgICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jKF9f
Ynl0ZXNfdG9fZ2V0KTsKICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVlKSB7CiAgICAgICAg
ICAgIHNpemVfdCBfX2k7CiAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlz
dDsKICAgICAgICAgICAgX09iaiogX19wOwoKCgogICAgICAgICAgICBmb3IgKF9faSA9IF9fc2l6
ZTsKICAgICAgICAgICAgICAgICBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsKICAgICAgICAg
ICAgICAgICBfX2kgKz0gKHNpemVfdCkgX0FMSUdOKSB7CiAgICAgICAgICAgICAgICBfX215X2Zy
ZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAg
ICAgICAgICBfX3AgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICBpZiAoMCAhPSBf
X3ApIHsKICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3AgLT4gX01fZnJl
ZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKilf
X3A7CiAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19p
OwogICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9i
anMpKTsKCgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9TX2Vu
ZF9mcmVlID0gMDsKICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKiltYWxsb2NfYWxs
b2M6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKCgoKICAgICAgICB9CiAgICAgICAgX1NfaGVh
cF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3RhcnRf
ZnJlZSArIF9fYnl0ZXNfdG9fZ2V0OwogICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3Np
emUsIF9fbm9ianMpKTsKICAgIH0KfQoKCgoKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4Kdm9pZCoKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
Pjo6X1NfcmVmaWxsKHNpemVfdCBfX24pCnsKICAgIGludCBfX25vYmpzID0gMjA7CiAgICBjaGFy
KiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAgIF9PYmoqIHZvbGF0
aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgIF9PYmoqIF9fcmVzdWx0OwogICAgX09iaiogX19jdXJy
ZW50X29iajsKICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICBpbnQgX19pOwoKICAgIGlmICgxID09
IF9fbm9ianMpIHJldHVybihfX2NodW5rKTsKICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9s
aXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilf
X2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2No
dW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9faSsrKSB7CiAgICAgICAgX19jdXJy
ZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIq
KV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25vYmpzIC0gMSA9PSBfX2kpIHsKICAg
ICAgICAgICAgX19jdXJyZW50X29iaiAtPiBfTV9mcmVlX2xpc3RfbGluayA9IDA7CiAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4g
X01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0KICAgICAgfQogICAgcmV0
dXJuKF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGJvb2wgdGhyZWFkcywgaW50IGluc3Q+CnZvaWQq
Cl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0aHJlYWRzLCBpbnN0Pjo6cmVhbGxvY2F0ZSh2b2lk
KiBfX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgX19uZXdfc3opCnsKICAgIHZvaWQqIF9fcmVzdWx0OwogICAg
c2l6ZV90IF9fY29weV9zejsKCiAgICBpZiAoX19vbGRfc3ogPiAoc2l6ZV90KSBfTUFYX0JZVEVT
ICYmIF9fbmV3X3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUykgewogICAgICAgIHJldHVybihyZWFs
bG9jKF9fcCwgX19uZXdfc3opKTsKICAgIH0KICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikg
PT0gX1Nfcm91bmRfdXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgIF9fcmVzdWx0ID0gYWxs
b2NhdGUoX19uZXdfc3opOwogICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19v
bGRfc3ogOiBfX25ld19zejsKICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwog
ICAgZGVhbGxvY2F0ZShfX3AsIF9fb2xkX3N6KTsKICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCgog
ICAgdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9s
b2NrCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19u
b2RlX2FsbG9jYXRvcl9sb2NrCiAgICAgICAgPSB7IDAgfTsKCgoKdGVtcGxhdGUgPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgpjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJl
YWRzLCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFk
cywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQg
X19pbnN0PgpzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
Pjo6X1NfaGVhcF9zaXplID0gMDsKCnRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5z
dD4KdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6
X09iaiogdm9sYXRpbGUKX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0
PiA6Ol9TX2ZyZWVfbGlzdFsKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs
IF9faW5zdD46Ol9ORlJFRUxJU1RTCl0gPSB7MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgfTsKIyA1NTUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2NhdG9yIHsKICB0
eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYg
X1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRo
cm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBs
YXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3co
KSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVu
Y2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNv
bnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9j
YXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAw
ID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkp
CiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVy
IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICog
c2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAg
IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChw
b2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAg
dm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+
CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog
cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2
b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK
ICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRv
cjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBh
bGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsK
fQojIDYzMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfX2FsbG9jYXRvciB7CiAgX0Fs
bG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5
cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsK
ICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl
bmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJpbmQgewogICAg
dHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07CgogIF9fYWxsb2Nh
dG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNvbnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRo
cm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9
CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3I8
X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2Eu
X191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9jYXRvcigpIHRocm93KCkge30KCiAgcG9p
bnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KICBjb25z
dF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9f
eDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsK
ICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3RhdGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5
aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihfVHApKSkKICAgICAgICA6IDA7CiAgfQoK
CiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBzaXplX3R5cGUgX19uKQogICAgeyBfX3Vu
ZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiBzaXplX3QoLTEp
IC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9U
cCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVy
IF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KY2xhc3Mg
X19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwog
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdm9pZCB2
YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7CiAgICB0
eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl
cmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19hbGxv
Y2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9f
YWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBfX2ExLl9fdW5kZXJseWlu
Z19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKCgoKCnRlbXBsYXRlIDxpbnQg
aW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0
ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgpp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGRlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRy
dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29u
c3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVi
dWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1cm4gZmFsc2U7Cn0KIyA3NjEgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jYXRvcj4Kc3RydWN0IF9BbGxvY190cmFpdHMKewogIHN0YXRpYyBjb25zdCBib29s
IF9TX2luc3RhbmNlbGVzcyA9IGZhbHNlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jYXRvcjo6
dGVtcGxhdGUgcmViaW5kPF9UcD46Om90aGVyIGFsbG9jYXRvcl90eXBlOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRvcj4KY29uc3QgYm9vbCBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jYXRvcj46Ol9TX2luc3RhbmNlbGVzczsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg
Y2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4gPgp7
CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNp
bXBsZV9hbGxvYzxfVHAsIGFsbG9jPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIGFsbG9jYXRvcjxf
VHA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0
PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5z
dD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBl
ZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBf
QWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVt
cGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxf
VHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAg
ICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX0FsbG9jX3Ry
YWl0czxfVHAsIGRlYnVnX2FsbG9jPF9BbGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf
aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2Fs
bG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVi
dWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX1RwMSwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAog
ICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1w
bGF0ZTxfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0g
dHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRl
PF9faW5zdD4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxs
b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGJvb2wgX190aHIsIGludCBfX2luc3Q+CnN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwKICAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHIsIF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogIHR5cGVkZWYgc2ltcGxlX2FsbG9jPF9UcCwgX19kZWZhdWx0X2FsbG9jX3Rl
bXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4K
ICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2FsbG9jYXRv
cjxfVHAxLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf
aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIGRlYnVnX2Fs
bG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgZGVi
dWdfYWxsb2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKfQojIDg3ICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2MyAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9uZXciIDEgMwojIDY0ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1
Y3QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfY29uc3RydWN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpp
bmxpbmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3
ICgodm9pZCopIF9fcCkgX1QxKF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxp
bmUgdm9pZCBfQ29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2lu
dGVyKSB7CiAgX19wb2ludGVyLT5+X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgp2b2lkCl9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXJhdG9yIF9fbGFzdCwgX19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yLCBfRm9yd2FyZEl0ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShf
Rm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3Ry
dWN0b3IKICAgICAgICAgIF9Ucml2aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9Ucml2aWFsX2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9f
bGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hh
ciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUg
dm9pZCBfRGVzdHJveShsb25nKiwgbG9uZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0
KiwgZmxvYXQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQpp
bmxpbmUgdm9pZCBfRGVzdHJveSh3Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29u
c3QgX1QyJiBfX3ZhbHVlKSB7CiAgX0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3Ry
dWN0KF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1Rw
KiBfX3BvaW50ZXIpIHsKICBfRGVzdHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19s
YXN0KTsKfQoKfQojIDg4ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgi
IDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEg
MwojIDYzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5h
bWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVj
dCB1bmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRl
ZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBf
QXJnMiwgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBf
QXJnMSBmaXJzdF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50
X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7
CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51
cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3Io
KShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9f
eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCnRl
bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVudChwbHVzPF9UcD4pIHsKICByZXR1cm4g
X1RwKDApOwp9CnRlbXBsYXRlIDxjbGFzcyBfVHA+IGlubGluZSBfVHAgaWRlbnRpdHlfZWxlbWVu
dChtdWx0aXBsaWVzPF9UcD4pIHsKICByZXR1cm4gX1RwKDEpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+
CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5l
Z2F0ZSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ID09IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7
CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdy
ZWF0ZXIgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBf
VHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9f
eCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0
IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPD0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgpzdHJ1Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggfHwgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBib29sIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfUHJlZGljYXRlPgpjbGFzcyB1bmFyeV9uZWdhdGUKICA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlLCBib29sPiB7CnBy
b3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBsaWNpdCB1bmFyeV9u
ZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3Bl
cmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjphcmd1bWVudF90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiAhX01fcHJlZChfX3gpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBf
UHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1By
ZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3By
ZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQog
IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1
bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRl
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4g
ewpwcm90ZWN0ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmlu
YXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5
cGUmIF9feCwKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vj
b25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194
LCBfX3kpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgYmluYXJ5
X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QyKGNvbnN0IF9QcmVkaWNhdGUmIF9fcHJlZCkKewogIHJl
dHVybiBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfT3BlcmF0aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0
eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6
CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90
eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAg
ICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYg
X195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vj
b25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gp
OwogIH0KCgogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0
eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gb3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0
aW9uLCBjbGFzcyBfVHA+CmlubGluZSBiaW5kZXIxc3Q8X09wZXJhdGlvbj4KYmluZDFzdChjb25z
dCBfT3BlcmF0aW9uJiBfX2ZuLCBjb25zdCBfVHAmIF9feCkKewogIHR5cGVkZWYgdHlwZW5hbWUg
X09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSBfQXJnMV90eXBlOwogIHJldHVybiBiaW5k
ZXIxc3Q8X09wZXJhdGlvbj4oX19mbiwgX0FyZzFfdHlwZShfX3gpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk
OgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAog
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1
ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJh
dGlvbiwgY2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29u
c3QgX09wZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1l
IF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJp
bmRlcjJuZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBv
c2UKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1l
bnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6
cmVzdWx0X3R5cGU+CnsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0
aW9uMiBfTV9mbjI7CnB1YmxpYzoKICB1bmFyeV9jb21wb3NlKGNvbnN0IF9PcGVyYXRpb24xJiBf
X3gsIGNvbnN0IF9PcGVyYXRpb24yJiBfX3kpCiAgICA6IF9NX2ZuMShfX3gpLCBfTV9mbjIoX195
KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29u
c3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24xLCBjbGFzcyBfT3BlcmF0aW9uMj4KaW5saW5lIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlv
bjEsX09wZXJhdGlvbjI+CmNvbXBvc2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX2ZuMSwgY29uc3Qg
X09wZXJhdGlvbjImIF9fZm4yKQp7CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEs
X09wZXJhdGlvbjI+KF9fZm4xLCBfX2ZuMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u
MSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29t
cG9zZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1
bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24x
OjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fZm4xOwogIF9PcGVy
YXRpb24yIF9NX2ZuMjsKICBfT3BlcmF0aW9uMyBfTV9mbjM7CnB1YmxpYzoKICBiaW5hcnlfY29t
cG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LAogICAg
ICAgICAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX3opCiAgICA6IF9NX2ZuMShfX3gpLCBf
TV9mbjIoX195KSwgX01fZm4zKF9feikgeyB9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3Vs
dF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fZm4xKF9NX2ZuMihfX3gpLCBfTV9mbjMo
X194KSk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24xLCBjbGFzcyBfT3BlcmF0
aW9uMiwgY2xhc3MgX09wZXJhdGlvbjM+CmlubGluZSBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9u
MSwgX09wZXJhdGlvbjIsIF9PcGVyYXRpb24zPgpjb21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYg
X19mbjEsIGNvbnN0IF9PcGVyYXRpb24yJiBfX2ZuMiwKICAgICAgICAgY29uc3QgX09wZXJhdGlv
bjMmIF9fZm4zKQp7CiAgcmV0dXJuIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRp
b24yLF9PcGVyYXRpb24zPgogICAgKF9fZm4xLCBfX2ZuMiwgX19mbjMpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3MgcG9pbnRlcl90b191bmFyeV9mdW5jdGlv
biA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0PiB7CnByb3RlY3RlZDoKICBf
UmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgogIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rp
b24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9f
eCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVzdWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywg
Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jl
c3VsdD4gcHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3Rv
X3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
QXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+
IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsKcHVibGlj
OgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQgcG9pbnRl
cl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkKICAgICAg
OiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIg
X195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVt
cGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBv
aW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jl
c3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewogIHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9m
dW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PihfX3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAg
X1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBf
VHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxf
VHA+IHt9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJs
aWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAg
dHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qg
ewogICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0
X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f
eC5maXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5k
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5
cGU+CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9Q
YWlyOjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX194LnNlY29uZDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0cnVj
dCBzZWxlY3Qxc3QgOiBwdWJsaWMgX1NlbGVjdDFzdDxfUGFpcj4ge307CnRlbXBsYXRlIDxjbGFz
cyBfUGFpcj4gc3RydWN0IHNlbGVjdDJuZCA6IHB1YmxpYyBfU2VsZWN0Mm5kPF9QYWlyPiB7fTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBv
cGVyYXRvcigpKGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4g
X194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1By
b2plY3QybmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsK
ICBfQXJnMiBvcGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3Qg
eyByZXR1cm4gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpz
dHJ1Y3QgcHJvamVjdDFzdCA6IHB1YmxpYyBfUHJvamVjdDFzdDxfQXJnMSwgX0FyZzI+IHt9OwoK
dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2plY3QybmQgOiBw
dWJsaWMgX1Byb2plY3QybmQ8X0FyZzEsIF9BcmcyPiB7fTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1Jlc3VsdD4Kc3RydWN0IF9Db25zdGFudF92b2lkX2Z1biB7CiAgdHlwZWRlZiBfUmVzdWx0IHJl
c3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3ZvaWRfZnVuKGNv
bnN0IHJlc3VsdF90eXBlJiBfX3YpIDogX01fdmFsKF9fdikge30KICBjb25zdCByZXN1bHRfdHlw
ZSYgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9SZXN1bHQsIGNsYXNzIF9Bcmd1bWVudD4Kc3RydWN0IF9Db25zdGFudF91bmFyeV9mdW4g
ewogIHR5cGVkZWYgX0FyZ3VtZW50IGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJl
c3VsdF90eXBlOwogIHJlc3VsdF90eXBlIF9NX3ZhbDsKCiAgX0NvbnN0YW50X3VuYXJ5X2Z1bihj
b25zdCByZXN1bHRfdHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5
cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50JikgY29uc3QgeyByZXR1cm4gX01fdmFsOyB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwgY2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpz
dHJ1Y3QgX0NvbnN0YW50X2JpbmFyeV9mdW4gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJndW1l
bnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYg
X1Jlc3VsdCByZXN1bHRfdHlwZTsKICBfUmVzdWx0IF9NX3ZhbDsKCiAgX0NvbnN0YW50X2JpbmFy
eV9mdW4oY29uc3QgX1Jlc3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0
X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX0FyZzEmLCBjb25zdCBfQXJnMiYpIGNvbnN0IHsKICAg
IHJldHVybiBfTV92YWw7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCBj
b25zdGFudF92b2lkX2Z1biA6IHB1YmxpYyBfQ29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gewog
IGNvbnN0YW50X3ZvaWRfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfQ29uc3RhbnRfdm9pZF9m
dW48X1Jlc3VsdD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAg
ICAgY2xhc3MgX0FyZ3VtZW50ID0gX1Jlc3VsdD4Kc3RydWN0IGNvbnN0YW50X3VuYXJ5X2Z1biA6
IHB1YmxpYyBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsIF9Bcmd1bWVudD4KewogIGNvbnN0
YW50X3VuYXJ5X2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpCiAgICA6IF9Db25zdGFudF91bmFyeV9m
dW48X1Jlc3VsdCwgX0FyZ3VtZW50PihfX3YpIHt9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1
bHQsCiAgICAgICAgICBjbGFzcyBfQXJnMSA9IF9SZXN1bHQsCiAgICAgICAgICBjbGFzcyBfQXJn
MiA9IF9BcmcxPgpzdHJ1Y3QgY29uc3RhbnRfYmluYXJ5X2Z1bgogIDogcHVibGljIF9Db25zdGFu
dF9iaW5hcnlfZnVuPF9SZXN1bHQsIF9BcmcxLCBfQXJnMj4KewogIGNvbnN0YW50X2JpbmFyeV9m
dW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfYmluYXJ5X2Z1bjxfUmVzdWx0
LCBfQXJnMSwgX0FyZzI+KF9fdikge30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0Pgppbmxp
bmUgY29uc3RhbnRfdm9pZF9mdW48X1Jlc3VsdD4gY29uc3RhbnQwKGNvbnN0IF9SZXN1bHQmIF9f
dmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFudF91bmFyeV9mdW48X1Jlc3VsdCxf
UmVzdWx0PiBjb25zdGFudDEoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3Rh
bnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVzdWx0LF9SZXN1
bHQ+CmNvbnN0YW50Mihjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFudF9i
aW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PihfX3ZhbCk7Cn0KCgoKY2xhc3Mgc3Vi
dHJhY3RpdmVfcm5nIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHVuc2lnbmVkIGludCwgdW5zaWdu
ZWQgaW50PiB7CnByaXZhdGU6CiAgdW5zaWduZWQgaW50IF9NX3RhYmxlWzU1XTsKICBzaXplX3Qg
X01faW5kZXgxOwogIHNpemVfdCBfTV9pbmRleDI7CnB1YmxpYzoKICB1bnNpZ25lZCBpbnQgb3Bl
cmF0b3IoKSh1bnNpZ25lZCBpbnQgX19saW1pdCkgewogICAgX01faW5kZXgxID0gKF9NX2luZGV4
MSArIDEpICUgNTU7CiAgICBfTV9pbmRleDIgPSAoX01faW5kZXgyICsgMSkgJSA1NTsKICAgIF9N
X3RhYmxlW19NX2luZGV4MV0gPSBfTV90YWJsZVtfTV9pbmRleDFdIC0gX01fdGFibGVbX01faW5k
ZXgyXTsKICAgIHJldHVybiBfTV90YWJsZVtfTV9pbmRleDFdICUgX19saW1pdDsKICB9CgogIHZv
aWQgX01faW5pdGlhbGl6ZSh1bnNpZ25lZCBpbnQgX19zZWVkKQogIHsKICAgIHVuc2lnbmVkIGlu
dCBfX2sgPSAxOwogICAgX01fdGFibGVbNTRdID0gX19zZWVkOwogICAgc2l6ZV90IF9faTsKICAg
IGZvciAoX19pID0gMDsgX19pIDwgNTQ7IF9faSsrKSB7CiAgICAgICAgc2l6ZV90IF9faWkgPSAo
MjEgKiAoX19pICsgMSkgJSA1NSkgLSAxOwogICAgICAgIF9NX3RhYmxlW19faWldID0gX19rOwog
ICAgICAgIF9fayA9IF9fc2VlZCAtIF9fazsKICAgICAgICBfX3NlZWQgPSBfTV90YWJsZVtfX2lp
XTsKICAgIH0KICAgIGZvciAoaW50IF9fbG9vcCA9IDA7IF9fbG9vcCA8IDQ7IF9fbG9vcCsrKSB7
CiAgICAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCA1NTsgX19pKyspCiAgICAgICAgICAgIF9NX3Rh
YmxlW19faV0gPSBfTV90YWJsZVtfX2ldIC0gX01fdGFibGVbKDEgKyBfX2kgKyAzMCkgJSA1NV07
CiAgICB9CiAgICBfTV9pbmRleDEgPSAwOwogICAgX01faW5kZXgyID0gMzE7CiAgfQoKICBzdWJ0
cmFjdGl2ZV9ybmcodW5zaWduZWQgaW50IF9fc2VlZCkgeyBfTV9pbml0aWFsaXplKF9fc2VlZCk7
IH0KICBzdWJ0cmFjdGl2ZV9ybmcoKSB7IF9NX2luaXRpYWxpemUoMTYxODAzMzk4dSk7IH0KfTsK
IyA1NjIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9S
ZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAq
IF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChf
VHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3Mg
Y29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkg
Y29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6Oipf
TV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNz
IG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9f
cGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipf
TV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl
dCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgp
OyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01f
ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1
bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVi
bGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwg
X0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRl
OgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW4xX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0
IG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9m
KShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVu
MV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6
CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykg
Y29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwg
X0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNs
YXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9p
ZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDog
X01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4q
X01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21l
bV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lk
IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJp
dmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u
c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1Rw
PiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
Y29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19w
Zikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01f
ZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0Fy
Zz4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBl
eHBsaWNpdCBtZW1fZnVuMV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipf
TV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQs
IF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19w
ZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBf
VHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQg
bWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQog
IHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZiko
X194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUg
PGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwg
X1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1
YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShf
QXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg
X19yLCBfQXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9p
ZCAoX1RwOjoqX01fZikoX0FyZykgY29uc3Q7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl
dCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9U
cDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxf
VHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21l
bV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9U
cD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6
Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxf
UmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJu
IGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9m
dW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1f
ZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90
PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs
IGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgpt
ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0
X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9B
cmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFf
dDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1Rw
LCBjbGFzcyBfQXJnPgppbmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1f
ZnVuMShfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9m
dW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1l
bV9mdW4xX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn
PgptZW1fZnVuMV9yZWYoX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBj
b25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp9CiMgODkgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CnR5cGVkZWYgYm9vbCBfUmJfdHJlZV9Db2xvcl90eXBlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90
eXBlIF9TX3JiX3RyZWVfcmVkID0gZmFsc2U7CmNvbnN0IF9SYl90cmVlX0NvbG9yX3R5cGUgX1Nf
cmJfdHJlZV9ibGFjayA9IHRydWU7CgpzdHJ1Y3QgX1JiX3RyZWVfbm9kZV9iYXNlCnsKICB0eXBl
ZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CiAgdHlwZWRlZiBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9CYXNlX3B0cjsKCiAgX0NvbG9yX3R5cGUgX01fY29sb3I7CiAgX0Jhc2VfcHRy
IF9NX3BhcmVudDsKICBfQmFzZV9wdHIgX01fbGVmdDsKICBfQmFzZV9wdHIgX01fcmlnaHQ7Cgog
IHN0YXRpYyBfQmFzZV9wdHIgX1NfbWluaW11bShfQmFzZV9wdHIgX194KQogIHsKICAgIHdoaWxl
IChfX3gtPl9NX2xlZnQgIT0gMCkgX194ID0gX194LT5fTV9sZWZ0OwogICAgcmV0dXJuIF9feDsK
ICB9CgogIHN0YXRpYyBfQmFzZV9wdHIgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogIHsKICAg
IHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICByZXR1
cm4gX194OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CnN0cnVjdCBfUmJfdHJlZV9u
b2RlIDogcHVibGljIF9SYl90cmVlX25vZGVfYmFzZQp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl
PF9WYWx1ZT4qIF9MaW5rX3R5cGU7CiAgX1ZhbHVlIF9NX3ZhbHVlX2ZpZWxkOwp9OwoKCnN0cnVj
dCBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6
X0Jhc2VfcHRyIF9CYXNlX3B0cjsKICB0eXBlZGVmIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgdm9pZCBfTV9pbmNyZW1lbnQoKQogIHsKICAgIGlmIChf
TV9ub2RlLT5fTV9yaWdodCAhPSAwKSB7CiAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdo
dDsKICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAgICBfTV9ub2RlID0g
X01fbm9kZS0+X01fbGVmdDsKICAgIH0KICAgIGVsc2UgewogICAgICBfQmFzZV9wdHIgX195ID0g
X01fbm9kZS0+X01fcGFyZW50OwogICAgICB3aGlsZSAoX01fbm9kZSA9PSBfX3ktPl9NX3JpZ2h0
KSB7CiAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsK
ICAgICAgfQogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gX195KQogICAgICAgIF9NX25v
ZGUgPSBfX3k7CiAgICB9CiAgfQoKICB2b2lkIF9NX2RlY3JlbWVudCgpCiAgewogICAgaWYgKF9N
X25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkICYmCiAgICAgICAgX01fbm9kZS0+X01f
cGFyZW50LT5fTV9wYXJlbnQgPT0gX01fbm9kZSkKICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9N
X3JpZ2h0OwogICAgZWxzZSBpZiAoX01fbm9kZS0+X01fbGVmdCAhPSAwKSB7CiAgICAgIF9CYXNl
X3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9sZWZ0OwogICAgICB3aGlsZSAoX195LT5fTV9yaWdodCAh
PSAwKQogICAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7CiAgICAgIF9NX25vZGUgPSBfX3k7CiAg
ICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsK
ICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0KSB7CiAgICAgICAgX01fbm9kZSA9
IF9feTsKICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgfQogICAgICBfTV9ub2Rl
ID0gX195OwogICAgfQogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYs
IGNsYXNzIF9QdHI+CnN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9i
YXNlX2l0ZXJhdG9yCnsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX1Jl
ZiByZWZlcmVuY2U7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmJfdHJlZV9p
dGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+CiAgICBpdGVyYXRvcjsKICB0eXBlZGVm
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4K
ICAgIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBf
UmVmLCBfUHRyPgogICAgX1NlbGY7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4qIF9M
aW5rX3R5cGU7CgogIF9SYl90cmVlX2l0ZXJhdG9yKCkge30KICBfUmJfdHJlZV9pdGVyYXRvcihf
TGlua190eXBlIF9feCkgeyBfTV9ub2RlID0gX194OyB9CiAgX1JiX3RyZWVfaXRlcmF0b3IoY29u
c3QgaXRlcmF0b3ImIF9faXQpIHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICByZWZlcmVu
Y2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlwZShfTV9ub2RlKS0+X01fdmFs
dWVfZmllbGQ7IH0KICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJh
dG9yKigpKTsgfQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsgX01faW5jcmVtZW50KCk7IHJldHVy
biAqdGhpczsgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0
aGlzOwogICAgX01faW5jcmVtZW50KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfU2VsZiYg
b3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7IHJldHVybiAqdGhpczsgfQogIF9TZWxmIG9w
ZXJhdG9yLS0oaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgX01fZGVjcmVtZW50
KCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xh
c3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJl
ZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX195KSB7CiAg
cmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Zh
bHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1
ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBf
X3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0
b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1Zh
bHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9WYWx1ZSwgY2xhc3MgX1JlZiwgY2xhc3MgX1B0cj4KaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIF9SZWYsIF9QdHI+JiBf
X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVl
LCBfUmVmLCBfUHRyPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2Rl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgY29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFs
dWUsIF9WYWx1ZSYsIF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgIT0gX195
Ll9NX25vZGU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWU+CmlubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwg
Y29uc3QgX1ZhbHVlJiwgY29uc3QgX1ZhbHVlKj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9k
ZSAhPSBfX3kuX01fbm9kZTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcm90YXRlX2xlZnQoX1Ji
X3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9S
Yl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9yaWdodDsKICBfX3gtPl9NX3JpZ2h0ID0g
X195LT5fTV9sZWZ0OwogIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgX195LT5fTV9sZWZ0LT5f
TV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgaWYg
KF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBpZiAoX194ID09IF9feC0+
X01fcGFyZW50LT5fTV9sZWZ0KQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAg
ZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogIF9feS0+X01fbGVmdCA9
IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoKaW5saW5lIHZvaWQKX1JiX3RyZWVfcm90
YXRlX3JpZ2h0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBf
X3Jvb3QpCnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fbGVmdDsKICBfX3gt
Pl9NX2xlZnQgPSBfX3ktPl9NX3JpZ2h0OwogIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICBf
X3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3g7CiAgX195LT5fTV9wYXJlbnQgPSBfX3gtPl9N
X3BhcmVudDsKCiAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICBfX3Jvb3QgPSBfX3k7CiAgZWxzZSBp
ZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdodCkKICAgIF9feC0+X01fcGFyZW50LT5f
TV9yaWdodCA9IF9feTsKICBlbHNlCiAgICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsK
ICBfX3ktPl9NX3JpZ2h0ID0gX194OwogIF9feC0+X01fcGFyZW50ID0gX195Owp9CgppbmxpbmUg
dm9pZApfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVl
X25vZGVfYmFzZSomIF9fcm9vdCkKewogIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsK
ICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPT0gX1Nf
cmJfdHJlZV9yZWQpIHsKICAgIGlmIChfX3gtPl9NX3BhcmVudCA9PSBfX3gtPl9NX3BhcmVudC0+
X01fcGFyZW50LT5fTV9sZWZ0KSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194
LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmlnaHQ7CiAgICAgIGlmIChfX3kgJiYgX195LT5f
TV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX195LT5fTV9jb2xvciA9IF9TX3JiX3Ry
ZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBf
U19yYl90cmVlX3JlZDsKICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50Owog
ICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIGlmIChfX3ggPT0gX194LT5fTV9wYXJlbnQtPl9N
X3JpZ2h0KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90
cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19yb290KTsKICAgICAgICB9CiAgICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVu
dC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9SYl90cmVl
X3JvdGF0ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9
CiAgICB9CiAgICBlbHNlIHsKICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LT5fTV9sZWZ0OwogICAgICBpZiAoX195ICYmIF9feS0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3Ig
PSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBfU19yYl90cmVlX2Js
YWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJf
dHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAg
fQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0
KSB7CiAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgIF9SYl90cmVlX3Jv
dGF0ZV9yaWdodChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9feC0+X01fcGFyZW50
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N
X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICB9CiAgICB9
CiAgfQogIF9fcm9vdC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwp9CgppbmxpbmUgX1Ji
X3RyZWVfbm9kZV9iYXNlKgpfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9SYl90cmVlX25v
ZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVf
YmFzZSomIF9fcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2Rl
X2Jhc2UqJiBfX2xlZnRtb3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYl90cmVl
X25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBf
X3o7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3ggPSAwOwogIF9SYl90cmVlX25vZGVfYmFzZSog
X194X3BhcmVudCA9IDA7CiAgaWYgKF9feS0+X01fbGVmdCA9PSAwKQogICAgX194ID0gX195LT5f
TV9yaWdodDsKICBlbHNlCiAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAgICBfX3ggPSBf
X3ktPl9NX2xlZnQ7CiAgICBlbHNlIHsKICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAg
d2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQogICAgICAgIF9feSA9IF9feS0+X01fbGVmdDsKICAg
ICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIH0KICBpZiAoX195ICE9IF9feikgewogICAgX196
LT5fTV9sZWZ0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xl
ZnQ7CiAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQpIHsKICAgICAgX194X3BhcmVudCA9IF9f
eS0+X01fcGFyZW50OwogICAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFy
ZW50OwogICAgICBfX3ktPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgX195LT5fTV9y
aWdodCA9IF9fei0+X01fcmlnaHQ7CiAgICAgIF9fei0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9f
eTsKICAgIH0KICAgIGVsc2UKICAgICAgX194X3BhcmVudCA9IF9feTsKICAgIGlmIChfX3Jvb3Qg
PT0gX196KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3otPl9NX3BhcmVudC0+
X01fbGVmdCA9PSBfX3opCiAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAg
ZWxzZQogICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7CiAgICBfX3ktPl9NX3Bh
cmVudCA9IF9fei0+X01fcGFyZW50OwogICAgc3RkOjpzd2FwKF9feS0+X01fY29sb3IsIF9fei0+
X01fY29sb3IpOwogICAgX195ID0gX196OwoKICB9CiAgZWxzZSB7CiAgICBfX3hfcGFyZW50ID0g
X195LT5fTV9wYXJlbnQ7CiAgICBpZiAoX194KSBfX3gtPl9NX3BhcmVudCA9IF9feS0+X01fcGFy
ZW50OwogICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgIF9fcm9vdCA9IF9feDsKICAgIGVsc2UK
ICAgICAgaWYgKF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID09IF9feikKICAgICAgICBfX3otPl9N
X3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9fei0+X01fcGFyZW50
LT5fTV9yaWdodCA9IF9feDsKICAgIGlmIChfX2xlZnRtb3N0ID09IF9feikKICAgICAgaWYgKF9f
ei0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX2xlZnRtb3N0ID0gX196LT5fTV9wYXJlbnQ7Cgog
ICAgICBlbHNlCiAgICAgICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWlu
aW11bShfX3gpOwogICAgaWYgKF9fcmlnaHRtb3N0ID09IF9feikKICAgICAgaWYgKF9fei0+X01f
bGVmdCA9PSAwKQogICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9wYXJlbnQ7CgogICAgICBl
bHNlCiAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0o
X194KTsKICB9CiAgaWYgKF9feS0+X01fY29sb3IgIT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgIHdo
aWxlIChfX3ggIT0gX19yb290ICYmIChfX3ggPT0gMCB8fCBfX3gtPl9NX2NvbG9yID09IF9TX3Ji
X3RyZWVfYmxhY2spKQogICAgICBpZiAoX194ID09IF9feF9wYXJlbnQtPl9NX2xlZnQpIHsKICAg
ICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAg
ICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgICBfX3ct
Pl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2Nv
bG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hf
cGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fcmlnaHQ7CiAg
ICAgICAgfQogICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgIF9f
dy0+X01fbGVmdC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAgICAg
KF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29s
b3IgPT0gX1NfcmJfdHJlZV9ibGFjaykpIHsKICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19y
Yl90cmVlX3JlZDsKICAgICAgICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICBfX3hfcGFy
ZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBp
ZiAoX193LT5fTV9yaWdodCA9PSAwIHx8CiAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01f
Y29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0
KSBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICAgICAg
X193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgICBfUmJfdHJlZV9yb3Rh
dGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9y
aWdodDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5f
TV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFj
azsKICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9
IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3hfcGFy
ZW50LCBfX3Jvb3QpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2Ugewog
ICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAg
ICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAgICAgX193
LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9j
b2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9f
eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0Owog
ICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAg
X193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgJiYKICAgICAgICAg
ICAgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICBfX3ctPl9NX2xlZnQtPl9NX2Nv
bG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1Nf
cmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgX194X3Bh
cmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAg
aWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9j
b2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSB7CiAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0
KSBfX3ctPl9NX3JpZ2h0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICAg
IF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3RyZWVfcm90
YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9s
ZWZ0OwogICAgICAgICAgfQogICAgICAgICAgX193LT5fTV9jb2xvciA9IF9feF9wYXJlbnQtPl9N
X2NvbG9yOwogICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNr
OwogICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9T
X3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVu
dCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgaWYgKF9f
eCkgX194LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgfQogIHJldHVybiBfX3k7Cn0K
CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYywgYm9vbCBfU19pbnN0YW5j
ZWxlc3M+CmNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBl
bmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9y
X3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N
X25vZGVfYWxsb2NhdG9yOyB9CgogIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y
X3R5cGUmIF9fYSkKICAgIDogX01fbm9kZV9hbGxvY2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9
Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4s
IF9BbGxvYz46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CiAg
X1JiX3RyZWVfbm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01f
Z2V0X25vZGUoKQogICAgeyByZXR1cm4gX01fbm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0K
ICB2b2lkIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1RwPiogX19wKQogICAgeyBfTV9ub2Rl
X2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
LCBjbGFzcyBfQWxsb2M+CmNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsIHRy
dWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv
Yz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9h
bGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9CgogIF9SYl90cmVl
X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKcHJv
dGVjdGVkOgogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlw
ZQogICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9SYl90cmVlX25vZGU8X1RwPiogX01fZ2V0X25v
ZGUoKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKDEpOyB9CiAgdm9pZCBfTV9w
dXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxs
b2NhdGUoX19wLCAxKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpz
dHJ1Y3QgX1JiX3RyZWVfYmFzZQogIDogcHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9hbGxvY19iYXNl
PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRz
PF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAgICAgX0Jhc2U7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIF9SYl90
cmVlX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgIDogX0Jhc2UoX19hKSB7IF9N
X2hlYWRlciA9IF9NX2dldF9ub2RlKCk7IH0KICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25v
ZGUoX01faGVhZGVyKTsgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVl
LCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxs
b2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+CmNsYXNzIF9SYl90cmVlIDogcHJvdGVjdGVkIF9SYl90
cmVlX2Jhc2U8X1ZhbHVlLCBfQWxsb2M+IHsKICB0eXBlZGVmIF9SYl90cmVlX2Jhc2U8X1ZhbHVl
LCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2Uq
IF9CYXNlX3B0cjsKICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbHVlPiBfUmJfdHJlZV9ub2Rl
OwogIHR5cGVkZWYgX1JiX3RyZWVfQ29sb3JfdHlwZSBfQ29sb3JfdHlwZTsKcHVibGljOgogIHR5
cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9WYWx1ZSB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5cGUqIGNvbnN0
X3BvaW50ZXI7CiAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25z
dCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlKiBf
TGlua190eXBlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90
eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25z
dCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2dldF9ub2RlOwogIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICB1c2luZyBf
QmFzZTo6X01faGVhZGVyOwoKcHJvdGVjdGVkOgoKICBfTGlua190eXBlIF9NX2NyZWF0ZV9ub2Rl
KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICB7CiAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0
X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIGNvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxk
LCBfX3gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX3B1dF9ub2RlKF9fdG1wKTsgdGhyb3c7
IH07CiAgICByZXR1cm4gX190bXA7CiAgfQoKICBfTGlua190eXBlIF9NX2Nsb25lX25vZGUoX0xp
bmtfdHlwZSBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9NX2NyZWF0ZV9ub2RlKF9f
eC0+X01fdmFsdWVfZmllbGQpOwogICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsK
ICAgIF9fdG1wLT5fTV9sZWZ0ID0gMDsKICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICByZXR1
cm4gX190bXA7CiAgfQoKICB2b2lkIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICB7CiAg
ICBkZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAg
fQoKcHJvdGVjdGVkOgogIHNpemVfdHlwZSBfTV9ub2RlX2NvdW50OwogIF9Db21wYXJlIF9NX2tl
eV9jb21wYXJlOwoKICBfTGlua190eXBlJiBfTV9yb290KCkgY29uc3QKICAgIHsgcmV0dXJuIChf
TGlua190eXBlJikgX01faGVhZGVyLT5fTV9wYXJlbnQ7IH0KICBfTGlua190eXBlJiBfTV9sZWZ0
bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fbGVm
dDsgfQogIF9MaW5rX3R5cGUmIF9NX3JpZ2h0bW9zdCgpIGNvbnN0CiAgICB7IHJldHVybiAoX0xp
bmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9T
X2xlZnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01f
bGVmdCk7IH0KICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpCiAg
ICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmlnaHQpOyB9CiAgc3RhdGljIF9MaW5r
X3R5cGUmIF9TX3BhcmVudChfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIChfTGlua190eXBl
JikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGljIHJlZmVyZW5jZSBfU192YWx1ZShfTGlua190
eXBlIF9feCkKICAgIHsgcmV0dXJuIF9feC0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29u
c3QgX0tleSYgX1Nfa2V5KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUo
KShfU192YWx1ZShfX3gpKTsgfQogIHN0YXRpYyBfQ29sb3JfdHlwZSYgX1NfY29sb3IoX0xpbmtf
dHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0NvbG9yX3R5cGUmKShfX3gtPl9NX2NvbG9yKTsgfQoK
ICBzdGF0aWMgX0xpbmtfdHlwZSYgX1NfbGVmdChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4g
KF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3Jp
Z2h0KF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fcmln
aHQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3BhcmVudChfQmFzZV9wdHIgX194KQogICAg
eyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KICBzdGF0aWMgcmVmZXJl
bmNlIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gpCiAgICB7IHJldHVybiAoKF9MaW5rX3R5cGUpX194
KS0+X01fdmFsdWVfZmllbGQ7IH0KICBzdGF0aWMgY29uc3QgX0tleSYgX1Nfa2V5KF9CYXNlX3B0
ciBfX3gpCiAgICB7IHJldHVybiBfS2V5T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194
KSkpO30KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9yKF9CYXNlX3B0ciBfX3gpCiAgICB7
IHJldHVybiAoX0NvbG9yX3R5cGUmKShfTGlua190eXBlKF9feCktPl9NX2NvbG9yKTsgfQoKICBz
dGF0aWMgX0xpbmtfdHlwZSBfU19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4g
KF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfX3gpOyB9CgogIHN0
YXRpYyBfTGlua190eXBlIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAo
X0xpbmtfdHlwZSkgX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9feCk7IH0KCnB1Ymxp
YzoKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9p
bnRlcj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCBj
b25zdF9yZWZlcmVuY2UsIGNvbnN0X3BvaW50ZXI+CiAgICAgICAgICBjb25zdF9pdGVyYXRvcjsK
CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNl
X2l0ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9p
dGVyYXRvcjsKCnByaXZhdGU6CiAgaXRlcmF0b3IgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3gsIF9C
YXNlX3B0ciBfX3ksIGNvbnN0IHZhbHVlX3R5cGUmIF9fdik7CiAgX0xpbmtfdHlwZSBfTV9jb3B5
KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBlIF9fcCk7CiAgdm9pZCBfTV9lcmFzZShfTGlua190
eXBlIF9feCk7CgpwdWJsaWM6CgogIF9SYl90cmVlKCkKICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5
cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgIHsgX01fZW1wdHlf
aW5pdGlhbGl6ZSgpOyB9CgogIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICA6
IF9CYXNlKGFsbG9jYXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFy
ZShfX2NvbXApCiAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25z
dCBfQ29tcGFyZSYgX19jb21wLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfQmFz
ZShfX2EpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShfX2NvbXApCiAgICB7IF9N
X2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5n
ZXRfYWxsb2NhdG9yKCkpLAogICAgICBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZShf
X3guX01fa2V5X2NvbXBhcmUpCiAgewogICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkKICAgICAg
X01fZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgZWxzZSB7CiAgICAgIF9TX2NvbG9yKF9NX2hlYWRl
cikgPSBfU19yYl90cmVlX3JlZDsKICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9v
dCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290
KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgIH0K
ICAgIF9NX25vZGVfY291bnQgPSBfX3guX01fbm9kZV9jb3VudDsKICB9CiAgfl9SYl90cmVlKCkg
eyBjbGVhcigpOyB9CiAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUs
X0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsKCnByaXZhdGU6CiAgdm9pZCBfTV9lbXB0eV9pbml0
aWFsaXplKCkgewogICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9TX3JiX3RyZWVfcmVkOwoKICAg
IF9NX3Jvb3QoKSA9IDA7CiAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgX01fcmln
aHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgfQoKcHVibGljOgoKICBfQ29tcGFyZSBrZXlfY29tcCgp
IGNvbnN0IHsgcmV0dXJuIF9NX2tleV9jb21wYXJlOyB9CiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBfTV9sZWZ0bW9zdCgpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01faGVhZGVy
OyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9CiAg
cmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgp
KTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgewogICAgcmV0dXJu
IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogIH0KICByZXZlcnNlX2l0ZXJhdG9yIHJl
bmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IoYmVnaW4oKSk7CiAgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVybiBfTV9ub2RlX2Nv
dW50ID09IDA7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291
bnQ7IH0KICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEp
OyB9CgogIHZvaWQgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3QpIHsKICAgIHN0ZDo6c3dhcChfTV9oZWFkZXIsIF9fdC5fTV9oZWFkZXIp
OwogICAgc3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgIHN0
ZDo6c3dhcChfTV9rZXlfY29tcGFyZSwgX190Ll9NX2tleV9jb21wYXJlKTsKICB9CgpwdWJsaWM6
CgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0X3VuaXF1ZShjb25zdCB2YWx1ZV90eXBlJiBf
X3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICBp
dGVyYXRvciBpbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5
cGUmIF9feCk7CiAgaXRlcmF0b3IgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNv
bnN0IHZhbHVlX3R5cGUmIF9feCk7CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K
ICB2b2lkIGluc2VydF91bmlxdWUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNl
cnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsK
CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKTsKICBzaXplX3R5cGUgZXJhc2UoY29u
c3Qga2V5X3R5cGUmIF9feCk7CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRv
ciBfX2xhc3QpOwogIHZvaWQgZXJhc2UoY29uc3Qga2V5X3R5cGUqIF9fZmlyc3QsIGNvbnN0IGtl
eV90eXBlKiBfX2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoX01fbm9kZV9jb3VudCAh
PSAwKSB7CiAgICAgIF9NX2VyYXNlKF9NX3Jvb3QoKSk7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf
TV9oZWFkZXI7CiAgICAgIF9NX3Jvb3QoKSA9IDA7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01f
aGVhZGVyOwogICAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIH0KICB9CgpwdWJsaWM6CgogIGl0
ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3RfaXRlcmF0b3IgZmluZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3Q7CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f
eCk7CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29u
c3Q7CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgY29uc3Rf
aXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgcGFpcjxp
dGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CiAgcGFp
cjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0OwoKcHVibGljOgoKICBib29sIF9fcmJfdmVyaWZ5KCkgY29uc3Q7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwK
ICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh
dG9yPT0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPiYgX194LAogICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBfX3guc2l6ZSgpID09IF9feS5z
aXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJlZ2lu
KCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW
YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
Cm9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gbGV4aWNvZ3JhcGhpY2Fs
X2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
Y29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IF9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgIGNvbnN0
IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1JiX3Ry
ZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
PgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlP
ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xh
c3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp
bmxpbmUgdm9pZApzd2FwKF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29t
cGFyZSxfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf
Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf
Q29tcGFyZSxfQWxsb2M+JgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+CiAgOjpvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0gJl9feCkgewoKICAg
IGNsZWFyKCk7CiAgICBfTV9ub2RlX2NvdW50ID0gMDsKICAgIF9NX2tleV9jb21wYXJlID0gX194
Ll9NX2tleV9jb21wYXJlOwogICAgaWYgKF9feC5fTV9yb290KCkgPT0gMCkgewogICAgICBfTV9y
b290KCkgPSAwOwogICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICBfTV9yaWdo
dG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgIH0KICAgIGVsc2UgewogICAgICBfTV9yb290KCkgPSBf
TV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgIF9NX2xlZnRtb3N0KCkgPSBf
U19taW5pbXVtKF9NX3Jvb3QoKSk7CiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX1NfbWF4aW11bShf
TV9yb290KCkpOwogICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICB9
CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1
ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+CiAgOjpfTV9pbnNlcnQoX0Jhc2VfcHRyIF9feF8sIF9CYXNlX3B0ciBfX3lfLCBj
b25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9feF87
CiAgX0xpbmtfdHlwZSBfX3kgPSAoX0xpbmtfdHlwZSkgX195XzsKICBfTGlua190eXBlIF9fejsK
CiAgaWYgKF9feSA9PSBfTV9oZWFkZXIgfHwgX194ICE9IDAgfHwKICAgICAgX01fa2V5X2NvbXBh
cmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX195KSkpIHsKICAgIF9feiA9IF9NX2NyZWF0
ZV9ub2RlKF9fdik7CiAgICBfU19sZWZ0KF9feSkgPSBfX3o7CgogICAgaWYgKF9feSA9PSBfTV9o
ZWFkZXIpIHsKICAgICAgX01fcm9vdCgpID0gX196OwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9f
ejsKICAgIH0KICAgIGVsc2UgaWYgKF9feSA9PSBfTV9sZWZ0bW9zdCgpKQogICAgICBfTV9sZWZ0
bW9zdCgpID0gX196OwogIH0KICBlbHNlIHsKICAgIF9feiA9IF9NX2NyZWF0ZV9ub2RlKF9fdik7
CiAgICBfU19yaWdodChfX3kpID0gX196OwogICAgaWYgKF9feSA9PSBfTV9yaWdodG1vc3QoKSkK
ICAgICAgX01fcmlnaHRtb3N0KCkgPSBfX3o7CiAgfQogIF9TX3BhcmVudChfX3opID0gX195Owog
IF9TX2xlZnQoX196KSA9IDA7CiAgX1NfcmlnaHQoX196KSA9IDA7CiAgX1JiX3RyZWVfcmViYWxh
bmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQpOwogICsrX01fbm9kZV9jb3VudDsKICByZXR1
cm4gaXRlcmF0b3IoX196KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBl
IF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICB3aGlsZSAo
X194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAgIF9feCA9IF9NX2tleV9jb21wYXJlKF9LZXlP
ZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkpID8KICAgICAgICAgICAgX1NfbGVmdChfX3gpIDog
X1NfcmlnaHQoX194KTsKICB9CiAgcmV0dXJuIF9NX2luc2VydChfX3gsIF9feSwgX192KTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KcGFpcjx0eXBlbmFtZSBfUmJf
dHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwK
ICAgICBib29sPgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjppbnNlcnRfdW5pcXVlKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xpbmtfdHlwZSBf
X3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgYm9vbCBfX2Nv
bXAgPSB0cnVlOwogIHdoaWxlIChfX3ggIT0gMCkgewogICAgX195ID0gX194OwogICAgX19jb21w
ID0gX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICBf
X3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogIH0KICBpdGVyYXRv
ciBfX2ogPSBpdGVyYXRvcihfX3kpOwogIGlmIChfX2NvbXApCiAgICBpZiAoX19qID09IGJlZ2lu
KCkpCiAgICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwg
X192KSwgdHJ1ZSk7CiAgICBlbHNlCiAgICAgIC0tX19qOwogIGlmIChfTV9rZXlfY29tcGFyZShf
U19rZXkoX19qLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgcmV0dXJuIHBhaXI8
aXRlcmF0b3IsYm9vbD4oX01faW5zZXJ0KF9feCwgX195LCBfX3YpLCB0cnVlKTsKICByZXR1cm4g
cGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5
LCBjbGFzcyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9LZXlPZlZhbHVl
LCBfQ29tcGFyZSwgX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tleU9m
VmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjppbnNlcnRfdW5pcXVlKGl0ZXJhdG9yIF9fcG9z
aXRpb24sIGNvbnN0IF9WYWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01f
aGVhZGVyLT5fTV9sZWZ0KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgX01fa2V5X2Nv
bXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19wb3NpdGlvbi5fTV9ub2RlKSkpCiAg
ICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fdik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0
OwogIH0gZWxzZSBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlcikgewogICAgaWYg
KF9NX2tleV9jb21wYXJlKF9TX2tleShfTV9yaWdodG1vc3QoKSksIF9LZXlPZlZhbHVlKCkoX192
KSkpCiAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBl
bHNlCiAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfSBlbHNlIHsKICAg
IGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgIC0tX19iZWZvcmU7CiAgICBpZiAo
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9f
dikpCiAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXko
X19wb3NpdGlvbi5fTV9ub2RlKSkpIHsKICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25v
ZGUpID09IDApCiAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBf
X3YpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25v
ZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGlu
c2VydF91bmlxdWUoX192KS5maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFz
cyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9W
YWwmIF9fdikKewogIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0
KSB7CiAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICFfTV9rZXlfY29tcGFyZShfU19rZXko
X19wb3NpdGlvbi5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgcmV0dXJuIF9N
X2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwgX192KTsKCiAg
ICBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgaWYgKF9fcG9z
aXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tl
eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX01fcmlnaHRtb3N0KCkpKSkKICAgICAgcmV0dXJuIF9N
X2luc2VydCgwLCBfTV9yaWdodG1vc3QoKSwgX192KTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGlu
c2VydF9lcXVhbChfX3YpOwogIH0gZWxzZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9z
aXRpb247CiAgICAtLV9fYmVmb3JlOwogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1
ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAmJiAhX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpIHsK
ICAgICAgaWYgKF9TX3JpZ2h0KF9fYmVmb3JlLl9NX25vZGUpID09IDApCiAgICAgICAgcmV0dXJu
IF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAg
cmV0dXJuIF9NX2luc2VydChfX3Bvc2l0aW9uLl9NX25vZGUsIF9fcG9zaXRpb24uX01fbm9kZSwg
X192KTsKCiAgICB9IGVsc2UKICAgICAgcmV0dXJuIGluc2VydF9lcXVhbChfX3YpOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAs
IGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxjbGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxf
VmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjppbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBf
X2xhc3QpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl
cnRfZXF1YWwoKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbCwg
Y2xhc3MgX0tvViwgY2xhc3MgX0NtcCwgY2xhc3MgX0FsbG9jPgogIHRlbXBsYXRlPGNsYXNzIF9J
ST4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz4KICA6Omluc2VydF91
bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0OyArK19fZmlyc3QpCiAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBj
bGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcmFzZShpdGVyYXRvciBfX3Bv
c2l0aW9uKQp7CiAgX0xpbmtfdHlwZSBfX3kgPQogICAgKF9MaW5rX3R5cGUpIF9SYl90cmVlX3Jl
YmFsYW5jZV9mb3JfZXJhc2UoX19wb3NpdGlvbi5fTV9ub2RlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9wYXJlbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXIt
Pl9NX3JpZ2h0KTsKICBkZXN0cm95X25vZGUoX195KTsKICAtLV9NX25vZGVfY291bnQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tl
eSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVl
PF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OmVyYXNlKGNvbnN0IF9L
ZXkmIF9feCkKewogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9f
eCk7CiAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25k
LCBfX24pOwogIGVyYXNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgcmV0dXJuIF9fbjsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21w
YXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWwsIF9Lb1YsIF9D
b21wYXJlLCBfQWxsb2M+OjpfTGlua190eXBlCl9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21w
YXJlLF9BbGxvYz4KICA6Ol9NX2NvcHkoX0xpbmtfdHlwZSBfX3gsIF9MaW5rX3R5cGUgX19wKQp7
CgogIF9MaW5rX3R5cGUgX190b3AgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgX190b3AtPl9NX3Bh
cmVudCA9IF9fcDsKCiAgdHJ5IHsKICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICBfX3RvcC0+
X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9fdG9wKTsKICAgIF9fcCA9IF9fdG9w
OwogICAgX194ID0gX1NfbGVmdChfX3gpOwoKICAgIHdoaWxlIChfX3ggIT0gMCkgewogICAgICBf
TGlua190eXBlIF9feSA9IF9NX2Nsb25lX25vZGUoX194KTsKICAgICAgX19wLT5fTV9sZWZ0ID0g
X195OwogICAgICBfX3ktPl9NX3BhcmVudCA9IF9fcDsKICAgICAgaWYgKF9feC0+X01fcmlnaHQp
CiAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAg
ICAgX19wID0gX195OwogICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICB9CiAgfQogIGNhdGNo
KC4uLikgeyBfTV9lcmFzZShfX3RvcCk7IHRocm93OyB9OwoKICByZXR1cm4gX190b3A7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9lcmFzZShfTGlua190eXBl
IF9feCkKewoKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9NX2VyYXNlKF9TX3JpZ2h0KF9feCkp
OwogICAgX0xpbmtfdHlwZSBfX3kgPSBfU19sZWZ0KF9feCk7CiAgICBkZXN0cm95X25vZGUoX194
KTsKICAgIF9feCA9IF9feTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs
dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4Kdm9pZCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+CiAgOjplcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCnsKICBpZiAo
X19maXJzdCA9PSBiZWdpbigpICYmIF9fbGFzdCA9PSBlbmQoKSkKICAgIGNsZWFyKCk7CiAgZWxz
ZQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBlcmFzZShfX2ZpcnN0KyspOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoY29uc3QgX0tleSogX19m
aXJzdCwgY29uc3QgX0tleSogX19sYXN0KQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSBl
cmFzZSgqX19maXJzdCsrKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg
Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j
Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf
QWxsb2M+OjpmaW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01faGVh
ZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGlsZSAoX194ICE9IDApCiAg
ICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBfX3gs
IF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194KTsK
CiAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICByZXR1cm4gKF9faiA9PSBlbmQoKSB8
fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9kZSkpKSA/CiAgICAgZW5kKCkg
OiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUg
X1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3Rf
aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6ZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hl
YWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKSB7
CiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICBfX3kgPSBf
X3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0gX1NfcmlnaHQoX194
KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgX19qID0gY29uc3RfaXRlcmF0b3IoX195KTsKICByZXR1
cm4gKF9faiA9PSBlbmQoKSB8fCBfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX2ouX01fbm9k
ZSkpKSA/CiAgICBlbmQoKSA6IF9fajsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9W
YWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3Mg
X0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjpzaXplX3R5cGUKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPgogIDo6Y291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcGFpcjxj
b25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+IF9fcCA9IGVxdWFsX3JhbmdlKF9fayk7CiAg
c2l6ZV90eXBlIF9fbiA9IDA7CiAgZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kLCBfX24p
OwogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs
bG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3QgX0tleSYgX19rKQp7CiAgX0xpbmtfdHlwZSBfX3kg
PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3gg
IT0gMCkKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9f
eSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdo
dChfX3gpOwoKICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjpsb3dlcl9ib3VuZChjb25zdCBfS2V5JiBf
X2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAhPSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFy
ZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7
CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogIHJldHVybiBjb25zdF9pdGVy
YXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBf
S2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVu
YW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0
ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4K
ICA6OnVwcGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5cGUgX195ID0gX01f
aGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgd2hpbGUgKF9feCAhPSAw
KQogICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgIF9feSA9
IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgIGVsc2UKICAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogICByZXR1cm4gaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXks
IGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1
ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBf
X2spIGNvbnN0CnsKICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChfX3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBh
cmUoX19rLCBfU19rZXkoX194KSkpCiAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194
KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgcmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNs
YXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K
aW5saW5lCnBhaXI8dHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFs
dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3I+Cl9SYl90cmVlPF9LZXks
X1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0
IF9LZXkmIF9faykKewogIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBpdGVyYXRvcj4obG93ZXJfYm91
bmQoX19rKSwgdXBwZXJfYm91bmQoX19rKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVmFsdWUsIGNsYXNzIF9Lb1YsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu
ZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tvViwgX0NvbXBhcmUsIF9B
bGxvYz46OmNvbnN0X2l0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksIF9WYWx1
ZSwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz46OmNvbnN0X2l0ZXJhdG9yPgpfUmJfdHJlZTxfS2V5
LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+CiAgOjplcXVhbF9yYW5nZShjb25zdCBf
S2V5JiBfX2spIGNvbnN0CnsKICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVy
YXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXBwZXJfYm91bmQoX19rKSk7Cn0KCmlubGluZSBpbnQKX19ibGFja19jb3Vu
dChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fbm9kZSwgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3Jvb3Qp
CnsKICBpZiAoX19ub2RlID09IDApCiAgICByZXR1cm4gMDsKICBpbnQgX19zdW0gPSAwOwogIGRv
IHsKICAgIGlmIChfX25vZGUtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spCiAgICAgICsr
X19zdW07CiAgICBpZiAoX19ub2RlID09IF9fcm9vdCkKICAgICAgYnJlYWs7CiAgICBfX25vZGUg
PSBfX25vZGUtPl9NX3BhcmVudDsKICB9IHdoaWxlICgxKTsKICByZXR1cm4gX19zdW07Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KYm9vbCBfUmJfdHJlZTxfS2V5LF9W
YWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CnsK
ICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICByZXR1cm4g
X01fbm9kZV9jb3VudCA9PSAwICYmIGJlZ2luKCkgPT0gZW5kKCkgJiYKICAgICAgX01faGVhZGVy
LT5fTV9sZWZ0ID09IF9NX2hlYWRlciAmJiBfTV9oZWFkZXItPl9NX3JpZ2h0ID09IF9NX2hlYWRl
cjsKCiAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkp
OwogIGZvciAoY29uc3RfaXRlcmF0b3IgX19pdCA9IGJlZ2luKCk7IF9faXQgIT0gZW5kKCk7ICsr
X19pdCkgewogICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwog
ICAgX0xpbmtfdHlwZSBfX0wgPSBfU19sZWZ0KF9feCk7CiAgICBfTGlua190eXBlIF9fUiA9IF9T
X3JpZ2h0KF9feCk7CgogICAgaWYgKF9feC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpCiAg
ICAgIGlmICgoX19MICYmIF9fTC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHx8CiAgICAg
ICAgICAoX19SICYmIF9fUi0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpKQogICAgICAgIHJl
dHVybiBmYWxzZTsKCiAgICBpZiAoX19MICYmIF9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBf
U19rZXkoX19MKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlmIChfX1IgJiYgX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgcmV0dXJuIGZhbHNlOwoKICAg
IGlmICghX19MICYmICFfX1IgJiYgX19ibGFja19jb3VudChfX3gsIF9NX3Jvb3QoKSkgIT0gX19s
ZW4pCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90
cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQogICAgcmV0dXJuIGZhbHNlOwog
IGlmIChfTV9yaWdodG1vc3QoKSAhPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX01f
cm9vdCgpKSkKICAgIHJldHVybiBmYWxzZTsKCiAgcmV0dXJuIHRydWU7Cn0KCgoKCnRlbXBsYXRl
IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLCBjbGFzcyBfQ29t
cGFyZSwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVmFsdWU+ID4Kc3RydWN0
IHJiX3RyZWUgOiBwdWJsaWMgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZWYWx1ZSwgX0Nv
bXBhcmUsIF9BbGxvYz4KewogIHR5cGVkZWYgX1JiX3RyZWU8X0tleSwgX1ZhbHVlLCBfS2V5T2ZW
YWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogIHJiX3RyZWUoY29uc3QgX0NvbXBhcmUm
IF9fY29tcCA9IF9Db21wYXJlKCksCiAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19h
ID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19jb21wLCBfX2EpIHt9CgogIH5yYl90
cmVlKCkge30KfTsKCn0KIyA2MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFw
LmgiIDIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tYXAuaCIgMSAz
CiMgNjMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAzCiMgMSAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDY0ICIvb3B0
L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tYXAuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsK
CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlID0gbGVzczxf
S2V5PiwKICAgICAgICAgIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxwYWlyPGNvbnN0IF9LZXks
IF9UcD4gPiA+CmNsYXNzIG1hcAp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgpwdWJsaWM6Cgog
IHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAgdHlwZWRl
ZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4gdmFsdWVf
dHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1ZV9jb21w
YXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwg
Ym9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPjsKICBw
cm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUg
X19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2
YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAgICByZXR1
cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6CiAgdHlw
ZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAgICAgIF9T
ZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBf
UmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2lu
dGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIg
Y29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJl
ZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNv
bnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRl
cmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9y
IHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbWFwKCkgOiBf
TV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQgbWFwKGNvbnN0
IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBf
X2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmly
c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAg
Y29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3Qo
X19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KICBt
YXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5f
TV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29u
c3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBfTV90ID0g
X194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21w
KCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1
ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0
X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigp
OyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7
IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3Ig
cmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRl
cmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVy
YXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkg
Y29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7
IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYg
X19rKSB7CiAgICBpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwoKICAgIGlmIChfX2kg
PT0gZW5kKCkgfHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGlu
c2VydChfX2ksIHZhbHVlX3R5cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNv
bmQ7CiAgfQogIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7
IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydChj
b25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoX194
KTsgfQogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlw
ZSYgX194KQogICAgeyByZXR1cm4gX01fdC5pbnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9
CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0
ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRf
dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQoKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9z
aXRpb24pIHsgX01fdC5lcmFzZShfX3Bvc2l0aW9uKTsgfQogIHNpemVfdHlwZSBlcmFzZShjb25z
dCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmVyYXNlKF9feCk7IH0KICB2b2lkIGVyYXNl
KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2Zp
cnN0LCBfX2xhc3QpOyB9CiAgdm9pZCBjbGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgaXRl
cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsg
fQogIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1
cm4gX01fdC5maW5kKF9feCk7IH0KICBzaXplX3R5cGUgY291bnQoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9NX3QuZW5kKCkgPyAwIDog
MTsKICB9CiAgaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVy
biBfTV90Lmxvd2VyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChj
b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChf
X3gpOwogIH0KICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0
dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5k
KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5k
KF9feCk7CiAgfQoKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBr
ZXlfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0KICBw
YWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25zdCBrZXlf
dHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOwogIH0K
CiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX1QxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4K
ICBmcmllbmQgYm9vbCBvcGVyYXRvcj09IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4m
KTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0Ex
PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4m
LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4m
KTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBj
bGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5f
TV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbWFwPF9LZXksX1RwLF9D
b21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01f
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B
bGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I8PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs
b2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl
eSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICBtYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY1
ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMiAzCiMgMSAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjMgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKIyAxICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgNjQgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX211bHRpbWFwLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRl
bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSA9
IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8cGFpcjxjb25z
dCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxv
Yz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgbXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFz
cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11
bHRpbWFwCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCgoKICB0eXBlZGVmIF9L
ZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBl
ZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlw
ZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3MgdmFsdWVfY29tcGFyZSA6IHB1Ymxp
YyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVfdHlwZSwgYm9vbD4gewogIGZyaWVu
ZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZDoK
ICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21w
KF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9yKCkoY29uc3QgdmFsdWVfdHlwZSYg
X194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbXAoX194
LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3Ry
ZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFs
dWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsKICBfUmVwX3R5cGUgX01f
dDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7
CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgY29uc3RfcG9pbnRl
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0
eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5j
ZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlw
ZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwog
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRl
cmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0
b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVy
ZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbXVsdGltYXAoKSA6IF9NX3QoX0Nv
bXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhwbGljaXQgbXVsdGltYXAoY29uc3Qg
X0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aW1hcChfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwg
YWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0
KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGltYXAoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0
IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRf
ZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQogIG11bHRpbWFwKGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7IH0KCiAgbXVsdGlt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRvcj0oY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAg
ICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29u
c3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21wKCkpOyB9CiAgYWxsb2NhdG9y
X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigp
OyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgY29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBpdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyBy
ZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgp
IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg
Y29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1
cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV90
LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4
X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoKCgogIGl0ZXJhdG9yIGluc2VydChjb25z
dCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KICBp
dGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194
KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwoX19wb3NpdGlvbiwgX194KTsKICB9CiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1
YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KICBzaXplX3R5cGUgZXJhc2UoY29uc3Qga2V5
X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiAgdm9pZCBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAgICB7IF9NX3QuZXJhc2UoX19maXJzdCwg
X19sYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9y
IGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBj
b25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9N
X3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNv
bnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiAgY29u
c3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQo
Y29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KICBj
b25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg
ICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwogIH0KICAgcGFpcjxpdGVyYXRvcixpdGVy
YXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu
ZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRv
cj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9N
X3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9U
MSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qg
bXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxjbGFzcyBf
SzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUs
X0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXks
X1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA9PSBfX3kuX01f
dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNs
YXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw
LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8
IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t
cGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG11bHRpbWFw
PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IG11bHRp
bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgbXVsdGlt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz
IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbXVs
dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl
dHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs
YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAobXVsdGltYXA8X0tl
eSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2
NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDMyICIvb3B0
L2djYy9pbmNsdWRlL2crKy12My9tYXAiIDIgMwojIDcgIlN1bS5oIiAyCgpuYW1lc3BhY2UgRnJl
ZUxpZSB7CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+IGNsYXNzIFN1bSB7CiAgcHVibGljOgogICAg
ZXhwbGljaXQgU3VtKGNvbnN0IEJhc2lzJik7CiAgICBTdW0oY29uc3QgQmFzaXNFbGVtZW50Jiwg
Y29uc3QgQmFzaXMmKTsKICAgIFN1bShpbmRleF90eXBlLCBjb25zdCBCYXNpcyYpOwogIHByaXZh
dGU6CiAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6bWFwPGNvbnN0IEJhc2lzRWxlbWVudCAqLCBD
T0VGPiBjb250YWluZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHN0ZDo6cGFpcjxjb25zdCBCYXNp
c0VsZW1lbnQqIGNvbnN0LCBDT0VGPiB0ZXJtcGFpcjsKICBwdWJsaWM6CgogICAgY2xhc3MgVGVy
bTsKICAgIGNsYXNzIGNvbnN0X2l0ZXJhdG9yOwoKICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3Q7CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdDsKCiAgICBjbGFzcyBjb25zdF9p
dGVyYXRvciB7CiAgICAgIGZyaWVuZCBjb25zdF9pdGVyYXRvciBTdW08Q09FRj46OmJlZ2luKCkg
Y29uc3Q7CiAgICAgIGZyaWVuZCBjb25zdF9pdGVyYXRvciBTdW08Q09FRj46OmVuZCgpIGNvbnN0
OwogICAgcHVibGljOgogICAgICBUZXJtIG9wZXJhdG9yKigpIGNvbnN0OwogICAgICBjb25zdF9p
dGVyYXRvciBvcGVyYXRvcisrKCk7CiAgICAgIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKysoaW50
KTsKICAgICAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLSgpOwogICAgICBjb25zdF9pdGVyYXRv
ciBvcGVyYXRvci0tKGludCk7CiAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjb25zdF9pdGVy
YXRvciYpOwogICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgY29uc3RfaXRlcmF0b3ImKTsKICAg
IHByaXZhdGU6CiAgICAgIGNvbnN0X2l0ZXJhdG9yKGNvbnN0IHR5cGVuYW1lIGNvbnRhaW5lcjo6
Y29uc3RfaXRlcmF0b3ImKTsKICAgICAgdHlwZW5hbWUgY29udGFpbmVyOjpjb25zdF9pdGVyYXRv
ciBpdDsKICAgICAgZnJpZW5kIFN1bTxDT0VGPiBQb2lzc29uQnJhY2tldDw+KGNvbnN0IFN1bTxD
T0VGPiYsIGNvbnN0IFN1bTxDT0VGPiYpOwogICAgfTsKCiAgICBjbGFzcyBUZXJtIDogcHJpdmF0
ZSB0ZXJtcGFpciB7CgogICAgICBmcmllbmQgVGVybSBjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3Iq
KCkgY29uc3Q7CiAgICBwdWJsaWM6CiAgICAgIFRlcm0oKTsKICAgICAgVGVybShjb25zdCBCYXNp
c0VsZW1lbnQmLCBjb25zdCBDT0VGJik7CiAgICAgIGNvbnN0IENPRUYgJiBjb2VmKCkgY29uc3Q7
CiAgICAgIGNvbnN0IEJhc2lzRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0OwogICAgcHJpdmF0ZToK
ICAgICAgZXhwbGljaXQgVGVybShjb25zdCB0ZXJtcGFpciYpOwogICAgfTsKCiAgICBTdW0mIG9w
ZXJhdG9yKz0oY29uc3QgU3VtJik7CiAgICBTdW0mIG9wZXJhdG9yLT0oY29uc3QgU3VtJik7CiAg
ICBTdW0mIG9wZXJhdG9yKj0oY29uc3QgQ09FRiYpOwogICAgU3VtJiBvcGVyYXRvci89KGNvbnN0
IENPRUYmKTsKICBwcml2YXRlOgogICAgU3VtJiBvcGVyYXRvcis9KGNvbnN0IHRlcm1wYWlyJik7
CgogICAgY29udGFpbmVyIHN1bTsKICAgIGNvbnN0IEJhc2lzICpiOwogIH07CgoKCiAgdGVtcGxh
dGU8Y2xhc3MgQ09FRj4gU3VtPENPRUY+OjpTdW0oY29uc3QgQmFzaXMmIGJfKSA6IGIoJmJfKQog
IHsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+IFN1bTxDT0VGPjo6U3VtKGNvbnN0IEJhc2lz
RWxlbWVudCYgZSwgY29uc3QgQmFzaXMmIGJfKQogICAgOiBiKCZiXykKICB7CiAgICBzdGF0aWMg
Q09FRiBvbmU9c3RhdGljX2Nhc3Q8Q09FRj4oMSk7CiAgICB0ZXJtcGFpciB0KCZlLG9uZSk7CiAg
ICBzdW0uaW5zZXJ0KHQpOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgQ09FRj4gU3VtPENPRUY+OjpT
dW0oaW5kZXhfdHlwZSBpLCBjb25zdCBCYXNpcyYgYl8pCiAgICA6IGIoJmJfKQogIHsKICAgIHN0
YXRpYyBDT0VGIG9uZT1zdGF0aWNfY2FzdDxDT0VGPigxKTsKICAgIHRlcm1wYWlyIHQoJigqYilb
aV0sb25lKTsKICAgIHN1bS5pbnNlcnQodCk7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgog
IFN1bTxDT0VGPiYgU3VtPENPRUY+OjpvcGVyYXRvcis9KGNvbnN0IHRlcm1wYWlyJiByKQogIHsK
ICAgIHN0YXRpYyBDT0VGIHplcm89c3RhdGljX2Nhc3Q8Q09FRj4oMCk7CiAgICBzdGQ6OnBhaXI8
dHlwZW5hbWUgY29udGFpbmVyOjppdGVyYXRvcixib29sPiBwPXN1bS5pbnNlcnQocik7CiAgICBp
ZiAoIXAuc2Vjb25kKSB7CiAgICAgIHRlcm1wYWlyICZ0PSpwLmZpcnN0OwogICAgICBDT0VGIGMg
PSB0LnNlY29uZCArIHIuc2Vjb25kOwogICAgICBpZiAoYz09emVybykKICAgICAgICBzdW0uZXJh
c2UocC5maXJzdCk7CiAgICAgIGVsc2UKICAgICAgICB0LnNlY29uZCA9IGM7CiAgICB9CiAgICBy
ZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPjo6Y29u
c3RfaXRlcmF0b3IgU3VtPENPRUY+OjpiZWdpbigpIGNvbnN0CiAgewogICAgcmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKHN1bS5iZWdpbigpKTsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+CiAgU3Vt
PENPRUY+Ojpjb25zdF9pdGVyYXRvciBTdW08Q09FRj46OmVuZCgpIGNvbnN0CiAgewogICAgcmV0
dXJuIGNvbnN0X2l0ZXJhdG9yKHN1bS5lbmQoKSk7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VG
PiBTdW08Q09FRj4mIFN1bTxDT0VGPjo6b3BlcmF0b3IrPShjb25zdCBTdW08Q09FRj4mIHIpCiAg
ewogICAgZm9yICh0eXBlbmFtZSBjb250YWluZXI6OmNvbnN0X2l0ZXJhdG9yIGk9ci5zdW0uYmVn
aW4oKSA7CiAgICAgICAgIGkgIT0gci5zdW0uZW5kKCkgOyArK2kpCiAgICAgICp0aGlzICs9ICpp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgQ09FRj4gU3VtPENPRUY+
JiBTdW08Q09FRj46Om9wZXJhdG9yLT0oY29uc3QgU3VtPENPRUY+JiByKQogIHsKICAgIGZvciAo
dHlwZW5hbWUgY29udGFpbmVyOjpjb25zdF9pdGVyYXRvciBpPXIuc3VtLmJlZ2luKCkgOwogICAg
ICAgICBpICE9IHIuc3VtLmVuZCgpIDsgKytpKQogICAgICAqdGhpcyArPSB0ZXJtcGFpcihpLT5m
aXJzdCwtaS0+c2Vjb25kKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlPGNsYXNz
IENPRUY+IFN1bTxDT0VGPiYgU3VtPENPRUY+OjpvcGVyYXRvcio9KGNvbnN0IENPRUYmIGMpCiAg
ewogICAgZm9yICh0eXBlbmFtZSBjb250YWluZXI6Oml0ZXJhdG9yIGk9c3VtLmJlZ2luKCkgOyBp
ICE9IHN1bS5lbmQoKSA7ICsraSkKICAgICAgaS0+c2Vjb25kICo9IGM7CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPiBTdW08Q09FRj4mIFN1bTxDT0VGPjo6b3Bl
cmF0b3IvPShjb25zdCBDT0VGJiBjKQogIHsKICAgIGZvciAodHlwZW5hbWUgY29udGFpbmVyOjpp
dGVyYXRvciBpPXN1bS5iZWdpbigpIDsgaSAhPSBzdW0uZW5kKCkgOyArK2kpCiAgICAgIGktPnNl
Y29uZCAvPSBjOwogICAgcmV0dXJuICp0aGlzOwogIH0KCgoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VG
PgogIFN1bTxDT0VGPiBvcGVyYXRvcisoY29uc3QgU3VtPENPRUY+JiBsLCBjb25zdCBTdW08Q09F
Rj4mIHIpCiAgewogICAgU3VtPENPRUY+IHQ9bDsKICAgIHJldHVybiB0ICs9IHI7CiAgfQoKICB0
ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPiBvcGVyYXRvci0oY29uc3QgU3VtPENPRUY+
JiBsLCBjb25zdCBTdW08Q09FRj4mIHIpCiAgewogICAgU3VtPENPRUY+IHQ9bDsKICAgIHJldHVy
biB0IC09IHI7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPiBvcGVyYXRv
ciooY29uc3QgU3VtPENPRUY+JiBsLCBjb25zdCBDT0VGJiByKQogIHsKICAgIFN1bTxDT0VGPiB0
PWw7CiAgICB0ICo9IHI7CiAgICByZXR1cm4gdDsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+
CiAgU3VtPENPRUY+IG9wZXJhdG9yKihjb25zdCBDT0VGJiBsLCBjb25zdCBTdW08Q09FRj4mIHIp
CiAgewogICAgU3VtPENPRUY+IHQ9cjsKICAgIHQgKj0gbDsKICAgIHJldHVybiB0OwogIH0KCiAg
dGVtcGxhdGU8Y2xhc3MgQ09FRj4KICBTdW08Q09FRj4gb3BlcmF0b3IvKGNvbnN0IFN1bTxDT0VG
PiYgbCwgY29uc3QgQ09FRiYgcikKICB7CiAgICBTdW08Q09FRj4gdD1sOwogICAgdCAvPSByOwog
ICAgcmV0dXJuIHQ7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPiBvcGVy
YXRvci0oY29uc3QgU3VtPENPRUY+JiByKQogIHsKICAgIHN0YXRpYyBDT0VGIG1vbmU9c3RhdGlj
X2Nhc3Q8Q09FRj4oLTEpOwogICAgcmV0dXJuIG1vbmUqcjsKICB9CgoKCiAgdGVtcGxhdGU8Y2xh
c3MgQ09FRj4KICBTdW08Q09FRj46OmNvbnN0X2l0ZXJhdG9yOjpjb25zdF9pdGVyYXRvcihjb25z
dCB0eXBlbmFtZSBTdW08Q09FRj46OmNvbnRhaW5lcjo6Y29uc3RfaXRlcmF0b3ImIGl0XykKICAg
IDogaXQoaXRfKQogIHsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+CiAgU3VtPENPRUY+OjpU
ZXJtIFN1bTxDT0VGPjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yKigpIGNvbnN0CiAgewogICAg
cmV0dXJuIFRlcm0oKml0KTsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+CiAgU3VtPENPRUY+
Ojpjb25zdF9pdGVyYXRvciBTdW08Q09FRj46OmNvbnN0X2l0ZXJhdG9yOjpvcGVyYXRvcisrKCkK
ICB7CiAgICArK2l0OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgQ09F
Rj4KICBTdW08Q09FRj46OmNvbnN0X2l0ZXJhdG9yIFN1bTxDT0VGPjo6Y29uc3RfaXRlcmF0b3I6
Om9wZXJhdG9yKysoaW50KQogIHsKICAgIGNvbnN0X2l0ZXJhdG9yIGo9KnRoaXM7CiAgICArK2l0
OwogICAgcmV0dXJuIGo7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPjo6
Y29uc3RfaXRlcmF0b3IgU3VtPENPRUY+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3ItLSgpCiAg
ewogICAgLS1pdDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+
CiAgU3VtPENPRUY+Ojpjb25zdF9pdGVyYXRvciBTdW08Q09FRj46OmNvbnN0X2l0ZXJhdG9yOjpv
cGVyYXRvci0tKGludCkKICB7CiAgICBjb25zdF9pdGVyYXRvciBqPSp0aGlzOwogICAgLS1pdDsK
ICAgIHJldHVybiBqOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgQ09FRj4gYm9vbAogIFN1bTxDT0VG
Pjo6Y29uc3RfaXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgU3VtPENPRUY+Ojpjb25zdF9pdGVy
YXRvciYgcikKICB7CiAgICByZXR1cm4gaXQ9PXIuaXQ7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBD
T0VGPiBib29sCiAgU3VtPENPRUY+Ojpjb25zdF9pdGVyYXRvcjo6b3BlcmF0b3IhPShjb25zdCBT
dW08Q09FRj46OmNvbnN0X2l0ZXJhdG9yJiByKQogIHsKICAgIHJldHVybiBpdCE9ci5pdDsKICB9
CgoKCiAgdGVtcGxhdGU8Y2xhc3MgQ09FRj4gU3VtPENPRUY+OjpUZXJtOjpUZXJtKCkgOiB0ZXJt
cGFpcigwLDApIHt9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+CiAgU3VtPENPRUY+OjpUZXJtOjpU
ZXJtKGNvbnN0IEJhc2lzRWxlbWVudCYgZV8sIGNvbnN0IENPRUYmIGNfKQogICAgOiB0ZXJtcGFp
cigmZV8sY18pIHt9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+IFN1bTxDT0VGPjo6VGVybTo6VGVy
bShjb25zdCB0ZXJtcGFpciYgdCkKICAgIDogdGVybXBhaXIodCkge30KCiAgdGVtcGxhdGU8Y2xh
c3MgQ09FRj4gY29uc3QgQ09FRiAmIFN1bTxDT0VGPjo6VGVybTo6Y29lZigpIGNvbnN0CiAgewog
ICAgcmV0dXJuIHNlY29uZDsKICB9CgogIHRlbXBsYXRlPGNsYXNzIENPRUY+CiAgY29uc3QgQmFz
aXNFbGVtZW50JiBTdW08Q09FRj46OlRlcm06OmVsZW1lbnQoKSBjb25zdAogIHsKICAgIHJldHVy
biAqZmlyc3Q7CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBDT0VGPgogIFN1bTxDT0VGPiBQb2lzc29u
QnJhY2tldChjb25zdCBTdW08Q09FRj4gJnUsIGNvbnN0IFN1bTxDT0VGPiAmdikKICB7CiAgICBp
ZiAodS5iICE9IHYuYikKICAgICAgdGhyb3c7CiAgICBjb25zdCBCYXNpcyAmYj0qdS5iOwogICAg
U3VtPENPRUY+IHcoYik7CiAgICBmb3IgKHR5cGVuYW1lIFN1bTxDT0VGPjo6Y29uc3RfaXRlcmF0
b3IgaT11LmJlZ2luKCkgOyBpICE9IHUuZW5kKCkgOyArK2kpCiAgICAgIGZvciAodHlwZW5hbWUg
U3VtPENPRUY+Ojpjb25zdF9pdGVyYXRvciBqPXYuYmVnaW4oKSA7CiAgICAgICAgICAgaiAhPSB2
LmVuZCgpIDsgKytqKSB7CiAgICAgICAgU3VtPGludD4geCA9CiAgICAgICAgICBiLlBvaXNzb25C
cmFja2V0KCgqaSkuZWxlbWVudCgpLmluZGV4KCksKCpqKS5lbGVtZW50KCkuaW5kZXgoKSk7CiAg
ICAgICAgZm9yIChTdW08aW50Pjo6Y29uc3RfaXRlcmF0b3Igaz14LmJlZ2luKCkgOyBrICE9IHgu
ZW5kKCkgOyArK2spCiAgICAgICAgICB3ICs9ICgqaykuY29lZigpKigqaSkuY29lZigpKigqaiku
Y29lZigpKlN1bTxDT0VGPigoKngpLmVsZW1lbnQoKSxiKTsKICAgICAgfQogICAgcmV0dXJuIHc7
CiAgfQoKfQojIDYgIkJhc2lzLmgiIDIKCm5hbWVzcGFjZSBGcmVlTGllIHsKCiAgY2xhc3MgQmFz
aXMgewogIHB1YmxpYzoKICAgIEJhc2lzKHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBuZ2VuKTsK
ICAgIHZpcnR1YWwgfkJhc2lzKCk7CiAgICBjb25zdCBCYXNpc0VsZW1lbnQmIG9wZXJhdG9yW10o
aW5kZXhfdHlwZSkgY29uc3Q7CiAgICBpbmRleF90eXBlIHNpemUoKSBjb25zdDsKICAgIGluZGV4
X3R5cGUgc2l6ZSh1bnNpZ25lZCkgY29uc3Q7CiAgICB2aXJ0dWFsIFN1bTxpbnQ+IFBvaXNzb25C
cmFja2V0KGluZGV4X3R5cGUsaW5kZXhfdHlwZSkgY29uc3Q9MDsKICBwcm90ZWN0ZWQ6CgogICAg
dm9pZCBtYWtlKHVuc2lnbmVkKTsKCiAgICB2b2lkIG1ha2UoaW5kZXhfdHlwZSBpZCwgaW5kZXhf
dHlwZSBsLCBpbmRleF90eXBlIHIpOwogICAgdW5zaWduZWQgbm8sbmc7CiAgICBpbmRleF90eXBl
ICpibzsKICAgIEJhc2lzRWxlbWVudCAqYjsKICB9OwoKfQojIDUgIkhhbGxCYXNpcy5oIiAyCgpu
YW1lc3BhY2UgRnJlZUxpZSB7CgogIGNsYXNzIEhhbGxCYXNpcyA6IHB1YmxpYyBCYXNpcyB7CiAg
cHVibGljOgogICAgSGFsbEJhc2lzKHVuc2lnbmVkIG9yZGVyLCB1bnNpZ25lZCBuZ2VuKTsKICAg
IFN1bTxpbnQ+IFBvaXNzb25CcmFja2V0KGluZGV4X3R5cGUsaW5kZXhfdHlwZSkgY29uc3Q7CiAg
fTsKCn0KIyAyICJ0ZXN0MDUuY3h4IiAyCiMgMSAiU3VtLmgiIDEKIyAzICJ0ZXN0MDUuY3h4IiAy
CgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAxIDMKIyAzMSAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zdHJlYW0uaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0uaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfb3N0cmVhbS5oIiAzCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2lvcy5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
aW9zLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgi
IDEgMwojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMg
MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyA0MSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRz
L2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBv
cy5oIiAxIDMKIyA0MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0
cnVjdCBjaGFyX3RyYWl0cwogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7Cgog
ICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFt
cG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlw
ZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0g
X19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoK
ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj
aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0
aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5
cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBfX2kgPSAw
OyBfX2kgPCBfX247ICsrX19pKQogICAgICAgICAgaWYgKCFlcShfX3MxW19faV0sIF9fczJbX19p
XSkpCiAgICAgICAgICAgIHJldHVybiBsdChfX3MxW19faV0sIF9fczJbX19pXSkgPyAtMSA6IDE7
CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVu
Z3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7CiAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX3AgPSBfX3M7CiAgICAgICAgd2hpbGUgKCpfX3ApICsrX19wOwogICAgICAgIHJldHVybiAo
X19wIC0gX19zKTsKICAgICAgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAg
ZmluZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBf
X2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOyBzaXpl
X3QoX19wIC0gX19zKSA8IF9fbjsgKytfX3ApCiAgICAgICAgICBpZiAoKl9fcCA9PSBfX2EpIHJl
dHVybiBfX3A7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5
cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp
emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1tb3ZlKF9fczEsIF9fczIs
IF9fbiAqIHNpemVvZihjaGFyX3R5cGUpKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg
ICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gKGNoYXJfdHlwZSopIG1lbWNweShfX3MxLCBfX3MyLCBfX24gKiBz
aXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2ln
bihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgewogICAg
ICAgIGZvciAoY2hhcl90eXBlKiBfX3AgPSBfX3M7IF9fcCA8IF9fcyArIF9fbjsgKytfX3ApCiAg
ICAgICAgICBhc3NpZ24oKl9fcCwgX19hKTsKICAgICAgICByZXR1cm4gX19zOwogICAgICB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYg
X19jKQogICAgICB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGludF90
eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKSB7IHJldHVybiBpbnRf
dHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBp
bnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEg
PT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGludF90eXBlPigtMSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBu
b3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9f
YywgZW9mKCkpID8gaW50X3R5cGUoMCkgOiBfX2M7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8Pgog
ICAgc3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBv
cyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVk
ZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24o
Y2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9f
YzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGlj
IGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBl
KiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19u
KTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBf
X3MpCiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hh
cl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25z
dCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90
eXBlKj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90
IF9fbikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3Mx
LCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFy
X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9
CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNp
emVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJf
dHlwZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUK
ICAgICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg
ICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlw
ZT4oKC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGlu
dF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQog
IH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+CiAgICB7
CiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2ludF90IGlu
dF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiB3
c3RyZWFtcG9zIHBvc190eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChj
b25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1
cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBj
aGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAg
eyByZXR1cm4gd21lbWNtcChfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgc2l6ZV90
CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgeyByZXR1cm4gd2NzbGVu
KF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3Qg
Y2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7
IHJldHVybiB3bWVtY2hyKF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBpbnRf
dHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1tb3ZlKF9fczEsIF9fczIsIF9fbik7IH0KCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBj
aGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jcHkoX19zMSwg
X19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJf
dHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVybiB3bWVt
c2V0KF9fcywgX19hLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2No
YXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jKSB7IHJldHVybiBjaGFyX3R5cGUoX19jKTsgfQoK
ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYg
X19jKSB7IHJldHVybiBpbnRfdHlwZShfX2MpOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBl
cV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29uc3QgaW50X3R5cGUmIF9fYzIpCiAg
ICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAg
IGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBlPigoMHhmZmZmZmZmZnUpKTsgfQoK
ICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50X3R5cGUmIF9fYykK
ICAgICAgeyByZXR1cm4gZXFfaW50X3R5cGUoX19jLCBlb2YoKSkgPyAwIDogX19jOyB9CiAgfTsK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cnVj
dCBfQ2hhcl90cmFpdHNfbWF0Y2gKICAgIHsKICAgICAgX0NoYXJUIF9NX2M7CiAgICAgIF9DaGFy
X3RyYWl0c19tYXRjaChfQ2hhclQgY29uc3QmIF9fYykgOiBfTV9jKF9fYykgeyB9CgogICAgICBi
b29sCiAgICAgIG9wZXJhdG9yKCkoX0NoYXJUIGNvbnN0JiBfX2EpIHsgcmV0dXJuIF9UcmFpdHM6
OmVxKF9NX2MsIF9fYSk7IH0KICAgIH07Cn0KIyA0MiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X2NzdGRpby5oIiAxIDMKIyA0MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9z
LmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEg
MwojIDM4ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgojIDEg
Ii9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln
LmgiIDEgMwojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAy
IDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2Mr
K2xvY2FsZS5oIiAxIDMKIyAzNiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9jKytsb2NhbGUuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIGludCog
X19jX2xvY2FsZTsKfQojIDQxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3
ZC5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbGltaXRzLmgi
IDEgMwojIDQyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMK
IyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMSAzCiMgMzgg
Ii9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAzCgojIDEgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEg
MwojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMg
MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDQyICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMSAzCiMgNjAgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA2MSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA2MiAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDYzICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY0ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY1ICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAxIDMKIyA2NiAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgNDMgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX21lbW9yeS5oIiAzCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDEgMwojIDUwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t
ZW1vcnkuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMSAzCiMgNTEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAy
IDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAz
CiMgNTIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAx
ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgi
IDEgMwojIDUzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAz
CiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2
MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCm5hbWVzcGFj
ZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+Cl9fZ2V0
X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAgaWYgKF9fbGVuID4g
cHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2
NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX1RwKiBfX3RtcCA9
IChfVHAqKSBtYWxsb2MoKHNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgIGlmIChfX3Rt
cCAhPSAwKQogICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7
CiAgICBfX2xlbiAvPSAyOwogIH0KCiAgcmV0dXJuIHBhaXI8X1RwKiwgcHRyZGlmZl90PigoX1Rw
KikwLCAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlm
Zl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4pIHsKICByZXR1cm4gX19n
ZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9CgoKCgoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4gZ2V0X3RlbXBvcmFyeV9idWZm
ZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKSB7CiAgcmV0dXJuIF9fZ2V0X3RlbXBvcmFyeV9idWZm
ZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kdm9pZCByZXR1cm5f
dGVtcG9yYXJ5X2J1ZmZlcihfVHAqIF9fcCkgewogIGZyZWUoX19wKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIg
ewpwcml2YXRlOgogIHB0cmRpZmZfdCBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90IF9NX2xl
bjsKICBfVHAqIF9NX2J1ZmZlcjsKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBf
TV9vcmlnaW5hbF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9s
ZW4gPiAocHRyZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4g
PSAyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAg
ICAgX01fYnVmZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAg
IGlmIChfTV9idWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQog
IH0KCiAgdm9pZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkg
e30KICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5
cGUpIHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwog
IH0KCnB1YmxpYzoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQog
IHB0cmRpZmZfdCByZXF1ZXN0ZWRfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX29yaWdpbmFsX2xl
bjsgfQogIF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KICBfVHAqIGVuZCgpIHsg
cmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry
dWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gMDsK
ICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfTV9sZW4pOwogICAgICBfTV9hbGxvY2F0
ZV9idWZmZXIoKTsKICAgICAgaWYgKF9NX2xlbiA+IDApCiAgICAgICAgX01faW5pdGlhbGl6ZV9i
dWZmZXIoKl9fZmlyc3QsIF9Ucml2aWFsKCkpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IGZyZWUo
X01fYnVmZmVyKTsgX01fYnVmZmVyID0gMDsgX01fbGVuID0gMDsgdGhyb3c7IH07CiAgfQoKICB+
X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBkZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsg
X01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5
X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29u
c3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ
dGVyYXRvciwKICAgICAgICAgIGNsYXNzIF9UcAogICAgICAgICAgICAgICAgICAgID0gdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBwdWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0Zv
cndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9y
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZl
cjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmlyc3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5
X2J1ZmZlcigpIHt9Cn07Cgp9CiMgNTQgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk
X21lbW9yeS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDEgMwojIDYzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91
bmluaXRpYWxpemVkLmgiIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
c3RyaW5nLmgiIDEgMwojIDY0ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmlu
aXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3VuaW5p
dGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9y
d2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlw
ZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25zdHJ1Y3Qo
JipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsg
X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfVHAq
KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90eXBlIF9J
c19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh
c3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXplZF9jb3B5
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfY29w
eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlhbGl6ZWRf
Y29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9fcmVzdWx0
LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0
IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHkoY29uc3Qg
d2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXpl
b2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3VsdCArIChf
X2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg
X1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+
Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50
LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIg
PSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19jb3VudCwg
KytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsK
ICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19jdXIp
OwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUsIGNsYXNz
IF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRl
cj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewogIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVybiBwYWly
PF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAgIF9fbGFz
dCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBf
X3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs
YXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJdGVyPgpf
X3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwK
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9f
dW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJ
dGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlhbGl6ZWRf
Y29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9j
b3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRf
ZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsKICBmaWxs
KF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0
OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAgICAgX0Nv
bnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19maXJz
dCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfRm9y
d2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFs
aXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5pbml0aWFs
aXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwgX19sYXN0
LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3Vu
aW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsK
ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9fdW5pbml0
aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBf
Rm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fbiA+IDA7
IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAgICByZXR1
cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7IHRo
cm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xh
c3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9m
aWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gsIF9U
cDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2ZpcnN0LCBf
X24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxpemVkX2Zp
bGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9feCkKewog
IHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9CiMgMjYwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF91bmluaXRpYWxpemVkLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBf
SW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5p
bml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgdHJ5IHsKICAgIHJldHVybiB1bmluaXRpYWxp
emVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9E
ZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9JbnB1dEl0ZXI+CmlubGluZSBfRm9yd2Fy
ZEl0ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfY29weShfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIF9G
b3J3YXJkSXRlciBfX21pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0KQp7CiAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsK
ICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
bWlkKTsKICB9CiAgY2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fcmVzdWx0LCBfX21pZCk7IHRocm93
OyB9Owp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwoX0lucHV0
SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQy
ID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0Mik7CiAgdHJ5
IHsKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfX21pZDIsIF9fbGFzdDIsIF9feCk7CiAgfQogIGNh
dGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsgdGhyb3c7IH07Cn0KCn0KIyA1
NSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMg
NjMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFz
cyBfVHA+CmNsYXNzIHJhd19zdG9yYWdlX2l0ZXJhdG9yIHsKcHJvdGVjdGVkOgogIF9Gb3J3YXJk
SXRlcmF0b3IgX01faXRlcjsKcHVibGljOgogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBp
dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZv
aWQgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCBwb2ludGVyOwogIHR5cGVkZWYgdm9p
ZCByZWZlcmVuY2U7CgogIGV4cGxpY2l0IHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRl
cmF0b3IgX194KSA6IF9NX2l0ZXIoX194KSB7fQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVy
YXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yJiBvcGVyYXRv
cj0oY29uc3QgX1RwJiBfX2VsZW1lbnQpIHsKICAgIGNvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxl
bWVudCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3
YXJkSXRlcmF0b3IsIF9UcD4mIG9wZXJhdG9yKysoKSB7CiAgICArK19NX2l0ZXI7CiAgICByZXR1
cm4gKnRoaXM7CiAgfQogIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9U
cD4gb3BlcmF0b3IrKyhpbnQpIHsKICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRl
cmF0b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICsrX01faXRlcjsKICAgIHJldHVybiBfX3Rt
cDsKICB9Cn07CgoKfQojIDU2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1v
cnkuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiB0ZW1wbGF0ZTxjbGFzcyBfVHAxPiBzdHJ1Y3Qg
YXV0b19wdHJfcmVmIHsKICAgX1RwMSogX01fcHRyOwogICBhdXRvX3B0cl9yZWYoX1RwMSogX19w
KSA6IF9NX3B0cihfX3ApIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBhdXRvX3B0
ciB7CnByaXZhdGU6CiAgX1RwKiBfTV9wdHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgZWxlbWVu
dF90eXBlOwoKICBleHBsaWNpdCBhdXRvX3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9w
dHIoX19wKSB7fQogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19h
LnJlbGVhc2UoKSkge30KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRy
PF9UcDE+JiBfX2EpIHRocm93KCkKICAgIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIGF1
dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2Eu
cmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAx
PgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7CiAg
ICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0
b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJv
dygpIHsKICAgIHJldHVybiAqX01fcHRyOwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0
aHJvdygpIHsKICAgIHJldHVybiBfTV9wdHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3co
KSB7CiAgICByZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsKICAg
IF9UcCogX190bXAgPSBfTV9wdHI7CiAgICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1wOwog
IH0KICB2b2lkIHJlc2V0KF9UcCogX19wID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9IF9N
X3B0cikgewogICAgICBkZWxldGUgX01fcHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9CiAg
fQoKCgoKCnB1YmxpYzoKICBhdXRvX3B0cihhdXRvX3B0cl9yZWY8X1RwPiBfX3JlZikgdGhyb3co
KQogICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0b3I9KGF1
dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpIHsKICAgIGlmIChfX3JlZi5fTV9wdHIgIT0g
dGhpcy0+Z2V0KCkpIHsKICAgICAgZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19yZWYu
X01fcHRyOwogICAgfQogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgIHsgcmV0dXJuIGF1
dG9fcHRyX3JlZjxfVHA+KHRoaXMtPnJlbGVhc2UoKSk7IH0KICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gb3BlcmF0b3IgYXV0b19wdHI8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0
cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cn07Cgp9CiMgNDQgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDQ1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfaW9zZndkLmgiIDEgMwojIDQ2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9z
dHJpbmcuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJp
bmcuaCIgMSAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5n
LmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoK
c3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf
X2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCAqX19tZW0sIGludCBfX3Zh
bCkKewogIHJlZ2lzdGVyIF9BdG9taWNfd29yZCBfX3Jlc3VsdDsKICBfX2FzbV9fIF9fdm9sYXRp
bGVfXyAoImxvY2s7IHhhZGRsICUwLCUyIgogICAgICAgICAgICAgICAgICAgICAgICA6ICI9ciIg
KF9fcmVzdWx0KQogICAgICAgICAgICAgICAgICAgICAgICA6ICIwIiAoX192YWwpLCAibSIgKCpf
X21lbSkKICAgICAgICAgICAgICAgICAgICAgICAgOiAibWVtb3J5Iik7CiAgcmV0dXJuIF9fcmVz
dWx0Owp9CgpzdGF0aWMgaW5saW5lIHZvaWQKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpf
X2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewog
IF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgYWRkbCAlMCwlMSIKICAgICAgICAgICAgICAg
ICAgICAgICAgOiA6ICJpciIgKF9fdmFsKSwgIm0iICgqX19tZW0pIDogIm1lbW9yeSIpOwp9Cgpz
dGF0aWMgaW5saW5lIGNoYXIKX19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2NvbXBhcmVf
YW5kX3N3YXAgKHZvbGF0aWxlIGxvbmcqIF9fcCwgbG9uZyBfX29sZHZhbCwgbG9uZyBfX25ld3Zh
bCkKewogIGNoYXIgX19yZXQ7CiAgbG9uZyBfX3JlYWR2YWw7CgogIF9fYXNtX18gX192b2xhdGls
ZV9fICgibG9jazsgY21weGNoZ2wgJTMsICUxOyBzZXRlICUwIgogICAgICAgICAgICAgICAgICAg
ICAgICA6ICI9cSIgKF9fcmV0KSwgIj1tIiAoKl9fcCksICI9YSIgKF9fcmVhZHZhbCkKICAgICAg
ICAgICAgICAgICAgICAgICAgOiAiciIgKF9fbmV3dmFsKSwgIm0iICgqX19wKSwgImEiIChfX29s
ZHZhbCkpOwogIHJldHVybiBfX3JldDsKfQojIDQwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNp
Y19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlw
ZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9fbm9y
bWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVk
ZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPiBjb25zdF9p
dGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRl
cmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMTggIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAg
ICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNo
YXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9jOwojIDEzNiAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg
X1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAg
ICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7
CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAg
ICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAw
OyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRf
bGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9Cgog
ICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hh
clQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFi
KGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAg
eyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikgPwogICAg
ICAgICAgICBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0KCgogICAgICAgIHN0
YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAg
ICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0g
MCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAog
ICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJU
KgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9t
aWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7
CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9j
Jiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgaW5saW5lIHN0YXRpYyBib29sCiAgICAgICAg
X1NfZXhjZXNzX3Nsb3Aoc2l6ZV90LCBzaXplX3QpOwoKICAgICAgfTsKCgogICAgICBzdHJ1Y3Qg
X0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAgICBfQWxsb2NfaGlkZXIoX0NoYXJU
KiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgOiBfQWxsb2MoX19hKSwgX01fcChf
X2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAgICAgfTsKCiAgICBwdWJsaWM6CgoK
CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9IHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxlIF9BbGxvY19oaWRlciBfTV9kYXRh
cGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19lbXB0eV9yZXBfc3RvcmFnZVsoc2l6
ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVv
ZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0YSgpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAgIF9DaGFyVCoKICAgICAgX01fZGF0
YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2RhdGFwbHVzLl9NX3AgPSBfX3ApOyB9
CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAogICAgICB7IHJldHVybiAmKChyZWlu
dGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFdKTsgfQoKCgogICAgICBpdGVyYXRv
cgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkpOyB9
CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
X01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9sZWFrKCkK
ICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgICAg
X01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2NoZWNrKHNp
emVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNp
emUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6Ol9NX2No
ZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCgogICAg
ICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fb2Zm
KSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvZmYgPSBfX29mZiA8IHRoaXMtPnNp
emUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25ld29mZiA9IF9fdGVzdG9mZiA/IF9f
b2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIChfTV9pYmVnaW4oKSAr
IF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JdGVy
YXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBf
X3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikKICAgICAgICB7CiAgICAgICAgICBm
b3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQogICAgICAgICAgICB0cmFpdHNfdHlw
ZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9CgogICAgICBzdGF0aWMgdm9pZAogICAg
ICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRvciBfX2sxLCBpdGVyYXRvciBfX2sy
KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25z
dF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hh
cnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAog
ICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hhclQqIF9fazEsIF9DaGFyVCogX19r
MikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoK
ICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3Qg
X0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAgICAgIHsgdHJhaXRzX3R5cGU6OmNv
cHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbXV0YXRl
KHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMik7Cgog
ICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAgICAgc3RhdGljIF9SZXAmCiAgICAg
IF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PF9SZXAqPigm
X1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGljOgoKCgoKICAgICAgaW5saW5lCiAg
ICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nKGNv
bnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBz
aXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uID0gbnBvcyk7
CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUg
X19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9f
YSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24s
CiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAg
YmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSA9IF9BbGxv
YygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0
IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXJhdG9yIF9fYmVnaW4sIF9JbnB1
dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9fYSA9
IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAgICB7IF9NX3JlcCgpLT5fTV9k
aXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMtPmFz
c2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0
IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zKTsgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXNzaWdu
KDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdpbigpCiAgICAgIHsKICAgICAg
ICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7CiAgICAgIH0K
CiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4g
Y29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZW5kKCkK
ICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJldHVybiBpdGVyYXRvcihfTV9k
YXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAg
ICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvcihfTV9kYXRhKCkgKyB0
aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpCiAg
ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICBjb25z
dF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJh
dG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJl
Z2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25z
dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9
CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNpemUoKSBjb25zdCB7IHJldHVy
biBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1NfbWF4X3NpemU7IH0KCiAgICAg
IHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdm9p
ZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5yZXNpemUoX19uLCBfQ2hhclQo
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIF9N
X3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAgICByZXNlcnZlKHNpemVfdHlw
ZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKSB7IF9NX211dGF0ZSgw
LCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25zdF9yZWZlcmVuY2UKICAgICAg
b3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kYXRh
KClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXShzaXplX3R5cGUg
X19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo
KVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBhdChzaXplX3R5
cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAg
ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphdCIpOwogICAgICAg
IHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIGF0
KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHNpemUoKSkKICAgICAg
ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgX01f
bGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKCiAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSB7
IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3Mp
OyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oX0NoYXJUIF9fYykgeyBy
ZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry
aW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl
bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFw
cGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxh
dGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFw
cGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAg
ICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19maXJzdCwg
X19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2soX0NoYXJUIF9fYykKICAgICAg
eyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAxLCBfX2MpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIs
IHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIHJldHVybiB0
aGlzLT5hc3NpZ24oX19zdHIuX01fY2hlY2soX19wb3MpLCBfX3N0ci5fTV9mb2xkKF9fcG9zLCBf
X24pKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0No
YXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3Ms
IF9fcyArIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IF9D
aGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCBfX3MgKyB0cmFpdHNf
dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihz
aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N
X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5w
dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1
cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp
OyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24s
IF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9
CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2Vy
dChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2Vu
ZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVj
ayhfX3BvczEpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2liZWdp
bigpLCBfX3N0ci5fTV9pZW5kKCkpOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVyYXRvciBfX3AgPSBfTV9jaGVjayhfX3BvczEpOwog
ICAgICAgIHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fc3RyLl9NX2NoZWNrKF9fcG9zMiksCiAg
ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zMiwgX19uKSk7CiAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChz
aXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7
CiAgICAgICAgaXRlcmF0b3IgX19wID0gX01fY2hlY2soX19wb3MpOwogICAgICAgIHRoaXMtPnJl
cGxhY2UoX19wLCBfX3AsIF9fcywgX19zICsgX19uKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg
ICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bvcywg
Y29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvcywgX19z
LCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICAg
IHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBfX24sIF9fYyk7CiAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBpbnNlcnQoaXRl
cmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAgICAgIHsKICAgICAgICBzaXplX3R5
cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hl
Y2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9s
ZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkgKyBfX3BvczsKICAgICAg
fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShzaXplX3R5cGUgX19wb3MgPSAwLCBz
aXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNl
KF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9y
CiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsKICAgICAgICBzaXplX3R5
cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPnJlcGxhY2Uo
X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAg
ICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSAr
IF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2UoaXRlcmF0b3IgX19maXJz
dCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fZmly
c3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fZmlyc3QsIF9fbGFzdCwg
X01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7
CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0
IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFj
ZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fc3RyLmJlZ2luKCksIF9fc3RyLmVuZCgpKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBf
X24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X3BvczIsIHNpemVfdHlwZSBfX24yKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFj
ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAg
ICAgICAgICAgICBzaXplX3R5cGUgX19uMikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5y
ZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv
bnN0IF9DaGFyVCogX19zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01f
Y2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7CiAgICAgIH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw
ZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHJldHVy
biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9f
bjIsIF9fYyk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVy
YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fc3RyLmJlZ2luKCksIF9fc3Ry
LmVuZCgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEs
IF9faTIsIF9fcywgX19zICsgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs
YWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAg
ICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3MgKyB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBi
YXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMSwg
X0lucHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9faTEsIF9f
aTIsIF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu
cHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKICAgIHByaXZhdGU6CiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAg
ICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJh
dG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9p
dGVyYXRvcl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXJhdG9yPgogICAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIF9Gd2RJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0Z3ZEl0ZXJhdG9y
IF9fazIsIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0lu
SXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7
CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkp
OwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGlj
IF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg
X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVl
X3R5cGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2Fz
dDxzaXplX3R5cGU+KF9fYmVnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQpLCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRl
PGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1
Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAg
ICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0lu
dGVncmFsIF9JbnRlZ3JhbDsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVn
LCBfX2VuZCwgX19hLCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNs
YXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0
KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xh
c3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3Qo
X0Z3ZEl0ZXIgX19lbmQsIF9Gd2RJdGVyIF9fYmVnLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFy
VCoKICAgICAgX1NfY29uc3RydWN0KHNpemVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3Qg
X0FsbG9jJiBfX2EpOwoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAg
ICAgIHZvaWQKICAgICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7
CgogICAgICAgIHNpemVfdHlwZSBfX24gPSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5
cGU6OmFzc2lnbihfTV9kYXRhKClbX19uXSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJl
dHVybiBfTV9kYXRhKCk7CiAgICAgIH0KCiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgp
IGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEoKTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAg
Z2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXpl
X3R5cGUKICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2lj
X3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9
IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5
cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9f
Yywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp
bmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu
c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl
CiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmlu
ZF9maXJzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAw
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwg
X19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0
X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv
bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
Zmlyc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
ID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
LCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k
X2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f
cG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xh
c3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6
bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFy
VCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PnJmaW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u
b3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBf
X3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rf
bm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZp
bmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0
cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9m
aXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kX2xhc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAg
ICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29u
c3Q7CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCog
X19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5m
aW5kX2xhc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0
cihzaXplX3R5cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAg
ewogICAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0
X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19z
dHJpbmcoKnRoaXMsIF9fcG9zLCBfX24pOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9f
c3RyLnNpemUoKTsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXpl
KTsKCiAgICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19z
dHIuZGF0YSgpLCBfX2xlbik7CiAgICAgICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3Np
emUgLSBfX29zaXplOwogICAgICAgIHJldHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAg
ICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0cikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19w
b3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg
ICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQK
ICAgICAgY29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAg
ICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCog
X19zKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBf
X24yKSBjb25zdDsKCiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMo
X1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg
ICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAg
IHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xo
cyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0
b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3Ir
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChf
X3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVf
dHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAg
IF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7
CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsg
cmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25z
dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0
dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJu
IF9fbGhzLmNvbXBhcmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu
Y29tcGFyZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25z
dCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xo
cykgPiAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7
IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVy
biBfX2xocy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3I+KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jo
cy5jb21wYXJlKF9fbGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMs
CiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQq
IF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy
ZShfX3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShf
X3JocykgPj0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0
IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMp
IDw9IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3N0ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19p
c3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3N0cik7Cn0KIyA0NyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfc3RyaW5nLmgiIDIgMwoKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf
YWxnb3JpdGhtLmgiIDEgMwojIDYwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9h
bGdvcml0aG0uaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
YmFzZS5oIiAxIDMKIyA2MiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3Jp
dGhtLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVj
dC5oIiAxIDMKIyA2MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGht
LmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6
ZWQuaCIgMSAzCiMgNjQgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRo
bS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90ZW1wYnVmLmgi
IDEgMwojIDY1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIg
MiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAxIDMKIyA2
MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiMgMSAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MiAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfaGVhcC5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9U
cD4Kdm9pZApfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9faG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9f
dmFsdWUpCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAg
d2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkg
PCBfX3ZhbHVlKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBf
X3BhcmVudCk7CiAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19o
b2xlSW5kZXggLSAxKSAvIDI7CiAgfQogICooX19maXJzdCArIF9faG9sZUluZGV4KSA9IF9fdmFs
dWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0
YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19sYXN0LCBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX0Rpc3Rh
bmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAgICAgICAg
X1RwKCooX19sYXN0IC0gMSkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj4KaW5saW5lIHZvaWQKcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLCBfX3ZhbHVl
X3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2
b2lkCl9fcHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2Ug
X19ob2xlSW5kZXgsCiAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1
ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4
IC0gMSkgLyAyOwogIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9wSW5kZXggJiYgX19jb21wKCoo
X19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7
CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB9CiAgKihfX2ZpcnN0ICsg
X19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0Nv
bXBhcmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewogIF9fcHVz
aF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3Rh
bmNlKDApLAogICAgICAgICAgICAgIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBf
X2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp
LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4Kdm9pZApfX2FkanVzdF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKewogIF9EaXN0YW5jZSBf
X3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICog
X19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlm
ICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpKQogICAgICBfX3NlY29uZENoaWxkLS07CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRl
eCkgPSAqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNv
bmRDaGlsZDsKICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICB9
CiAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICooX19maXJzdCArIF9faG9sZUlu
ZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgX19ob2xlSW5kZXgg
PSBfX3NlY29uZENoaWxkIC0gMTsKICB9CiAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5k
ZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQKX19wb3Bf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1bHQsIF9UcCBf
X3ZhbHVlLCBfRGlzdGFuY2UqKQp7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3Rf
aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwg
X192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX19wb3BfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCop
CnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsCiAgICAgICAg
ICAgICBfVHAoKihfX2xhc3QgLSAxKSksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB2b2lkIHBvcF9oZWFw
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBf
X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9E
aXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4sIF9UcCBf
X3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9s
ZUluZGV4OwogIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsK
ICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoX19jb21wKCooX19maXJz
dCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkpCiAg
ICAgIF9fc2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19m
aXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwog
ICAgX19zZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19z
ZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihf
X2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25k
Q2hpbGQgLSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJ
bmRleCwgX192YWx1ZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0
YW5jZT4KaW5saW5lIHZvaWQKX19wb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19yZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXAsCiAgICAgICAg
ICAgX0Rpc3RhbmNlKikKewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIF9fYWRqdXN0X2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksCiAgICAg
ICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZApfX3Bv
cF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAg
X19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3Qg
LSAxKSksIF9fY29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgpp
bmxpbmUgdm9pZApwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wb3BfaGVhcF9hdXgoX19maXJzdCwg
X19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lk
Cl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0g
X19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICB3aGlsZSAo
dHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19sZW4sIF9UcCgq
KF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgIGlmIChfX3BhcmVudCA9PSAwKSByZXR1cm47CiAg
ICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRv
cj4KaW5saW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmly
c3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Nv
bXBhcmUsCiAgICAgICAgICBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2Vf
aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fbGFzdCwKICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7
CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0g
X19sYXN0IC0gX19maXJzdDsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoK
ICB3aGlsZSAodHJ1ZSkgewogICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfX3BhcmVudCwgX19s
ZW4sIF9UcCgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLAogICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5s
aW5lIHZvaWQKbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19s
YXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3Rh
bmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgIHBv
cF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwg
X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0
LS0sIF9fY29tcCk7Cn0KCn0KIyA2NCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnby5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+Cmlu
bGluZSBjb25zdCBfVHAmIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwg
Y29uc3QgX1RwJiBfX2MpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogIGlmIChfX2EgPCBfX2IpCiAgICBpZiAoX19iIDwg
X19jKQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICByZXR1
cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fYSA8IF9fYykK
ICAgIHJldHVybiBfX2E7CiAgZWxzZSBpZiAoX19iIDwgX19jKQogICAgcmV0dXJuIF9fYzsKICBl
bHNlCiAgICByZXR1cm4gX19iOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy
ZT4KaW5saW5lIGNvbnN0IF9UcCYKX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iLCBjb25zdCBfVHAmIF9fYywgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgaWYgKF9fY29tcChfX2IsIF9fYykp
CiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICBy
ZXR1cm4gX19jOwogICAgZWxzZQogICAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChf
X2EsIF9fYykpCiAgICByZXR1cm4gX19hOwogIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAg
ICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0Z1bmN0aW9uPgpfRnVuY3Rpb24gZm9yX2VhY2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBfX2YoKl9fZmlyc3Qp
OwogIHJldHVybiBfX2Y7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9U
cD4KaW5saW5lIF9JbnB1dEl0ZXIgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBf
X2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4K
aW5saW5lIF9JbnB1dEl0ZXIgZmluZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLAogICAg
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2Zp
cnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICsrX19maXJzdDsKICByZXR1
cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf
VHA+Cl9SYW5kb21BY2Nlc3NJdGVyIGZpbmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg
X192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
CnsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJl
bmNlX3R5cGUgX190cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBm
b3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKCpfX2Zp
cnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9f
Zmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgq
X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICB9Cgog
IHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgY2FzZSAzOgogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAo
Kl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2Ug
MToKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmly
c3Q7CiAgY2FzZSAwOgogIGRlZmF1bHQ6CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfUmFuZG9tQWNj
ZXNzSXRlciBmaW5kX2lmKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKewog
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfX3RyaXBfY291bnQKICAgID0gKF9fbGFzdCAtIF9fZmlyc3QpID4+IDI7CgogIGZvciAo
IDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlwX2NvdW50KSB7CiAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgq
X19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2go
X19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDI6CiAgICBpZiAoX19wcmVkKCpf
X2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAxOgogICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2Ug
MDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gZmluZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVy
IGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBy
ZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29y
eShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJ
dGVyIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJl
dHVybiBfX2xhc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytf
X25leHQgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgcmV0
dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KICByZXR1cm4gX19sYXN0Owp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpf
Rm9yd2FyZEl0ZXIgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KQogICAgcmV0dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsK
ICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2Zp
cnN0LCAqX19uZXh0KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBfX2ZpcnN0ID0gX19uZXh0
OwogIH0KICByZXR1cm4gX19sYXN0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudChfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgICAgX1NpemUm
IF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0
OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfU2l6
ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBf
UHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYgX19uKQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5j
ZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIGNvbnN0
IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVl
KQogICAgICArK19fbjsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1ByZWRpY2F0ZT4KdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+
OjpkaWZmZXJlbmNlX3R5cGUKY291bnRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9y
d2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBf
X2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBf
Rm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBf
X2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoK
CiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoK
ICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSkgewogICAgX19maXJzdDEgPSBmaW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19m
aXJzdDIpOwogICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgIHJldHVybiBfX2xhc3Qx
OwoKICAgIF9fcCA9IF9fcDE7CiAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgIGlmICgrK19f
Y3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoKl9f
Y3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJl
dHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAg
cmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmly
c3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVy
MiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0Zv
cndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZCBfX3ByZWRpY2F0ZSkKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CgoKCgogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7CgoKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9f
Zmlyc3QyKTsKICArK19fdG1wOwogIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICArK19fZmlyc3QxOwogICAgcmV0dXJuIF9fZmlyc3QxOwogIH0KCgoKICBfRm9yd2Fy
ZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogIF9Gb3J3YXJk
SXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
KSB7CiAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICBpZiAoX19wcmVkaWNh
dGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgIGJyZWFrOwogICAgICArK19fZmlyc3Qx
OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpf
X2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsKICAgIGlmIChfX2ZpcnN0MSA9
PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwogICAgX19j
dXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJu
IF9fbGFzdDE7CgogICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAg
ICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9
CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9fZmlyc3QxOwp9CgoKCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRl
ciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCnsK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYgKF9fY291bnQgPD0gMCkKICAgIHJldHVy
biBfX2ZpcnN0OwogIGVsc2UgewogICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBf
X3ZhbCk7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgX0ludGVnZXIgX19u
ID0gX19jb3VudCAtIDE7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAr
K19faTsKICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgKl9faSA9PSBf
X3ZhbCkgewogICAgICAgICsrX19pOwogICAgICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChf
X24gPT0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIF9fZmly
c3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICB9CiAgICByZXR1cm4gX19sYXN0Owog
IH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0ludGVnZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9J
bnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICBf
QmluYXJ5UHJlZCBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp
ZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9fZmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9f
dmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9f
Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg
ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChf
X2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7
CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAw
KQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19p
ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQog
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgICBfX2Zp
cnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX19sYXN0OwogIH0KfQoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KX0ZvcndhcmRJ
dGVyMiBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MikK
ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmly
c3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgcmV0dXJuIF9fZmlyc3Qy
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xh
c3MgX1VuYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlciB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2Zp
cnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKCgoK
ICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAq
X19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyLAogICAgICAgICAgY2xhc3MgX0JpbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIgdHJh
bnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCgoKCgogIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsg
KytfX2ZpcnN0MSwgKytfX2ZpcnN0MiwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fYmlu
YXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCgoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2UoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsr
X19maXJzdCkKICAgIGlmICgqX19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgKl9fZmlyc3Qg
PSBfX25ld192YWx1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1By
ZWRpY2F0ZSwgY2xhc3MgX1RwPgp2b2lkIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwg
Y29uc3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJl
ZCgqX19maXJzdCkpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRl
ciByZXBsYWNlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1
ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7
ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xk
X3ZhbHVlID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRp
Y2F0ZSwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
Zm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9f
cmVzdWx0ID0gX19wcmVkKCpfX2ZpcnN0KSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgcmV0
dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9H
ZW5lcmF0b3I+CnZvaWQgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9HZW5l
cmF0b3I+Cl9PdXRwdXRJdGVyIGdlbmVyYXRlX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUg
X19uLCBfR2VuZXJhdG9yIF9fZ2VuKQp7CgoKCgoKCiAgZm9yICggOyBfX24gPiAwOyAtLV9fbiwg
KytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwogIHJldHVybiBfX2ZpcnN0Owp9CgoK
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1Rw
PgpfT3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29u
c3QgX1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCEoKl9fZmlyc3QgPT0gX192YWx1ZSkp
IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAg
cmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091
dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9PdXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBp
ZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciByZW1vdmUoX0ZvcndhcmRJdGVy
IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZSk7CiAgX0ZvcndhcmRJdGVy
IF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IHJlbW92ZV9jb3B5KCsrX19pLCBfX2xhc3QsIF9fZmly
c3QsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZF9pZihfX2Zp
cnN0LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0
dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAg
ICA6IHJlbW92ZV9jb3B5X2lmKCsrX19pLCBfX2xhc3QsIF9fZmlyc3QsIF9fcHJlZCk7Cn0KCgoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfVHA+
Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X1RwKikKewoKICBfVHAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7
CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIShfX3ZhbHVlID09ICpfX2Zp
cnN0KSkgewogICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICorK19fcmVzdWx0ID0gX192
YWx1ZTsKICAgIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX191bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2Fy
ZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsIGZvcndh
cmRfaXRlcmF0b3JfdGFnKQp7CgogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19f
Zmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkKICAgICAg
KisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIg
dW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJl
dHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNh
dGUsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0
SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsIF9UcCopCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl
LCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3Vs
dCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykKewoKICByZXR1cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAgICAgIF9fdmFs
dWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBf
Rm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3VuaXF1
ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICAqX19yZXN1bHQgPSAq
X19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlf
cHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICByZXR1
cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRw
dXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJu
IF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwK
ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fcmVzdWx0KSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDsKCgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCk7CiAg
cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRl
ciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKCiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwg
X19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX2ZpcnN0LCBfX2JpbmFyeV9wcmVkKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly
ZWN0aW9uYWxJdGVyPgp2b2lkIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9p
dGVyYXRvcl90YWcpIHsKICB3aGlsZSAodHJ1ZSkKICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCB8
fCBfX2ZpcnN0ID09IC0tX19sYXN0KQogICAgICByZXR1cm47CiAgICBlbHNlCiAgICAgIGl0ZXJf
c3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcj4Kdm9pZCBfX3JldmVyc2UoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykgewogIHdoaWxlIChfX2ZpcnN0IDwgX19sYXN0KQogICAgaXRlcl9zd2FwKF9fZmlyc3QrKywg
LS1fX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUg
dm9pZCByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfX3JldmVyc2Uo
X19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJ
dGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7
CiAgICAqX19yZXN1bHQgPSAqX19sYXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9f
cmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+Cl9FdWNs
aWRlYW5SaW5nRWxlbWVudCBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbikKewogIHdoaWxl
IChfX24gIT0gMCkgewogICAgX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fdCA9IF9fbSAlIF9fbjsK
ICAgIF9fbSA9IF9fbjsKICAgIF9fbiA9IF9fdDsKICB9CiAgcmV0dXJuIF9fbTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19y
b3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICBy
ZXR1cm4gX19sYXN0OwogIGlmIChfX2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJz
dDsKCiAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgZG8gewogICAgc3dhcCgq
X19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAg
ICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICB9IHdoaWxlIChfX2ZpcnN0MiAhPSBfX2xhc3QpOwoK
ICBfRm9yd2FyZEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdDsKCiAgX19maXJzdDIgPSBfX21p
ZGRsZTsKCiAgd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCkgewogICAgc3dhcCAoKl9fZmlyc3Qr
KywgKl9fZmlyc3QyKyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlk
ZGxlID0gX19maXJzdDI7CiAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgIF9f
Zmlyc3QyID0gX19taWRkbGU7CiAgfQoKICByZXR1cm4gX19uZXdfbWlkZGxlOwp9CgoKdGVtcGxh
dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rp
b25hbEl0ZXIgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19sYXN0OwogIGlmIChf
X2xhc3QgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNlKF9fZmly
c3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICBfX3JldmVyc2Uo
X19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CgogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAgIHN3YXAgKCpf
X2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKSB7CiAgICBf
X3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7
CiAgICByZXR1cm4gX19sYXN0OwogIH0KICBlbHNlIHsKICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBf
X21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICByZXR1cm4gX19maXJz
dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3Rh
bmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAqLCBfVHAgKikKewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAt
IF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fayA9IF9fbWlkZGxlIC0gX19maXJzdDsKICBfRGlzdGFu
Y2UgX19sID0gX19uIC0gX19rOwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0ID0gX19maXJz
dCArIChfX2xhc3QgLSBfX21pZGRsZSk7CgogIGlmIChfX2sgPT0gMCkKICAgIHJldHVybiBfX2xh
c3Q7CgogIGVsc2UgaWYgKF9fayA9PSBfX2wpIHsKICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX21pZGRsZSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQoKICBfRGlzdGFuY2Ug
X19kID0gX19nY2QoX19uLCBfX2spOwoKICBmb3IgKF9EaXN0YW5jZSBfX2kgPSAwOyBfX2kgPCBf
X2Q7IF9faSsrKSB7CiAgICBfVHAgX190bXAgPSAqX19maXJzdDsKICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcCA9IF9fZmlyc3Q7CgogICAgaWYgKF9fayA8IF9fbCkgewogICAgICBmb3IgKF9EaXN0
YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykgewogICAgICAgIGlmIChfX3AgPiBf
X2ZpcnN0ICsgX19sKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgLSBfX2wpOwogICAgICAgICAg
X19wIC09IF9fbDsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAg
ICAgX19wICs9IF9fazsKICAgICAgfQogICAgfQoKICAgIGVsc2UgewogICAgICBmb3IgKF9EaXN0
YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2svX19kIC0gMTsgX19qICsrKSB7CiAgICAgICAgaWYgKF9f
cCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAg
ICAgIF9fcCArPSBfX2s7CiAgICAgICAgfQoKICAgICAgICAqX19wID0gKiAoX19wIC0gX19sKTsK
ICAgICAgICBfX3AgLT0gX19sOwogICAgICB9CiAgICB9CgogICAgKl9fcCA9IF9fdG1wOwogICAg
KytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJz
dCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19yb3Rh
dGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9f
Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0
ZXI+Cl9PdXRwdXRJdGVyIHJvdGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xh
c3QsIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJu
IGNvcHkoX19maXJzdCwgX19taWRkbGUsIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19yZXN1bHQp
KTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9EaXN0YW5jZSBfX3Jh
bmRvbV9udW1iZXIoX0Rpc3RhbmNlIF9fbikgewoKICByZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoK
Cgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFu
ZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBmb3IgKF9SYW5k
b21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAg
IGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmRvbV9udW1iZXIoKF9faSAtIF9fZmlyc3Qp
ICsgMSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3I+CnZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVy
X3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rp
c3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0
SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog
IF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAg
d2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwg
X19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9f
bTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4g
X19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIF9E
aXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jl
bWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hp
bGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAg
ICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAg
ICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0
YW5jZSBfX3QgPSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247
ICsrX19tLCArK19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChf
X2ZpcnN0ICE9IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5k
b21fbnVtYmVyKF9fdCk7CiAgICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9f
Zmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAg
IGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21OdW1iZXJH
ZW5lcmF0b3ImIF9fcmFuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IF9EaXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3Qg
PSBfX247CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCAr
K19fZmlyc3QpCiAgICBfX291dFtfX21dID0gKl9fZmlyc3Q7CgogIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgKytfX3Q7CiAgICBfRGlzdGFuY2UgX19NID0gX19yYW5kKF9fdCk7CiAg
ICBpZiAoX19NIDwgX19uKQogICAgICBfX291dFtfX01dID0gKl9fZmlyc3Q7CiAgICArK19fZmly
c3Q7CiAgfQoKICByZXR1cm4gX19vdXQgKyBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJh
bmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19vdXRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
cmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX291dF9maXJzdCwgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwKICAgICAgICAg
IGNsYXNzIF9SYW5kb21OdW1iZXJHZW5lcmF0b3I+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpy
YW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fb3V0X2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbU51bWJlckdlbmVyYXRvciYgX19yYW5k
KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19y
YW5kb21fc2FtcGxlKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
b3V0X2ZpcnN0LCBfX3JhbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9sYXN0IC0g
X19vdXRfZmlyc3QpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Q
cmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciBfX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19maXJzdDsKCiAgd2hpbGUgKF9fcHJlZCgqX19maXJzdCkpCiAgICBpZiAoKytfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0
OwoKICB3aGlsZSAoKytfX25leHQgIT0gX19sYXN0KQogICAgaWYgKF9fcHJlZCgqX19uZXh0KSkg
ewogICAgICBzd2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgKytfX2ZpcnN0OwogICAgfQoK
ICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcGFydGl0aW9uKF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25h
bF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKHRydWUpCiAgICAg
IGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxz
ZSBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGVsc2UKICAg
ICAgICBicmVhazsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKHRydWUpCiAgICAgIGlmIChfX2Zp
cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSBpZiAoIV9f
cHJlZCgqX19sYXN0KSkKICAgICAgICAtLV9fbGFzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFr
OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0Zv
cndhcmRJdGVyIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CgogIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRv
cl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2lucGxhY2Vf
c3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX0Rpc3RhbmNlIF9f
bGVuKQp7CiAgaWYgKF9fbGVuID09IDEpCiAgICByZXR1cm4gX19wcmVkKCpfX2ZpcnN0KSA/IF9f
bGFzdCA6IF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICBhZHZh
bmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogIHJldHVybiByb3RhdGUoX19pbnBsYWNlX3N0YWJs
ZV9wYXJ0aXRpb24oX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiksCiAgICAgICAgICAgICAgICBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxl
LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs
IGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGljYXRlLAogICAgICAgICAgY2xhc3MgX0Rpc3Rh
bmNlPgpfRm9yd2FyZEl0ZXIgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChf
X2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQxID0gX19m
aXJzdDsKICAgIF9Qb2ludGVyIF9fcmVzdWx0MiA9IF9fYnVmZmVyOwogICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHsK
ICAgICAgICAqX19yZXN1bHQxID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAg
IH0KICAgICAgZWxzZSB7CiAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICsr
X19yZXN1bHQyOwogICAgICB9CiAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0
MSk7CiAgICByZXR1cm4gX19yZXN1bHQxOwogIH0KICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlciBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAg
cmV0dXJuIHJvdGF0ZShfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19maXJzdCwgX19taWRkbGUsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSwKICAgICAgICAgICAg
ICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfX3N0YWJsZV9wYXJ0aXRpb25f
YWRhcHRpdmUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsIF9fbGFzdCwgX19w
cmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSkpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRm9y
d2FyZEl0ZXIKX19zdGFibGVfcGFydGl0aW9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwg
X1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAg
cmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJl
ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVm
LnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXplKCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19idWYucmVxdWVzdGVkX3NpemUo
KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpp
bmxpbmUgX0ZvcndhcmRJdGVyIHN0YWJsZV9wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK
ICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRpb25f
YXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3Bh
cnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCnsKICB3aGlsZSAodHJ1ZSkg
ewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2ZpcnN0OwogICAgLS1f
X2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0tX19sYXN0OwogICAg
aWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgaXRlcl9z
d2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cl9SYW5kb21B
Y2Nlc3NJdGVyIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwIF9f
cGl2b3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlICh0cnVlKSB7CiAgICB3aGlsZSAoX19j
b21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAgKytfX2ZpcnN0OwogICAgLS1fX2xhc3Q7CiAg
ICB3aGlsZSAoX19jb21wKF9fcGl2b3QsICpfX2xhc3QpKQogICAgICAtLV9fbGFzdDsKICAgIGlm
ICghKF9fZmlyc3QgPCBfX2xhc3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dh
cChfX2ZpcnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKY29uc3QgaW50IF9fc3Rs
X3RocmVzaG9sZCA9IDE2OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwgX1RwIF9fdmFsKQp7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0
OwogIC0tX19uZXh0OwogIHdoaWxlIChfX3ZhbCA8ICpfX25leHQpIHsKICAgICpfX2xhc3QgPSAq
X19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpfX2xhc3Qg
PSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCnsKICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7
CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICpfX2xh
c3QgPSAqX19uZXh0OwogICAgX19sYXN0ID0gX19uZXh0OwogICAgLS1fX25leHQ7CiAgfQogICpf
X2xhc3QgPSBfX3ZhbDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHA+CmlubGluZSB2b2lkIF9fbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfVHAqKQp7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsKICBpZiAoX192YWwgPCAqX19maXJzdCkg
ewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCArIDEpOwogICAgKl9f
Zmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRv
bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX1RwIF9fdmFsID0g
Kl9fbGFzdDsKICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgIGNvcHlfYmFja3dh
cmQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAg
fQogIGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9faW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQp7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xp
bmVhcl9pbnNlcnQoX19maXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9faW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBfX2xpbmVhcl9pbnNlcnQoX19m
aXJzdCwgX19pLCBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2luc2Vy
dGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopCnsKICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19p
KQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpIHsKICBfX3VuZ3VhcmRlZF9p
bnNlcnRpb25fc29ydF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJzdCkp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf
X2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl
cnQoX19pLCBfVHAoKl9faSksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlv
bl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgX191bmd1YXJkZWRf
aW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJl
c2hvbGQpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3Ro
cmVzaG9sZCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxf
dGhyZXNob2xkLCBfX2xhc3QpOwogIH0KICBlbHNlCiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly
c3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg
X0NvbXBhcmU+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3Ro
cmVzaG9sZCkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGxf
dGhyZXNob2xkLCBfX2NvbXApOwogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJz
dCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0LCBfX2NvbXApOwogIH0KICBlbHNlCiAgICBfX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9TaXplPgppbmxpbmUgX1NpemUgX19sZyhfU2l6ZSBfX24pCnsKICBfU2l6ZSBfX2s7CiAgZm9y
IChfX2sgPSAwOyBfX24gIT0gMTsgX19uID4+PSAxKSArK19fazsKICByZXR1cm4gX19rOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemU+
CnZvaWQgX19pbnRyb3NvcnRfbG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAg
ICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1pdCA9PSAwKSB7CiAg
ICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybjsK
ICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K
ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSkp
KTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19jdXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhf
bGltaXQpOwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1NpemUsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAg
ICAgICAgIF9TaXplIF9fZGVwdGhfbGltaXQsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChf
X2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBpZiAoX19kZXB0aF9saW1p
dCA9PSAwKSB7CiAgICAgIHBhcnRpYWxfc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fbGFzdCwgX19j
b21wKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1fX2RlcHRoX2xpbWl0OwogICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChf
X2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqKF9fbGFzdCAtIDEpLCBfX2NvbXApKSwKICAgICAgIF9fY29tcCk7CiAgICBfX2ludHJv
c29ydF9sb29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0LCBfX2NvbXAp
OwogICAgX19sYXN0ID0gX19jdXQ7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXI+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgogIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChf
X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAg
X19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogIH0KfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50
cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVl
X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJz
dCkgKiAyLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19maW5hbF9pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0dXJuOwogIH0KICBfUmFuZG9tQWNj
ZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogIF9f
aW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgX19pbnBsYWNlX3N0YWJs
ZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0g
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBf
X2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7CiAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lu
cGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0
X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0g
X19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAg
ICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vz
c0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1
bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAq
IF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7
CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAg
ICAgICAgICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29f
c3RlcCwKICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQpOwogICAgX19maXJzdCArPSBfX3R3
b19zdGVwOwogIH0KCiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmly
c3QpLCBfX3N0ZXBfc2l6ZSk7CiAgbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXpl
LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAgICBfX3Jlc3VsdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjEsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
MiwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJn
ZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAg
ICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX190d29fc3Rl
cCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29f
c3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3Np
emUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
IF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogICAgX19maXJzdCArPSBfX3R3b19zdGVwOwogIH0KICBfX3N0ZXBf
c2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKCiAg
bWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgIF9fZmlyc3QgKyBf
X3N0ZXBfc2l6ZSwgX19sYXN0LAogICAgICAgIF9fcmVzdWx0LAogICAgICAgIF9fY29tcCk7Cn0K
CmNvbnN0IGludCBfX3N0bF9jaHVua19zaXplID0gNzsKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQo
X1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSkKewogIHdoaWxl
IChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fY2h1bmtfc2l6ZSkgewogICAgX19pbnNlcnRpb25fc29y
dChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplKTsKICAgIF9fZmlyc3QgKz0gX19jaHVu
a19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29t
cGFyZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29t
cGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUp
IHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwg
X19jb21wKTsKICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B
Y2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vf
c29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3Rh
bmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0g
X19idWZmZXIgKyBfX2xlbjsKCiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtf
c2l6ZTsKICBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3Np
emUpOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19tZXJnZV9zb3J0X2xv
b3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgX19zdGVwX3Np
emUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBf
X2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3MgX0Rpc3Rh
bmNlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9zb3J0X3dpdGhfYnVm
ZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9Db21wYXJlIF9fY29tcCkKewogIF9E
aXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFz
dCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2No
dW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3Rl
cF9zaXplLCBfX2NvbXApOwoKICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgX19t
ZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9f
Y29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZm
ZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19z
dGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBfRGlzdGFuY2Ug
X19sZW4gPSAoX19sYXN0IC0gX19maXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBf
X21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7
CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xh
c3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3Nv
cnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikw
KTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
ciwgKF9EaXN0YW5jZSopMCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRk
bGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6
ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIs
IGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fc3RhYmxl
X3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0Nv
bXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAx
KSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAg
aWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxl
LCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbXApOwogIH0KICBlbHNlIHsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihf
X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9f
bWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf
X21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S
YW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQg
X19zdGFibGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFu
Y2UqKQp7CiAgX1RlbXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3Rh
YmxlX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0X2FkYXB0
aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj
ZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgppbmxp
bmUgdm9pZCBfX3N0YWJsZV9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCos
IF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKewogIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2Zp
cnN0LCBfX2xhc3QpOwogIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJs
ZV9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICBlbHNlCiAgICBfX3N0YWJsZV9zb3J0
X2FkYXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgYnVmLmJlZ2luKCksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9EaXN0YW5jZShidWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUg
dm9pZCBzdGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBzdGFibGVfc29y
dChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgX19zdGFibGVfc29ydF9hdXgoX19maXJzdCwg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAg
ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAg
ICAgX19jb21wKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9UcD4Kdm9pZCBfX3BhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9UcCopCnsKICBtYWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUpOwogIGZv
ciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kp
CiAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2ksIF9UcCgqX19pKSwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19m
aXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX3Bh
cnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoX19maXJz
dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX0NvbXBhcmU+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBtYWtlX2hlYXAo
X19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg
PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgIGlmIChfX2NvbXAoKl9faSwgKl9f
Zmlyc3QpKQogICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ksIF9UcCgqX19p
KSwgX19jb21wLAogICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7CiAg
c29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBwYXJ0aWFsX3Nv
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfRGlzdGFu
Y2UsCiAgICAgICAgICBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikKewog
IGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFz
dDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9yZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJz
dDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19y
ZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgKytf
X3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7CiAgfQogIG1ha2VfaGVhcChfX3Jlc3Vs
dF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qp
IHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgX19hZGp1c3RfaGVh
cChfX3Jlc3VsdF9maXJzdCwgX0Rpc3RhbmNlKDApLAogICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX3Jlc3VsdF9yZWFsX2xhc3QgLSBfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAg
ICAgICAgX1RwKCpfX2ZpcnN0KSk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jl
c3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICByZXR1cm4gX19yZXN1bHRfcmVhbF9s
YXN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CiAgcmV0dXJuIF9fcGFydGlhbF9zb3J0X2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdF9m
aXJzdCwgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3Rh
bmNlX3R5cGUoX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
dmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlz
dGFuY2UsIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAs
IF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFz
dCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVh
bF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19y
ZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xh
c3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0Owog
IH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21w
KTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3Qs
ICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9E
aXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9s
YXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCks
CiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9o
ZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJu
IF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJ
dGVyCnBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAog
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCgogIHJldHVybiBfX3BhcnRpYWxfc29ydF9jb3B5KF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX3Jlc3VsdF9maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX192
YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7
CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlv
bihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRp
YW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihf
X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBpZiAoX19jdXQgPD0gX19udGgp
CiAgICAgIF9fZmlyc3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAg
fQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFz
dCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJlIF9fY29t
cCkKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBf
X2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
bGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t
cCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX2N1dCA8
PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZQogICAgICBfX2xhc3QgPSBf
X2N1dDsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSB2b2lkIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKCiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250aCwgX19sYXN0LCBfX3Zh
bHVlX3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19sb3dlcl9i
b3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0
YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rp
c3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+
IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7
CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7
CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1
cm4gX19sb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAg
ICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0Zv
cndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWws
IF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAg
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBf
Rm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9
IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxl
LCBfX2hhbGYpOwogICAgaWYgKF9fY29tcCgqX19taWRkbGUsIF9fdmFsKSkgewogICAgICBfX2Zp
cnN0ID0gX19taWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9f
aGFsZiAtIDE7CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1
cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBj
bGFzcyBfQ29tcGFyZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBsb3dlcl9ib3VuZChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX191cHBlcl9ib3VuZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFs
ZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9f
aGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9f
bWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICBfX2xlbiA9
IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICsrX19m
aXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICB9CiAgfQogIHJldHVy
biBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+Cmlu
bGluZSBfRm9yd2FyZEl0ZXIgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX191cHBlcl9i
b3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlz
dGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNs
YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f
dXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29t
cCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
aWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBl
bHNlIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9f
bGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4K
aW5saW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBf
VHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3Zh
bCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0
KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0Rp
c3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9G
b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFs
LAogICAgICAgICAgICAgIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0Zv
cndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogIHdoaWxlIChfX2xlbiA+IDAp
IHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBh
ZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAg
ICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQog
ICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBsb3dlcl9ib3Vu
ZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVu
KTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFs
KTsKICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fbGVmdCwg
X19yaWdodCk7CiAgICB9CiAgfQogIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJ
dGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwg
Y2xhc3MgX1RwPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KZXF1YWxf
cmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9U
cCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fZXF1YWxf
cmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rp
c3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJ
dGVyLCBfRm9yd2FyZEl0ZXI+Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0NvbXBh
cmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJk
SXRlciBfX21pZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5j
ZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsK
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0g
X19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKF9fdmFsLCAqX19t
aWRkbGUpKQogICAgICBfX2xlbiA9IF9faGFsZjsKICAgIGVsc2UgewogICAgICBfX2xlZnQgPSBs
b3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9fY29tcCk7CiAgICAgIGFkdmFu
Y2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRs
ZSwgX19maXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRl
ciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0KICByZXR1cm4gcGFp
cjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGlu
ZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9f
Y29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmJvb2wgYmluYXJ5X3Nl
YXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwp
OwogIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAqX19pKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBiaW5h
cnlfc2VhcmNoKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgIF9Db21w
YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBf
Rm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19j
b21wKTsKICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKfQoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBf
T3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1
dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBf
SW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg
ICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19m
aXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRw
dXRJdGVyLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz
dDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAg
IH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJz
dDE7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19s
YXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV93
aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yKQp7CiAgaWYgKF9f
bGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgcmV0dXJuOwogIGlmIChfX2xlbjEgKyBfX2xl
bjIgPT0gMikgewogICAgaWYgKCpfX21pZGRsZSA8ICpfX2ZpcnN0KQogICAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIg
PSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwog
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dl
cl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgZGlzdGFuY2UoX19t
aWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgfQogIGVsc2UgewogICAgX19sZW4yMiA9
IF9fbGVuMiAvIDI7CiAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICBfX2Zp
cnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsK
ICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlk
ZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19m
aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEs
IF9fbGVuMjIpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29u
ZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMiAtIF9fbGVuMjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
LCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9i
dWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIg
PT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmIChf
X2NvbXAoKl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX21p
ZGRsZSk7CiAgICByZXR1cm47CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9
IF9fZmlyc3Q7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwog
IF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgaWYgKF9f
bGVuMSA+IF9fbGVuMikgewogICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICBhZHZhbmNlKF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlk
ZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xl
bjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9j
dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w
KTsKICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICB9CiAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZQogICAgPSByb3RhdGUoX19maXJzdF9jdXQsIF9f
bWlkZGxlLCBfX3NlY29uZF9jdXQpOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwgX19sZW4yMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX25ld19taWRk
bGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAg
ICBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlcjEgX19yb3RhdGVfYWRhcHRpdmUo
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNl
IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZl
cl9lbmQ7CiAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkg
ewogICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAg
ICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgcmV0dXJuIGNv
cHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19maXJzdCk7CiAgfQogIGVsc2UgaWYgKF9fbGVu
MSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2J1ZmZlcik7CiAgICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwog
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsK
ICB9CiAgZWxzZQogICAgcmV0dXJuIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlv
bmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIzPgpfQmlkaXJlY3Rp
b25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEg
X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQp7CiAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0MiwgX19y
ZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlfYmFja3dh
cmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1fX2xhc3Qy
OwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAq
LS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7
CiAgICAgIC0tX19sYXN0MTsKICAgIH0KICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpf
X2xhc3QyOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29w
eV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0
MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFz
cyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy
MywgY2xhc3MgX0NvbXBhcmU+Cl9CaWRpcmVjdGlvbmFsSXRlcjMgX19tZXJnZV9iYWNrd2FyZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp
OwogIC0tX19sYXN0MTsKICAtLV9fbGFzdDI7CiAgd2hpbGUgKHRydWUpIHsKICAgIGlmIChfX2Nv
bXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwog
ICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2Fy
ZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgIH0K
ICAgIGVsc2UgewogICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICBpZiAoX19maXJz
dDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytf
X2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MjsKICAgIH0KICB9Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1BvaW50
ZXI+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAg
ICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgaWYg
KF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2lu
dGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAg
IG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3Qp
OwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIg
X19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICBfX21l
cmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBf
X2xhc3QpOwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9
IF9fZmlyc3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7
CiAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAg
ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg
ICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgZGlzdGFuY2Uo
X19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAg
X19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIy
KTsKICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9f
c2Vjb25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjEx
KTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3Jv
dGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwg
X19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1
ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwg
X19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAg
ICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3Mg
X1BvaW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZl
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E
aXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwg
X0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf
X2NvbXApCnsKICBpZiAoX19sZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6
ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIpOwogICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9f
bGFzdCwgX19maXJzdCwgX19jb21wKTsKICB9CiAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVy
X3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFz
dCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19i
dWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbXAp
OwogIH0KICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1dCA9IF9fZmly
c3Q7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICBf
RGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICBpZiAo
X19sZW4xID4gX19sZW4yKSB7CiAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICBhZHZh
bmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91
bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5j
ZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIH0KICAgIGVsc2UgewogICAg
ICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVu
MjIpOwogICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAq
X19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1
dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0K
ICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9j
dXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9f
YnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19m
aXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgX19s
ZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7CiAgICBfX21lcmdlX2FkYXB0
aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEs
CiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplLCBfX2NvbXApOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
ciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9faW5wbGFjZV9tZXJn
ZV9hdXgoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSop
CnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRsZSwgX19s
YXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9U
cD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAg
X19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEs
IF9fbGVuMik7CiAgZWxzZQogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4o
KSwgX0Rpc3RhbmNlKF9fYnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRp
c3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAw
OwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVm
ZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm
IChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAgIF9f
bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIs
CiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5zaXpl
KCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg
aWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJu
OwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9f
Zmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Nv
bXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKCgoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xhc3QpCiAg
ICByZXR1cm47CiAgX19pbnBsYWNlX21lcmdlX2F1eChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNl
X3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9CgoKCgoKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVk
ZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAg
cmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsr
X19maXJzdDE7CiAgICBlbHNlCiAgICAgICsrX19maXJzdDEsICsrX19maXJzdDI7CgogIHJldHVy
biBfX2ZpcnN0MiA9PSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNs
YXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBpbmNsdWRlcyhfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQp7CgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx
ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmly
c3QxKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAq
X19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCAr
K19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9P
dXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDEg
PCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAgIGVsc2Ugewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0Miwg
X19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIs
CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X3VuaW9uKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz
dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3Qx
OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNl
IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICAr
K19fZmlyc3QyOwogICAgfQogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJz
dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJ
dGVyPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBf
SW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0
ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBf
X2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgKytfX2ZpcnN0MTsK
ICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgKytfX2ZpcnN0MjsKICAg
IGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFz
cyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRf
aW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9f
cmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh
c3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJz
dDE7CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19f
Zmlyc3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytf
X2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1
cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0Mikgewog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19y
ZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICsr
X19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0
SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFy
ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9f
Y29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Qx
OwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAo
X19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ug
ewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlcgpz
ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpf
X2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICsrX19maXJzdDE7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJz
dDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19f
Zmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7CiAgICAgICsrX19maXJz
dDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFz
dDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAg
ICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJdGVyCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAh
PSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsKICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0
OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICAgICsrX19yZXN1
bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19yZXN1bHQpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0Zv
cndhcmRJdGVyIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg
X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSBy
ZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAg
ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGlm
IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVz
dWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmIChfX2Nv
bXAoKl9fcmVzdWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19y
ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5f
ZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7
CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9
IF9fbGFzdCkKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgX19yZXN1bHQgPSBf
X2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
ciwgY2xhc3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9D
b21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAq
X19yZXN1bHQpKQogICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVybXV0
YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xh
c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9
IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7
CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghKCpfX2kgPCAq
LS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgIHJldmVy
c2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoX19pID09
IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4g
ZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBj
bGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK
CgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAg
IHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAo
Kl9faSwgKl9faWkpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg
ICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAgICAgICAge30KICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmJvb2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
IHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19f
aTsKICBpZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7
CiAgLS1fX2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7
CiAgICAtLV9faTsKICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCEoKi0tX19qIDwgKl9faSkpCiAgICAgICAg
e30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3Qp
OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAg
ICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpi
b29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3Qg
PT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBf
X2ZpcnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwog
IF9faSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19paSwgKl9faSkpIHsK
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2Nv
bXAoKi0tX19qLCAqX19pKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAg
aWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX0ZvcndhcmRJdGVyPgpfSW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRl
ciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MikKewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDsKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19m
aXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJkSXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9
IF9fbGFzdDI7ICsrX19pdGVyKQogICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAg
ICAgcmV0dXJuIF9fZmlyc3QxOwogIHJldHVybiBfX2xhc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpf
SW5wdXRJdGVyIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBm
b3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICBmb3IgKF9Gb3J3YXJk
SXRlciBfX2l0ZXIgPSBfX2ZpcnN0MjsgX19pdGVyICE9IF9fbGFzdDI7ICsrX19pdGVyKQogICAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Qx
OwogIHJldHVybiBfX2xhc3QxOwp9CiMgMzQxOSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9y
d2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIxIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0
MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgX0Zvcndh
cmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAg
aWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAg
IF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAg
X0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFz
dDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3Vs
dCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAg
ICArK19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVk
aWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf
Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0
ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRl
cjEgX19uZXdfcmVzdWx0CiAgICAgICAgPSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmly
c3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEp
CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9
IF9fbmV3X3Jlc3VsdDsKICAgICAgICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAr
K19fZmlyc3QxOwogICAgICB9CiAgICB9CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRl
cjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9p
dGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9f
cmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJ
dGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIp
OwoKICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxz
ZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsK
ICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAg
cmV0dXJuIF9fcmVzdWx0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRl
cjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJl
ZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRp
cmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2
ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVy
MSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBf
UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxh
c3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJl
c3VsdCA9PSBfX3JsYXN0MSkKICAgIHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9f
cmVzdWx0LCAtZGlzdGFuY2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3Vs
dDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJk
SXRlcjI+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDsKCgoKICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIs
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
MSksCiAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAg
ICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRf
ZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAg
ICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA7CgoKCiAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3Qy
LCBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJz
dDEpLAogICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAog
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv
bUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7
CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkg
ewogICAgaWYgKF9fZmlyc3RbX19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0
dXJuIGZhbHNlOwogICAgaWYgKChfX2NoaWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsK
ICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVh
cChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwK
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7
CiAgZm9yIChfRGlzdGFuY2UgX19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkg
ewogICAgaWYgKF9fY29tcChfX2ZpcnN0W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAg
ICAgIHJldHVybiBmYWxzZTsKICAgIGlmICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19w
YXJlbnQ7CiAgfQogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz
c0l0ZXI+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OwoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRl
bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmlu
Zz4KaW5saW5lIGJvb2wgaXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmlu
ZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJu
IF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAo
X19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4
dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9
IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJl
dHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmlj
dFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgcmV0dXJuIHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBf
X2ZpcnN0OwogIGZvciAoKytfX25leHQ7IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25l
eHQsICsrX19uZXh0KSB7CiAgICBpZiAoX19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAg
cmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0dXJuIHRydWU7Cn0KCn0KIyA2NiAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDUwICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0MyAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
Y29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5h
bWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9z
aXplID0gKCgobnBvcyAtIHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3JhZ2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9m
KF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3Ry
dWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAg
ICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9f
YmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0
eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAgICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAg
IHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kg
PCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAg
IF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0K
ICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBf
X3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAgICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAg
ICAgZm9yICg7OykKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9
IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hh
clQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAg
ICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICpfX3AgPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwog
ICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAg
ICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9f
YSk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRh
dGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgp
LCBfX2xlbik7CiAgICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAg
ICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0g
X19sZW47CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAg
ICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywg
X0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBmb3J3
YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVnLCBfX2VuZCkpOwoKICAgICAgICBpZiAo
X19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2Vt
cHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2Ny
ZWF0ZShfX2RuZXcsIF9fYSk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9TX2NvcHlfY2hhcnMo
X19yLT5fTV9yZWZkYXRhKCksIF9fYmVnLCBfX2VuZCk7IH0KICAgICAgICBjYXRjaCguLi4pCiAg
ICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgIH0KICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fZG5ldzsKCiAgICAg
ICAgX19yLT5fTV9yZWZkYXRhKClbX19kbmV3XSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAg
IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qo
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAg
IGlmIChfX24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5
X3JlcCgpLl9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUo
X19uLCBfX2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAg
ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0
cm95KF9fYSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3Ro
ID0gX19uOwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7
CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01f
Z3JhYihfQWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBf
X3N0ci5nZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9f
YSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwg
X19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25z
dHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
YmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywK
ICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDog
X01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9f
YSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBj
b25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19z
ICsgX19uLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywg
Y29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9f
cyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJp
bmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICA6IF9N
X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX24sIF9fYywgX19hKSwgX19hKQogICAgeyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0ZXIgX19iZWcs
IF9JbnB1dEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6YXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
CiAgICB7CiAgICAgIGlmIChfTV9yZXAoKSAhPSBfX3N0ci5fTV9yZXAoKSkKICAgICAgICB7Cgog
ICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gdGhpcy0+Z2V0X2FsbG9jYXRvcigpOwogICAg
ICAgICAgX0NoYXJUKiBfX3RtcCA9IF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9fYSwgX19zdHIu
Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAg
ICAgICAgICBfTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjpfUmVwOjoKICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJiBfX2EpIHRocm93ICgpCiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBzaXplb2YoX1JlcCkgKyAoX01fY2FwYWNpdHkg
KyAxKSAqIHNpemVvZihfQ2hhclQpOwogICAgICBfUmF3X2J5dGVzX2FsbG9jKF9fYSkuZGVhbGxv
Y2F0ZShyZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSwgX19zaXplKTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfTV9s
ZWFrX2hhcmQoKQogICAgewogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAg
ICAgIF9NX211dGF0ZSgwLCAwLCAwKTsKICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIF9NX211dGF0ZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEs
IHNpemVfdHlwZSBfX2xlbjIpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX29sZF9zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdfc2l6ZSA9IF9fb2xkX3NpemUg
KyBfX2xlbjIgLSBfX2xlbjE7CiAgICAgIGNvbnN0IF9DaGFyVCogX19zcmMgPSBfTV9kYXRhKCkg
KyBfX3BvcyArIF9fbGVuMTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9faG93X211Y2ggPSBfX29s
ZF9zaXplIC0gX19wb3MgLSBfX2xlbjE7CgogICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJl
ZCgpIHx8IF9fbmV3X3NpemUgPiBjYXBhY2l0eSgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxv
Y2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19uZXdfc2l6ZSwgX19hKTsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX2RhdGEoKSwgX19wb3MpOwogICAgICAgICAgICAg
IGlmIChfX2hvd19tdWNoKQogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5f
TV9yZWZkYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
Li4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kaXNwb3NlKGdldF9hbGxv
Y2F0b3IoKSk7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9N
X3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRhKF9fci0+X01fcmVmZGF0
YSgpKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2hvd19tdWNoICYmIF9fbGVuMSAhPSBfX2xl
bjIpCiAgICAgICAgewoKICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSArIF9f
cG9zICsgX19sZW4yLCBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgfQogICAgICBfTV9yZXAo
KS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9NX3JlcCgpLT5fTV9sZW5ndGggPSBfX25ld19z
aXplOwogICAgICBfTV9kYXRhKClbX19uZXdfc2l6ZV0gPSBfUmVwOjpfU190ZXJtaW5hbDsKCiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6cmVzZXJ2ZShzaXplX3R5cGUgX19yZXMpCiAgICB7CiAgICAgIGlmIChfX3JlcyA+IHRo
aXMtPmNhcGFjaXR5KCkgfHwgX01fcmVwKCktPl9NX2lzX3NoYXJlZCgpKQogICAgICAgIHsKICAg
ICAgICAgIGlmIChfX3JlcyA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICAgIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2VydmUiKTsKCiAgICAgICAgICBpZiAoX19y
ZXMgPCB0aGlzLT5zaXplKCkpCiAgICAgICAgICAgIF9fcmVzID0gdGhpcy0+c2l6ZSgpOwogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwogICAgICAgICAgX0No
YXJUKiBfX3RtcCA9IF9NX3JlcCgpLT5fTV9jbG9uZShfX2EsIF9fcmVzIC0gdGhpcy0+c2l6ZSgp
KTsKICAgICAgICAgIF9NX3JlcCgpLT5fTV9kaXNwb3NlKF9fYSk7CiAgICAgICAgICBfTV9kYXRh
KF9fdG1wKTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpzd2FwKGJhc2ljX3N0cmluZyYgX19zKQogICAgewogICAg
ICBpZiAoX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgaWYgKF9fcy5fTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAg
ICAgX19zLl9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgaWYgKHRoaXMtPmdldF9h
bGxvY2F0b3IoKSA9PSBfX3MuZ2V0X2FsbG9jYXRvcigpKQogICAgICAgIHsKICAgICAgICAgIF9D
aGFyVCogX190bXAgPSBfTV9kYXRhKCk7CiAgICAgICAgICBfTV9kYXRhKF9fcy5fTV9kYXRhKCkp
OwogICAgICAgICAgX19zLl9NX2RhdGEoX190bXApOwogICAgICAgIH0KCiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAxKF9NX2liZWdpbigpLCBfTV9pZW5k
KCksIF9fcy5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMihf
X3MuX01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICAqdGhpcyA9IF9fdG1wMjsKICAg
ICAgICAgIF9fcyA9IF9fdG1wMTsKICAgICAgICB9CiAgICB9CiMgMzU5ICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3Qg
X19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAg
ICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6
ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKCgog
ICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19hbGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShf
X3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9fcGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+
X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBfX3AtPl9NX3NldF9zaGFyYWJsZSgpOwog
ICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJldHVybiBfX3A7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl
cDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9fYWxsb2MsIHNpemVfdHlwZSBfX3JlcykK
ICAgIHsKICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9NX2xlbmd0aCArIF9fcmVz
LCBfX2FsbG9jKTsKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fcmVm
ZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01fbGVu
Z3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogIGlubGlu
ZSBib29sCgoKCgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1Jl
cDo6CiAgICBfU19leGNlc3Nfc2xvcChzaXplX3QgX19zLCBzaXplX3QgX19yKQoKICAgIHsKICAg
ICAgcmV0dXJuIDIgKiAoX19zIDw9IDE2ID8gMTYgOiBfX3MpIDwgX19yOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6
ZShzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3Np
emUoKSkKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUi
KTsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6
ZSA8IF9fbikKICAgICAgICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBl
bHNlIGlmIChfX24gPCBfX3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig
X19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwg
aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sx
LCBfX2syKTsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3MuX01f
aWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
ICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIg
X19rMSwKICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19rMiwgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kb2xkID0gX19pMiAtIF9faTE7CiAg
ICAgICAgc2l6ZV90eXBlIF9fZG1heCA9IHRoaXMtPm1heF9zaXplKCk7CiAgICAgICAgc2l6ZV90
eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwgX19rMikp
OwoKICAgICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3Ro
X2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19v
ZmYgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQs
IF9fZG5ldyk7CgogICAgICAgIGlmIChfX2RuZXcpCiAgICAgICAgICBfU19jb3B5X2NoYXJzKF9N
X2RhdGEoKSArIF9fb2ZmLCBfX2sxLCBfX2syKTsKCiAgICAgICAgcmV0dXJuICp0aGlzOwogICAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h
bWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShzaXpl
X3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwK
ICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpCiAgICB7CiAgICAg
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zMSksIF9NX2ZvbGQoX19wb3MxLCBf
X24xKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fY2hlY2soX19wb3MyKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvczIsIF9fbjIpKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19zaXplID0gX19z
dHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpemUgKyB0aGlzLT5zaXplKCk7
CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2
ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgp
LCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01f
aWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0Fs
bG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+OjoKICAgIGFwcGVu
ZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBf
X24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0ci5zaXplKCkgLSBf
X3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNp
dHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBf
X3MsIHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgp
LCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0
cyxfQWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgewog
ICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xl
biA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAg
ICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19uLCBfX2MpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBv
cGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0
cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAg
ICAgX19zaXplX3R5cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0
cmluZ190eXBlIF9fc3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgp
KTsKICAgICAgX19zdHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIu
YXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhz
LCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
X19zaXplX3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBl
IF9fbGVuID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAg
ICAgIF9fc3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBl
bmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2ky
LCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEg
PSBfX2kyIC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4o
KTsKICAgICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikK
ICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAg
ICAgIF9NX211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAg
ICAgIHRyYWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwog
ICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X24sIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+
c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHki
KTsKCiAgICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0
aGlzLT5zaXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0
YSgpICsgX19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0
IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7
CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hw
b3MgPSBfX3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAg
IGZvciAoOyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJh
aXRzX3R5cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAg
ICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFy
VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6
ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYg
KF9fcG9zIDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRh
ID0gX01fZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwog
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBf
X3BvcywgX19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBf
X3AgLSBfX2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVf
dHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmlu
ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAo
X19uIDw9IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6
ZSAtIF9fbiAsX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRh
KCk7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190
eXBlOjpjb21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAg
ICAgIHJldHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0g
PiAwKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu
YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQg
X19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUg
PSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6
ZV90IF9feHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAg
ICAgICAgICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBv
cy0tID4gMDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hw
b3NdLCBfX2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6
ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19u
ICYmIF9fcG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtf
X3Bvc10pOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAg
ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAg
ICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9f
bikKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAg
X19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
aWYgKHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAg
ICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAo
X19zaXplLS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXpl
X3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmlu
ZF9maXJzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90
eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBm
b3IgKDsgX19uICYmIF9feHBvcyA8IHRoaXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYg
KCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19feHBvc10pKQogICAgICAg
ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rf
bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyAr
K19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwg
X19jKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46
OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5z
aXplKCk7CiAgICAgIGlmIChfX3NpemUgJiYgX19uKQogICAgICAgIHsKICAgICAgICAgIGlmICgt
LV9fc2l6ZSA+IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRv
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywg
X19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwog
ICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAg
cmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGlmICgtLV9fc2l6ZSA+
IF9fcG9zKQogICAgICAgICAgICBfX3NpemUgPSBfX3BvczsKICAgICAgICAgIGRvCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX19zaXpl
XSwgX19jKSkKICAgICAgICAgICAgICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIHdoaWxlIChfX3NpemUtLSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0
aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2lj
X3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemU9IG1pbihfX3NpemUg
LSBfX3BvcywgX19uKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3Np
emUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19w
b3MsIF9fc3RyLmRhdGEoKSwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf
X3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgY29tcGFyZShz
aXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0
ciwKICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0CiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlw
ZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MxID4gX19zaXplIHx8IF9f
cG9zMiA+IF9fb3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmlu
Zzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19w
b3MxLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fcm9zaXplID0gbWluKF9fb3NpemUgLSBfX3Bv
czIsIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19yb3NpemUp
OwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3Mx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuZGF0YSgpICsgX19w
b3MyLCBfX2xlbik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX3Jv
c2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoY29uc3QgX0NoYXJU
KiBfX3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7
CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fcywgX19z
aXplKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19zaXplIC0gdHJhaXRzX3R5cGU6
Omxlbmd0aChfX3MpOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAg
IGJhc2ljX3N0cmluZyA8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAg
ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3Mg
PiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29t
cGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f
cyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsK
ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQg
X19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4p
OwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAg
cmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJU
LF9UcmFpdHMsX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29u
c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg
KF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJp
bmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gbWluKHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6
ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9f
b3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpICsg
X19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXpl
IC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9D
aGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdm9pZAogICAgX1Nfc3RyaW5n
X2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIs
CiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVmLCB0eXBlbmFtZSBfQWxsb2M6OnNpemVf
dHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVf
dHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7
CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9fc3Ryc2l6ZSwgX19idWZzaXogLSAxKTsK
ICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIuZGF0YSgpLCBfX2J5dGVzKTsKICAgICAg
X19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0KfQojIDUxICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgNDMgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX2NjdHlwZS5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9z
dGRfY2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYgIi91c3Iv
aW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu
aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDQw
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAz
CiMgNDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIg
PSAoKDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9J
U2xvd2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgp
KSwKICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIp
KSA+PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgx
IDw8ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwg
OCkgOiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAo
NSkpIDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAo
KDEgPDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykg
PCA4ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsg
PSAoKDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9J
U2NudHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgp
KSwKICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAo
MTApKSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkg
OiAoKDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4
dGVybiBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25z
dCBfX2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpf
X2N0eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQg
aXNhbG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgp
OwpleHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3Bh
Y2UgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGlu
dCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQg
aXNhc2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9f
YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjEwICIvdXNyL2luY2x1ZGUvY3R5cGUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMSAiL3Vzci9pbmNsdWRl
L2N0eXBlLmgiIDIgMwojIDIyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBf
X2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxw
aGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lz
eGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFu
a19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9s
IChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBw
ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NiAiL3Vzci9pbmNs
dWRlL2N0eXBlLmgiIDMKfQojIDM5ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j
Y3R5cGUuaCIgMiAzCiMgNTUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlw
ZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxw
aGE7CiAgdXNpbmcgOjppc2NudHJsOwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3Jh
cGg7CiAgdXNpbmcgOjppc2xvd2VyOwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVu
Y3Q7CiAgdXNpbmcgOjppc3NwYWNlOwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRp
Z2l0OwogIHVzaW5nIDo6dG9sb3dlcjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0NCAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhy
b3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lk
KTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19i
YWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19y
dW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vy
cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19z
KTsKfQojIDQ1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewojIDU2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZWZ3ZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBj
bGFzcyB2ZWN0b3I7CiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHJpbnQoX0No
YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s
aW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZGln
aXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzeGRpZ2l0KF9DaGFy
VCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dyYXBoKF9DaGFyVCwgY29uc3Qg
bG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQK
ICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTxjaGFyPjsKCiAgdGVtcGxh
dGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog
ICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4K
ICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBt
YnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVy
blQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5bmFtZTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0
b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3RfYnluYW1lOwoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZTsKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsKCgogIGNsYXNzIHRpbWVf
YmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXQ7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxf
Q2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4K
ICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9w
dXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfcHV0
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xh
c3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBm
YWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xhc3MgbWVzc2FnZXNfYmFz
ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlczsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWU7CgoKICBjbGFz
cyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWduZWQgaW50IGNhdGVnb3J5
OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xhc3MgX0ltcGw7CgogICAg
ZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBsOwoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNldCYKICAgICAgdXNlX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAg
ZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93KCk7CgoKCiAg
ICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv
cnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG51bWVyaWMgPSAx
TCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUgPSAxTCA8PCAyOwogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAgc3RhdGljIGNvbnN0IGNh
dGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtZXNz
YWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgYWxsID0gKGNvbGxhdGUg
fCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAgICBsb2NhbGUoKSB0aHJvdygp
OwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgZXhwbGlj
aXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3N0ZF9uYW1lKTsKCiAgICBsb2NhbGUoY29uc3Qg
bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxv
Y2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkg
X19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0
IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoK
ICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRo
cm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAg
Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpOwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBj
b25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29u
c3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxl
JiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09
KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAg
ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25z
dDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0
YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwq
IF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9J
bXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdvcmll
cyA9IDY7CiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9mYWNldHMgPSAyNjsKCiAgICBl
eHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAgICBzdGF0aWMgaW5saW5lIHZv
aWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgeyBpZiAoIV9TX2NsYXNzaWMpIGNsYXNzaWMoKTsg
fQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5
KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3Qg
bG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpf
SW1wbAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8
ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0OwoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog
ICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBo
YXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBzaXplX3Qg
X01fcmVmZXJlbmNlczsKICAgIF9fdmVjX2ZhY2V0KiBfTV9mYWNldHM7CiAgICBzdHJpbmcgX01f
bmFtZXNbX1NfbnVtX2NhdGVnb3JpZXNdOwogICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZTsKICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jdHlwZVtdOwogICAgc3RhdGlj
IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNbXTsKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAgICBzdGF0aWMgY29uc3QgbG9j
YWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQq
IGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29u
c3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCog
Y29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGluZSB2b2lkCiAgICBfTV9hZGRf
cmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyArK19NX3JlZmVyZW5jZXM7IH0KCiAgICBpbmxpbmUg
dm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9N
X3JlZmVyZW5jZXMtLSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAg
ICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNpemVfdCk7CiAgICBfSW1wbChz
dHJpbmcgX19uYW1lLCBzaXplX3QpOwogICB+X0ltcGwoKSB0aHJvdygpOwoKICAgIGJvb2wKICAg
IF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVlOwogICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9TX251bV9jYXRlZ29yaWVzIC0gMTsgKytpKQogICAg
ICAgIF9fcmV0ICY9IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kgKyAxXTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9J
bXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3Qg
X0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxh
Y2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAg
X01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQo
X0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9f
ZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjps
b2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01f
aW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01f
aW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0g
MDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAgICAgIF9NX2ltcGwtPl9NX25h
bWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogICAgZnJp
ZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwoKICBwcm90
ZWN0ZWQ6CiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRocm93KCk7
CgogICAgdmlydHVhbAogICAgfmZhY2V0KCkgeyB9OwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19j
cmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MpOwoKICAg
IHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7
CgogIHByaXZhdGU6CiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsKCiAgICB2b2lkCiAgICBfTV9h
ZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNl
KCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJh
dG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2
YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9J
bXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0Zh
Y2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUm
KSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGlj
IHNpemVfdCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7
CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCgogICAgaWQoKSB7IH0KICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQo
Y29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJv
b2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpOwp9CiMgNDQgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDM4ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBlbnVtIF9J
b3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10Zmxh
Z3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpICYg
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh
dG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lv
c19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10ZmxhZ3MgX19h
LCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0
PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10
ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2Ip
CiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg
b3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0
dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y
Xj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4oX0lvc19G
bXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8aW50Pihf
X2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2VuZCA9IDFM
IDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3NfT3Blbm1v
ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRp
Y19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUg
X19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9y
XihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19P
cGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9
CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2RlJiBfX2Es
IF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxp
bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w
ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
T3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf
X2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl
CiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUo
fnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsgX01faW9z
X2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJh
dG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3Nf
SW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9
CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9fYSwgX0lv
c19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihf
X2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAg
b3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4g
X0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19i
KSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0YXRlJiBf
X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlu
bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lv
c3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19J
b3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikK
ICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9w
ZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+c3RhdGlj
X2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19zZWVrZGly
X2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6CgoKICAg
IGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6CgoKICAg
ICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJvdygpOwoK
ICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNv
bnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAg
IGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXpl
XTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19i
b29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9z
X2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10Zmxh
Z3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXgg
PSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn
cyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0
aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
b2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBz
dGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lw
d3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBm
bXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10
ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRm
bGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6
Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAg
c3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFk
Yml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxh
Z3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0
ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29k
Yml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwog
ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19h
cHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz
OjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9f
aW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1v
ZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBv
cGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0
cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lv
c19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGly
KDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRp
YyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjE2ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJh
c2VfZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoK
ICAgIHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50
KTsKCiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBp
bnQgX19pbmRleCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsK
ICAgIHN0cmVhbXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKCgoKICAgIHN0
cnVjdCBfQ2FsbGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7
CiAgICAgIGlvc19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4
OwogICAgICBpbnQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6
ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9D
YWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBf
TV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9N
X2FkZF9yZWZlcmVuY2UoKSB7ICsrX01fcmVmY291bnQ7IH0KCiAgICAgIGludAogICAgICBfTV9y
ZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX01fcmVmY291bnQtLTsgfQogICAgfTsKCiAgICAg
X0NhbGxiYWNrX2xpc3QqIF9NX2NhbGxiYWNrczsKCiAgICB2b2lkCiAgICBfTV9jYWxsX2NhbGxi
YWNrcyhldmVudCBfX2V2KSB0aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX2Rpc3Bvc2VfY2FsbGJh
Y2tzKHZvaWQpOwoKCiAgICBzdHJ1Y3QgX1dvcmRzCiAgICB7CiAgICAgIHZvaWQqIF9NX3B3b3Jk
OwogICAgICBsb25nIF9NX2l3b3JkOwogICAgfTsKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xv
Y2FsX3dvcmRzID0gODsKICAgIF9Xb3JkcyBfTV93b3JkX2FycmF5W19TX2xvY2FsX3dvcmRzXTsK
ICAgIF9Xb3JkcyBfTV9kdW1teTsKICAgIF9Xb3JkcyogX01fd29yZHM7CiAgICBpbnQgX01fd29y
ZF9saW1pdDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgog
ICAgbG9jYWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJs
aWM6CgoKCgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNl
OwogICAgcHVibGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMg
dm9pZAogICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lk
CiAgICAgIF9TX2lvc19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBf
U19pb3NfYmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsK
ICAgIH07CgoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBf
TV9mbGFnczsgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRm
bCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3Mg
PSBfX2ZtdGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdz
CiAgICBzZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0g
X01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsK
ICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10
ZmxhZ3MgX19tYXNrKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAg
ICBfTV9mbGFncyAmPSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFz
ayk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRm
KGZtdGZsYWdzIF9fbWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0
cmVhbXNpemUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoK
ICAgIGlubGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAg
ICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNp
c2lvbiA9IF9fcHJlYzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJl
YW1zaXplCiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5l
IHN0cmVhbXNpemUKICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJl
YW1zaXplIF9fb2xkID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICBy
ZXR1cm4gX19vbGQ7CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhi
b29sIF9fc3luYyA9IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYg
X19sb2MpOwoKICAgIGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9N
X2lvc19sb2NhbGU7IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAg
ICBpbmxpbmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9f
d29yZCA9IChfX2l4IDwgX01fd29yZF9saW1pdCkKICAgICAgICAgICAgICAgICAgICAgICAgPyBf
TV93b3Jkc1tfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQu
X01faXdvcmQ7CiAgICB9CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAg
ICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAg
ICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsK
ICAgICAgcmV0dXJuIF9fd29yZC5fTV9wd29yZDsKICAgIH0KCgogICAgfmlvc19iYXNlKCk7Cgog
IHByb3RlY3RlZDoKICAgIGlvc19iYXNlKCk7CgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29u
c3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFz
ZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19i
YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJu
IF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNl
JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJl
dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAg
IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19i
YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAg
ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50
KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhp
b3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICBy
ZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFz
ZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3Nf
YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9z
X2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwog
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYp
OwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFs
KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5h
bCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5s
aW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0
Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7
CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jh
c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6
YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
aGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwg
aW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i
YXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh
c2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVy
biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYg
X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFz
ZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA0NSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvb3B0L2djYy9p
bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAzCiMgNDIgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
aW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0
cmVhbWJ1Zi5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZz
KGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAg
ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2lj
X3N0cmVhbWJ1ZgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxj
aGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hh
cl90eXBlLCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFz
cyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBi
YXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mg
YmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNz
IGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu
ZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAg
ICAgZnJpZW5kIHN0cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAg
ICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIGludF90
eXBlIF9NX2J1Zl9zaXplOwoKCiAgICAgIGludF90eXBlIF9NX2J1Zl9zaXplX29wdDsKCgoKICAg
ICAgYm9vbCBfTV9idWZfdW5pZmllZDsKCgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9pbl9iZWc7
CiAgICAgIGNoYXJfdHlwZSogX01faW5fY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2VuZDsK
ICAgICAgY2hhcl90eXBlKiBfTV9vdXRfYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9jdXI7
CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2VuZDsKCgogICAgICBpb3NfYmFzZTo6b3Blbm1vZGUg
X01fbW9kZTsKCgogICAgICBsb2NhbGUgX01fYnVmX2xvY2FsZTsKCgogICAgICBib29sIF9NX2J1
Zl9sb2NhbGVfaW5pdDsKCgoKCgoKICAgICAgaW50X3R5cGUgX01fcGJhY2tfc2l6ZTsKICAgICAg
Y2hhcl90eXBlKiBfTV9wYmFjazsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19jdXJfc2F2ZTsK
ICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9vbCBfTV9wYmFja19p
bml0OwoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAg
ICAgaWYgKCFfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBpbnRfdHlwZSBf
X2Rpc3QgPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIGludF90eXBlIF9fbGVu
ID0gbWluKF9NX3BiYWNrX3NpemUsIF9fZGlzdCk7CiAgICAgICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9NX3BiYWNrLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgX01fcGJhY2tfY3Vy
X3NhdmUgPSBfTV9pbl9jdXI7CiAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlID0gX01faW5f
ZW5kOwogICAgICAgICAgICB0aGlzLT5zZXRnKF9NX3BiYWNrLCBfTV9wYmFjaywgX01fcGJhY2sg
KyBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSB0cnVlOwogICAgICAgICAgfQog
ICAgICB9CgoKCgogICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2Rlc3Ryb3koKQogICAgICB7CiAg
ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICB7CgogICAgICAgICAgICBpbnRfdHlw
ZSBfX29mZl9jdXIgPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBpbnRfdHlw
ZSBfX29mZl9lbmQgPSAwOwogICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2lu
X2VuZCAtIF9NX3BiYWNrOwogICAgICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJh
Y2tfZW5kX3NhdmUgLSBfTV9idWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2
ZV9sZW4pCiAgICAgICAgICAgICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVu
OwoKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19v
ZmZfY3VyLAogICAgICAgICAgICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZf
ZW5kKTsKICAgICAgICAgICAgX01fcGJhY2tfY3VyX3NhdmUgPSBfX251bGw7CiAgICAgICAgICAg
IF9NX3BiYWNrX2VuZF9zYXZlID0gX19udWxsOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0g
ZmFsc2U7CiAgICAgICAgICB9CiAgICAgIH0KCgoKICAgICAgdm9pZAogICAgICBfTV9pbl9jdXJf
bW92ZShvZmZfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX291
dF9jdXI7CiAgICAgICAgX01faW5fY3VyICs9IF9fbjsKICAgICAgICBpZiAoX190ZXN0b3V0ICYm
IF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgIH0KIyAx
OTMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICAg
IHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAg
IGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19uOwog
ICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2luX2N1
ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAgICAg
ewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlmIChf
X3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQogICAg
ICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7CiAg
ICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAgICAg
ICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAgICAg
IF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOwog
ICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDIzNiAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDMKICAgICAgdm9pZAogICAgICBf
TV9zZXRfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAgaWYgKF9NX21vZGUgJiBp
b3NfYmFzZTo6aW4pCiAgICAgICAgICB0aGlzLT5zZXRnKF9NX2J1ZiwgX01fYnVmLCBfTV9idWYp
OwogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHRoaXMtPnNl
dHAoX01fYnVmLCBfTV9idWYpOwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3NldF9kZXRl
cm1pbmF0ZShvZmZfdHlwZSBfX29mZikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBf
TV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAm
IGlvc19iYXNlOjpvdXQ7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgdGhpcy0+c2V0
ZyhfTV9idWYsIF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICAgIGlmIChfX3Rlc3RvdXQp
CiAgICAgICAgICB0aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmICsgX19vZmYpOwogICAgICB9Cgog
ICAgICBib29sCiAgICAgIF9NX2lzX2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAg
IGJvb2wgX19yZXQgPSBmYWxzZTsKCiAgICAgICAgaWYgKF9NX2J1ZikKICAgICAgICAgIHsKICAg
ICAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pCiAgICAgICAgICAgICAgX19yZXQg
PSBfTV9pbl9iZWcgPT0gX01faW5fY3VyICYmIF9NX2luX2N1ciA9PSBfTV9pbl9lbmQ7CiAgICAg
ICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICBfX3JldCA9
IF9NX291dF9iZWcgPT0gX01fb3V0X2N1ciAmJiBfTV9vdXRfY3VyID09IF9NX291dF9lbmQ7CiAg
ICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91
bmlmaWVkID0gZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9z
aXplX29wdCA9IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAg
ICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQog
ICAgICBwdWJpbWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxl
IF9fdG1wKHRoaXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAg
ICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29u
c3QKICAgICAgewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1
cm4gX01fYnVmX2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7
CiAgICAgIH0KCgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90
eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19z
LCBfX24pOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2Zm
LCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Bl
bm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1
cm4gdGhpcy0+c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBl
CiAgICAgIHB1YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFz
ZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAg
eyByZXR1cm4gdGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAg
cHVic3luYygpIHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAg
ICAgIGluX2F2YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAg
aWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
IGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX3BiYWNrX2N1cl9z
YXZlOwogICAgICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4gPSBfTV9pbl9jdXIgLSBf
TV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZlX2xlbiAtIF9fcGJhY2tfbGVu
OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIF9fcmV0ID0g
dGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAgIH0KICAgICAgICBlbHNlCiAg
ICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAgICAgIHJldHVybiBfX3JldDsK
ICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkKICAgICAgewogICAgICAgIGlu
dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIHJldHVybiAodGhpcy0+
c2J1bXBjKCkgPT0gX19lb2YgPyBfX2VvZiA6IHRoaXMtPnNnZXRjKCkpOwogICAgICB9CgogICAg
ICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAgICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkK
ICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYg
X01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9f
aW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9
IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAg
c3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3MsIF9fbik7IH0KCgogICAgICBpbnRfdHlwZQog
ICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7CgogICAgICBpbnRfdHlwZQogICAgICBzdW5n
ZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAgc3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAg
ICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNwdXRuKF9fcywgX19uKTsgfQoKICAgIHByb3Rl
Y3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkKICAgICAgOiBfTV9idWYoX19udWxsKSwgX01f
YnVmX3NpemUoMCksCiAgICAgIF9NX2J1Zl9zaXplX29wdChzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
ODE5MikpLCBfTV9idWZfdW5pZmllZChmYWxzZSksCiAgICAgIF9NX2luX2JlZygwKSwgX01faW5f
Y3VyKDApLCBfTV9pbl9lbmQoMCksIF9NX291dF9iZWcoMCksIF9NX291dF9jdXIoMCksCiAgICAg
IF9NX291dF9lbmQoMCksIF9NX21vZGUoaW9zX2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xv
Y2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNr
X3NpemUoMSksIF9NX3BiYWNrKF9fbnVsbCksCiAgICAgIF9NX3BiYWNrX2N1cl9zYXZlKF9fbnVs
bCksIF9NX3BiYWNrX2VuZF9zYXZlKF9fbnVsbCksIF9NX3BiYWNrX2luaXQoZmFsc2UpCiAgICAg
IHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25zdCB7IHJldHVybiBfTV9p
bl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNvbnN0IHsgcmV0dXJuIF9N
X2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigpIGNvbnN0IHsgcmV0dXJu
IF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQgX19uKSB7IF9NX2luX2N1
ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5cGUqIF9fZ2JlZywgY2hh
cl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAgewogICAgICAgIF9NX2lu
X2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0OwogICAgICAgIF9NX2lu
X2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6OmluKSAmJiBf
X2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8
IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcGJhc2UoKSBj
b25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBwdHIo
KSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVw
cHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAgdm9pZAogICAgICBwYnVt
cChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldHAo
Y2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAgICB7CiAgICAgICAgX01f
b3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01fb3V0X2VuZCA9IF9fcGVu
ZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkgJiYgX19wYmVnICYmIF9f
cGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6Om91dDsKICAgICAg
fQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7CiAgICAgICAgaWYgKF9N
X2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9jYWxlID0gX19sb2M7CiAg
ICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsX1RyYWl0cz4q
CiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAgICB7IHJldHVybiB0aGlz
OyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUsIGlvc19i
YXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNl
OjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0x
KSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSwKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6
b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOyB9CgogICAgICB2aXJ0
dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFt
c2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAgICB2aXJ0dWFsIHN0cmVh
bXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAg
ICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAgIHsgcmV0dXJuIHRyYWl0
c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1ZmxvdygpCiAg
ICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
ICBib29sIF9fdGVzdGVvZiA9IHRoaXMtPnVuZGVyZmxvdygpID09IF9fcmV0OwogICAgICAgIGJv
b2wgX190ZXN0cGVuZGluZyA9IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAg
ICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAg
ICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAg
ICAgICAgICsrX01faW5fY3VyOwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01f
bW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAg
ICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5
cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7
IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUK
ICAgICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAg
ICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6
OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA1MTYgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAgICBwcml2YXRlOgog
ICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpOwoKICAgICAgX19z
dHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsK
CiAgICB9OwoKfQoKCgoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1
Zi50Y2MiIDEgMwojIDM3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50
Y2MiIDMKbmFtZXNwYWNlIHN0ZCB7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1
bXBjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYg
X01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2Mg
PSAqZ3B0cigpOwogICAgICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIF9fcmV0ID0gdGhpcy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi
YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAg
ewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIg
JiYgX01faW5fYmVnIDwgX01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01faW5fY3Vy
ICYmICF0cmFpdHNfdHlwZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYgKCFf
X3Rlc3Rwb3MgfHwgX190ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01f
aW5fY3VyX21vdmUoLTEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5
cGUoKnRoaXMtPmdwdHIoKSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1l
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGludF90
eXBlIF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cikK
ICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9
IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAgIGVs
c2UKICAgICAgICBfX3JldCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5
cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZf
c2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAg
X01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoX19jKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92
ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBzdHJlYW1zaXplCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4
c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1z
aXplIF9fcmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAg
ICAgIHNpemVfdCBfX2J1Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBp
ZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3Jl
bWFpbmluZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihf
X2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShf
X3MsIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAg
ICAgICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xl
bik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAg
ICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJh
c2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAw
OwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUg
X19idWZfbGVuID0gX01fb3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19u
IC0gX19yZXQ7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBf
X3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwg
X19zLCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAg
X19zICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7CiAgICAg
ICAgICAgIH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBpbnRfdHlwZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoKl9fcykpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAg
ICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
cmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0
cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQg
PSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAg
ICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9N
X21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkgewogICAgICAgIHdoaWxlIChfX3Rlc3Rw
dXQgJiYgX19idWZzaXplICE9IC0xKQogICAgICAgICAgewogICAgICAgICAgICBfX3h0cmN0ID0g
X19zYm91dC0+c3B1dG4oX19zYmluLT5ncHRyKCksIF9fYnVmc2l6ZSk7CiAgICAgICAgICAgIF9f
cmV0ICs9IF9feHRyY3Q7CiAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194dHJj
dCk7CiAgICAgICAgICAgIGlmIChfX3h0cmN0ID09IF9fYnVmc2l6ZSkKICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiaW4tPnNnZXRjKCk7CiAgICAgICAg
ICAgICAgICBpZiAoX19jID09IF9UcmFpdHM6OmVvZigpKQogICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
IF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgfQogICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkgewogICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICB0aHJvdzsKICAgICAgfQogICAg
ICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA1MzAgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyA0NiAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfaW9zLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf
aW9zLmgiIDEgMwojIDM0ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5o
IiAzCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwoj
IDM2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5oIiAzCgpuYW1lc3Bh
Y2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRf
aXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01f
c2J1ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAg
ICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAg
OiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9z
dHJlYW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBf
TV9zYnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9
CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3co
KQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAg
ICAgb3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJv
b2wKICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7
IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQog
ICAgewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5
cGUoX01fc2J1Zi0+c3B1dGMoX19jKSxfVHJhaXRzOjplb2YoKSkpCiAgICAgIF9NX2ZhaWxlZCA9
IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAg
ICA6IHB1YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQm
PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Ry
YWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1
Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zml0ZXJfdHlwZTsKCiAgICBw
cml2YXRlOgoKCgoKCgoKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGludF90
eXBlIF9NX2M7CgogICAgcHVibGljOgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3co
KQogICAgICA6IF9NX3NidWYoX19udWxsKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVm
X2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3Mu
cmRidWYoKSksIF9NX2MoLTIpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1i
dWZfdHlwZSogX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0K
CgoKCiAgICAgIGNoYXJfdHlwZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CgogICAg
ICAgIGNoYXJfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0YXRp
Y19jYXN0PGludF90eXBlPigtMikpCiAgICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAgZWxz
ZSBpZiAoX01fc2J1ZikKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfTV9zYnVmLT5zZ2V0YygpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHN0YXRp
Y19jYXN0PGNoYXJfdHlwZT4odHJhaXRzX3R5cGU6OmVvZigpKTsKICAgICAgICByZXR1cm4gX19y
ZXQ7CiAgICAgIH0KCiAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSYKICAgICAgb3BlcmF0b3Ir
KygpCiAgICAgIHsKICAgICAgICBpZiAoX01fc2J1ZikKICAgICAgICAgIF9NX3NidWYtPnNidW1w
YygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAg
ICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZQogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewog
ICAgICAgIF9faXN0cmVhbWJ1Zml0ZXJfdHlwZSBfX29sZCA9ICp0aGlzOwogICAgICAgIGlmIChf
TV9zYnVmKQogICAgICAgICAgX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygpOwogICAgICAg
IF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCiAgICAgIGJvb2wKICAg
ICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBfX2IpCiAgICAgIHsKICAgICAg
ICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29sIF9fdGhp
c2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgYm9v
bCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAgICAgICAgICAgICAgIHx8IF9fYi5fTV9z
YnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv
ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAg
ICAgZXF1YWwoY29uc3QgX19pc3RyZWFtYnVmaXRlcl90eXBlJiBfX2IpIGNvbnN0CiAgICAgIHsK
ICAgICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICBib29s
IF9fdGhpc2VvZiA9ICFfTV9zYnVmIHx8IF9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAg
ICAgYm9vbCBfX2Jlb2YgPSAhX19iLl9NX3NidWYKICAgICAgICAgICAgICAgICAgICAgIHx8IF9f
Yi5fTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYm
IF9fYmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9f
YSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KfQojIDM2ICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDAgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N0aW1lLmgiIDEgMwojIDQyICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfaW9zLmgiIDEgMwojIDQzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAxIDMKIyAy
NCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMu
aCIgMSAzCiMgMjIgIi91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl
L2ZlYXR1cmVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMiAzCiMgMzEg
Ii91c3IvaW5jbHVkZS9ubF90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAq
bmxfY2F0ZDsKCgp0eXBlZGVmIGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNhdG9wZW4g
KF9fY29uc3QgY2hhciAqX19jYXRfbmFtZSwgaW50IF9fZmxhZykgdGhyb3cgKCk7CgoKCmV4dGVy
biBjaGFyICpjYXRnZXRzIChubF9jYXRkIF9fY2F0YWxvZywgaW50IF9fc2V0LCBpbnQgX19udW1i
ZXIsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IGNhdGNsb3NlIChubF9jYXRkIF9fY2F0YWxvZykgdGhyb3cgKCk7Cgp9
CiMgMjUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvbG9jYWxlLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMwplbnVt
CnsKICBfX0xDX0NUWVBFID0gMCwKICBfX0xDX05VTUVSSUMgPSAxLAogIF9fTENfVElNRSA9IDIs
CiAgX19MQ19DT0xMQVRFID0gMywKICBfX0xDX01PTkVUQVJZID0gNCwKICBfX0xDX01FU1NBR0VT
ID0gNSwKICBfX0xDX0FMTCA9IDYsCiAgX19MQ19QQVBFUiA9IDcsCiAgX19MQ19OQU1FID0gOCwK
ICBfX0xDX0FERFJFU1MgPSA5LAogIF9fTENfVEVMRVBIT05FID0gMTAsCiAgX19MQ19NRUFTVVJF
TUVOVCA9IDExLAogIF9fTENfSURFTlRJRklDQVRJT04gPSAxMgp9OwojIDI3ICIvdXNyL2luY2x1
ZGUvbGFuZ2luZm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMgNDMgIi91c3IvaW5jbHVkZS9sYW5n
aW5mby5oIiAzCmVudW0KewoKCgogIEFCREFZXzEgPSAoKChfX0xDX1RJTUUpIDw8IDE2KSB8ICgw
KSksCgogIEFCREFZXzIsCgogIEFCREFZXzMsCgogIEFCREFZXzQsCgogIEFCREFZXzUsCgogIEFC
REFZXzYsCgogIEFCREFZXzcsCgoKCiAgREFZXzEsCgogIERBWV8yLAoKICBEQVlfMywKCiAgREFZ
XzQsCgogIERBWV81LAoKICBEQVlfNiwKCiAgREFZXzcsCgoKCiAgQUJNT05fMSwKCiAgQUJNT05f
MiwKCiAgQUJNT05fMywKCiAgQUJNT05fNCwKCiAgQUJNT05fNSwKCiAgQUJNT05fNiwKCiAgQUJN
T05fNywKCiAgQUJNT05fOCwKCiAgQUJNT05fOSwKCiAgQUJNT05fMTAsCgogIEFCTU9OXzExLAoK
ICBBQk1PTl8xMiwKCgoKICBNT05fMSwKCiAgTU9OXzIsCgogIE1PTl8zLAoKICBNT05fNCwKCiAg
TU9OXzUsCgogIE1PTl82LAoKICBNT05fNywKCiAgTU9OXzgsCgogIE1PTl85LAoKICBNT05fMTAs
CgogIE1PTl8xMSwKCiAgTU9OXzEyLAoKCiAgQU1fU1RSLAoKICBQTV9TVFIsCgoKICBEX1RfRk1U
LAoKICBEX0ZNVCwKCiAgVF9GTVQsCgogIFRfRk1UX0FNUE0sCgoKICBFUkEsCgogIF9fRVJBX1lF
QVIsCgoKCiAgRVJBX0RfRk1ULAoKICBBTFRfRElHSVRTLAoKICBFUkFfRF9UX0ZNVCwKCiAgRVJB
X1RfRk1ULAoKCiAgX05MX1RJTUVfRVJBX05VTV9FTlRSSUVTLAogIF9OTF9USU1FX0VSQV9FTlRS
SUVTLAoKICBfTkxfV0FCREFZXzEsCiAgX05MX1dBQkRBWV8yLAogIF9OTF9XQUJEQVlfMywKICBf
TkxfV0FCREFZXzQsCiAgX05MX1dBQkRBWV81LAogIF9OTF9XQUJEQVlfNiwKICBfTkxfV0FCREFZ
XzcsCgoKICBfTkxfV0RBWV8xLAogIF9OTF9XREFZXzIsCiAgX05MX1dEQVlfMywKICBfTkxfV0RB
WV80LAogIF9OTF9XREFZXzUsCiAgX05MX1dEQVlfNiwKICBfTkxfV0RBWV83LAoKCiAgX05MX1dB
Qk1PTl8xLAogIF9OTF9XQUJNT05fMiwKICBfTkxfV0FCTU9OXzMsCiAgX05MX1dBQk1PTl80LAog
IF9OTF9XQUJNT05fNSwKICBfTkxfV0FCTU9OXzYsCiAgX05MX1dBQk1PTl83LAogIF9OTF9XQUJN
T05fOCwKICBfTkxfV0FCTU9OXzksCiAgX05MX1dBQk1PTl8xMCwKICBfTkxfV0FCTU9OXzExLAog
IF9OTF9XQUJNT05fMTIsCgoKICBfTkxfV01PTl8xLAogIF9OTF9XTU9OXzIsCiAgX05MX1dNT05f
MywKICBfTkxfV01PTl80LAogIF9OTF9XTU9OXzUsCiAgX05MX1dNT05fNiwKICBfTkxfV01PTl83
LAogIF9OTF9XTU9OXzgsCiAgX05MX1dNT05fOSwKICBfTkxfV01PTl8xMCwKICBfTkxfV01PTl8x
MSwKICBfTkxfV01PTl8xMiwKCiAgX05MX1dBTV9TVFIsCiAgX05MX1dQTV9TVFIsCgogIF9OTF9X
RF9UX0ZNVCwKICBfTkxfV0RfRk1ULAogIF9OTF9XVF9GTVQsCiAgX05MX1dUX0ZNVF9BTVBNLAoK
ICBfTkxfV0VSQV9ZRUFSLAogIF9OTF9XRVJBX0RfRk1ULAogIF9OTF9XQUxUX0RJR0lUUywKICBf
TkxfV0VSQV9EX1RfRk1ULAogIF9OTF9XRVJBX1RfRk1ULAoKICBfTkxfVElNRV9XRUVLX05EQVlT
LAogIF9OTF9USU1FX1dFRUtfMVNUREFZLAogIF9OTF9USU1FX1dFRUtfMVNUV0VFSywKICBfTkxf
VElNRV9GSVJTVF9XRUVLREFZLAogIF9OTF9USU1FX0ZJUlNUX1dPUktEQVksCiAgX05MX1RJTUVf
Q0FMX0RJUkVDVElPTiwKICBfTkxfVElNRV9USU1FWk9ORSwKCiAgX0RBVEVfRk1ULAoKICBfTkxf
V19EQVRFX0ZNVCwKCiAgX05MX1RJTUVfQ09ERVNFVCwKCiAgX05MX05VTV9MQ19USU1FLAoKCgoK
ICBfTkxfQ09MTEFURV9OUlVMRVMgPSAoKChfX0xDX0NPTExBVEUpIDw8IDE2KSB8ICgwKSksCiAg
X05MX0NPTExBVEVfUlVMRVNFVFMsCiAgX05MX0NPTExBVEVfVEFCTEVNQiwKICBfTkxfQ09MTEFU
RV9XRUlHSFRNQiwKICBfTkxfQ09MTEFURV9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0lORElSRUNU
TUIsCiAgX05MX0NPTExBVEVfR0FQMSwKICBfTkxfQ09MTEFURV9HQVAyLAogIF9OTF9DT0xMQVRF
X0dBUDMsCiAgX05MX0NPTExBVEVfVEFCTEVXQywKICBfTkxfQ09MTEFURV9XRUlHSFRXQywKICBf
TkxfQ09MTEFURV9FWFRSQVdDLAogIF9OTF9DT0xMQVRFX0lORElSRUNUV0MsCiAgX05MX0NPTExB
VEVfU1lNQl9IQVNIX1NJWkVNQiwKICBfTkxfQ09MTEFURV9TWU1CX1RBQkxFTUIsCiAgX05MX0NP
TExBVEVfU1lNQl9FWFRSQU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFNQiwKICBfTkxfQ09MTEFU
RV9DT0xMU0VRV0MsCiAgX05MX0NPTExBVEVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0NPTExBVEUs
CgoKCgogIF9OTF9DVFlQRV9DTEFTUyA9ICgoKF9fTENfQ1RZUEUpIDw8IDE2KSB8ICgwKSksCiAg
X05MX0NUWVBFX1RPVVBQRVIsCiAgX05MX0NUWVBFX0dBUDEsCiAgX05MX0NUWVBFX1RPTE9XRVIs
CiAgX05MX0NUWVBFX0dBUDIsCiAgX05MX0NUWVBFX0NMQVNTMzIsCiAgX05MX0NUWVBFX0dBUDMs
CiAgX05MX0NUWVBFX0dBUDQsCiAgX05MX0NUWVBFX0dBUDUsCiAgX05MX0NUWVBFX0dBUDYsCiAg
X05MX0NUWVBFX0NMQVNTX05BTUVTLAogIF9OTF9DVFlQRV9NQVBfTkFNRVMsCiAgX05MX0NUWVBF
X1dJRFRILAogIF9OTF9DVFlQRV9NQl9DVVJfTUFYLAogIF9OTF9DVFlQRV9DT0RFU0VUX05BTUUs
CiAgQ09ERVNFVCA9IF9OTF9DVFlQRV9DT0RFU0VUX05BTUUsCgogIF9OTF9DVFlQRV9UT1VQUEVS
MzIsCiAgX05MX0NUWVBFX1RPTE9XRVIzMiwKICBfTkxfQ1RZUEVfQ0xBU1NfT0ZGU0VULAogIF9O
TF9DVFlQRV9NQVBfT0ZGU0VULAogIF9OTF9DVFlQRV9JTkRJR0lUU19NQl9MRU4sCiAgX05MX0NU
WVBFX0lORElHSVRTMF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX01CLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzJfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTM19NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM0X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNl9N
QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfTUIsCiAg
X05MX0NUWVBFX0lORElHSVRTOV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFNfV0NfTEVOLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzBfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMV9XQywKICBfTkxfQ1RZ
UEVfSU5ESUdJVFMyX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzNfV0MsCiAgX05MX0NUWVBFX0lO
RElHSVRTNF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzZfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTN19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X1dD
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMF9NQiwKICBf
TkxfQ1RZUEVfT1VURElHSVQxX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfTUIsCiAgX05MX0NU
WVBFX09VVERJR0lUM19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ0X01CLAogIF9OTF9DVFlQRV9P
VVRESUdJVDVfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNl9NQiwKICBfTkxfQ1RZUEVfT1VURElH
SVQ3X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOV9N
QiwKICBfTkxfQ1RZUEVfT1VURElHSVQwX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDFfV0MsCiAg
X05MX0NUWVBFX09VVERJR0lUMl9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQzX1dDLAogIF9OTF9D
VFlQRV9PVVRESUdJVDRfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNV9XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQ2X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfV0MsCiAgX05MX0NUWVBFX09VVERJ
R0lUOF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ5X1dDLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9U
QUJfU0laRSwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9JRFgsCiAgX05MX0NUWVBFX1RSQU5T
TElUX0ZST01fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19JRFgsCiAgX05MX0NUWVBFX1RS
QU5TTElUX1RPX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HX0xFTiwK
ICBfTkxfQ1RZUEVfVFJBTlNMSVRfREVGQVVMVF9NSVNTSU5HLAogIF9OTF9DVFlQRV9UUkFOU0xJ
VF9JR05PUkVfTEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9JR05PUkUsCiAgX05MX0NUWVBFX0VY
VFJBX01BUF8xLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF80LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNSwKICBf
TkxfQ1RZUEVfRVhUUkFfTUFQXzYsCiAgX05MX0NUWVBFX0VYVFJBX01BUF83LAogIF9OTF9DVFlQ
RV9FWFRSQV9NQVBfOCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzksCiAgX05MX0NUWVBFX0VYVFJB
X01BUF8xMCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzExLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf
MTIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzE0LAog
IF9OTF9OVU1fTENfQ1RZUEUsCgoKCgogIF9fSU5UX0NVUlJfU1lNQk9MID0gKCgoX19MQ19NT05F
VEFSWSkgPDwgMTYpIHwgKDApKSwKCgoKICBfX0NVUlJFTkNZX1NZTUJPTCwKCgoKICBfX01PTl9E
RUNJTUFMX1BPSU5ULAoKCgogIF9fTU9OX1RIT1VTQU5EU19TRVAsCgoKCiAgX19NT05fR1JPVVBJ
TkcsCgoKCiAgX19QT1NJVElWRV9TSUdOLAoKCgogIF9fTkVHQVRJVkVfU0lHTiwKCgoKICBfX0lO
VF9GUkFDX0RJR0lUUywKCgoKICBfX0ZSQUNfRElHSVRTLAoKCgogIF9fUF9DU19QUkVDRURFUywK
CgoKICBfX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fTl9DU19QUkVDRURFUywKCgoKICBfX05fU0VQ
X0JZX1NQQUNFLAoKCgogIF9fUF9TSUdOX1BPU04sCgoKCiAgX19OX1NJR05fUE9TTiwKCgoKICBf
TkxfTU9ORVRBUllfQ1JOQ1lTVFIsCgogIF9fSU5UX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRf
UF9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfTl9DU19QUkVDRURFUywKCgoKICBfX0lOVF9OX1NF
UF9CWV9TUEFDRSwKCgoKICBfX0lOVF9QX1NJR05fUE9TTiwKCgoKICBfX0lOVF9OX1NJR05fUE9T
TiwKCgoKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9DVVJSX1NZTUJPTCwKICBfTkxfTU9ORVRBUllf
RFVPX0NVUlJFTkNZX1NZTUJPTCwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9GUkFDX0RJR0lUUywK
ICBfTkxfTU9ORVRBUllfRFVPX0ZSQUNfRElHSVRTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9DU19Q
UkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFS
WV9EVU9fTl9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX05fU0VQX0JZX1NQQUNFLAog
IF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19J
TlRfUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9DU19QUkVDRURFUywK
ICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVP
X1BfU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TSUdOX1BPU04sCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TSUdOX1BP
U04sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9VTk9fVkFM
SURfVE8sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9GUk9NLAogIF9OTF9NT05FVEFSWV9EVU9f
VkFMSURfVE8sCiAgX05MX01PTkVUQVJZX0NPTlZFUlNJT05fUkFURSwKICBfTkxfTU9ORVRBUllf
REVDSU1BTF9QT0lOVF9XQywKICBfTkxfTU9ORVRBUllfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxf
TU9ORVRBUllfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01PTkVUQVJZLAoKCgogIF9fREVDSU1BTF9Q
T0lOVCA9ICgoKF9fTENfTlVNRVJJQykgPDwgMTYpIHwgKDApKSwKCgoKICBSQURJWENIQVIgPSBf
X0RFQ0lNQUxfUE9JTlQsCgogIF9fVEhPVVNBTkRTX1NFUCwKCgoKICBUSE9VU0VQID0gX19USE9V
U0FORFNfU0VQLAoKICBfX0dST1VQSU5HLAoKCgogIF9OTF9OVU1FUklDX0RFQ0lNQUxfUE9JTlRf
V0MsCiAgX05MX05VTUVSSUNfVEhPVVNBTkRTX1NFUF9XQywKICBfTkxfTlVNRVJJQ19DT0RFU0VU
LAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0gKCgoX19MQ19NRVNTQUdFUykg
PDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RSLAoKCgogIF9fTk9TVFIsCgoK
CiAgX05MX01FU1NBR0VTX0NPREVTRVQsCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BB
UEVSX0hFSUdIVCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJ
RFRILAogIF9OTF9QQVBFUl9DT0RFU0VULAogIF9OTF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1F
X05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9OQU1FX05BTUVf
R0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05MX05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVf
TkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMsCiAgX05MX05BTUVfQ09ERVNFVCwKICBfTkxf
TlVNX0xDX05BTUUsCgogIF9OTF9BRERSRVNTX1BPU1RBTF9GTVQgPSAoKChfX0xDX0FERFJFU1Mp
IDw8IDE2KSB8ICgwKSksCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OQU1FLAogIF9OTF9BRERSRVNT
X0NPVU5UUllfUE9TVCwKICBfTkxfQUREUkVTU19DT1VOVFJZX0FCMiwKICBfTkxfQUREUkVTU19D
T1VOVFJZX0FCMywKICBfTkxfQUREUkVTU19DT1VOVFJZX0NBUiwKICBfTkxfQUREUkVTU19DT1VO
VFJZX05VTSwKICBfTkxfQUREUkVTU19DT1VOVFJZX0lTQk4sCiAgX05MX0FERFJFU1NfTEFOR19O
QU1FLAogIF9OTF9BRERSRVNTX0xBTkdfQUIsCiAgX05MX0FERFJFU1NfTEFOR19URVJNLAogIF9O
TF9BRERSRVNTX0xBTkdfTElCLAogIF9OTF9BRERSRVNTX0NPREVTRVQsCiAgX05MX05VTV9MQ19B
RERSRVNTLAoKICBfTkxfVEVMRVBIT05FX1RFTF9JTlRfRk1UID0gKCgoX19MQ19URUxFUEhPTkUp
IDw8IDE2KSB8ICgwKSksCiAgX05MX1RFTEVQSE9ORV9URUxfRE9NX0ZNVCwKICBfTkxfVEVMRVBI
T05FX0lOVF9TRUxFQ1QsCiAgX05MX1RFTEVQSE9ORV9JTlRfUFJFRklYLAogIF9OTF9URUxFUEhP
TkVfQ09ERVNFVCwKICBfTkxfTlVNX0xDX1RFTEVQSE9ORSwKCiAgX05MX01FQVNVUkVNRU5UX01F
QVNVUkVNRU5UID0gKCgoX19MQ19NRUFTVVJFTUVOVCkgPDwgMTYpIHwgKDApKSwKICBfTkxfTUVB
U1VSRU1FTlRfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FQVNVUkVNRU5ULAoKICBfTkxfSURFTlRJ
RklDQVRJT05fVElUTEUgPSAoKChfX0xDX0lERU5USUZJQ0FUSU9OKSA8PCAxNikgfCAoMCkpLAog
IF9OTF9JREVOVElGSUNBVElPTl9TT1VSQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FERFJFU1Ms
CiAgX05MX0lERU5USUZJQ0FUSU9OX0NPTlRBQ1QsCiAgX05MX0lERU5USUZJQ0FUSU9OX0VNQUlM
LAogIF9OTF9JREVOVElGSUNBVElPTl9URUwsCiAgX05MX0lERU5USUZJQ0FUSU9OX0ZBWCwKICBf
TkxfSURFTlRJRklDQVRJT05fTEFOR1VBR0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX1RFUlJJVE9S
WSwKICBfTkxfSURFTlRJRklDQVRJT05fQVVESUVOQ0UsCiAgX05MX0lERU5USUZJQ0FUSU9OX0FQ
UExJQ0FUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9BQkJSRVZJQVRJT04sCiAgX05MX0lERU5U
SUZJQ0FUSU9OX1JFVklTSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9EQVRFLAogIF9OTF9JREVO
VElGSUNBVElPTl9DQVRFR09SWSwKICBfTkxfSURFTlRJRklDQVRJT05fQ09ERVNFVCwKICBfTkxf
TlVNX0xDX0lERU5USUZJQ0FUSU9OLAoKCiAgX05MX05VTQp9OwojIDU3NSAiL3Vzci9pbmNsdWRl
L2xhbmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkg
dGhyb3cgKCk7CgoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDU4NCAi
L3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZv
X2wgKG5sX2l0ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyA0NSAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMSAzCiMgMzggIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MSAzCiMgMjYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0
dXJlcy5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMK
CgoKCgoKCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv
aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMg
NjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdj
dHlwZV90OwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjkgIi91c3Iv
aW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVt
CnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwK
ICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAg
X19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19J
U3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lT
d3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
IDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy
KSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
IDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy
KSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl
cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lT
d2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
IDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh
KSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo
YSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lT
d2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
IDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0
KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp
dCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lT
d3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp
dCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4
ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkp
KSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkp
KSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkp
KSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkp
KSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkp
KSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkp
KSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkp
KSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f
SVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf
X0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkp
KQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBf
X3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
aXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXIg
KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50
IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3Ymxh
bmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNzggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj
KSB0aHJvdyAoKTsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29u
c3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0
aHJvdyAoKTsKIyAyNzUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2lu
Y2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFu
cyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRv
d2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgojIDEg
Ii91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDMwMCAiL3Vzci9pbmNsdWRlL3djdHlwZS5o
IiAyIDMKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90
IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9faXN3YWxwaGFfbCAod2ludF90
IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19pc3dj
bnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2Nh
bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3bG93ZXJfbCAod2lu
dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19p
c3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d1cHBlcl9s
ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
aW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50X3QgX193YywgX19sb2NhbGVf
dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCBfX3djdHlwZV9sIChfX2Nv
bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj
LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRf
dCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg
X19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190IF9fd2N0cmFuc19sIChfX2Nv
bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7
CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3QgX193Yywgd2N0cmFuc190IF9f
ZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKfQojIDM5ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0
eXBlLmgiIDIgMwojIDYxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBl
LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjp3aW50X3Q7CgogIHVzaW5nIDo6d2N0eXBl
X3Q7CiAgdXNpbmcgOjp3Y3RyYW5zX3Q7CgogIHVzaW5nIDo6aXN3YWxudW07CiAgdXNpbmcgOjpp
c3dhbHBoYTsKICB1c2luZyA6Omlzd2JsYW5rOwogIHVzaW5nIDo6aXN3Y250cmw7CiAgdXNpbmcg
Ojppc3dkaWdpdDsKICB1c2luZyA6Omlzd2dyYXBoOwogIHVzaW5nIDo6aXN3bG93ZXI7CiAgdXNp
bmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3cHVuY3Q7CiAg
dXNpbmcgOjppc3dzcGFjZTsKICB1c2luZyA6Omlzd3VwcGVyOwogIHVzaW5nIDo6aXN3eGRpZ2l0
OwogIHVzaW5nIDo6aXN3Y3R5cGU7CiAgdXNpbmcgOjp0b3dsb3dlcjsKICB1c2luZyA6OnRvd3Vw
cGVyOwogIHVzaW5nIDo6dG93Y3RyYW5zOwogIHVzaW5nIDo6d2N0cmFuczsKICB1c2luZyA6Ondj
dHlwZTsKfQojIDQ2ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUv
aWNvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9p
bmNsdWRlL2ljb252LmgiIDIgMwoKIyAxICIvb3B0L2djYy9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2lj
b252LmgiIDIgMwoKCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4
dGVybiBpY29udl90IGljb252X29wZW4gKF9fY29uc3QgY2hhciAqX190b2NvZGUsIF9fY29uc3Qg
Y2hhciAqX19mcm9tY29kZSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBzaXplX3QgaWNvbnYg
KGljb252X3QgX19jZCwgY2hhciAqKl9fcmVzdHJpY3QgX19pbmJ1ZiwKICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9faW5ieXRlc2xlZnQsCiAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgKl9fcmVzdHJpY3QgX19vdXRieXRlc2xlZnQpOwoKCmV4dGVybiBpbnQgaWNvbnZfY2xvc2Ug
KGljb252X3QgX19jZCkgdGhyb3cgKCk7Cgp9CiMgNDcgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAx
IDMKIyA1MCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
dHlwZV9iYXNlLmgiIDMKICBzdHJ1Y3QgY3R5cGVfYmFzZQogIHsKCiAgICB0eXBlZGVmIGNvbnN0
IGludCogX190b190eXBlOwoKCgogICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtYXNrOwogICAg
c3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSBfSVN1cHBlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNr
IGxvd2VyID0gX0lTbG93ZXI7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbHBoYSA9IF9JU2FscGhh
OwogICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSBfSVNkaWdpdDsKICAgIHN0YXRpYyBjb25z
dCBtYXNrIHhkaWdpdCA9IF9JU3hkaWdpdDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHNwYWNlID0g
X0lTc3BhY2U7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwcmludCA9IF9JU3ByaW50OwogICAgc3Rh
dGljIGNvbnN0IG1hc2sgZ3JhcGggPSBfSVNncmFwaDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGNu
dHJsID0gX0lTY250cmw7CiAgICBzdGF0aWMgY29uc3QgbWFzayBwdW5jdCA9IF9JU3B1bmN0Owog
ICAgc3RhdGljIGNvbnN0IG1hc2sgYWxudW0gPSBfSVNhbG51bTsKICB9OwojIDU0ICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMg
bG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg
IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGJvb2wKICAgICAgaXMobWFzayBfX20s
IGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19j
KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9f
bG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFzayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9fdmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90
eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhf
X20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90
KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsg
fQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog
ICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBj
aGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNo
YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX190bykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywgX19oaSwgX190byk7IH0KCiAgICAgIGNoYXIK
ICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9fZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hh
cl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5
cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciAqX190bykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3Rv
KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFj
dF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAg
ICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0
dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgbWFzayogX192ZWMp
IGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu
X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAw
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90
eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1
YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFy
X3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hp
LAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmly
dHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0
ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29u
c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg
ICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9h
YnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0No
YXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoK
ICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoc2l6ZV90IF9fcmVmcyA9IDApIDogX19jdHlwZV9h
YnN0cmFjdF9iYXNlPF9DaGFyVD4oX19yZWZzKSB7IH0KCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpIHsgfQoKICAg
ICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25z
dAogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX2lzKGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp
LCBtYXNrKiBfX3ZlYykgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBf
X2hpOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3Qo
bWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0
dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rv
bG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gX19jOyB9CgogICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8s
IGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAg
ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhciBfX2MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGNoYXJfdHlwZSgpOyB9CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAg
IGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSog
X19kZXN0KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0dWFsIGNoYXIK
ICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX19kZmF1bHQ7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9faGk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxv
Y2FsZTo6aWQgY3R5cGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlw
ZTxjaGFyPiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8Y2hhcj4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5cGU7CgogICAgcHJpdmF0ZToKCiAgICAg
IGJvb2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvdXBwZXI7CiAgICAgIF9f
dG9fdHlwZSBjb25zdCYgX01fdG9sb3dlcjsKICAgICAgY29uc3QgbWFzayogY29uc3QmIF9NX2N0
YWJsZTsKICAgICAgY29uc3QgbWFzayogX01fdGFibGU7CgogICAgcHVibGljOgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB0YWJsZV9zaXplID0g
MSArIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KC0xKTsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGN0eXBlKGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29sIF9fZGVsID0gZmFsc2UsIHNpemVf
dCBfX3JlZnMgPSAwKTsKCiAgICAgIGlubGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFy
IF9fYykgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hh
ciogX19sbywgY29uc3QgY2hhciogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5s
aW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8s
IGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAg
IHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAg
ICBjb25zdCBtYXNrKgogICAgICB0YWJsZSgpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4g
X01fdGFibGU7IH0KCiAgICAgIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFibGUoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIF9NX2N0YWJsZTsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAg
IGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xv
LAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5
cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lk
ZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu
KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy
IF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGN0eXBl
PGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3Mg
Y3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPHdjaGFyX3Q+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBp
ZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBw
cm90ZWN0ZWQ6CiAgICAgIF9fd21hc2tfdHlwZQogICAgICBfTV9jb252ZXJ0X3RvX3dtYXNrKGNv
bnN0IG1hc2sgX19tKSBjb25zdDsKCiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7CgogICAg
ICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNoYXJf
dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwg
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVyKGNo
YXJfdHlwZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9f
dG91cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSkgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwg
Y2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25h
cnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBf
X2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPHdjaGFy
X3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7
CgoKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j
dHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt
bGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29sCiAgY3R5cGU8Y2hhcj46Ogog
IGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVybiBfTV90YWJsZVtfX2NdICYg
X19tOyB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9f
bG93LCBjb25zdCBjaGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxl
IChfX2xvdyA8IF9faGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVsqX19sb3crK107CiAg
ICByZXR1cm4gX19oaWdoOwogIH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nh
bl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCkgY29u
c3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2ggJiYgIShfTV90YWJsZVsqX19sb3ddICYg
X19tKSkKICAgICAgKytfX2xvdzsKICAgIHJldHVybiBfX2xvdzsKICB9CgogIGNvbnN0IGNoYXIq
CiAgY3R5cGU8Y2hhcj46OgogIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywg
Y29uc3QgY2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAog
ICAgICAgICAgICYmIChfTV90YWJsZVsqX19sb3ddICYgX19tKSAhPSAwKQogICAgICArK19fbG93
OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyAzOTMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2Jp
dHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJs
aWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3Rl
Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAg
dGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCByZWZzKTsKCgoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2Nv
ZGVjdnQuaCIgMSAzCiMgNDIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5o
IiAzCiMgNTcgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvY29kZWN2dC5oIiAzCiAgY2xh
c3MgX19lbmNfdHJhaXRzCiAgewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rl
c2NfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXpl
ID0gMzI7CgogICAgY2hhciBfTV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4
dF9lbmNbX1NfbWF4X3NpemVdOwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9f
ZGVzY190eXBlIF9NX291dF9kZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9N
X2ludF9ib207CgogIHB1YmxpYzoKICAgIF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2Mo
MCksIF9NX291dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CgoK
CgogICAgICBzdHJjcHkoX01faW50X2VuYywgIlVDUzQiKTsKCgogICAgICBzdHJjcHkoX01fZXh0
X2VuYywgbmxfbGFuZ2luZm8oQ09ERVNFVCkpOwogICAgfQoKICAgIF9fZW5jX3RyYWl0cyhjb25z
dCBjaGFyKiBfX2ludCwgY29uc3QgY2hhciogX19leHQsIGludCBfX2lib20gPSAwLAogICAgICAg
ICAgICAgICAgIGludCBfX2Vib20gPSAwKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz
YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBzdHJuY3B5KF9N
X2ludF9lbmMsIF9faW50LCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywg
X19leHQsIF9TX21heF9zaXplKTsKICAgIH0KCgoKCgoKICAgIF9fZW5jX3RyYWl0cyhjb25zdCBf
X2VuY190cmFpdHMmIF9fb2JqKQogICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2Jq
Ll9NX2ludF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29i
ai5fTV9leHRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9l
eHRfYm9tOwogICAgICBfTV9pbnRfYm9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCiAgICB+
X19lbmNfdHJhaXRzKCkKICAgIHsKICAgICAgaWNvbnZfY2xvc2UoX01faW5fZGVzYyk7CiAgICAg
IGljb252X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCgogICAgdm9pZAogICAgX01faW5pdCgp
CiAgICB7CiAgICAgIF9NX2luX2Rlc2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4dF9l
bmMpOwogICAgICBfTV9vdXRfZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2Vu
Yyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyA9PSBpY29udl90KC0xKSB8fCBfTV9pbl9kZXNjID09
IGljb252X3QoLTEpKQogICAgICAgIHsKCiAgICAgICAgfQogICAgfQoKICAgIGJvb2wKICAgIF9N
X2dvb2QoKQogICAgewogICAgICByZXR1cm4gX01fb3V0X2Rlc2MgJiYgX01faW5fZGVzYwogICAg
ICAgICAgICAgJiYgX01fb3V0X2Rlc2MgIT0gaWNvbnZfdCgtMSkgJiYgX01faW5fZGVzYyAhPSBp
Y29udl90KC0xKTsKICAgIH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9k
ZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNj
X3R5cGUqCiAgICBfTV9nZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9k
ZXNjOyB9CgogICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2ludGVybmFsX2VuYygpCiAgICB7IHJl
dHVybiBfTV9pbnRfZW5jOyB9CgogICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9leHRlcm5hbF9l
bmMoKQogICAgeyByZXR1cm4gX01fZXh0X2VuYzsgfQoKICAgIGludAogICAgX01fZ2V0X2V4dGVy
bmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9leHRfYm9tOyB9CgogICAgaW50CiAgICBfTV9nZXRf
aW50ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2ludF9ib207IH0KICB9OwoKCgoKICBjbGFz
cyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51bSByZXN1bHQKICAgIHsKICAgICAg
b2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAgICBub2NvbnYKICAgIH07CiAgfTsK
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlw
ZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlCiAgICA6IHB1
YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9iYXNlCiAgICB7CiAgICBwdWJsaWM6
CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRl
ZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlw
ZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7CgoKICAgICAgcmVzdWx0CiAgICAg
IG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYg
X19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsK
ICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwg
X19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RvLCBfX3RvX2VuZCwg
X190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAgICAgIHVuc2hpZnQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9fZW5kLF9fdG9fbmV4dCk7IH0KCiAg
ICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3Qg
ZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGlu
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9faW4oX19zdGF0ZSwgX19mcm9tLCBf
X2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywg
X190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIGludAogICAgICBlbmNvZGluZygp
IGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZW5jb2RpbmcoKTsgfQoKICAg
ICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy
biB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAgIGludAogICAgICBsZW5ndGgoY29u
c3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwgX19mcm9tLCBfX2VuZCwgX19tYXgp
OyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBs
aWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2NvZGVjdnRf
YWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0
YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg
ICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoK
ICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRl
LCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19l
bmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIHJl
c3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3Qg
ZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8s
IGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25l
eHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkgY29u
c3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29u
digpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro
KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpID0g
MDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRl
cm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dAogICAgOiBwdWJsaWMgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAg
ICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQg
ZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0
YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxfSW50ZXJuVCxfRXh0
ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfmNvZGVjdnQoKSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U
LCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29k
ZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNsYXNzIGNvZGVjdnQ8X0lu
dGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJz
dHJhY3RfYmFzZTxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0OwogICAgICB0
eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVy
bl90eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBzdGF0ZV90eXBlOwogICAgICB0eXBl
ZGVmIF9fZW5jX3RyYWl0czo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgIHR5cGVkZWYg
X19lbmNfdHJhaXRzIF9fZW5jX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9f
Y29kZWN2dF9hYnN0cmFjdF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlw
ZT4oX19yZWZzKQogICAgICB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19lbmNf
dHlwZSogX19lbmMsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlPGludGVybl90eXBlLCBleHRlcm5fdHlwZSwgc3RhdGVfdHlwZT4oX19yZWZzKQogICAg
ICB7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0K
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBj
b25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
ICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAg
ICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUm
IF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4
dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGlu
dAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGlu
dAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBf
X2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBf
X21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29u
c3QgdGhyb3coKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt
ZSBfRXh0ZXJuVD4KICAgIGxvY2FsZTo6aWQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfX2VuY190cmFpdHM+OjppZDsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UPgogICAgaW5s
aW5lIHNpemVfdAogICAgX19pY29udl9hZGFwdG9yKHNpemVfdCgqaWNvbnZfZnVuYykoaWNvbnZf
dCwgX1QsIHNpemVfdCosIGNoYXIqKiwgc2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNv
bnZfdCBjZCwgY2hhcioqIGluYnVmLCBzaXplX3QqIGluYnl0ZXNsZWZ0LAogICAgICAgICAgICAg
ICAgICAgIGNoYXIqKiBvdXRidWYsIHNpemVfdCogb3V0Ynl0ZXNsZWZ0KQogICAgewogICAgICBy
ZXR1cm4gaWNvbnZfZnVuYyhjZCwgKF9UKWluYnVmLCBpbmJ5dGVzbGVmdCwgb3V0YnVmLCBvdXRi
eXRlc2xlZnQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUg
X0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwg
X0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUs
IGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUq
IF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg
ZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJy
b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl
ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg
X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAg
ICAgICAgICBjb25zdCBzaXplX3QgX19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpIC8g
c2l6ZW9mKGNoYXIpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9IF9fZm11bHRpcGxlICogKF9f
ZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0g
c2l6ZW9mKGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3Rs
ZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciog
X19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9f
Y2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9faW50
X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9faW50
X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21f
ZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRp
Y19jYXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5cGUp
ICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2Fz
dDxpbnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxpbnRl
cm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAg
ICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAg
ICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAm
X190bGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqIF9fY2ZpeGVkID0gY29uc3RfY2FzdDxpbnRlcm5fdHlwZSo+
KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYs
ICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYg
KF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9t
X25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAg
ICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9f
Y3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBl
Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlh
bDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4K
ICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVy
bl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVy
bl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJv
cjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVk
ZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBf
X2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAg
ICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNp
emVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3Rv
X2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3Io
aWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYgKF9fY29udiAh
PSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAoX190
bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAgICAgICAgICBf
X3JldCA9IG5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
X19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IF9fcmV0ID0gZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRf
YmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRz
Pjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVy
bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9n
b29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlw
ZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0
YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mbXVs
dGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpIC8gc2l6ZW9mKGNoYXIpOwogICAgICAgICAgc2l6
ZV90IF9fZmxlbiA9IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAg
ICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAvIHNpemVv
ZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2Vu
ZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNo
YXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19j
b252OwoKCgoKCgogICAgICAgICAgaW50IF9fZXh0X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2V4dGVy
bmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9fZXh0X2JvbSkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAg
IGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBlKj4oX19idWls
dGluX2FsbG9jYShzaXplb2YoZXh0ZXJuX3R5cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAg
ICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZT4oX19leHRfYm9tKTsK
ICAgICAgICAgICAgICBjaGFyX3RyYWl0czxleHRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAx
LCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0
b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4pOwogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4
ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nm
cm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9f
Y29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7
CiAgICAgICAgICAgIH0KCgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVp
bnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9
IG9rOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9t
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAg
ICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAg
ICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJv
dygpCiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBl
bmFtZSBfRXh0ZXJuVD4KICAgIGJvb2wKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf
X2VuY190cmFpdHM+OjoKICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpCiAgICB7
IHJldHVybiBmYWxzZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUg
X0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190
cmFpdHM+OjoKICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbSwKICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf
dCBfX21heCkgY29uc3QKICAgIHsgcmV0dXJuIG1pbihfX21heCwgc3RhdGljX2Nhc3Q8c2l6ZV90
PihfX2VuZCAtIF9fZnJvbSkpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5
cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg
X19lbmNfdHJhaXRzPjo6CiAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKQogICAgeyBy
ZXR1cm4gMTsgfQoKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs
IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo
YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg
ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog
ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl
cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4
dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw
ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg
Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq
IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj
b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0
IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg
Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0
ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg
IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf
dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK
ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz
dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom
IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0
ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f
ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg
ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg
ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg
ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog
ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo
KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK
ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh
ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKIyA0MTYgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNfZ2V0OwoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9Gb3JtYXRfY2FjaGUKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFy
X3RyYWl0czxfQ2hhclQ+IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf
Q2hhclQ+IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpz
aXplX3R5cGUgc2l6ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyPgogICAgICAgIGZyaWVuZCBj
bGFzcyBfTnVtZXJpY19nZXQ7CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0PF9DaGFyVD47CiAg
ICAgIGZyaWVuZCBjbGFzcyBudW1fcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1l
X2dldDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47CiAgICAg
IGZyaWVuZCBjbGFzcyB0aW1lX3B1dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlf
cHV0PF9DaGFyVD47CgoKCgogICAgICBzdGF0aWMgaW50IF9TX3B3b3JkX2l4OwoKCgogICAgICBi
b29sIF9NX3ZhbGlkOwoKCgogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19saXRlcmFsc1tdOwoK
CgoKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX1NfbWludXMsCiAgICAgICAgX1NfcGx1cywK
ICAgICAgICBfU194LAogICAgICAgIF9TX1gsCiAgICAgICAgX1NfZGlnaXRzLAogICAgICAgIF9T
X2RpZ2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwKICAgICAgICBfU191ZGlnaXRzID0gX1NfZGln
aXRzX2VuZCwKICAgICAgICBfU191ZGlnaXRzX2VuZCA9IF9TX3VkaWdpdHMgKyAxNiwKICAgICAg
ICBfU19lZSA9IF9TX2RpZ2l0cyArIDE0LAogICAgICAgIF9TX0VlID0gX1NfdWRpZ2l0cyArIDE0
CiAgICAgIH07CgoKCgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKCgoKCgogICAg
ICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1
ZW5hbWU7CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsKCgoKICAgICAgYm9vbCBfTV91
c2VfZ3JvdXBpbmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKCiAgICAgIF9Gb3JtYXRf
Y2FjaGUoKTsKCiAgICAgIH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0KCgoKCiAgICAgIHN0
YXRpYyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICAgIF9TX2dldChpb3NfYmFzZSYgX19pb3Mp
OwoKICAgICAgdm9pZAogICAgICBfTV9wb3B1bGF0ZShpb3NfYmFzZSYpOwoKICAgICAgc3RhdGlj
IHZvaWQKICAgICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNl
JiBfX2lvcywgaW50IF9faXgpIHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbnQgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19wd29yZF9peDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgY2hhciBfRm9ybWF0X2NhY2hlPF9DaGFy
VD46OgogICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlB
QkNERUYiOwoKICAgdGVtcGxhdGU8PiBfRm9ybWF0X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hl
KCk7CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUo
KTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg
Y2xhc3MgX051bWVyaWNfZ2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgoKICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xh
c3MgbnVtX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0
ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDsK
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBm
cmllbmQgY2xhc3MgbnVtX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVu
YW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ7CiAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1v
bmV5X3B1dDsKCiAgICBwcml2YXRlOgogICAgICBleHBsaWNpdAogICAgICBfTnVtZXJpY19nZXQo
KSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmljX2dldCgpIHsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2Vu
ZCkgY29uc3Q7CiAgICB9OwoKCiAgY29uc3QgaW50IF9NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aCA9
IDMyOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBj
bGFzcyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJf
dHlwZTsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7Cgog
ICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBj
b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp
OyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgc2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBf
X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg
X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChf
X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcm
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vy
ciwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dl
dChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25z
dAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2Vu
ZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf
dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAg
ICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0
JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7
IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192
KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgoKCgoK
ICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBf
X2ZwID0gdHJ1ZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29s
JikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw
ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25z
dDsKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgaW50JikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNp
Z25lZCBzaG9ydCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQo
aXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJf
dHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNl
Ojppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBp
dGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAg
ICAgdm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpp
ZDsKCgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9p
dGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy
PiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
Y2hhciogX194dHJjLAogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwKSBjb25z
dDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg
Y2xhc3MgX051bWVyaWNfcHV0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICBwcm90ZWN0
ZWQ6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX3B1dCgpIHsgfQoKICAgICAgdmlydHVh
bAogICAgICB+X051bWVyaWNfcHV0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2Nh
bGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAw
KSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQo
aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNo
YXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19z
LCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxs
LCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7
IHJldHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAg
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJs
ZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3Yp
OyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBf
X2ZpbGwsCiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRv
X3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl
CiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5z
aWduZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0
KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxv
bmcpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5
cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNo
YXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQs
IF9PdXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51
bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6
CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhv
dXNhbmRzX3NlcDsKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBf
TV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoK
ICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl
OjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAg
ICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVm
cyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1w
dW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBl
CiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBkb190aG91c2FuZHNf
c2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIGRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK
ICAgICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAg
ICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAg
ICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19z
ZXA7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAg
ICAgZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAg
ICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7
IHJldHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVf
bnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbnVtcHVuY3Q8X0NoYXJUPjo6
X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBs
YXRlPD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0
KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8
d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1
YmxpYyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVf
bnVtcHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMg
PSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1Nf
Y3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2lu
aXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9T
X2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90
IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAg
IGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAg
ICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGky
KTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19s
bywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFu
c2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQq
IF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
aGFzaChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNv
bnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwg
Y29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAg
ICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9f
bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0
ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19s
bzEsIGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAg
ICBzdHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xv
LCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29s
bGF0ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBj
b25zdDsKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb19jb21w
YXJlKGNvbnN0IHdjaGFyX3QqIF9fbG8xLCBjb25zdCB3Y2hhcl90KiBfX2hpMSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19sbzIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QqIF9faGkyKSBjb25zdDsKCiAgdGVt
cGxhdGU8PgogICAgd3N0cmluZwogICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9fdHJhbnNmb3JtKGNv
bnN0IHdjaGFyX3QqIF9fbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgd2NoYXJfdCogX19oaSkgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIGxvbmcKICAgIGNvbGxh
dGU8d2NoYXJfdD46OmRvX2hhc2goY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCog
X19oaSkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xs
YXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAg
ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8
X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1l
KGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8Pgog
ICAgY29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXpl
X3QgX19yZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD46OmNv
bGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgogIGNsYXNzIHRpbWVf
YmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1k
eSwgeW1kLCB5ZG0gfTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJs
aWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMg
PSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2RheW5hbWVzKDApLCBfTV9t
b250aG5hbWVzKDApIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25z
dAogICAgICB7IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBnZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2Ys
CiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QK
ICAgICAgeyByZXR1cm4gZG9fZ2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlw
ZSBfX2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfZGF0ZShfX3MsIF9f
ZW5kLCBfX2YsIF9fZXJyLCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3dlZWtk
YXkoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFt
ZShfX3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRf
eWVhcihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAg
eyByZXR1cm4gZG9fZ2V0X3llYXIoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgcHJv
dGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpCiAgICAgIHsKICAgICAgICBk
ZWxldGUgW10gX01fbW9udGhuYW1lczsKICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7CiAg
ICAgIH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25z
dAogICAgICB7IHJldHVybiB0aW1lX2Jhc2U6OnltZDsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2Um
LAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAg
ICB7IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9k
YXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUg
X19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRl
cl90eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9f
ZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv
X2dldF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9fczsgfQoKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7
CiAgICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2Nh
bGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBw
dWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7
IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXRfYnluYW1lKCkg
eyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVf
YmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQg
aWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBs
b2NhbGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgIGNvbnN0IHRtKiAs
IGNvbnN0IF9DaGFyVCogLAogICAgICAgICAgY29uc3QgX0NoYXJUKiApIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9fczsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG1i
LCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdAogICAgICB7IHJldHVy
biBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX190bWIsIF9fZm9ybWF0LCBfX21vZGlmaWVyKTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXQoKSB7IH0KCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz
ZSYsIGNoYXJfdHlwZSwgY29uc3QgdG0qICwKICAgICAgICAgICAgIGNoYXIgLCBjaGFyICkgY29u
c3QKICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBf
T3V0SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBl
OwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IHRpbWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog
dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9n
ZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVm
IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMg
bG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3QgX19y
ZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAg
ICAgICBpb3NfYmFzZSYgX19mLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91Ymxl
JiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRs
LCBfX2YsIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLAog
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRz
KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2YsIF9f
ZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1v
bmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwgaW9z
X2Jhc2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJiApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0
ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwg
aW9zX2Jhc2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIHN0cmluZ190eXBlJiApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICBjbGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIg
aXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBl
OwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25l
eV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jh
c2UmIF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9f
dW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wg
X19pbnRsLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qg
c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf
X2ludGwsIF9fZiwgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZp
cnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAg
ICAgICAgICAgICBsb25nIGRvdWJsZSApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlv
c19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgKSBj
b25zdAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQs
IF9PdXRJdGVyPjo6aWQ7CgogIHN0cnVjdCBtb25leV9iYXNlCiAgewogICAgZW51bSBwYXJ0IHsg
bm9uZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsg
Y2hhciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3Bh
dHRlcm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hh
ciBfX3ByZWNlZWRzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVi
bGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0lu
dGw7CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJf
dHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsK
ICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV9jdXJyX3N5bWJv
bDsKICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsKICAgICAgc3RyaW5nX3R5cGUg
X01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJu
IF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6
CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0K
CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxp
emVfbW9uZXlwdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9w
b2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoK
ICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGlu
ZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0
cmluZ190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fY3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2ln
bigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAg
ICAgc3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRz
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAg
cGF0dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
cG9zX2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKSB7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90
eXBlCiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNp
bWFsX3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNf
c2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9n
cm91cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJv
bCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFs
IHN0cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRv
X25lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9
CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9f
cG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAg
IHZpcnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9tb25l
eXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hh
clQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K
ICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxf
Q2hhclQsIF9JbnRsPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgKQogICAg
ewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01f
aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8Pgog
ICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0
KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0No
YXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0
OwogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFt
ZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8
X0NoYXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxl
KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25l
eXB1bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgog
ICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJv
eV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5
bmFtZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewog
ICAgdHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBjbGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2Fn
ZXNfYmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVf
dCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGNhdGFsb2cK
ICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBf
X2xvYykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKICAgICAg
c3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lk
LCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19j
LF9fc2V0LF9fbXNnaWQsX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9f
YykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKSB7IH0KCgoKICAgICAgdmlydHVhbCBjYXRh
bG9nCiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxl
JikgY29uc3QKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQog
ICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1
bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIHZvaWQK
ICAgICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3QgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMg
bWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7
CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVf
dCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3Nh
Z2VzX2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgbWVzc2FnZXNfYnluYW1l
PGNoYXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKICB0
ZW1wbGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD46Om1lc3NhZ2VzX2J5bmFtZShj
b25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxl
JiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlw
ZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQog
ICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFz
ZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l
IGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVw
cGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29s
IGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs
cGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChf
Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJU
IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf
Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+
KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
dG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBf
Q2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsg
cmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9
CiMgMzcgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFt
ZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9m
Zl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAg
ICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAg
IHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBl
OwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVm
X2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiogX01fdGllOwogICAgICBjaGFyX3R5cGUgX01fZmlsbDsKICAgICAg
aW9zdGF0ZSBfTV9leGNlcHRpb247CgogICAgcHJvdGVjdGVkOgogICAgICBiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX01fc3RyZWFtYnVmOwogICAgICBpb3N0YXRlIF9NX3N0cmVh
bWJ1Zl9zdGF0ZTsKCgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9NX2lvc19mY3R5cGU7Cgog
ICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1n
ZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIGlubGluZSBjb25zdCBfX2N0
eXBlX3R5cGUqCiAgICAgIF9NX2dldF9mY3R5cGVfaW9zKHZvaWQpCiAgICAgIHsgcmV0dXJuIF9N
X2lvc19mY3R5cGU7IH0KCiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAg
ICAgIGlubGluZSBib29sCiAgICAgIG9wZXJhdG9yISgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmZhaWwoKTsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgcmRzdGF0ZSgpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsgfQoKICAgICAgaW5saW5lIHZvaWQK
ICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCkKICAgICAgewogICAgICAgIGlm
ICh0aGlzLT5yZGJ1ZigpKQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlIHwgYmFk
Yml0OwogICAgICAgIGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkK
ICAgICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkg
Y2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgICB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBzZXRz
dGF0ZShpb3N0YXRlIF9fc3RhdGUpCiAgICAgIHsgdGhpcy0+Y2xlYXIodGhpcy0+cmRzdGF0ZSgp
IHwgX19zdGF0ZSk7IH0KCiAgICAgIGlubGluZSBib29sCiAgICAgIGdvb2QoKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5yZHN0YXRlKCkgPT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAg
ICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkg
IT0gMDsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZmFpbCgpIGNvbnN0CiAgICAgIHsgcmV0
dXJuICh0aGlzLT5yZHN0YXRlKCkgJiAoYmFkYml0IHwgZmFpbGJpdCkpICE9IDA7IH0KCiAgICAg
IGlubGluZSBib29sCiAgICAgIGJhZCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICh0aGlzLT5yZHN0
YXRlKCkgJiBiYWRiaXQpICE9IDA7IH0KCiAgICAgIGlubGluZSBpb3N0YXRlCiAgICAgIGV4Y2Vw
dGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIGlubGlu
ZSB2b2lkCiAgICAgIGV4Y2VwdGlvbnMoaW9zdGF0ZSBfX2V4Y2VwdCkKICAgICAgewogICAgICAg
IF9NX2V4Y2VwdGlvbiA9IF9fZXhjZXB0OwogICAgICAgIHRoaXMtPmNsZWFyKF9NX3N0cmVhbWJ1
Zl9zdGF0ZSk7CiAgICAgIH0KCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3MoYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpIDogaW9zX2Jhc2UoKQogICAgICB7IHRo
aXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvcygpIHsgfQoK
CiAgICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHRpZSgp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3RpZTsgfQoKICAgICAgaW5saW5lIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAg
IHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgaW5saW5lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh
clQsIF9UcmFpdHM+KgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmVh
bWJ1ZjsgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJk
YnVmKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJhc2lj
X2lvcyYKICAgICAgY29weWZtdChjb25zdCBiYXNpY19pb3MmIF9fcmhzKTsKCiAgICAgIGlubGlu
ZSBjaGFyX3R5cGUKICAgICAgZmlsbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2ZpbGw7IH0K
CiAgICAgIGlubGluZSBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAg
ewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IF9NX2ZpbGw7CiAgICAgICAgX01fZmlsbCA9IF9f
Y2g7CiAgICAgICAgcmV0dXJuIF9fb2xkOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAgICAgIGlt
YnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90
eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lk
ZW4oY2hhciBfX2MpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKCiAgICAgIGJhc2ljX2lvcygpIDog
aW9zX2Jhc2UoKQogICAgICB7IH0KCiAgICAgIHZvaWQKICAgICAgaW5pdChiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYik7CgogICAgICBib29sCiAgICAgIF9NX2NoZWNrX2Zh
Y2V0KGNvbnN0IGxvY2FsZTo6ZmFjZXQqIF9fZikKICAgICAgewogICAgICAgIGJvb2wgX19yZXQg
PSBmYWxzZTsKICAgICAgICBpZiAoX19mKQogICAgICAgICAgX19yZXQgPSB0cnVlOwogICAgICAg
IGVsc2UKICAgICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsKICAgICAgICByZXR1cm4gX19yZXQ7
CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYg
X19sb2MpOwogICAgfTsKfQoKCgojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfaW9zLnRjYyIgMSAzCiMgMzMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNf
aW9zLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwog
ICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3Qg
YmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jo
cy5fTV93b3JkX2xpbWl0IDw9IF9TX2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJh
eSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07CiMgNjMgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwogICAgICBfQ2FsbGJhY2tfbGlzdCogX19j
YiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01f
YWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAg
ICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93
b3JkczsKICAgICAgX01fZGlzcG9zZV9jYWxsYmFja3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9
IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IF9fcmhzLl9NX3dvcmRfbGltaXQ7
ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhzLl9NX3dvcmRzW19faV07CiAgICAg
IGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3Jk
czsKICAgICAgX01fd29yZHMgPSBfX3dvcmRzOwogICAgICBfTV93b3JkX2xpbWl0ID0gX19yaHMu
X01fd29yZF9saW1pdDsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAgICB0
aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnBy
ZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+Zmls
bChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25z
KCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFy
X3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlw
ZS0+bmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgeyByZXR1cm4gX01faW9zX2ZjdHlwZS0+d2lk
ZW4oX19jKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3Qg
bG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgbG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsK
ICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9jKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9j
KTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkgIT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5w
dWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNl
dHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9NX3RpZSA9IDA7CiAgICAgIF9NX2ZpbGwgPSB0aGlz
LT53aWRlbignICcpOwogICAgICBfTV9leGNlcHRpb24gPSBnb29kYml0OwogICAgICBfTV9zdHJl
YW1idWYgPSBfX3NiOwogICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3NiID8gZ29vZGJpdCA6
IGJhZGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Ol9NX2NhY2hlX2Zh
Y2V0cyhjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBpZiAoaGFzX2ZhY2V0PF9fY3R5
cGVfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2lvc19mY3R5cGUgPSAmdXNlX2ZhY2V0PF9fY3R5
cGVfdHlwZT4oX19sb2MpOwoKICAgICAgaWYgKGhhc19mYWNldDxfX251bXB1dF90eXBlPihfX2xv
YykpCiAgICAgICAgX01fZm51bXB1dCA9ICZ1c2VfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2Mp
OwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9m
bnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICB9Cn0KIyAyMTQg
Ii9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwojIDQ3ICIvb3B0
L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgNDAgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX29zdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9D
aGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5
cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0
cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0K
CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBz
ZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KF9fb3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBl
JikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYg
KCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwoaW9zX2Jhc2UmICgqX19wZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBl
JgogICAgICBvcGVyYXRvcjw8KGJvb2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAg
ICBvcGVyYXRvcjw8KHNob3J0IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlm
IChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAg
ICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oX19uKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8
KHN0YXRpY19jYXN0PGxvbmc+KF9fbikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I8PCh1bnNpZ25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMt
Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBp
b3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2Vm
aWVsZDsKICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jh
c2U6OmhleCkKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVu
c2lnbmVkIGxvbmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRo
aXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsg
cmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7
IH0KCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19u
KTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcg
bG9uZyBfX24pOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJs
ZSBfX2YpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19m
KQogICAgICB7IHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19m
KSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91Ymxl
IF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lk
KiBfX3ApOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1i
dWZfdHlwZSogX19zYik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5
cGUgX19jKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZs
dXNoKCk7CgoKICAgICAgcG9zX3R5cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBzZWVrcChwb3NfdHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
c2Vla3Aob2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKCiAgICBwcml2YXRlOgoKCiAgICAg
IF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj0oY29uc3QgX19vc3RyZWFtX3R5cGUmKTsK
CiAgICAgIGJhc2ljX29zdHJlYW0oY29uc3QgX19vc3RyZWFtX3R5cGUmKTsKCiAgICB9OwoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CgogICAgICBib29sIF9N
X29rOwogICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX01fb3M7CgogICAgcHVi
bGljOgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1Ry
YWl0cz4mIF9fb3MpOwoKICAgICAgfnNlbnRyeSgpCiAgICAgIHsKCiAgICAgICAgaWYgKF9NX29z
LmZsYWdzKCkgJiBpb3NfYmFzZTo6dW5pdGJ1ZiAmJiAhdW5jYXVnaHRfZXhjZXB0aW9uKCkpCiAg
ICAgICAgICB7CgogICAgICAgICAgICBpZiAoX01fb3MucmRidWYoKSAmJiBfTV9vcy5yZGJ1Zigp
LT5wdWJzeW5jKCkgPT0gLTEpCiAgICAgICAgICAgICAgX01fb3Muc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIG9wZXJhdG9yIGJvb2woKQogICAg
ICB7IHJldHVybiBfTV9vazsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQg
X19jKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291
dCA8PCBfX291dC53aWRlbihfX2MpKTsgfQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpOwoKCiAgdGVtcGxhdGU8Y2xhc3Mg
X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8
KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBzaWduZWQgY2hhciBfX2MpCiAg
ICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxh
dGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCB1bnNpZ25lZCBj
aGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKTsKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKTsKCgogIHRlbXBs
YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qgc2ln
bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hh
ciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVy
biAoX19vdXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZGwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX29zKQogICAgeyByZXR1cm4gZmx1c2goX19vcy5wdXQoX19vcy53aWRlbignXG4nKSkp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGVuZHMoYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5wdXQoX0NoYXJUKCkpOyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGZsdXNoKGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MuZmx1c2goKTsgfQoKfQoKCgoKIyAxICIv
b3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAxIDMKIyAzMiAiL29wdC9n
Y2MvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwojIDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDAgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMSAzCiMgNDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xv
Y2FsZS5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl
dHMudGNjIiAxIDMKIyAzNSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj
ZXRzLnRjYyIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5o
IiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9lcnJuby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUv
ZXJybm8uaCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJy
bm8uaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2lu
Y2x1ZGUvbGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5o
IiAxIDMKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5j
bHVkZS9iaXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAz
CmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUv
ZXJybm8uaCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpw
cm9ncmFtX2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoK
Cgp9CiMgNjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMg
MzkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NlcnJuby5oIiAyIDMKIyAzNiAi
L29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAi
L29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAzCiMgMSAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCiMgMSAiL3Vz
ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIg
MwoKCiMgMSAiL29wdC9nY2MvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j
bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCiMgMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvbG9jYWxl
LmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgNTIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwpzdHJ1
Y3QgbGNvbnYKewoKCiAgY2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2Vw
OwoKCgoKCiAgY2hhciAqZ3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAg
Y2hhciAqY3VycmVuY3lfc3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIg
Km1vbl90aG91c2FuZHNfc2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2
ZV9zaWduOwogIGNoYXIgKm5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAg
Y2hhciBmcmFjX2RpZ2l0czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5
X3NwYWNlOwoKICBjaGFyIG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoK
CgoKCiAgY2hhciBwX3NpZ25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRf
cF9jc19wcmVjZWRlczsKCiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25f
Y3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50
X3Bfc2lnbl9wb3NuOwogIGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAzCn07CgoKCmV4dGVybiBjaGFyICpzZXRsb2NhbGUgKGludCBfX2NhdGVnb3J5
LCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlKSB0aHJvdyAoKTsKCgpleHRlcm4gc3RydWN0IGxjb252
ICpsb2NhbGVjb252ICh2b2lkKSB0aHJvdyAoKTsKIyAxNDEgIi91c3IvaW5jbHVkZS9sb2NhbGUu
aCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDE0MiAiL3Vzci9pbmNsdWRl
L2xvY2FsZS5oIiAyIDMKCgoKCgoKCmV4dGVybiBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQg
X19jYXRlZ29yeV9tYXNrLCBfX2NvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19s
b2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpl
eHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9fbG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsK
Cgp9CiMgMzkgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMiAz
CgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpsY29udjsKICB1c2luZyA6OnNldGxvY2Fs
ZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAzNyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfY3N0ZGxpYi5oIiAxIDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbGltaXRzLmgiIDEgMwojIDQyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9saW1pdHMuaCIgMwoKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA0NCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGRfbGltaXRzLmgiIDIgMwojIDg2MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGRfbGltaXRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHls
ZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJv
ID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5
ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9h
dF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVu
b3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHMKICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBfVHAg
bWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRp
YyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln
aXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MDsKCiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJl
dHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3Jt
X2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7
CgogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVy
biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigp
IHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1Rw
IGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJv
OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVt
ZXJpY19saW1pdHM8X1RwPjo6aXNfc3BlY2lhbGl6ZWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6ZGlnaXRzOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46
OmRpZ2l0czEwOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBu
dW1lcmljX2xpbWl0czxfVHA+Ojppc19zaWduZWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OmlzX2ludGVnZXI7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9U
cD46OmlzX2V4YWN0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAg
IG51bWVyaWNfbGltaXRzPF9UcD46OnJhZGl4OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46Om1pbl9leHBvbmVudDsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgaW50CiAgICBudW1lcmljX2xpbWl0czxfVHA+
OjptaW5fZXhwb25lbnQxMDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgaW50
CiAgICBudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQ7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6bWF4X2V4cG9u
ZW50MTA7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVy
aWNfbGltaXRzPF9UcD46Omhhc19pbmZpbml0eTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX3F1aWV0X05hTjsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8
X1RwPjo6aGFzX3NpZ25hbGluZ19OYU47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNv
bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZQogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX2Rlbm9y
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19s
aW1pdHM8X1RwPjo6aGFzX2Rlbm9ybV9sb3NzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojppc19pZWM1NTk7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46
OmlzX2JvdW5kZWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAg
IG51bWVyaWNfbGltaXRzPF9UcD46OmlzX21vZHVsbzsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6dHJhcHM7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46
OnRpbnluZXNzX2JlZm9yZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OnJvdW5kX3N0eWxlOwoKCgoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJv
b2wgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGJv
b2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4
YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp
YyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0
YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5v
cm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGJvb2wgaW5maW5pdHko
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wg
c2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3Rh
dGljIGJvb2wgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1
bG8gPSB0cnVlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlCiAgICAg
ICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y
ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5
bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgY2hhciBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBk
aWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNzsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1
ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBjaGFyIGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hh
ciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgY2hhciBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHF1aWV0X05hTigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRpYyBjaGFyIHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMg
Y2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFy
PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKIyAxMTMzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0
ZF9saW1pdHMuaCIgMwogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2lnbmVk
IGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
ICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDc7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAzOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0
aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIHNpZ25hbGlu
Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigw
KTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv
dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEy
NyAqIDIgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBz
dGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hh
ciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19t
b2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hh
cl90PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7
CgogICAgICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hh
cl90KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MTA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgd2NoYXJfdCBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3
Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAg
ICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ll
YzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNz
X2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91
bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTMwMSAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHM8c2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuICgtMzI3NjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3co
KQogICAgICB7IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg
PSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxv
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFs
c2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoK
CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9y
dD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoK
ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJl
dHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
MTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA1OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9y
dCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1f
c3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGlu
ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9y
dD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IHF1aWV0X05hTigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBpbnQgbWF4KCkg
dGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
MTA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBz
dGF0aWMgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50
IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsg
fQogICAgICBzdGF0aWMgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19i
b3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoK
CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAg
ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg
IHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
KHVuc2lnbmVkKSgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsKICAg
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
dHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDEwOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyByb3Vu
ZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp
ZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9y
bSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z
cyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAg
dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+CiAgICB7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAg
ICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgyMTQ3
NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzI7
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBl
cHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9
IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3Np
Z25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHls
ZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7
IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh
cmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuICgtOTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcg
bG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0
IGludCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJh
ZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAg
IHN0YXRpYyBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigw
KTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk
X3plcm87CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p
dHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIG1pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAq
IDJVTEwgKyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE5OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZXBz
aWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9z
dHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n
IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+
KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g
PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9
OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxmbG9hdD4KICAg
IHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAg
c3RhdGljIGZsb2F0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xNzU0OTQzNWUtMzhG
OyB9CiAgICAgIHN0YXRpYyBmbG9hdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuNDAy
ODIzNDdlKzM4RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAyNDsKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDY7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBmbG9hdCBlcHNpbG9uKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAxLjE5MjA5MjkwZS0wN0Y7IH0KICAgICAgc3RhdGljIGZsb2F0IHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBGOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xMjU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50MTAgPSAtMzc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g
MTI4OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMzg7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf
c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo
YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBpbmZpbml0eSgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFO
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBm
bG9hdCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKIyAxODIxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwog
IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBk
b3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMw
ODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43
OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
NTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50
ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNp
bG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAg
ICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEu
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAgICAgZGVu
b3JtX2Fic2VudDs7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOzsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlu
eW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHls
ZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9Owoj
IDE5MDAgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVt
cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgZG91YmxlPgogICAgewogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMg
bG9uZyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5
MzUwNjI2ZS00OTMyTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgbWF4KCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAxLjE4OTczMTQ5NTM1NzIzMTc2NTAyZSs0OTMyTDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBkaWdpdHMgPSA2NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMx
MCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBy
b3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wTDsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTYzODE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWluX2V4cG9uZW50MTAgPSAtNDkzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDQ5MzI7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9CiAgICAgICAgICAgICAgICBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAgICAgICAgICAg
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
CiAgICAgICAgICAgICAgICBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBpbmZpbml0
eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3Vi
bGUgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRp
YyBsb25nIGRvdWJsZSBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBM
OyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAwLjBMOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUg
PQogICAgICAgICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxOTgwICIv
b3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwp9CiMgMzkgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi9vcHQv
Z2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAxIDMKIyA0MCAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zYnVmX2l0ZXIuaCIgMSAzCiMgNDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvdHlwZWluZm8iIDEgMwojIDM3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My90eXBlaW5m
byIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMzggIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAyIDMKCmV4dGVybiAiQysrIiB7CgpuYW1l
c3BhY2UgX19jeHhhYml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NCAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xh
c3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsK
CiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsK
ICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3Qg
Y2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3Qg
Y2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIq
IG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTcgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL3R5cGVpbmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9f
YXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9f
bmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9p
bmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAg
cHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZp
cnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJv
b2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9v
YmosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsK
CgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3Nf
dHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoq
X19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2Vw
dGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFs
IH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBlaWQgOiBwdWJsaWMg
ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhyb3coKSB7IH0KICAg
IHZpcnR1YWwgfmJhZF90eXBlaWQgKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDMgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi9vcHQvZ2Nj
L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyA2MCAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDMKCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvZXhj
ZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDYyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAi
L29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjMgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2NCAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NSAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYgIi9vcHQvZ2NjL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyAxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgNjMgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3ZlY3Rvci5oIiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV9mdW5jcy5oIiAxIDMKIyA2NCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl
eGNlcHQuaCIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVz
LmgiIDEgMwojIDM1ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0Lmgi
IDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9p
ZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJv
d19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19p
bnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0
aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3Mp
OwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQK
ICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NSAiL29wdC9nY2Mv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEgIi9vcHQvZ2NjL2luY2x1
ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyA2NiAiL29wdC9nY2MvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgNzcgIi9v
cHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvY2F0b3IsIGJvb2wgX0lzU3RhdGljPgpjbGFzcyBfVmVjdG9yX2Fs
bG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwg
X0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBh
bGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3I7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2Ep
CiAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCks
IF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3RlZDoKICBhbGxvY2F0b3JfdHlwZSBf
TV9kYXRhX2FsbG9jYXRvcjsKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9U
cCogX01fZW5kX29mX3N0b3JhZ2U7CgogIF9UcCogX01fYWxsb2NhdGUoc2l6ZV90IF9fbikKICAg
IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKF9fbik7IH0KICB2b2lkIF9NX2Rl
YWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxs
b2NhdG9yLmRlYWxsb2NhdGUoX19wLCBfX24pOyB9Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNzIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxvY2F0
b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAs
IF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAg
YWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90
eXBlKCk7IH0KCiAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAg
IDogX01fc3RhcnQoMCksIF9NX2ZpbmlzaCgwKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkKICB7fQoK
cHJvdGVjdGVkOgogIF9UcCogX01fc3RhcnQ7CiAgX1RwKiBfTV9maW5pc2g7CiAgX1RwKiBfTV9l
bmRfb2Zfc3RvcmFnZTsKCiAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0Fs
bG9jYXRvcj46Ol9BbGxvY190eXBlIF9BbGxvY190eXBlOwogIF9UcCogX01fYWxsb2NhdGUoc2l6
ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZShfX24pOyB9CiAgdm9p
ZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBfQWxsb2NfdHlwZTo6
ZGVhbGxvY2F0ZShfX3AsIF9fbik7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Fs
bG9jPgpzdHJ1Y3QgX1ZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9U
cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfVmVjdG9yX2FsbG9jX2Jh
c2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwogIHR5cGVk
ZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfVmVj
dG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfQmFzZShfX2EpIHt9CiAgX1Zl
Y3Rvcl9iYXNlKHNpemVfdCBfX24sIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2Uo
X19hKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBfTV9maW5pc2ggPSBf
TV9zdGFydDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgfQoKICB+
X1ZlY3Rvcl9iYXNlKCkgeyBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFn
ZSAtIF9NX3N0YXJ0KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9
IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9yIDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxf
VHAsIF9BbGxvYz4KewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOwoKcHJpdmF0ZToKICB0eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxv
Yz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJs
aWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50
ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg
X19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwgdmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVk
ZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0
ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsK
ICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdl
dF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9Cgog
IHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9p
dGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRl
cmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcgX0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9C
YXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFz
ZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNlOjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3Rl
ZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBf
X3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChpdGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoK
ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KICBjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01f
c3RhcnQpOyB9CiAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IgKF9NX2ZpbmlzaCk7
IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9pdGVyYXRvciAo
X01fZmluaXNoKTsgfQoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiBy
ZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2lu
KCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkKICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBjb25zdAogICAgeyByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKICBzaXplX3R5cGUgc2l6ZSgp
IGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogIHNpemVf
dHlwZSBtYXhfc2l6ZSgpIGNvbnN0CiAgICB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9m
KF9UcCk7IH0KICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlKSAtIGJlZ2luKCkpOyB9CiAgYm9v
bCBlbXB0eSgpIGNvbnN0CiAgICB7IHJldHVybiBiZWdpbigpID09IGVuZCgpOyB9CgogIHJlZmVy
ZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pIHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7
IH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSBjb25zdCB7IHJl
dHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CgogIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBl
IF9fbikgY29uc3QgewogICAgaWYgKF9fbiA+PSB0aGlzLT5zaXplKCkpCiAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJ2ZWN0b3IiKTsKICB9CgogIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19u
KQogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CiAgY29u
c3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNr
KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCiAgZXhwbGljaXQgdmVjdG9yKGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpIHt9
CgogIHZlY3RvcihzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9fdmFsdWUsCiAgICAgICAgIGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShf
X24sIF9fYSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fc3RhcnQs
IF9fbiwgX192YWx1ZSk7IH0KCiAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICA6
IF9CYXNlKF9fbiwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fZmluaXNoID0gdW5pbml0aWFs
aXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX1RwKCkpOyB9CgogIHZlY3Rvcihjb25zdCB2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgICA6IF9CYXNlKF9feC5zaXplKCksIF9feC5nZXRfYWxs
b2NhdG9yKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4o
KSwgX194LmVuZCgpLCBfTV9zdGFydCk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUo
KSkgOiBfQmFzZShfX2EpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0
SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01faW5pdGlhbGl6ZV9hdXgoX19m
aXJzdCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVn
ZXI+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFs
dWUsIF9fdHJ1ZV90eXBlKSB7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5pbml0
aWFsaXplZF9maWxsX24oX01fc3RhcnQsIF9fbiwgX192YWx1ZSk7CiAgfQoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVy
YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX19maXJzdCwgX19s
YXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICB9CgogIH52ZWN0b3IoKSB7IGRl
c3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVjdG9yPF9UcCwgX0FsbG9jPiYgb3Bl
cmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCk7CiAgdm9pZCByZXNlcnZlKHNp
emVfdHlwZSBfX24pIHsKICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgIGNvbnN0IHNp
emVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxs
b2NhdGVfYW5kX2NvcHkoX19uLCBfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgZGVzdHJveShf
TV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5k
X29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9N
X2ZpbmlzaCA9IF9fdG1wICsgX19vbGRfc2l6ZTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
TV9zdGFydCArIF9fbjsKICAgIH0KICB9CgoKCgoKCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9f
biwgY29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZv
aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f
YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2Vy
IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigo
c2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0
SXRlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IF9NX2Fzc2lnbl9hdXgoX19maXJzdCwg
X19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
aXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9p
ZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAg
cmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICBjb25zdF9yZWZlcmVuY2Ug
ZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsgfQogIHJlZmVyZW5jZSBiYWNrKCkgeyBy
ZXR1cm4gKihlbmQoKSAtIDEpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KCiAgdm9pZCBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gpIHsK
ICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0
KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAg
IF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQogIHZvaWQgcHVzaF9iYWNrKCkgewogICAg
aWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBjb25zdHJ1Y3QoX01f
ZmluaXNoKTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNlCiAgICAgIF9NX2luc2Vy
dF9hdXgoZW5kKCkpOwogIH0KICB2b2lkIHN3YXAodmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KSB7
CiAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICBzdGQ6OnN3YXAoX01f
ZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgIHN0ZDo6c3dhcChfTV9lbmRfb2Zfc3RvcmFnZSwg
X194Ll9NX2VuZF9vZl9zdG9yYWdlKTsKICB9CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBf
X3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRp
b24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBf
X3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gsIF9feCk7CiAg
ICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJh
dG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkgKyBfX247CiAgfQogIGl0
ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uKSB7CiAgICBzaXplX3R5cGUgX19uID0g
X19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9y
YWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7
CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0
ZXJhdG9yKF9fcG9zaXRpb24pKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCiAgdGVt
cGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
LCBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2lu
c2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3Zh
bCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9p
bnNlcnQoX19wb3MsIChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwpOyB9CgogIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRv
ciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0
LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxz
ZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19p
dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB2b2lkIGluc2VydCAoaXRlcmF0b3Ig
X19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQogICAgeyBfTV9maWxsX2luc2Vy
dChfX3BvcywgX19uLCBfX3gpOyB9CgogIHZvaWQgX01fZmlsbF9pbnNlcnQgKGl0ZXJhdG9yIF9f
cG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCk7CgogIHZvaWQgcG9wX2JhY2soKSB7
CiAgICAtLV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICB9CiAgaXRlcmF0b3Ig
ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVu
ZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAt
LV9NX2ZpbmlzaDsKICAgIGRlc3Ryb3koX01fZmluaXNoKTsKICAgIHJldHVybiBfX3Bvc2l0aW9u
OwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp
IHsKICAgIGl0ZXJhdG9yIF9faShjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpKTsKICAgIGRl
c3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9maW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0g
X19maXJzdCk7CiAgICByZXR1cm4gX19maXJzdDsKICB9CgogIHZvaWQgcmVzaXplKHNpemVfdHlw
ZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXpl
KCkpCiAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAg
ICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiAgdm9pZCBy
ZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUpIHsgcmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsg
fQogIHZvaWQgY2xlYXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQoKcHJvdGVjdGVkOgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICBwb2ludGVyIF9NX2FsbG9jYXRl
X2FuZF9jb3B5KHNpemVfdHlwZSBfX24sIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9y
IF9fbGFzdCkKICB7CiAgICBwb2ludGVyIF9fcmVzdWx0ID0gX01fYWxsb2NhdGUoX19uKTsKICAg
IHRyeSB7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0
KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQogICAgY2F0Y2goLi4uKSB7IF9NX2RlYWxs
b2NhdGUoX19yZXN1bHQsIF9fbik7IHRocm93OyB9OwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3Qs
IGlucHV0X2l0ZXJhdG9yX3RhZykKICB7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr
K19fZmlyc3QpCiAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgfQoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJk
SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
YXRvciBfX2xhc3QsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogIHsKICAgIHNpemVfdHlwZSBfX24g
PSAwOwogICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgX01fc3RhcnQgPSBf
TV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsK
ICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0
YXJ0KTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIF9NX3Jh
bmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPT0o
Y29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+
JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVx
dWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9feS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcjwoY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBy
ZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX194LmJlZ2luKCksIF9feC5lbmQoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcCh2ZWN0
b3I8X1RwLCBfQWxsb2M+JiBfX3gsIHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIF9feC5z
d2FwKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv
b2wKb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rv
cjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCB2
ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkg
ewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0
b3I+PShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9B
bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
VHAsIGNsYXNzIF9BbGxvYz4KdmVjdG9yPF9UcCxfQWxsb2M+Jgp2ZWN0b3I8X1RwLF9BbGxvYz46
Om9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCnsKICBpZiAoJl9feCAh
PSB0aGlzKSB7CiAgICBjb25zdCBzaXplX3R5cGUgX194bGVuID0gX194LnNpemUoKTsKICAgIGlm
IChfX3hsZW4gPiBjYXBhY2l0eSgpKSB7CiAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxvY2F0
ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICBkZXN0cm95
KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9l
bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYg
KHNpemUoKSA+PSBfX3hsZW4pIHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgYmVnaW4oKSkpOwogICAgICBkZXN0cm95KF9faSwgZW5kKCkpOwogICAgfQog
ICAgZWxzZSB7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5iZWdpbigpICsgc2l6ZSgpLCBf
TV9zdGFydCk7CiAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSArIHNpemUoKSwg
X194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgfQogICAgX01fZmluaXNoID0gX01fc3RhcnQgKyBf
X3hsZW47CiAgfQogIHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVfdCBf
X24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKQp7CiAgaWYgKF9fbiA+IGNhcGFjaXR5KCkpIHsK
ICAgIHZlY3RvcjxfVHAsIF9BbGxvYz4gX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigp
KTsKICAgIF9fdG1wLnN3YXAoKnRoaXMpOwogIH0KICBlbHNlIGlmIChfX24gPiBzaXplKCkpIHsK
ICAgIGZpbGwoYmVnaW4oKSwgZW5kKCksIF9fdmFsKTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gc2l6ZSgpLCBfX3ZhbCk7CiAgfQogIGVsc2UK
ICAgIGVyYXNlKGZpbGxfbihiZWdpbigpLCBfX24sIF9fdmFsKSwgZW5kKCkpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyPgp2
b2lkIHZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19jdXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19m
aXJzdCkKICAgICpfX2N1ciA9ICpfX2ZpcnN0OwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
IGVyYXNlKF9fY3VyLCBlbmQoKSk7CiAgZWxzZQogICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBf
X2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXI+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fYXNzaWduX2F1
eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogIHNpemVfdHlw
ZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CgogIGlmIChf
X2xlbiA+IGNhcGFjaXR5KCkpIHsKICAgIHBvaW50ZXIgX190bXAoX01fYWxsb2NhdGVfYW5kX2Nv
cHkoX19sZW4sIF9fZmlyc3QsIF9fbGFzdCkpOwogICAgZGVzdHJveShfTV9zdGFydCwgX01fZmlu
aXNoKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
c3RhcnQpOwogICAgX01fc3RhcnQgPSBfX3RtcDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01f
ZmluaXNoID0gX01fc3RhcnQgKyBfX2xlbjsKICB9CiAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVu
KSB7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goY29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0
YXJ0KSk7CiAgICBkZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0g
X19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQg
PSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwg
X19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21p
ZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK
ICAgICsrX01fZmluaXNoOwogICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgY29weV9iYWNrd2Fy
ZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2ggLSAyKSwgaXRlcmF0b3IoX01fZmluaXNo
LSAxKSk7CiAgICAqX19wb3NpdGlvbiA9IF9feF9jb3B5OwogIH0KICBlbHNlIHsKICAgIGNvbnN0
IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVu
ID0gX19vbGRfc2l6ZSAhPSAwID8gMiAqIF9fb2xkX3NpemUgOiAxOwogICAgaXRlcmF0b3IgX19u
ZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChf
X25ld19zdGFydCk7CiAgICB0cnkgewogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19uZXdfc3RhcnQpOwogICAgICBjb25zdHJ1Y3QoX19uZXdf
ZmluaXNoLmJhc2UoKSwgX194KTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsK
ICAgIH0KICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp
LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg
ICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9N
X2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5i
YXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAgX01fZW5kX29m
X3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNl
cnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlKSB7CiAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsK
ICAgICsrX01fZmluaXNoOwogICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVyYXRvcihf
TV9maW5pc2ggLSAyKSwKICAgICAgICAgICAgICAgICAgaXRlcmF0b3IoX01fZmluaXNoIC0gMSkp
OwogICAgKl9fcG9zaXRpb24gPSBfVHAoKTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5
cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk
X3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIHBvaW50ZXIgX19uZXdfc3RhcnQg
PSBfTV9hbGxvY2F0ZShfX2xlbik7CiAgICBwb2ludGVyIF9fbmV3X2ZpbmlzaCA9IF9fbmV3X3N0
YXJ0OwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0
ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaCk7
CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVk
X2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAgICBjYXRjaCguLi4p
IHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVhbGxvY2F0ZShfX25l
d19zdGFydCxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICBkZXN0cm95KGJlZ2luKCksIGVuZCgpKTsK
ICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQp
OwogICAgX01fc3RhcnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zpbmlz
aDsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+
OjpfTV9maWxsX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAg
aWYgKF9fbiAhPSAwKSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01f
ZmluaXNoKSA+PSBfX24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBz
aXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0
b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19u
KSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNo
LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNr
d2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAg
ICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0K
ICAgICAgZWxzZSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24g
LSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9f
ZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xk
X2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsK
ICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9
CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXpl
KCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRf
c2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p
KTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsK
ICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3Np
dGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
ZmlsbF9uKF9fbmV3X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAg
ICAgICAgPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2Zpbmlz
aCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3
X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93
OyB9OwoKICAgICAgZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxv
Y2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0
YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2gu
YmFzZSgpOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9f
bGVuOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01f
cmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKewogIGZvciAoIDsgX19maXJzdCAh
PSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0
KTsKICAgICsrX19wb3M7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+
IHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxv
Yz46Ol9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewog
IGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICBkaXN0
YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbik7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9z
dG9yYWdlIC0gX01fZmluaXNoKSA+PSBfX24pIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxl
bXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xkX2Zpbmlz
aChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAgICAgIHVu
aW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmluaXNoKTsK
ICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlv
biwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGNvcHkoX19maXJz
dCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkLCBfX2Vs
ZW1zX2FmdGVyKTsKICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01f
ZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAg
ICB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gp
OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX2VsZW1zX2FmdGVyOwogICAgICAgIGNvcHkoX19maXJz
dCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBf
X2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsKICAgICAgaXRlcmF0b3Ig
X19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRlcmF0b3IgX19uZXdfZmlu
aXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmlu
aXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3Bvc2l0aW9uLCBfX25ld19zdGFydCk7CiAgICAgICAgX19u
ZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19uZXdfZmlu
aXNoKTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0K
ICAgICAgY2F0Y2goLi4uKSB7IChkZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9N
X2RlYWxsb2NhdGUoX19uZXdfc3RhcnQuYmFzZSgpLF9fbGVuKSk7IHRocm93OyB9OwoKICAgICAg
ZGVzdHJveShfTV9zdGFydCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFy
dCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX19uZXdf
c3RhcnQuYmFzZSgpOwogICAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgfQog
IH0KfQoKfQojIDY3ICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIg
MiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAxIDMK
IyA2MyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKc3RhdGljIGNvbnN0IGludCBfX1dPUkRfQklUID0gaW50KDgqc2l6ZW9mKHVu
c2lnbmVkIGludCkpOwoKc3RydWN0IF9CaXRfcmVmZXJlbmNlIHsKICB1bnNpZ25lZCBpbnQqIF9N
X3A7CiAgdW5zaWduZWQgaW50IF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UodW5zaWduZWQgaW50
KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fbWFzayhfX3kpIHt9
CgpwdWJsaWM6CiAgX0JpdF9yZWZlcmVuY2UoKSA6IF9NX3AoMCksIF9NX21hc2soMCkge30KICBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISghKCpfTV9wICYgX01fbWFzaykpOyB9CiAg
X0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShib29sIF9feCkKICB7CiAgICBpZiAoX194KSAqX01f
cCB8PSBfTV9tYXNrOwogICAgZWxzZSAqX01fcCAmPSB+X01fbWFzazsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgX0JpdF9yZWZlcmVuY2UmIG9wZXJhdG9yPShjb25zdCBfQml0X3JlZmVyZW5jZSYg
X194KQogICAgeyByZXR1cm4gKnRoaXMgPSBib29sKF9feCk7IH0KICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIGJvb2woKnRoaXMp
ID09IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBf
X3gpIGNvbnN0IHsKICAgIHJldHVybiAhYm9vbCgqdGhpcykgJiYgYm9vbChfX3gpOwogIH0KICB2
b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0Jp
dF9yZWZlcmVuY2UgX194LCBfQml0X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194
OwogIF9feCA9IF9feTsKICBfX3kgPSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFz
ZSA6IHB1YmxpYyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yPGJvb2wsIHB0cmRpZmZfdD4KewogIHVu
c2lnbmVkIGludCogX01fcDsKICB1bnNpZ25lZCBpbnQgX01fb2Zmc2V0OwoKICBfQml0X2l0ZXJh
dG9yX2Jhc2UodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3Ao
X194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9pZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9N
X29mZnNldCsrID09IF9fV09SRF9CSVQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAg
ICsrX01fcDsKICAgIH0KICB9CiAgdm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zm
c2V0LS0gPT0gMCkgewogICAgICBfTV9vZmZzZXQgPSBfX1dPUkRfQklUIC0gMTsKICAgICAgLS1f
TV9wOwogICAgfQogIH0KCiAgdm9pZCBfTV9pbmNyKHB0cmRpZmZfdCBfX2kpIHsKICAgIGRpZmZl
cmVuY2VfdHlwZSBfX24gPSBfX2kgKyBfTV9vZmZzZXQ7CiAgICBfTV9wICs9IF9fbiAvIF9fV09S
RF9CSVQ7CiAgICBfX24gPSBfX24gJSBfX1dPUkRfQklUOwogICAgaWYgKF9fbiA8IDApIHsKICAg
ICAgX01fb2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uICsgX19XT1JEX0JJVDsKICAgICAgLS1f
TV9wOwogICAgfSBlbHNlCiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBpbnQpIF9fbjsKICB9
CgogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3Qg
ewogICAgcmV0dXJuIF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0ID09IF9faS5fTV9vZmZz
ZXQ7CiAgfQogIGJvb2wgb3BlcmF0b3I8KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBj
b25zdCB7CiAgICByZXR1cm4gX01fcCA8IF9faS5fTV9wIHx8IChfTV9wID09IF9faS5fTV9wICYm
IF9NX29mZnNldCA8IF9faS5fTV9vZmZzZXQpOwogIH0KICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
X0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzID09IF9f
aSk7CiAgfQogIGJvb2wgb3BlcmF0b3I+KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBj
b25zdCB7CiAgICByZXR1cm4gX19pIDwgKnRoaXM7CiAgfQogIGJvb2wgb3BlcmF0b3I8PShjb25z
dCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoX19pIDwgKnRo
aXMpOwogIH0KICBib29sIG9wZXJhdG9yPj0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kp
IGNvbnN0IHsKICAgIHJldHVybiAhKCp0aGlzIDwgX19pKTsKICB9Cn07CgppbmxpbmUgcHRyZGlm
Zl90Cm9wZXJhdG9yLShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feCwgY29uc3QgX0JpdF9p
dGVyYXRvcl9iYXNlJiBfX3kpIHsKICByZXR1cm4gX19XT1JEX0JJVCAqIChfX3guX01fcCAtIF9f
eS5fTV9wKSArIF9feC5fTV9vZmZzZXQgLSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRf
aXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVm
ZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5
cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVyYXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9p
dGVyYXRvcl9iYXNlKDAsIDApIHt9CiAgX0JpdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwg
dW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoK
ICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFV
IDw8IF9NX29mZnNldCk7IH0KICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBf
dXAoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsK
ICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4g
X190bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7
CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBp
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190
bXA7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAg
IF9NX2luY3IoX19pKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9y
LT0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0
IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwog
IH0KICBpdGVyYXRvciBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAg
aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICBy
ZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlz
ICsgX19pKTsgfQp9OwoKaW5saW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBf
X24sIGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3Ry
dWN0IF9CaXRfY29uc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0
eXBlZGVmIGJvb2wgcmVmZXJlbmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAg
dHlwZWRlZiBjb25zdCBib29sKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKCiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRv
cl9iYXNlKDAsIDApIHt9CiAgX0JpdF9jb25zdF9pdGVyYXRvcih1bnNpZ25lZCBpbnQqIF9feCwg
dW5zaWduZWQgaW50IF9feSkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQog
IF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3QgX0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0
X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9feC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVy
ZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAgICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwg
MVUgPDwgX01fb2Zmc2V0KTsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAg
ICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9w
ZXJhdG9yKysoaW50KSB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgX01f
YnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0
b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25z
dF9pdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgY29uc3RfaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBjb25zdF9p
dGVyYXRvciYgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9f
aSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvci09KGRp
ZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGNvbnN0X2l0ZXJhdG9yIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25z
dCB7CiAgICBjb25zdF9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9
IF9faTsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kp
IGNvbnN0IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190
bXAgLT0gX19pOwogIH0KICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3JbXShkaWZmZXJlbmNlX3R5
cGUgX19pKSB7CiAgICByZXR1cm4gKigqdGhpcyArIF9faSk7CiAgfQp9OwoKaW5saW5lIF9CaXRf
Y29uc3RfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfY29uc3Rf
aXRlcmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKCgoKCnRlbXBsYXRlIDxjbGFz
cyBfQWxsb2NhdG9yLCBib29sIF9faXNfc3RhdGljPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNl
IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2Nh
dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv
cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvcjsg
fQoKICBfQnZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6
IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgpLCBfTV9lbmRf
b2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHVuc2lnbmVkIGludCogX01fYml0X2FsbG9j
KHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZSgoX19u
ICsgX19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkg
ewogICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9l
bmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9NX3ApOwogIH0KCiAgdHlwZW5hbWUgX0FsbG9jX3Ry
YWl0czx1bnNpZ25lZCBpbnQsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAg
X01fZGF0YV9hbGxvY2F0b3I7CiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJh
dG9yIF9NX2ZpbmlzaDsKICB1bnNpZ25lZCBpbnQqIF9NX2VuZF9vZl9zdG9yYWdlOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxv
Y2F0b3IsIHRydWU+IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxi
b29sLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBl
OwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0
b3JfdHlwZSgpOyB9CgogIF9CdmVjdG9yX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
KQogICAgOiBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30K
CnByb3RlY3RlZDoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50
LCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICB1bnNp
Z25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5
cGU6OmFsbG9jYXRlKChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVCk7IH0KICB2b2lk
IF9NX2RlYWxsb2NhdGUoKSB7CiAgICBpZiAoX01fc3RhcnQuX01fcCkKICAgICAgX0FsbG9jX3R5
cGU6OmRlYWxsb2NhdGUoX01fc3RhcnQuX01fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5fTV9wKTsKICB9CgogIF9CaXRfaXRlcmF0
b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5zaWduZWQgaW50KiBf
TV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVj
dG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5z
dGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19p
bnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUg
X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNv
bnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNl
KCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9CgoKIyAxICIvb3B0L2djYy9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAzCiMgMzQ3ICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBsYXRl
IDx0eXBlbmFtZSBfQWxsb2M+CiAgY2xhc3MgdmVjdG9yPGJvb2wsIF9BbGxvYz4gOiBwdWJsaWMg
X0J2ZWN0b3JfYmFzZTxfQWxsb2M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYgYm9vbCB2YWx1
ZV90eXBlOwogICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgdHlwZWRlZiBwdHJkaWZm
X3QgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7
CiAgICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiBfQml0X3JlZmVy
ZW5jZSogcG9pbnRlcjsKICAgIHR5cGVkZWYgY29uc3QgYm9vbCogY29uc3RfcG9pbnRlcjsKCiAg
ICB0eXBlZGVmIF9CaXRfaXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIF9CaXRfY29uc3Rf
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CgogICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNv
bnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
ICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBf
QnZlY3Rvcl9iYXNlPF9BbGxvYz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVk
OgogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2lu
ZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rv
cl9iYXNlPF9BbGxvYz46Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+
OjpfTV9maW5pc2g7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9z
dG9yYWdlOwoKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9f
bikgewogICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBf
TV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX24gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJ
VDsKICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBf
TV9zdGFydCArIGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRf
YXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2gu
X01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgX01fZmluaXNoLCBfTV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9f
eDsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXpl
X3R5cGUgX19sZW4gPSBzaXplKCkgPyAyICogc2l6ZSgpIDogX19XT1JEX0JJVDsKICAgICAgICB1
bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3Ig
X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAg
ICAqX19pKysgPSBfX3g7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQo
KSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3Jh
Z2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAgICBf
TV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0
SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJh
dG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAg
ICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gMDsK
ICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX24pOwogICAgICBfTV9pbml0aWFsaXpl
KF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAgICB9CgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2Uo
aXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KSB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsKICAgICAg
ICArK19fcG9zOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl
cmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3Bvc2l0aW9uLAogICAg
ICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3Jf
dGFnKSB7CiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIHNpemVfdHlwZSBf
X24gPSAwOwogICAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgICAgICBp
ZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQo
X19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAg
ICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9NX2Zp
bmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwogICAg
ICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAg
aXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDAp
KTsKICAgICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAg
X01fZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2Rl
YWxsb2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsg
X19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y
KF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N
X2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fZmlu
aXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNlX2l0
ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBjb25z
dCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0KICAg
IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVnaW4o
KSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAgcmV0
dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90eXBl
IHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQogICAg
c2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQogICAg
c2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNvbnN0
X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAgYm9v
bCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZlcmVu
Y2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkgKyBk
aWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNp
emVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2Vf
dHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikgY29u
c3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X3Jhbmdl
X2Vycm9yKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBl
IF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9
CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9y
YW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVj
dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6
IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24s
IGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAg
ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f
ZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZl
Y3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0
b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01f
c3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihjb25z
dCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3Io
KSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5iZWdp
bigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAg
ICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAg
ICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNv
bnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsK
ICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0
ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29w
eShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0gYmVn
aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkg
ewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBf
TV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9f
biAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdp
bigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf
c3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNp
emVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
ICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9N
X2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fz
c2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWdu
X2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9f
Y3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAh
PSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0Owog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsK
ICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0K
CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWdu
X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwog
ICAgICBpZiAoX19sZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xh
c3QsIGJlZ2luKCkpLCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0
b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAg
ICAgY29weShfX2ZpcnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBf
X21pZCwgX19sYXN0KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg
X19uKSB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgdW5zaWduZWQgaW50
KiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2lu
KCksIGVuZCgpLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAg
ICAgICAgX01fc3RhcnQgPSBpdGVyYXRvcihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9y
YWdlID0gX19xICsgKF9fbiArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICB9CiAg
ICB9CgogICAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0
X3JlZmVyZW5jZSBmcm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVu
Y2UgYmFjaygpIHsgcmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJh
Y2soKSBjb25zdCB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJv
b2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkK
ICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRf
YXV4KGVuZCgpLCBfX3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+
JiBfX3gpIHsKICAgICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBz
dGQ6OnN3YXAoX01fZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2Vu
ZF9vZl9zdG9yYWdlLCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQogICAgaXRlcmF0b3Ig
aW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGJvb2wgX194ID0gYm9vbCgpKSB7CiAgICAgIGRp
ZmZlcmVuY2VfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVnaW4oKTsKICAgICAgaWYgKF9NX2Zp
bmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpCiAg
ICAgICAgKl9NX2ZpbmlzaCsrID0gX194OwogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1
eChfX3Bvc2l0aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCgoK
ICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01faW5zZXJ0X2Rpc3BhdGNo
KGl0ZXJhdG9yIF9fcG9zLCBfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9z
LCBfX24sIF9feCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01f
aW5zZXJ0X3JhbmdlKF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAg
IHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICBfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7
CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBfX2xhc3QsIF9J
bnRlZ3JhbCgpKTsKICAgIH0KCiAgICB2b2lkIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9z
aXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPT0gMCkgcmV0
dXJuOwogICAgICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICBjb3B5
X2JhY2t3YXJkKF9fcG9zaXRpb24sIGVuZCgpLCBfTV9maW5pc2ggKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSk7CiAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX3Bvc2l0aW9uICsgZGlmZmVyZW5jZV90
eXBlKF9fbiksIF9feCk7CiAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24p
OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSAr
IG1heChzaXplKCksIF9fbik7CiAgICAgICAgdW5zaWduZWQgaW50KiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlv
biwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAg
ICAgIF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2Vf
dHlwZShfX24pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0
b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsKICAgICAg
ICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwgMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGlu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLCBib29sIF9feCkgewogICAg
ICBfTV9maWxsX2luc2VydChfX3Bvc2l0aW9uLCBfX24sIF9feCk7CiAgICB9CgogICAgdm9pZCBw
b3BfYmFjaygpIHsgLS1fTV9maW5pc2g7IH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9f
cG9zaXRpb24pIHsKICAgICAgaWYgKF9fcG9zaXRpb24gKyAxICE9IGVuZCgpKQogICAgICAgIGNv
cHkoX19wb3NpdGlvbiArIDEsIGVuZCgpLCBfX3Bvc2l0aW9uKTsKICAgICAgICAtLV9NX2Zpbmlz
aDsKICAgICAgcmV0dXJuIF9fcG9zaXRpb247CiAgICB9CiAgICBpdGVyYXRvciBlcmFzZShpdGVy
YXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgICAgX01fZmluaXNoID0gY29weShf
X2xhc3QsIGVuZCgpLCBfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiAgICB2
b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdfc2l6ZSwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAg
ICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIGRpZmZl
cmVuY2VfdHlwZShfX25ld19zaXplKSwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0
KGVuZCgpLCBfX25ld19zaXplIC0gc2l6ZSgpLCBfX3gpOwogICAgfQogICAgdm9pZCBmbGlwKCkg
ewogICAgICBmb3IgKHVuc2lnbmVkIGludCogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9N
X2VuZF9vZl9zdG9yYWdlOyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAg
dm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZl
Y3Rvcjxib29sLCBhbGxvYz4gYml0X3ZlY3RvcjsKCn0KIyA2OCAiL29wdC9nY2MvaW5jbHVkZS9n
KystdjMvYml0cy9zdGRfdmVjdG9yLmgiIDIgMwojIDQ0ICIvb3B0L2djYy9pbmNsdWRlL2crKy12
My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29tYmluZShjb25zdCBs
b2NhbGUmIF9fb3RoZXIpCiAgICB7CiAgICAgIGxvY2FsZSBfX2NvcHkoKnRoaXMpOwogICAgICBf
X2NvcHkuX01faW1wbC0+X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6
OmlkKTsKICAgICAgcmV0dXJuIF9fY29weTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2Nh
bGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6
Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlw
ZSogX19mY29sbCA9ICZ1c2VfZmFjZXQ8X19jb2xsYXRlX3R5cGU+KCp0aGlzKTsKICAgICAgcmV0
dXJuIChfX2Zjb2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVu
Z3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5k
YXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
RmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xv
YykKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9JbXBsOjpfX3ZlY19mYWNldCBfX3ZlY19m
YWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQuX01faW5kZXg7CiAgICAgIF9fdmVj
X2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBjb25zdCBs
b2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtfX2ldOwogICAgICBpZiAoX19mcCA9PSAw
IHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpCiAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwog
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0Jj4oKl9fZnApOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9j
YWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICB0eXBlZGVmIGxvY2FsZTo6X0ltcGw6Ol9f
dmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBzaXplX3QgX19pID0gX0ZhY2V0OjppZC5fTV9p
bmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFjZXQgPSBfX2xvYy5fTV9pbXBsLT5fTV9mYWNl
dHM7CiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6ZSgpICYmICgqX19mYWNldClbX19p
XSAhPSAwKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5h
bWUgX0NoYXJUPgogICAgX0luSXRlcgogICAgX19tYXRjaF9wYXJhbGxlbChfSW5JdGVyIF9fcywg
X0luSXRlciBfX2VuZCwgaW50IF9fbnRhcmdzLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBi
YXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLAogICAgICAgICAgICAgICAgICAgICBpbnQq
IF9fbWF0Y2hlcywgaW50JiBfX3JlbWFpbiwgYm9vbCYgX19lb2YpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKICAgICAgX19lb2YgPSBmYWxz
ZTsKICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkgPCBfX250YXJnczsgKytfX3RpKQogICAg
ICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7CiAgICAgIF9fcmVtYWluID0gX19udGFyZ3M7CiAg
ICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgaW50IF9f
dGkgPSAwOwogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3JlbWFpbiAmJiBfX3BvcyA9PSBfX3Rh
cmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAgICAgICAgICAgICsrX190aTsKICAgICAg
ICAgIGlmIChfX3RpID09IF9fcmVtYWluKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KF9fcG9zID09IDApIF9fcmVtYWluID0gMDsKICAgICAgICAgICAgICByZXR1cm4gX19zOwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX19zID09IF9fZW5kKQogICAgICAgICAgICBfX2VvZiA9
IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChp
bnQgX190aTIgPSAwOyBfX3RpMiA8IF9fcmVtYWluOyApCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9IF9fdGFyZ2V0c1tfX21hdGNoZXNb
X190aTJdXTsKICAgICAgICAgICAgICBpZiAoX19wb3MgPCBfX3RhcmdldC5zaXplKCkpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX2VvZiB8fCBfX3RhcmdldFtfX3Bv
c10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBf
X21hdGNoZXNbX190aTJdID0gX19tYXRjaGVzWy0tX19yZW1haW5dOwogICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBf
X21hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICsrX190aTI7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX21hdGNoZWQpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICB9CiAg
ICAgICAgICBmb3IgKGludCBfX3RpMyA9IDA7IF9fdGkzIDwgX19yZW1haW47KQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID4gX190YXJnZXRzW19fbWF0Y2hlc1tfX3RpM11d
LnNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19tYXRjaGVzW19f
dGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytfX3RpMzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgd2hpbGUgKF9fcmVtYWluKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+Ojpf
Rm9ybWF0X2NhY2hlKCkKICAgIDogX01fdmFsaWQodHJ1ZSksIF9NX3VzZV9ncm91cGluZyhmYWxz
ZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0X2NhY2hlPGNoYXI+OjpfRm9ybWF0
X2NhY2hlKCk7CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRfY2FjaGU8d2NoYXJfdD46Ol9Gb3Jt
YXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgX0Zv
cm1hdF9jYWNoZTxfQ2hhclQ+OjpfTV9wb3B1bGF0ZShpb3NfYmFzZSYgX19pbykKICAgIHsKICAg
ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MgKCk7CiAgICAgIG51bXB1bmN0PF9DaGFyVD4g
Y29uc3QmIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
X01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAgIF9NX2ZhbHNlbmFtZSA9IF9fbnAu
ZmFsc2VuYW1lKCk7CiAgICAgIF9NX3Rob3VzYW5kc19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAo
KTsKICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVjaW1hbF9wb2ludCgpOwogICAgICBf
TV9ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgX01fdXNlX2dyb3VwaW5nID0gX01f
Z3JvdXBpbmcuc2l6ZSgpICE9IDAgJiYgX01fZ3JvdXBpbmcuZGF0YSgpWzBdICE9IDA7CiAgICAg
IF9NX3ZhbGlkID0gdHJ1ZTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg
ICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46OgogICAgX1NfY2FsbGJhY2soaW9zX2Jh
c2U6OmV2ZW50IF9fZXYsIGlvc19iYXNlJiBfX2lvcywgaW50IF9faXgpIHRocm93KCkKICAgIHsK
ICAgICAgdm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9faXgpOwogICAgICBzd2l0Y2ggKF9fZXYp
CiAgICAgICAgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmVyYXNlX2V2ZW50OgogICAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCk7CiAgICAgICAg
ICBfX3AgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6Y29weWZt
dF9ldmVudDoKCiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3AgPSBuZXcgX0Zvcm1hdF9j
YWNoZTxfQ2hhclQ+OyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsgfQogICAg
ICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6aW1idWVfZXZlbnQ6CiAgICAgICAg
ICBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4qPihfX3ApLT5fTV92YWxpZCA9IGZh
bHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICBfRm9ybWF0X2NhY2hlPF9D
aGFyVD46Ol9TX2dldChpb3NfYmFzZSYgX19pb3MpCiAgICB7CiAgICAgIGlmICghX1NfcHdvcmRf
aXgpCiAgICAgICAgX1NfcHdvcmRfaXggPSBpb3NfYmFzZTo6eGFsbG9jKCk7CiAgICAgIHZvaWQq
JiBfX3AgPSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7CgoKICAgICAgaWYgKF9fcCA9PSAwKQog
ICAgICAgIHsKICAgICAgICAgIGF1dG9fcHRyPF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiA+IF9fYXAo
bmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPik7CiAgICAgICAgICBfX2lvcy5yZWdpc3Rlcl9jYWxs
YmFjaygmX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxsYmFjaywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9TX3B3b3JkX2l4KTsKICAgICAgICAgIF9fcCA9IF9fYXAucmVs
ZWFzZSgpOwogICAgICAgIH0KICAgICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX25jcCA9IHN0
YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9fcCk7CiAgICAgIGlmICghX19uY3At
Pl9NX3ZhbGlkKQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0ZShfX2lvcyk7CgogICAgICByZXR1
cm4gX19uY3A7CiAgICB9CiMgMjUwICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs
ZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgdm9pZAogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJh
Y3QoX0luSXRlciAsIF9Jbkl0ZXIgLCBpb3NfYmFzZSYgLAogICAgICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgLCBjaGFyKiAsCiAgICAgICAgICAgICAgIGludCYgLCBib29sICkgY29uc3QK
ICAgIHsKCiAgICB9CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0
cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVy
YXRvcjxjaGFyPiBfX2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFy
PiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgY2hhciogX194dHJjLCBpbnQmIF9fYmFzZSwKICAgICAgICAgICAgICAgYm9vbCBf
X2ZwKSBjb25zdDsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAg
ICAgIGlmICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsK
CgoKCgoKICAgICAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF0gPSB7
J1wwJ307CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAgICAgX01fZXh0cmFjdChfX2JlZywg
X19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgICAgICBj
aGFyKiBfX3Nhbml0eTsKICAgICAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAg
ICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAg
ICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgICAgICYmIF9f
bCA8PSAxCiAgICAgICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9
PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICAgICAgX192ID0g
X19sOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgX0Zv
cm1hdF9jYWNoZTxjaGFyX3R5cGU+IF9fZmNhY2hlX3R5cGU7CiAgICAgICAgICBfX2ZjYWNoZV90
eXBlKiBfX2ZtdCA9IF9fZmNhY2hlX3R5cGU6Ol9TX2dldChfX2lvKTsKICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX190cnVlID0gX19mbXQtPl9NX3RydWVuYW1lLmNfc3RyKCk7CiAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2UgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmNfc3RyKCk7
CiAgICAgICAgICBjb25zdCBzaXplX3QgX190cnVlbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fdHJ1ZSkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZmFsc2VsZW4gPSBfX3RyYWl0
c190eXBlOjpsZW5ndGgoX19mYWxzZSkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90IF9fcG9z
ID0gMDsgX19iZWcgIT0gX19lbmQ7ICsrX19wb3MpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RmID0g
X19jID09IF9fZmFsc2VbX19wb3NdOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0dCA9IF9fYyA9
PSBfX3RydWVbX19wb3NdOwogICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkp
CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpm
YWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICBlbHNlIGlmIChfX3Rlc3RmICYmIF9fcG9zID09IF9fZmFsc2VsZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdiA9IDA7CiAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdHQgJiYg
X19wb3MgPT0gX190cnVlbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBf
X3YgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0K
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIg
X194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFz
ZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9f
YmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9j
YXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHks
IF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg
ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v
X2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0zMjc2Ny0xKSAmJiBfX2wg
PD0gMzI3NjcpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8c2hvcnQ+KF9fbCk7CiAgICAgIGVs
c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog
ICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBpbnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAg
Y2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXSA9IHsnXDAnfTsKICAgICAgaW50
IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJy
bm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19z
YW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg
ICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpf
X2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwCiAgICAgICAgICAmJiBfX2wgPj0gKC0yMTQ3NDgzNjQ3
IC0xKSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxpbnQ+
KF9fbCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAg
ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25z
dAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1tfTV9leHRyYWN0X2J1ZmZlcl9sZW5ndGhdPSB7
J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0
eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgX19sID0gc3Ry
dG9sKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19i
YXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0
eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBf
X2w7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAg
ICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNv
bnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09
IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2Fu
aXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAgICAgbG9uZyBsb25nIF9f
bGwgPSBzdHJ0b2xsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2Vy
ciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYm
ICpfX3Nhbml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAg
ICBfX3YgPSBfX2xsOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0lu
SXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVk
IHNob3J0JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3Rf
YnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg
ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg
ICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNl
KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9f
c2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gNjU1MzUpCiAgICAgICAgX192ID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194
dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsK
ICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz
ZSwgZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRp
b24gKCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZf
X3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK
ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fdWwgPD0gKDIxNDc0ODM2
NDcgKiAyVSArIDEpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oX191
bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nJiBfX3Yp
IGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0
aF0gPSB7J1wwJ307CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9f
ZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBf
X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHVuc2lnbmVk
IGxvbmcgX191bCA9IHN0cnRvdWwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlm
ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf
X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw
KQogICAgICAgIF9fdiA9IF9fdWw7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19l
bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg
dW5zaWduZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJj
W19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAg
ICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwg
ZmFsc2UpOwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24g
KCkpID0gMDsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdWxsID0gc3RydG91bGwoX194dHJj
LCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxi
aXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcg
JiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdWxsOwogICAg
ICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CgoK
CiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy
LCBfX3h0cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq
X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwoKICAgICAgZmxvYXQgX19mID0gc3RydG9mKF9feHRy
YywgJl9fc2FuaXR5KTsKCgoKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkK
ICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAo
Kl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19mOwogICAgICBlbHNl
CiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAg
IF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAg
IGNoYXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50
IF9fYmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJu
b19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBkb3VibGUgX19kID0gc3RydG9kKF9feHRyYywgJl9f
c2FuaXR5KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg
ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9f
bG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19kOwogICAgICBlbHNlCiAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CgogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVy
CiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNo
YXIgX194dHJjW19NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9f
YmFzZTsKICAgICAgX01fZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMs
IF9fYmFzZSwgdHJ1ZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19s
b2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIGRvdWJsZSBfX2xkID0gc3RydG9sZChfX3h0cmMs
ICZfX3Nhbml0eSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAg
ICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vy
cm5vX2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbGQ7CiAgICAgIGVsc2UKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAg
IH0KIyA2NzggIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2Mi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBf
X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm
IGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFnczsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lv
LmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9fZm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3Mg
fCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3Nf
YmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhf
X2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7
CgoKCgogICAgICBjaGFyIF9feHRyY1tfTV9leHRyYWN0X2J1ZmZlcl9sZW5ndGhdPSB7J1wwJ307
CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9NX2V4dHJhY3QoX19iZWcsIF9fZW5kLCBfX2lvLCBf
X2VyciwgX194dHJjLCBfX2Jhc2UsIGZhbHNlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsKICAg
ICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIHZvaWQqIF9fdnAgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihzdHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpKTsKICAg
ICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5
ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkp
ID09IDApCiAgICAgICAgX192ID0gX192cDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlv
c19iYXNlOjpmYWlsYml0OwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGlubGluZSBfT3V0SXRlcgogICAgX19wYWQoX091dEl0ZXIgX19zLCBfQ2hhclQg
X19maWxsLCBpbnQgX19wYWRkaW5nKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1JhSXRlcj4KICAgIF9SYUl0ZXIKICAgIF9fcGFkKF9SYUl0ZXIgX19zLCBfQ2hhclQg
X19maWxsLCBpbnQgX19wYWRkaW5nLAogICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90
YWcpCiAgICB7CiAgICAgIGZpbGxfbihfX3MsIF9fZmlsbCk7CiAgICAgIHJldHVybiBfX3MgKyBf
X3BhZGRpbmc7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyLCB0eXBlbmFtZSBfVGFnPgogICAgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9f
cywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywgX1RhZykKICAgIHsKICAgICAgd2hpbGUg
KC0tX19wYWRkaW5nID49IDApIHsgKl9fcyA9IF9fZmlsbDsgKytfX3M7IH0KICAgICAgcmV0dXJu
IF9fczsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVyIF9fcywgX0NoYXJUIF9f
ZmlsbCwgaW50IF9fcGFkZGluZykKICAgIHsKICAgICAgcmV0dXJuIF9fcGFkKF9fcywgX19maWxs
LCBfX3BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X091dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgX19wYWRfbnVt
ZXJpYyhfT3V0SXRlciBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyAsCiAgICAgICAgICAgICAgICAg
IF9DaGFyVCAsIGludCAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogLCBfQ2hhclQg
Y29uc3QqICwKICAgICAgICAgICAgICAgICAgX0NoYXJUIGNvbnN0KiApCiAgewoKICAgICAgcmV0
dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQ+CiAgICBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVD4KICAgIF9fcGFkX251bWVyaWMob3N0cmVhbWJ1Zl9pdGVyYXRv
cjxfQ2hhclQ+IF9fcywgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MsCiAgICAgICAgICAgICAg
ICAgIF9DaGFyVCBfX2ZpbGwsIGludCBfX3dpZHRoLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19taWRkbGUsIF9DaGFyVCBjb25zdCogX19s
YXN0KQogICAgewogICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX291
dF9pdGVyOwogICAgICBpbnQgX19wYWRkaW5nID0gX193aWR0aCAtIChfX2xhc3QgLSBfX2ZpcnN0
KTsKICAgICAgaWYgKF9fcGFkZGluZyA8IDApCiAgICAgICAgX19wYWRkaW5nID0gMDsKICAgICAg
aW9zX2Jhc2U6OmZtdGZsYWdzIF9fYWZsYWdzID0gX19mbGFncyAmIGlvc19iYXNlOjphZGp1c3Rm
aWVsZDsKICAgICAgYm9vbCBfX3Rlc3RmaWVsZCA9IF9fcGFkZGluZyA9PSAwIHx8IF9fYWZsYWdz
ID09IGlvc19iYXNlOjpsZWZ0CiAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2FmbGFncyA9
PSBpb3NfYmFzZTo6aW50ZXJuYWw7CgoKICAgICAgaWYgKF9fZmlyc3QgIT0gX19taWRkbGUpCiAg
ICAgICAgewogICAgICAgICAgaWYgKCFfX3Rlc3RmaWVsZCkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIF9fcGFkKF9fcywgX19maWxsLCBfX3BhZGRpbmcpOwogICAgICAgICAgICAgIF9fcGFk
ZGluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19taWRkbGUs
IF9fcyk7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczIgPSBfX3M7CgogICAgICBpZiAo
X19wYWRkaW5nICYmIF9fYWZsYWdzICE9IGlvc19iYXNlOjpsZWZ0KQogICAgICAgIHsKICAgICAg
ICAgIF9fcGFkKF9fczIsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgIF9fcGFkZGluZyA9
IDA7CiAgICAgICAgfQogICAgICBfX291dF9pdGVyIF9fczMgPSBjb3B5KF9fbWlkZGxlLCBfX2xh
c3QsIF9fczIpOwogICAgICBpZiAoX19wYWRkaW5nKQogICAgICAgIF9fcGFkKF9fczMsIF9fZmls
bCwgX19wYWRkaW5nKTsKICAgICAgcmV0dXJuIF9fczM7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf
X2lvLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3QKICAgIHsKICAgICAgY29uc3Qg
X0Zvcm1hdF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1Nf
Z2V0KF9faW8pOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3Mo
KTsKCiAgICAgIGlmICgoX19mbGFncyAmIGlvc19iYXNlOjpib29sYWxwaGEpID09IDApCiAgICAg
ICAgewogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICAgICAgcmV0dXJu
IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3V2KTsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmly
c3Q7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbGFzdDsKICAgICAgICAgIGlmIChfX3Yp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2ZpcnN0ID0gX19mbXQtPl9NX3RydWVuYW1l
LmRhdGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX3RydWVu
YW1lLnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX19maXJzdCA9IF9fZm10LT5fTV9mYWxzZW5hbWUuZGF0YSgpOwogICAgICAg
ICAgICAgIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2ZtdC0+X01fZmFsc2VuYW1lLnNpemUoKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcyk7CiAgICAgICAg
fQogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFy
VD4KICAgIF9DaGFyVCoKICAgIF9fZ3JvdXBfZGlnaXRzKF9DaGFyVCogX19zLCBfQ2hhclQgX19n
cnNlcCwgY2hhciBjb25zdCogX19ncm91cGluZywKICAgICAgICAgICAgICAgICAgICBjaGFyIGNv
bnN0KiBfX2dyZW5kLCBfQ2hhclQgY29uc3QqIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
X0NoYXJUIGNvbnN0KiBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4g
Kl9fZ3JvdXBpbmcpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19ncm91cF9kaWdpdHMoX19z
LCBfX2dyc2VwLAogICAgICAgICAgICAgIChfX2dyb3VwaW5nICsgMSA9PSBfX2dyZW5kID8gX19n
cm91cGluZyA6IF9fZ3JvdXBpbmcgKyAxKSwKICAgICAgICAgICAgICBfX2dyZW5kLCBfX2ZpcnN0
LCBfX2xhc3QgLSAqX19ncm91cGluZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9f
Z3JvdXBpbmc7CiAgICAgICAgICAqX19zKysgPSBfX2dyc2VwOwogICAgICAgIH0KICAgICAgZG8K
ICAgICAgICB7CiAgICAgICAgICAqX19zKysgPSAqX19maXJzdCsrOwogICAgICAgIH0KICAgICAg
d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIsIHR5cGVuYW1lIF9WYWx1
ZVQ+CiAgICBfT3V0SXRlcgogICAgX19vdXRwdXRfaW50ZWdlcihfT3V0SXRlciBfX3MsIGlvc19i
YXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBib29sIF9fbmVnLAogICAgICAgICAgICAgIF9WYWx1
ZVQgX192KQogICAgewoKICAgICAgY29uc3QgbG9uZyBfTV9yb29tID0gbnVtZXJpY19saW1pdHM8
X1ZhbHVlVD46OmRpZ2l0czEwICogMiArIDQ7CiAgICAgIF9DaGFyVCBfX2RpZ2l0c1tfTV9yb29t
XTsKICAgICAgX0NoYXJUKiBfX2Zyb250ID0gX19kaWdpdHMgKyBfTV9yb29tOwogICAgICBpb3Nf
YmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAgICAgY29uc3QgX0Zvcm1h
dF9jYWNoZTxfQ2hhclQ+KiBfX2ZtdCA9IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPjo6X1NfZ2V0KF9f
aW8pOwogICAgICBjaGFyIGNvbnN0KiBfX3RhYmxlID0gX19mbXQtPl9TX2xpdGVyYWxzICsgX19m
bXQtPl9TX2RpZ2l0czsKCiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IChf
X2ZsYWdzICYgX19pby5iYXNlZmllbGQpOwogICAgICBfQ2hhclQqIF9fc2lnbl9lbmQgPSBfX2Zy
b250OwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICB7CiAg
ICAgICAgICBpZiAoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpCiAgICAgICAgICAgIF9f
dGFibGUgKz0gMTY7CiAgICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJs
ZVtfX3YgJiAxNV07CiAgICAgICAgICB3aGlsZSAoKF9fdiA+Pj0gNCkgIT0gMCk7CiAgICAgICAg
ICBfX3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICAgIGlmIChfX2ZsYWdzICYgaW9zX2Jhc2U6
OnNob3diYXNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10
LT5fU19saXRlcmFsc1tfX2ZtdC0+X1NfeCArCiAgICAgICAgICAgICAgICAgICAgICAgKChfX2Zs
YWdzICYgaW9zX2Jhc2U6OnVwcGVyY2FzZSkgPyAxIDogMCldOwogICAgICAgICAgICAgICotLV9f
ZnJvbnQgPSBfX3RhYmxlWzBdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlm
IChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6b2N0KQogICAgICAgIHsKICAgICAgICAgIGRvCiAg
ICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19fdiAmIDddOwogICAgICAgICAgd2hpbGUg
KChfX3YgPj49IDMpICE9IDApOwogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6c2hv
d2Jhc2UKICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxjaGFyPigqX19mcm9udCkgIT0gX190
YWJsZVswXSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbMF07CiAgICAgICAgICBf
X3NpZ25fZW5kID0gX19mcm9udDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CgogICAg
ICAgICAgZG8KICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fdGFibGVbX192ICUgMTBdOwogICAg
ICAgICAgd2hpbGUgKChfX3YgLz0gMTApICE9IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9f
ZnJvbnQ7CgogICAgICAgICAgaWYgKF9fbmVnIHx8IChfX2ZsYWdzICYgaW9zX2Jhc2U6OnNob3dw
b3MpKQogICAgICAgICAgICAqLS1fX2Zyb250ID0gX19mbXQtPl9TX2xpdGVyYWxzW19fZm10LT5f
U19wbHVzIC0gX19uZWddOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3Jv
dXBpbmcgJiYgIV9faW8ud2lkdGgoKSkKICAgICAgICByZXR1cm4gY29weShfX2Zyb250LCBfX2Rp
Z2l0cyArIF9NX3Jvb20sIF9fcyk7CgogICAgICBpZiAoIV9fZm10LT5fTV91c2VfZ3JvdXBpbmcp
CiAgICAgICAgcmV0dXJuIF9fcGFkX251bWVyaWMoX19zLCBfX2ZsYWdzLCBfX2ZpbGwsIF9faW8u
d2lkdGgoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mcm9udCwgX19zaWduX2Vu
ZCwgX19kaWdpdHMgKyBfTV9yb29tKTsKCiAgICAgIF9DaGFyVCogX19wID0gX19kaWdpdHM7CiAg
ICAgIHdoaWxlIChfX2Zyb250IDwgX19zaWduX2VuZCkKICAgICAgICAqX19wKysgPSAqX19mcm9u
dCsrOwogICAgICBjb25zdCBjaGFyKiBfX2dyID0gX19mbXQtPl9NX2dyb3VwaW5nLmRhdGEoKTsK
ICAgICAgX19mcm9udCA9IF9fZ3JvdXBfZGlnaXRzKF9fcCwgX19mbXQtPl9NX3Rob3VzYW5kc19z
ZXAsIF9fZ3IsCiAgICAgICAgX19nciArIF9fZm10LT5fTV9ncm91cGluZy5zaXplKCksIF9fc2ln
bl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CiAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9f
cywgX19mbGFncywgX19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2RpZ2l0cywgX19wLCBfX2Zyb250KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hh
clQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8s
IGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgewogICAgICB1bnNpZ25lZCBs
b25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19uZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8
IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcgPSB0cnVlOwogICAgICAgICAgX191diA9IC1f
X3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBf
X2ZpbGwsIF9fbmVnLCBfX3V2KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlw
ZSBfX2ZpbGwsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwgX192KTsgfQoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRl
cgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgaW9zX2Jhc2UmIF9fYiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QK
ICAgIHsKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdXYgPSBfX3Y7CiAgICAgIGJvb2wgX19u
ZWcgPSBmYWxzZTsKICAgICAgaWYgKF9fdiA8IDApCiAgICAgICAgewogICAgICAgICAgX19uZWcg
PSB0cnVlOwogICAgICAgICAgX191diA9IC1fX3V2OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9f
b3V0cHV0X2ludGVnZXIoX19zLCBfX2IsIF9fZmlsbCwgX19uZWcsIF9fdXYpOwogICAgfQoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy
CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9f
aW8sIF9fZmlsbCwgZmFsc2UsIF9fdik7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIF9f
b3V0cHV0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGws
CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQog
ICAgewoKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJh
aXRzPgogICAgX19vdXRwdXRfZmxvYXQob3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+IF9fcywgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICBfQ2hhclQgX19maWxs
LCBjb25zdCBjaGFyKiBfX3NwdHIsIHNpemVfdCBfX3NsZW4pCiAgICB7CiAgICAgIHNpemVfdCBf
X3BhZGRpbmcgPSBfX2lvLndpZHRoKCkgPiBzdHJlYW1zaXplKF9fc2xlbikgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgX19pby53aWR0aCgpIC1fX3NsZW4gOiAwOwogICAgICBsb2NhbGUgX19s
b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0ID0gdXNl
X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf
X2FkamZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwogICAgICBj
b25zdCBjaGFyKiBjb25zdCBfX2VwdHIgPSBfX3NwdHIgKyBfX3NsZW47CgogICAgICBpZiAoX19h
ZGpmaWVsZCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwpCiAgICAgICB7CgogICAgICAgICBpZiAoX19z
cHRyIDwgX19lcHRyICYmICgqX19zcHRyID09ICcrJyB8fCAqX19zcHRyID09ICctJykpCiAgICAg
ICAgICAgewogICAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsKICAgICAgICAg
ICAgICsrX19zOwogICAgICAgICAgICAgKytfX3NwdHI7CiAgICAgICAgICAgfQogICAgICAgICBf
X3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgICAgX19wYWRkaW5nID0g
MDsKICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGpmaWVsZCAhPSBpb3NfYmFzZTo6bGVmdCkK
ICAgICAgICB7CiAgICAgICAgICBfX3MgPSBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsK
ICAgICAgICAgIF9fcGFkZGluZyA9IDA7CiAgICAgICAgfQoKICAgICAgY2hhciBfX2RlY2ltYWxf
cG9pbnQgPSAqKGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludCk7CiAgICAgIGNvbnN0IF9Gb3Jt
YXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChf
X2lvKTsKICAgICAgZm9yICg7IF9fc3B0ciAhPSBfX2VwdHI7ICsrX19zLCArK19fc3B0cikKICAg
ICAgIHsKCiAgICAgICAgIGlmICgqX19zcHRyID09IF9fZGVjaW1hbF9wb2ludCkKICAgICAgICAg
ICBfX3MgPSBfX2ZtdC0+X01fZGVjaW1hbF9wb2ludDsKCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICBfX3MgPSBfX2N0LndpZGVuKCpfX3NwdHIpOwogICAgICAgfQoKICAgICAgaWYgKF9fcGFkZGlu
ZykKICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAgX19pby53aWR0
aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgYm9vbAogIF9fYnVpbGRfZmxvYXRfZm9y
bWF0KGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2RpZmllciwKICAgICAg
ICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fcHJlYyk7CgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No
YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv
LCBjaGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgewogICAgICBjb25zdCBz
dHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xpbWl0czxkb3VibGU+OjpkaWdpdHMxMCAr
IDM7CiAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19pby5wcmVjaXNpb24oKTsKCiAgICAgIGlm
IChfX3ByZWMgPiBfX21heF9wcmVjKQogICAgICAgIF9fcHJlYyA9IF9fbWF4X3ByZWM7CgogICAg
ICBjaGFyIF9fc2J1ZltfX21heF9wcmVjICogMl07CiAgICAgIHNpemVfdCBfX3NsZW47CgogICAg
ICBjaGFyIF9fZmJ1ZlsxNl07CiAgICAgIGlmIChfX2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBf
X2ZidWYsIDAsIF9fcHJlYykpCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3NidWYsIF9fZmJ1
ZiwgX19wcmVjLCBfX3YpOwogICAgICBlbHNlCiAgICAgICAgX19zbGVuID0gc3ByaW50ZihfX3Ni
dWYsIF9fZmJ1ZiwgX192KTsKCiAgICAgIHJldHVybiBfX291dHB1dF9mbG9hdChfX3MsIF9faW8s
IF9fZmlsbCwgX19zYnVmLCBfX3NsZW4pOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg
X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh
cl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7CiAg
ICAgIGNvbnN0IHN0cmVhbXNpemUgX19tYXhfcHJlYyA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91
YmxlPjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lz
aW9uKCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBf
X21heF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwogICAgICBzaXpl
X3QgX19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwoKICAgICAgaWYgKF9fYnVpbGRfZmxv
YXRfZm9ybWF0KF9faW8sIF9fZmJ1ZiwgJ0wnLCBfX3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNw
cmludGYoX19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9f
c2xlbiA9IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1cm4gX19vdXRw
dXRfZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgog
ICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgdm9pZCog
X192KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIGlvc19iYXNlOjpmbXRmbGFncyBmbXRmbGFn
czsKICAgICAgZm10ZmxhZ3MgX19mbXQgPSBfX2lvLmZsYWdzKCk7CiAgICAgIGZtdGZsYWdzIF9f
Zm10bWFzayA9IH4oaW9zX2Jhc2U6OnNob3dwb3MgfCBpb3NfYmFzZTo6YmFzZWZpZWxkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBpb3NfYmFzZTo6dXBwZXJjYXNlIHwgaW9zX2Jhc2U6
OmludGVybmFsKTsKICAgICAgX19pby5mbGFncyhfX2ZtdCAmIF9fZm10bWFzayB8IChpb3NfYmFz
ZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7CiAgICAgIHRyeSB7CiAgICAgICAgX091dEl0
ZXIgX19zMiA9IF9fb3V0cHV0X2ludGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihfX3YpKTsKICAgICAgICBfX2lvLmZsYWdzKF9fZm10KTsKICAgICAgICByZXR1cm4gX19z
MjsKICAgICAgfQogICAgICBjYXRjaCAoLi4uKSB7CiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7
CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0R1bW15ID0gaW50PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfV2Vla2RheW5hbWVzPGNoYXIs
IF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzE0XTsgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QKICAgIF9X
ZWVrZGF5bmFtZXM8Y2hhciwgX0R1bW15Pjo6X1NfbmFtZXNbMTRdID0KICAgIHsKICAgICAgIlN1
biIsICJTdW5kYXkiLAogICAgICAiTW9uIiwgIk1vbmRheSIsICJUdWUiLCAiVHVlc2RheSIsICJX
ZWQiLCAiV2VkbmVzZGF5IiwKICAgICAgIlRodSIsICJUaHVyc2RheSIsICJGcmkiLCAiRnJpZGF5
IiwgIlNhdCIsICJTYXR1cmRheSIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+
CiAgICBzdHJ1Y3QgX1dlZWtkYXluYW1lczx3Y2hhcl90LCBfRHVtbXk+CiAgICB7IHN0YXRpYyBj
b25zdCB3Y2hhcl90KiBjb25zdCBfU19uYW1lc1sxNF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9EdW1teT4KICAgIGNvbnN0IHdjaGFyX3QqIGNvbnN0CiAgICBfV2Vla2RheW5hbWVzPHdjaGFy
X3QsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAgICB7CiAgICAgIEwiU3VuIiwgTCJTdW5kYXki
LAogICAgICBMIk1vbiIsIEwiTW9uZGF5IiwgTCJUdWUiLCBMIlR1ZXNkYXkiLCBMIldlZCIsIEwi
V2VkbmVzZGF5IiwKICAgICAgTCJUaHUiLCBMIlRodXJzZGF5IiwgTCJGcmkiLCBMIkZyaWRheSIs
IEwiU2F0IiwgTCJTYXR1cmRheSIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVjdCBfTW9udGhuYW1lczsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pgog
ICAgeyBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgX1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCBjaGFyKiBjb25zdAogICAgX01vbnRobmFtZXM8
Y2hhcixfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAgewogICAgICAiSmFuIiwgIkphbnVhcnki
LCAiRmViIiwgIkZlYnJ1YXJ5IiwgIk1hciIsICJNYXJjaCIsCiAgICAgICJBcHIiLCAiQXByaWwi
LCAiTWF5IiwgIk1heSIsICJKdW4iLCAiSnVuZSIsCiAgICAgICJKdWwiLCAiSnVseSIsICJBdWci
LCAiQXVndXN0IiwgIlNlcCIsICJTZXB0ZW1iZXIiLAogICAgICAiT2N0IiwgIk9jdG9iZXIiLCAi
Tm92IiwgIk5vdmVtYmVyIiwgIkRlYyIsICJEZWNlbWJlciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX01vbnRobmFtZXM8d2NoYXJfdCwgX0R1bW15Pgog
ICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29uc3QgX1NfbmFtZXNbMjRdOyB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCB3Y2hhcl90KiBjb25zdAogICAgX01vbnRo
bmFtZXM8d2NoYXJfdCxfRHVtbXk+OjpfU19uYW1lc1syNF0gPQogICAgewogICAgICBMIkphbiIs
IEwiSmFudWFyeSIsIEwiRmViIiwgTCJGZWJydWFyeSIsIEwiTWFyIiwgTCJNYXJjaCIsCiAgICAg
IEwiQXByIiwgTCJBcHJpbCIsIEwiTWF5IiwgTCJNYXkiLCBMIkp1biIsIEwiSnVuZSIsCiAgICAg
IEwiSnVsIiwgTCJKdWx5IiwgTCJBdWciLCBMIkF1Z3VzdCIsIEwiU2VwIiwgTCJTZXB0ZW1iZXIi
LAogICAgICBMIk9jdCIsIEwiT2N0b2JlciIsIEwiTm92IiwgTCJOb3ZlbWJlciIsIEwiRGVjIiwg
TCJEZWNlbWJlciIKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg
IGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAg
ICAgICAgICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBf
X3QpIGNvbnN0CiAgICB7CiAgICAgIGlmICghX01fZGF5bmFtZXMpCiAgICAgICAgewogICAgICAg
ICAgX01fZGF5bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMTRdOwogICAgICAgICAg
Zm9yIChpbnQgX19pID0gMDsgX19pIDwgMTQ7ICsrX19pKQogICAgICAgICAgICBfTV9kYXluYW1l
c1tfX2ldID0gX1dlZWtkYXluYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0K
ICAgICAgYm9vbCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAg
ICBpbnQgX19tYXRjaGVzWzE0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJh
bGxlbChfX3MsIF9fZW5kLCAxNCwgX01fZGF5bmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9
IF9faW8uZW9mYml0OwogICAgICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1h
aW4gPT0gMiAmJiAoX19tYXRjaGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAg
ICBfX3QtPnRtX3dkYXkgPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1l
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9f
cywgaXRlcl90eXBlIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAo
IV9NX21vbnRobmFtZXMpCiAgICAgICAgewogICAgICAgICAgX01fbW9udGhuYW1lcyA9IG5ldyBi
YXNpY19zdHJpbmc8X0NoYXJUPlsyNF07CiAgICAgICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg
PCAyNDsgKytfX2kpCiAgICAgICAgICAgIF9NX21vbnRobmFtZXNbX19pXSA9IF9Nb250aG5hbWVz
PF9DaGFyVD46Ol9TX25hbWVzW19faV07CiAgICAgICAgfQogICAgICBib29sIF9fYXRfZW9mID0g
ZmFsc2U7CiAgICAgIGludCBfX3JlbWFpbiA9IDA7CiAgICAgIGludCBfX21hdGNoZXNbMjRdOwog
ICAgICBpdGVyX3R5cGUgX19vdXQgPSBfX21hdGNoX3BhcmFsbGVsKCBfX3MsIF9fZW5kLCAyNCwg
X01fbW9udGhuYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19tYXRjaGVzLCBfX3JlbWFpbiwgX19hdF9lb2YpOwogICAgICBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKDApOwogICAgICBpZiAoX19hdF9lb2YpIF9fZXJyIHw9IF9faW8uZW9mYml0OwogICAg
ICBpZiAoX19yZW1haW4gPT0gMSB8fAogICAgICAgICAgX19yZW1haW4gPT0gMiAmJiAoX19tYXRj
aGVzWzBdPj4xKSA9PSAoX19tYXRjaGVzWzFdPj4xKSkKICAgICAgICBfX3QtPnRtX21vbiA9IChf
X21hdGNoZXNbMF0+PjEpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gX19pby5mYWlsYml0
OwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9Cn0KIyA0MiAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDMzICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9i
aXRzL29zdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg
X19vcykKICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAg
aWYgKF9NX29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFt
X3R5cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5
cGUmKSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAg
ICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24p
LmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyX3R5cGUgX19j
ID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9
IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKF9fZm10ICYgaW9z
X2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBfX2wgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9N
X2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAg
ICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls
bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9u
ZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjaGFyX3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpm
bXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
aWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAg
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25n
IF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1
dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVt
cHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAgICAgICAgICAg
ICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls
bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoZG91
YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51
bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo
aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9w
ZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f
bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAg
X19zdHJlYW1idWZfdHlwZSogX19zYm91dCA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19zYmluICYmIF9fY2VyYikKICAgICAgICBfX3h0cmN0
ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAgICAgIGlmICgh
X19zYmluIHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChjaGFyX3R5cGUgX19jKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCktPnNwdXRjKF9fYyk7CiAgICAg
ICAgICBpZiAoX19wdXQgIT0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYykpCiAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OndyaXRlKGNvbnN0IF9DaGFyVCogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgc3RyZWFtc2l6ZSBfX3B1dCA9IHRoaXMtPnJkYnVmKCktPnNw
dXRuKF9fcywgX19uKTsKICAgICAgICAgIGlmICggX19wdXQgIT0gX19uKQogICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjpmbHVzaCgpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlmICh0aGlzLT5yZGJ1Zigp
ICYmIHRoaXMtPnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5
cGVuYW1lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9zX3R5cGUKICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6dGVsbHAoKQogICAgewogICAgICBwb3NfdHlwZSBf
X3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAh
PSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYo
KS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAg
Ym9vbCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9r
KQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5w
dWJzZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09
IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxi
aXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtw
KG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2QpCiAgICB7CiAgICAgIGJvb2wg
X190ZXN0b2sgPSB0aGlzLT5mYWlsKCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3RvaykKICAg
ICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vl
a29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIgPT0gcG9z
X3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7
CiAgICAgICAgfQoKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQojIDQ1NyAiL29wdC9nY2MvaW5j
bHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIF9fcGFkX2NoYXIoYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICBfQ2hhclQqIF9fbmV3cywgY29u
c3QgX0NoYXJUKiBfX29sZHMsCiAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXds
ZW4sIGNvbnN0IHN0cmVhbXNpemUgX19vbGRsZW4pCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJU
IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIGludF90
eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAg
ICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGlu
X2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fcGxlbikpOwogICAgICB0cmFpdHNfdHlwZTo6
YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2lvcy5maWxsKCkpOwoKICAgICAgY2hhcl90eXBlKiBf
X2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAg
ICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSBfX2lv
cy5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwoKICAgICAgaWYgKF9fZm10ID09IGlv
c19iYXNlOjpsZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IGNvbnN0X2Nhc3Q8Y2hh
cl90eXBlKj4oX19vbGRzKTsKICAgICAgICAgIF9fYmVnbGVuID0gX19vbGRsZW47CiAgICAgICAg
ICBfX2VuZCA9IF9fcGFkczsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fZm10ID09IGlvc19i
YXNlOjppbnRlcm5hbCkKICAgICAgICB7CgoKCiAgICAgICAgICB0eXBlZGVmIF9Gb3JtYXRfY2Fj
aGU8X0NoYXJUPiBfX2NhY2hlX3R5cGU7CiAgICAgICAgICBfX2NhY2hlX3R5cGUgY29uc3QqIF9f
Zm10ID0gX19jYWNoZV90eXBlOjpfU19nZXQoX19pb3MpOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX21pbnVzID0gdHJhaXRzX3R5cGU6OmZpbmQoX19vbGRzLCBfX29sZGxlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5f
U19taW51cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcGx1cyA9IHRyYWl0c190eXBl
OjpmaW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZm10LT5fU19wbHVzKTsKICAgICAgICAgIGJvb2wgX190
ZXN0c2lnbiA9IF9fbWludXMgfHwgX19wbHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBf
X29sZHNbMF0gPT0gJzAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX29sZHNbMV0g
PT0gJ3gnIHx8IF9fb2xkc1sxXSA9PSAnWCcpOwoKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAg
ICAgICAgX19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAg
ICAgICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9k
KTsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuIC0gX19tb2Q7CiAgICAgICAgICAg
ICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVz
dHNpZ24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX21vZCArPSBfX3BsZW47CiAgICAg
ICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3NpZ24gPSBfX21pbnVzID8gX19taW51cyArIDE6
IF9fcGx1cyArIDE7CiAgICAgICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+
KF9fb2xkcyk7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3NpZ24gLSBfX29sZHM7CiAgICAg
ICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fc2lnbiArIF9fcGxlbik7
CiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4sIF9fcGFk
cywgX19wbGVuKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7Cgog
ICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19w
bGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMp
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAg
IF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBf
X2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsKICAgICAgICB9CgogICAgICB0
cmFpdHNfdHlwZTo6Y29weShfX25ld3MsIF9fYmVnLCBfX2JlZ2xlbik7CiAgICAgIHRyYWl0c190
eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwgX19uZXdsZW4gLSBfX2JlZ2xlbiAt
IF9fbW9kKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19jKQogICAgewog
ICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlw
ZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAg
IF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShz
aXplb2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAg
ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4g
X19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19v
dXQsIF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywg
X19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAg
ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg
ICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChf
X291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg
ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAg
IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNoYXIgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry
YWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50
cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lk
dGgoKTsKICAgICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19i
dWlsdGluX2FsbG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cg
PiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWRfY2hhcihf
X291dCwgX19wYWRzLCAmX19jLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAgX19sZW4g
PSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19wYWRz
LCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo
KF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg
ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0Owog
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBf
Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6
ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3Rh
dGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAg
IGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19w
YWRfY2hhcihfX291dCwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAg
ICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAg
ICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
IF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCiAgICAgIHR5cGVkZWYgY2hhcl90
cmFpdHM8Y2hhcj4gX19jdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgc2l6ZV90IF9fY2xlbiA9IF9fY3RyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAg
ICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAgIGZvciAoc2l6ZV90IF9f
aSA9IDA7IF9faSA8PSBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0gPSBfX291
dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsKCiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz
dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVhbXNpemUg
X193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp
Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK
CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fd3MsIF9fdywgX19sZW4pOwog
ICAgICAgICAgICAgICAgICBfX3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4g
PSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIs
IF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
X19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAg
ICB9CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19v
dXQsIGNvbnN0IGNoYXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNo
YXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw
ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9f
b3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xl
biA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAg
ICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAg
ICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAg
ICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5
cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAg
ICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5k
YXRhKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAg
ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0
aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+
IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19w
YWRzLCBfX3MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAg
ICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgfQogICAgICAgICAgc3RyZWFtc2l6ZSBf
X3JlcyA9IF9fb3V0LnJkYnVmKCktPnNwdXRuKF9fcywgX19sZW4pOwogICAgICAgICAgX19vdXQu
d2lkdGgoMCk7CiAgICAgICAgICBpZiAoX19yZXMgIT0gX19sZW4pCiAgICAgICAgICAgIF9fb3V0
LnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291
dDsKICAgIH0KfQojIDI3OSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVh
bS5oIiAyIDMKIyA0MSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zdHJlYW0u
aCIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAx
IDMKIyAzOCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAzCgoj
IDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAxIDMKIyA0MCAiL29w
dC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyAxICIvb3B0L2dj
Yy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgNDEgIi9vcHQvZ2NjL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz
aWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAg
ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+
IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh
clQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0No
YXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlw
ZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXpl
IF9NX2djb3VudDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3Ry
ZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9f
c2IpOwogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZp
cnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNp
emUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7
CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBl
JiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg
IG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19p
c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2Um
KSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAg
ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAg
X19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcm
IF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9f
Zik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19m
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSog
X19zYik7CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0
CiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZv
aWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgog
ICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBn
ZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUm
CiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7Cgog
ICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBf
X3NiKQogICAgICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6
ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVs
aW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lk
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSog
X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFj
ayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lk
KTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs
bGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl
a2Rpcik7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0
b3I9KGNvbnN0IF9faXN0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9f
aXN0cmVhbV90eXBlJik7CgogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZW50cnkKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl
OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt
YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f
aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu
dF90eXBlIF9faW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7Cgog
ICAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAg
ICBib29sIF9NX29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1
bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0
PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh
clQqIF9fcyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYg
X19pbiwgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj
aGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4g
Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6
IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk
ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1f
dHlwZShfX3NiKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFt
KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsKfQoKCgoKIyAxICIvb3B0L2djYy9pbmNsdWRl
L2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAxIDMKIyAzMiAiL29wdC9nY2MvaW5jbHVkZS9nKyst
djMvYml0cy9pc3RyZWFtLnRjYyIgMwojIDEgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RkX2xvY2FsZS5oIiAxIDMKIyAzMyAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9pc3Ry
ZWFtLnRjYyIgMiAzCiMgMSAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVh
bS5oIiAxIDMKIyAzNCAiL29wdC9nY2MvaW5jbHVkZS9nKystdjMvYml0cy9pc3RyZWFtLnRjYyIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeTo6CiAg
ICBzZW50cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBib29sIF9fbm9z
a2lwd3MpCiAgICB7CiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICB7CiAgICAgICAgICBp
ZiAoX19pbi50aWUoKSkKICAgICAgICAgICAgX19pbi50aWUoKS0+Zmx1c2goKTsKICAgICAgICAg
IGlmICghX19ub3NraXB3cyAmJiAoX19pbi5mbGFncygpICYgaW9zX2Jhc2U6OnNraXB3cykpCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9
IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19z
Yi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBl
LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIF9fYyA9IF9fc2It
PnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgICAg
ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAg
ICAgIH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAg
IGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5z
ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewog
ICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19w
ZigqdGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
aW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAg
ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlv
c19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01f
Y2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQo
KnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNp
Z25lZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRl
KGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
Zm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlz
LCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAg
ICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv
c3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAg
X01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAg
ICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcm
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6
Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog
ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f
bik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBs
b25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp
b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGZsb2F0JiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGRvdWJsZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
LCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNl
Ojppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tf
ZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMs
IDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vy
cik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nIGRvdWJs
ZSYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih2b2lkKiYgX19uKQogICAgewogICAgICBzZW50
cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg
ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBf
X2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAg
ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVt
Z2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv
biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm
IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg
ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0
b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KQogICAgewogICAgICBzdHJlYW1zaXplIF9f
eHRyY3QgPSAwOwogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4gPSB0aGlzLT5yZGJ1Zigp
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX3Nib3V0ICYm
IF9fY2VyYikKICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2Jp
biwgX19zYm91dCk7CiAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5h
bWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0g
X19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRy
dWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAg
ICAgICAgIGlmIChfX2MgIT0gX19lb2YpCiAgICAgICAgICAgICAgICBfTV9nY291bnQgPSAxOwog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
Ojplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fYzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIGdldChjaGFyX3R5cGUmIF9fYykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAg
c2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBf
X2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2J1ZnZh
bCA9IHRoaXMtPnJkYnVmKCktPnNidW1wYygpOwoKICAgICAgICAgICAgICBpZiAoX19idWZ2YWwg
IT0gX19lb2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9
IDE7CiAgICAgICAgICAgICAgICAgIF9fYyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19i
dWZ2YWwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9f
biA+IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2Rl
bGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYo
KTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAg
ICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJv
b2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2Nv
dW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg
X19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9
PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGRlbGltIHx8IF9NX2dj
b3VudCA9PSBfX24gLSAxKQogICAgICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAg
ICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9n
Y291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwg
Y2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIGludF90eXBlIF9fYzsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9
IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs
aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg
ICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICBib29s
IF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICBib29sIF9fdGVzdHB1dCA9
IHRydWU7CgogICAgICAgICAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbQog
ICAgICAgICAgICAgICAgICAgICYmIChfX3Rlc3RwdXQgPSBfX3NiLnNwdXRjKHRyYWl0c190eXBl
Ojp0b19jaGFyX3R5cGUoX19jKSkKICAgICAgICAgICAgICAgICAgICAgICAgICE9IF9fZW9mKSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAg
ICAgICAgICAgIF9fYyA9IF9fdGhpc19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgICAgIF9f
dGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBf
X2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKF9fdGVz
dGRlbGltIHx8ICFfX3Rlc3RwdXQpCiAgICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNr
Yyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgX190aGlzX3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRv
X2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9n
Y291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19j
ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg
ICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19k
ZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAg
ICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAmJiAhX190ZXN0ZW9mICYmICFfX3Rlc3RkZWxpbSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6
OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMo
KTsKICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fdGVz
dGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg
PT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmIChfX3Rlc3Rl
b2YpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01fZ2NvdW50OwogICAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmICghX190ZXN0ZGVsaW0pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIC0tX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBf
X3NiLT5zcHV0YmFja2ModHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAg
ICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp
OwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0
c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlw
ZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBf
X3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9f
aWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAg
ICAgICAgICAgICBfX24gPSBtaW4oX19uLCBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4
KCkpOwogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rl
b2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAr
K19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAg
ICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAg
X190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgaWYgKChfTV9nY291bnQgPT0gX19uIC0gMSAmJiAhX190ZXN0ZW9mKSB8fCBfX3Rlc3Rk
ZWxpbSkKICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgIGlmIChfX3Rl
c3Rlb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsK
ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg
IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwZWVrKHZv
aWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19jID0gdGhp
cy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFyX3R5cGUqIF9f
cywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRz
X3R5cGU6OmVvZigpOwogICAgICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
dGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+c2J1
bXBjKCk7CiAgICAgICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoK
ICAgICAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVv
ZikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19zKysgPSB0
cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICAgICArK19N
X2djb3VudDsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAg
ICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAg
ICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp
b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVh
bXNpemUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShj
aGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBl
IF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICBpZiAoX19uID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHRyeQogICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+
cmRidWYoKS0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbnVtICE9IHN0YXRp
Y19jYXN0PHN0cmVhbXNpemU+KF9fZW9mKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAg
ICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCktPnNnZXRuKF9fcywgX19udW0pOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfTV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRi
YWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAg
ICAgICAgICAgICAgaWYgKCFfX3NiIHx8IF9fc2ItPnNwdXRiYWNrYyhfX2MpID09IF9fZW9mKQog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg
ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQog
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2Ig
fHwgX19lb2YgPT0gX19zYi0+c3VuZ2V0YygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9
IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0g
dGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19yZXQgPT0gX19zYi0+
cHVic3luYygpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSAwOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlw
ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAg
ICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgX19yZXQg
PSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpp
bik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9z
KQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0
cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz
ZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09
IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShm
YWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls
KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cob2ZmX3R5cGUg
X19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQogICAgewogICAgICBfTV9nY291bnQgPSAw
OwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgcG9zX3R5
cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2RpciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgt
MSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFpbGJpdCk7CgogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYykKICAgIHsKICAg
ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7
CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAg
IHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRv
cj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJUKiBfX3MpCiAg
ICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVh
bV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1
Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg
dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4
dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy
YihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IF9faW4ud2lk
dGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0gMCkKICAgICAgICAgICAgICAgIF9fbnVt
ID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1heCgpOwoKICAgICAgICAgICAgICBfX3N0
cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIGNvbnN0IF9f
Y3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgICAg
ICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0
c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgICBi
b29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0
cmFjdGVkIDwgX19udW0gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdHNwKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7CiAgICAgICAgICAgICAgICAg
ICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwog
ICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAg
ICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgIGlmICghX190ZXN0ZW9mKQogICAgICAgICAgICAg
ICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19z
ID0gY2hhcl90eXBlKCk7CgogICAgICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRy
YWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJl
dHVybiBfX2luOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19p
c3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5
cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUg
X19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6Y2hhcl90
eXBlIF9fY2hhcl90eXBlOwoKICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRi
dWYoKTsKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0
eXBlX2lvcygpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7
CiAgICAgIF9faW50X3R5cGUgX19jOwogICAgICBib29sIF9fdGVzdGVvZjsKICAgICAgYm9vbCBf
X3Rlc3RzcDsKCiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgX19jID0gX19zYi0+c2J1bXBj
KCk7CiAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICBfX3Rlc3Rz
cCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgIH0KICAgICAg
d2hpbGUgKCFfX3Rlc3Rlb2YgJiYgX190ZXN0c3ApOwoKICAgICAgaWYgKCFfX3Rlc3Rlb2YgJiYg
IV9fdGVzdHNwKQogICAgICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICBlbHNlCiAgICAg
ICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKCiAgICAgIHJldHVybiBfX2luOwog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90
eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5
cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXpl
X3R5cGUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNl
bnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg
ICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW4ud2lk
dGgoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbjsKICAgICAgICAgIF9fbiA9IF9fdyA+IDAg
PyBzdGF0aWNfY2FzdDxfX3NpemVfdHlwZT4oX193KSA6IF9fc3RyLm1heF9zaXplKCk7CgogICAg
ICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIGNv
bnN0IF9fY3R5cGVfdHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAg
ICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBf
X2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBib29sIF9fdGVzdHNw
ID0gX19jdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICBib29sIF9f
dGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBf
X24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19f
ZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAg
ICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICBfX3Rlc3RzcCA9IF9f
Y3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAg
ICAgICAgICBfX2luLndpZHRoKDApOwogICAgICAgIH0KCgogICAgICBpZiAoIV9fZXh0cmFjdGVk
KQogICAgICAgIF9faW4uc2V0c3RhdGUgKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgIHJldHVy
biBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAg
ICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwgX0NoYXJU
IF9fZGVsaW0pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBl
OjppbnRfdHlwZSBfX2ludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5
cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVf
dHlwZTsKCiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKICAgICAgYm9vbCBfX3Rl
c3RkZWxpbSA9IGZhbHNlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9f
Y2VyYihfX2luLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBf
X3N0ci5lcmFzZSgpOwogICAgICAgICAgX19zaXplX3R5cGUgX19uID0gX19zdHIubWF4X3NpemUo
KTsKCiAgICAgICAgICBfX2ludF90eXBlIF9faWRlbGltID0gX1RyYWl0czo6dG9faW50X3R5cGUo
X19kZWxpbSk7CiAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1Zigp
OwogICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNv
bnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIF9fdGVzdGRl
bGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0g
X19lb2Y7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDw9IF9fbiAmJiAhX190ZXN0ZW9m
ICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9IF9U
cmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAg
ICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX19jID09IF9faWRl
bGltOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICBf
X2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgIH0KICAgICAgaWYgKCFfX2V4
dHJhY3RlZCAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFt
PF9DaGFyVCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JiBfX2luLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j
PiYgX19zdHIpCiAgICB7IHJldHVybiBnZXRsaW5lKF9faW4sIF9fc3RyLCBfX2luLndpZGVuKCdc
bicpKTsgfQp9CiMgMjkxICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFt
LmgiIDIgMwojIDQyICIvb3B0L2djYy9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5o
IiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0
cmVhbSBjb3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsK
CiAgZXh0ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVy
biB3b3N0cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlv
c19iYXNlOjpJbml0IF9faW9pbml0Owp9CiMgMzIgIi9vcHQvZ2NjL2luY2x1ZGUvZysrLXYzL2lv
c3RyZWFtIiAyIDMKIyA1ICJ0ZXN0MDUuY3h4IiAyCgpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8
KHN0ZDo6b3N0cmVhbSAmb3MsIGNvbnN0IEZyZWVMaWU6OkJhc2lzRWxlbWVudCAmeCkKewogIGlm
ICh4LndlaWdodCgpPT0xKQogICAgb3MgPDwgc3RhdGljX2Nhc3Q8Y2hhcj4oJ2EnK3guaW5kZXgo
KSk7CiAgZWxzZQogICAgb3MgPDwgJ1snIDw8IHgubGVmdCgpIDw8ICcsJyA8PCB4LnJpZ2h0KCkg
PDwgJ10nOwogIHJldHVybiBvczsKfQoKdGVtcGxhdGU8Y2xhc3MgQ09FRj4Kc3RkOjpvc3RyZWFt
JiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3MsIGNvbnN0IEZyZWVMaWU6OlN1bTxDT0VGPiYg
cykKewogIGZvciAoRnJlZUxpZTo6U3VtPENPRUY+Ojpjb25zdF9pdGVyYXRvciBpPXMuYmVnaW4o
KSA7IGkgIT0gcy5lbmQoKSA7ICsraSkKICAgIGlmIChpPT1zLmJlZ2luKCkpCiAgICAgIG9zIDw8
ICgqaSkuY29lZigpIDw8ICcqJyA8PCAoKmkpLmVsZW1lbnQoKTsKICAgIGVsc2UgaWYgKCgqaSku
Y29lZigpID4gMCkKICAgICAgb3MgPDwgIiArICIgPDwgKCppKS5jb2VmKCkgPDwgJyonIDw8ICgq
aSkuZWxlbWVudCgpOwogICAgZWxzZQogICAgICBvcyA8PCAiIC0gIiA8PCAtKCppKS5jb2VmKCkg
PDwgJyonIDw8ICgqaSkuZWxlbWVudCgpOwogIHJldHVybiBvczsKfQoKaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKewogIEZyZWVMaWU6OkhhbGxCYXNpcyBoYigxMiwyKTsKICBGcmVl
TGllOjpTdW08ZG91YmxlPiBzMCgwLGhiKSxzMSgxLGhiKTsKICBGcmVlTGllOjpTdW08ZG91Ymxl
PiBzMiA9IHMwK3MxOwogIHN0ZDo6Y291dCA8PCBzMCA8PCBzdGQ6OmVuZGw7CiAgc3RkOjpjb3V0
IDw8IHMxIDw8IHN0ZDo6ZW5kbDsKICBzdGQ6OmNvdXQgPDwgczIgPDwgc3RkOjplbmRsOwogIHMy
ID0gczAgLSAwLjUqczI7CiAgc3RkOjpjb3V0IDw8IHMyIDw8IHN0ZDo6ZW5kbDsKCiAgRnJlZUxp
ZTo6U3VtPGludD4gYSgwLGhiKSxiKDEsaGIpOwogIHN0ZDo6Y291dCA8PCBQb2lzc29uQnJhY2tl
dChhLGIpIDw8IHN0ZDo6ZW5kbDsKICByZXR1cm4gMDsKfQo=


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

only message in thread, other threads:[~2002-01-25 21:26 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-25 13:26 c++/5496: complier produces nonesense error messages jsberg

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