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


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

optimization/10616: ICE with -fomit-frame-pointer -march=athlon-tbird


>Number:         10616
>Category:       optimization
>Synopsis:       ICE with -fomit-frame-pointer -march=athlon-tbird
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sun May 04 08:36:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     Dirk Zoller
>Release:        unknown-1.0
>Organization:
>Environment:
Debian GNU/Linux "testing".
>Description:
Internal compiler error triggered by the attached source file, when compiled like this:

/usr/bin/g++-3.2 -c -O -fverbose-asm -fomit-frame-pointer -march=athlon-tbird -fno-implicit-templates -fno-exceptions messages.ii

>How-To-Repeat:
Compile the provided file as specified. All the specified options are needed to trigger the bug.
>Fix:

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

CgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoK
CgoKCgoKCgoKCgp0eXBlZGVmIGxvbmcgbG9uZyBsbG9uZ190Owp0eXBlZGVmIHVuc2lnbmVkIGxv
bmcgbG9uZyB1bGxvbmdfdDsKdHlwZWRlZiBsbG9uZ190IG15X2Zwb3NfdDsKCgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVfdDsKfQpleHRlcm4gIkMr
KyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3MgZXhjZXB0aW9uCiAgewogIHB1Ymxp
YzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0
aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCB0aHJvdygpOwog
IH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVi
bGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9l
eGNlcHRpb24oKSB0aHJvdygpOwogIH07CgoKICB0eXBlZGVmIHZvaWQgKCp0ZXJtaW5hdGVfaGFu
ZGxlcikgKCk7CgogIHR5cGVkZWYgdm9pZCAoKnVuZXhwZWN0ZWRfaGFuZGxlcikgKCk7CgoKICB0
ZXJtaW5hdGVfaGFuZGxlciBzZXRfdGVybWluYXRlKHRlcm1pbmF0ZV9oYW5kbGVyKSB0aHJvdygp
OwoKCiAgdm9pZCB0ZXJtaW5hdGUoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
ICB1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhwZWN0ZWQodW5leHBlY3RlZF9oYW5kbGVyKSB0
aHJvdygpOwoKCiAgdm9pZCB1bmV4cGVjdGVkKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5f
XykpOwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9f
Z251X2N4eAp7CiAgdm9pZCBfX3ZlcmJvc2VfdGVybWluYXRlX2hhbmRsZXIgKCk7Cn0KCn0KCmV4
dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgogIGNsYXNzIGJhZF9hbGxvYyA6IHB1Ymxp
YyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2FsbG9jKCkgdGhyb3coKSB7IH0KCgog
ICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1Y3Qgbm90aHJvd190
IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0eXBlZGVmIHZvaWQg
KCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5kbGVyKG5ld19oYW5k
bGVyKSB0aHJvdygpOwp9CnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0
ZDo6YmFkX2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChz
dGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lk
IG9wZXJhdG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3Rk
OjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3Ig
bmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBv
cGVyYXRvciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9p
ZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygp
OwoKCmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhy
b3coKSB7IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6
ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3Bl
cmF0b3IgZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVy
YXRvciBkZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoKfQoKCgoKZXh0ZXJuICJD
IiB2b2lkICptYWxsb2MgKHNpemVfdCk7CmV4dGVybiAiQyIgdm9pZCBmcmVlICh2b2lkICopOwoK
CmlubGluZSB2b2lkICpvcGVyYXRvciBuZXcgKHNpemVfdCBzeikgeyByZXR1cm4gbWFsbG9jIChz
eik7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3Qgc3opIHsgcmV0dXJuIG1h
bGxvYyAoc3opOyB9CmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0ZSAodm9pZCAqcCkgeyBmcmVl
IChwKTsgfQppbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGVbXSAodm9pZCAqcCkgeyBmcmVlIChw
KTsgfQoKCgoKCgplbnVtIHsgX3Nob3J0XzEsIF9zaG9ydF8wLCBfc2hvcnRfc2l6ZSB9OwplbnVt
IHsgX2ludF8zLCBfaW50XzIsIF9pbnRfMSwgX2ludF8wLCBfaW50X3NpemUgfTsKZW51bSB7IF9s
b25nXzcsIF9sb25nXzYsIF9sb25nXzUsIF9sb25nXzQsIF9sb25nXzMsIF9sb25nXzIsIF9sb25n
XzEsIF9sb25nXzAsIF9sb25nX3NpemUgfTsKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIFF1ZXVl
CnsKcHVibGljOgogIGNsYXNzIE5vZGU7IGZyaWVuZCBjbGFzcyBOb2RlOwogIGNsYXNzIEl0OyBm
cmllbmQgY2xhc3MgSXQ7Cgpwcml2YXRlOgogIE5vZGUgKl90YWlsOwogIE5vZGUgKl9oZWFkOwoK
CiAgc3RhdGljIE5vZGUgKm5pbCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Tm9kZSAqPiAo
fjBMKTsgfQoKcHVibGljOgoKICBjbGFzcyBOb2RlCiAgewogICAgTm9kZSAqX25leHQ7CgogICAg
ZnJpZW5kIGNsYXNzIFF1ZXVlOwogICAgZnJpZW5kIGNsYXNzIFF1ZXVlOjpJdDsKCiAgcHVibGlj
OgogICAgTm9kZSgpCiAgICAgIDogX25leHQgKFF1ZXVlOjpuaWwoKSkge30KCiAgICBOb2RlIChU
ICpuZXh0KQogICAgICA6IF9uZXh0IChuZXh0KSB7fQoKICAgIFQgKnFuX25leHQoKSBjb25zdCB7
CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICo+IChfbmV4dCk7IH0KCiAgICBib29sIGlzX3F1
ZXVlZCgpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9uZXh0ICE9IFF1ZXVlOjpuaWwoKTsgfQogIH07
CgoKICBjbGFzcyBJdAogIHsKICAgIE5vZGUgKl9wOwoKICBwdWJsaWM6CiAgICBJdCAoUXVldWUg
Y29uc3QgJnEpCiAgICAgIDogX3AgKHEuX2hlYWQpIHt9CgogICAgVCAqb3BlcmF0b3IoKSgpIGNv
bnN0IHsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKF9wKTsgfQoKICAgIFQgKm9wZXJh
dG9yKysoKSB7CiAgICAgIGlmIChfcCkKICAgICAgICBfcCA9IF9wLT5fbmV4dDsKICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQgKj4gKF9wKTsgfQoKICAgIFQgKm9wZXJhdG9yKysgKGludCkgewog
ICAgICBOb2RlICpyID0gX3A7CiAgICAgIGlmIChfcCkKICAgICAgICBfcCA9IF9wLT5fbmV4dDsK
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKHIpOyB9CgoKCiAgICBUICZvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiAqc3RhdGljX2Nhc3Q8VCAqPiAoX3ApOyB9CiAgICBUICpvcGVyYXRv
ci0+KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX3ApOyB9CiAgfTsKCgpwdWJs
aWM6CiAgUXVldWUoKQogICAgOiBfdGFpbCAoMCkKICAgICwgX2hlYWQgKDApCiAge30KCiAgUXVl
dWUgKFF1ZXVlICZxKQogICAgOiBfdGFpbCAocS5fdGFpbCkKICAgICwgX2hlYWQgKHEuX2hlYWQp
CiAgewogICAgcS5fdGFpbCA9IDA7CiAgICBxLl9oZWFkID0gMDsKICB9CgoKCiAgVCAqcV9uZXh0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX2hlYWQpOyB9CiAgVCAqcV9sYXN0
KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoX3RhaWwpOyB9CgoKICBUICpxX250
aCAoaW50IG4pIGNvbnN0CiAgewogICAgTm9kZSAqcCA9IF9oZWFkOwogICAgd2hpbGUgKC0tbiA+
PSAwKQogICAgICBpZiAocCA9PSAwKQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlCiAgICAg
ICAgcCA9IHAtPl9uZXh0OwogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKHApOwogIH0KCgog
IHZvaWQgcV9hZGQgKFQgKml0ZW0pCiAgewogICAgTm9kZSAqaSA9IGl0ZW07CiAgICBpZiAoX3Rh
aWwpCiAgICAgIF90YWlsLT5fbmV4dCA9IGk7CiAgICBlbHNlCiAgICAgIF9oZWFkID0gaTsKICAg
IF90YWlsID0gaTsKICAgIGktPl9uZXh0ID0gMDsKICB9CgoKICBib29sIHFfcHVzaCAoVCAqaXRl
bSkKICB7CiAgICBOb2RlICppID0gaXRlbTsKICAgIGl0ZW0tPl9uZXh0ID0gX2hlYWQ7CiAgICBf
aGVhZCA9IGk7CiAgICBpZiAoX3RhaWwgPT0gMCkKICAgICAgX3RhaWwgPSBpOwogICAgcmV0dXJu
IHRydWU7CiAgfQoKCgogIGJvb2wgcV9hZGRfY2hlY2tlZCAoVCAqaXRlbSkKICB7CiAgICBOb2Rl
ICppID0gaXRlbTsKICAgIGlmIChpLT5fbmV4dCAhPSBuaWwoKSkKICAgICAgcmV0dXJuIGZhbHNl
OwogICAgcV9hZGQgKGl0ZW0pOwogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgYm9vbCBxX3B1c2hf
Y2hlY2tlZCAoVCAqaXRlbSkKICB7CiAgICBOb2RlICppID0gaXRlbTsKICAgIGlmIChpLT5fbmV4
dCAhPSBuaWwoKSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgcV9wdXNoIChpdGVtKTsKICAgIHJl
dHVybiB0cnVlOwogIH0KCgogIFQgKnFfcmVtb3ZlKCkKICB7CiAgICBpZiAoX2hlYWQgPT0gMCkK
ICAgICAgcmV0dXJuIDA7CiAgICBOb2RlICpyZXN1bHQgPSBfaGVhZDsKICAgIF9oZWFkID0gX2hl
YWQtPl9uZXh0OwogICAgaWYgKF9oZWFkID09IDApCiAgICAgIF90YWlsID0gMDsKICAgIHJlc3Vs
dC0+X25leHQgPSBuaWwoKTsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICo+IChyZXN1bHQpOwog
IH0KCgogIFQgKnFfcmVtb3ZlIChUICppdGVtKQogIHsKICAgIE5vZGUgKmkgPSBpdGVtOwogICAg
aWYgKF9oZWFkID09IDApCiAgICAgIHJldHVybiAwOwogICAgaWYgKGkgPT0gX2hlYWQpCiAgICAg
IHsKICAgICAgICBfaGVhZCA9IF9oZWFkLT5fbmV4dDsKICAgICAgICBpZiAoX2hlYWQgPT0gMCkK
ICAgICAgICAgIF90YWlsID0gMDsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICAgTm9k
ZSAqcCA9IF9oZWFkOwogICAgICAgIHdoaWxlIChwLT5fbmV4dCkKICAgICAgICAgIGlmIChwLT5f
bmV4dCA9PSBpKQogICAgICAgICAgICBnb3RvIGZvdW5kOwogICAgICAgICAgZWxzZQogICAgICAg
ICAgICBwID0gcC0+X25leHQ7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIGZvdW5kOgogICAgICAg
IHAtPl9uZXh0ID0gaS0+X25leHQ7CiAgICAgICAgaWYgKHAtPl9uZXh0ID09IDApCiAgICAgICAg
ICBfdGFpbCA9IHA7CiAgICAgIH0KICAgIGktPl9uZXh0ID0gbmlsKCk7CiAgICByZXR1cm4gaXRl
bTsKICB9CgogIHZvaWQgcV9yZW1vdmVfYWxsKCkKICB7CiAgICB3aGlsZSAoX2hlYWQpCiAgICAg
IHsKICAgICAgICBOb2RlICpwID0gX2hlYWQ7CiAgICAgICAgX2hlYWQgPSBfaGVhZC0+X25leHQ7
CiAgICAgICAgcC0+X25leHQgPSBuaWwoKTsKICAgICAgfQogICAgX3RhaWwgPSAwOwogIH0KCiAg
dm9pZCBxX2RlbGV0ZV9hbGwoKQogIHsKICAgIHdoaWxlIChfaGVhZCkKICAgICAgewogICAgICAg
IE5vZGUgKnAgPSBfaGVhZDsKICAgICAgICBfaGVhZCA9IF9oZWFkLT5fbmV4dDsKICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8VCAqPiAocCk7CiAgICAgIH0KICAgIF90YWlsID0gMDsKICB9Cgog
IFF1ZXVlICZxX3JldmVyc2UoKQogIHsKICAgIFF1ZXVlIHMgKCp0aGlzKTsKICAgIGZvciAoOzsp
CiAgICAgIHsKICAgICAgICBUICpwID0gcy5xX3JlbW92ZSgpOwogICAgICAgIGlmIChwID09IDAp
CiAgICAgICAgICBicmVhazsKICAgICAgICBxX3B1c2ggKHApOwogICAgICB9CiAgICByZXR1cm4g
KnRoaXM7CiAgfQoKcHJpdmF0ZToKCiAgdm9pZCBfcV9tb3ZlX2ZpcnN0IChRdWV1ZSAmbykKICB7
CiAgICBvLl9oZWFkID0gby5fdGFpbCA9IF9oZWFkOwogICAgX2hlYWQgPSBfaGVhZC0+X25leHQ7
CiAgfQoKICBib29sIF9xX21vdmVfbm9kZSAoUXVldWUgJm8pCiAgewogICAgby5fdGFpbC0+X25l
eHQgPSBfaGVhZDsKICAgIG8uX3RhaWwgPSBfaGVhZDsKICAgIF9oZWFkID0gX2hlYWQtPl9uZXh0
OwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9xX2FwcGVuZCAoUXVldWUgJm8pCiAgewog
ICAgaWYgKChfdGFpbC0+X25leHQgPSBvLl9oZWFkKSAhPSAwKQogICAgICBfdGFpbCA9IG8uX3Rh
aWw7CiAgfQoKICB2b2lkIF9xX3NvcnQoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf
X3N0ZGNhbGxfXykpOwoKcHVibGljOgoKCgogIHZvaWQgcV9zb3J0KCkKICB7CiAgICBpZiAoX2hl
YWQgIT0gX3RhaWwpCiAgICAgIF9xX3NvcnQoKTsKICB9CgoKCiAgdm9pZCBxX2FwcGVuZCAoUXVl
dWUgJm8pCiAgewogICAgaWYgKCZvID09IHRoaXMpCiAgICAgIHJldHVybjsKICAgIGlmIChfdGFp
bCkKICAgICAgX3FfYXBwZW5kIChvKTsKICAgIGVsc2UKICAgICAgKnRoaXMgPSBvOwogICAgby5f
aGVhZCA9IG8uX3RhaWwgPSAwOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBUPgp2b2lkClF1ZXVl
PFQ+OjpfcV9zb3J0KCkKewoKCiAgUXVldWUgYSwgYjsKICBfcV9tb3ZlX2ZpcnN0IChhKTsKICBf
cV9tb3ZlX2ZpcnN0IChiKTsKICBmb3IgKDs7KQogICAgewogICAgICBpZiAoX2hlYWQgPT0gMCkg
YnJlYWs7IF9xX21vdmVfbm9kZSAoYSk7CiAgICAgIGlmIChfaGVhZCA9PSAwKSBicmVhazsgX3Ff
bW92ZV9ub2RlIChiKTsKICAgIH0KICBfdGFpbCA9IDA7CiAgYS5fdGFpbC0+X25leHQgPSAwOwog
IGIuX3RhaWwtPl9uZXh0ID0gMDsKCgogIGEucV9zb3J0KCk7CiAgYi5xX3NvcnQoKTsKCgoKICBp
ZiAoY29tcGFyZSAoKnN0YXRpY19jYXN0PFQgKj4gKGEuX2hlYWQpLAogICAgICAgICAgICAgICAq
c3RhdGljX2Nhc3Q8VCAqPiAoYi5faGVhZCkpIDwgMCkKICAgIGEuX3FfbW92ZV9maXJzdCAoKnRo
aXMpOwogIGVsc2UKICAgIGIuX3FfbW92ZV9maXJzdCAoKnRoaXMpOwoKICBmb3IgKDs7KQogICAg
ewogICAgICBpZiAoYS5faGVhZCA9PSAwKSB7IF9xX2FwcGVuZCAoYik7IGJyZWFrOyB9CiAgICAg
IGlmIChiLl9oZWFkID09IDApIHsgX3FfYXBwZW5kIChhKTsgYnJlYWs7IH0KCiAgICAgIGlmIChj
b21wYXJlICgqc3RhdGljX2Nhc3Q8VCAqPiAoYS5faGVhZCksCiAgICAgICAgICAgICAgICAgICAq
c3RhdGljX2Nhc3Q8VCAqPiAoYi5faGVhZCkpIDwgMCkKICAgICAgICBhLl9xX21vdmVfbm9kZSAo
KnRoaXMpOwogICAgICBlbHNlCiAgICAgICAgYi5fcV9tb3ZlX25vZGUgKCp0aGlzKTsKICAgIH0K
ICBfdGFpbC0+X25leHQgPSAwOwp9CnN0cnVjdCByZWNvcmRfdHlwZTsKc3RydWN0IG1lbWJlcl90
eXBlOwpzdHJ1Y3QgaW5kZXhfdHlwZTsKc3RydWN0IGluZGV4X21lbWJlcl90eXBlOwpzdHJ1Y3Qg
ZmllbGRfdHlwZTsKCnN0cnVjdCByZWNvcmRfaW5mb190OwpzdHJ1Y3QgaW5kZXhfaW5mb190OwoK
CgoKc3RydWN0IGxpbmdvX3R5cGU7CmNsYXNzIExpbmdvOwoKCgoKZW51bSBlbHRfdHlwZV9lbnVt
CnsKICB0aWRfbm9uZSwKICB0aWRfYm9vbCwKICB0aWRfY2hhciwKICB0aWRfdGlueSwKICB0aWRf
dXRpbnksCiAgdGlkX3Nob3J0LAogIHRpZF91c2hvcnQsCiAgdGlkX2ludCwKICB0aWRfdWludCwK
ICB0aWRfbG9uZywKICB0aWRfdWxvbmcsCiAgdGlkX2ZpeGVkMiwKICB0aWRfZml4ZWQzLAogIHRp
ZF9maXhlZDQsCiAgdGlkX2ZpeGVkNSwKICB0aWRfZmxvYXQsCiAgdGlkX2RvdWJsZSwKICB0aWRf
ZGF0ZSwKICB0aWRfdGltZSwKICB0aWRfc3RyaW5nLAogIHRpZF9yZWNvcmQsCiAgdGlkX19tYXgK
fTsKCnN0cnVjdCBpbmRleF9iYXNlX3R5cGU7CnN0cnVjdCBpbmRleF9tYXhfdHlwZTsKCgoKCnRl
bXBsYXRlIDxjbGFzcyByZWNvcmRfdCwgY2xhc3MgaW5kZXhfdCwgY2xhc3MgZGVyaXZlZF90PiBj
bGFzcyBSZWNTZXQ7CnRlbXBsYXRlIDxjbGFzcyBCYXNlTWFwLAogICAgICAgICAgY2xhc3MgcmVj
b3JkX3QsIGNsYXNzIGluZGV4X3QsIGNsYXNzIHZhbHVlX3Q+IGNsYXNzIFdyYXBNYXA7CgoKCgpl
bnVtIGluZGV4X2ZsYWdzX2VudW0KewogIGtmbGFnX3ByaW1hcnkgPSAxIDw8IDAsCiAga2ZsYWdf
dW5pcXVlID0gMSA8PCAxLAogIGtmbGFnX2R1cGxpY2F0ZXMgPSAxIDw8IDIsCiAga2ZsYWdfdGFi
bGUgPSAxIDw8IDMKfTsKc3RydWN0IHNlbnRlbmNlX2hlYWRlcl9kZWZzCnsKICBlbnVtCiAgewoK
CiAgICB2ZXJiX2JpdHMgPSAzLCB2ZXJiX21hc2sgPSAoMSA8PCAzKSAtIDEsCiAgICBhZHZlcmJf
Yml0cyA9IDQsIGFkdmVyYl9tYXNrID0gKDEgPDwgNCkgLSAxLAogICAgZmxhZ3NfYml0cyA9IDYs
IGZsYWdzX21hc2sgPSAoMSA8PCA2KSAtIDEsCiAgICBub3VuX2JpdHMgPSAxNSwgbm91bl9tYXNr
ID0gKDEgPDwgMTUpIC0gMSwKICAgIGNvdW50X2JpdHMgPSAyMCwgY291bnRfbWFzayA9ICgxIDw8
IDIwKSAtIDEsCgogICAgaGVhZGVyX2JpdHMgPSA0OCwKCgogICAgaW5kZXhfYml0cyA9IDQsIGlu
ZGV4X21hc2sgPSAoMSA8PCA0KSAtIDEsCiAgICB0eXBlX2JpdHMgPSAxMSwgdHlwZV9tYXNrID0g
KDEgPDwgMTEpIC0gMQoKICB9OwoKCgogIHN0YXRpYyB1bnNpZ25lZCBtYWtlX2lpZCAodW5zaWdu
ZWQgcmVjb3JkX2lkLCB1bnNpZ25lZCBpbmRleF9pZCkgewogICAgcmV0dXJuIGluZGV4X2lkICsg
MSA8PCB0eXBlX2JpdHMgfCByZWNvcmRfaWQ7IH0KCgoKICBzdGF0aWMgaW50IGdldF9pbmRleF9p
ZCAodW5zaWduZWQgaWlkKSB7CiAgICByZXR1cm4gaW50IChpaWQgPj4gdHlwZV9iaXRzICYgaW5k
ZXhfbWFzaykgLSAxOyB9CgoKICBzdGF0aWMgdW5zaWduZWQgZ2V0X3JlY29yZF9pZCAodW5zaWdu
ZWQgaWlkKSB7CiAgICByZXR1cm4gaWlkICYgdHlwZV9tYXNrOyB9CgogIHN0YXRpYyBib29sIGlz
X2luZGV4ICh1bnNpZ25lZCBpaWQpIHsKICAgIHJldHVybiAoaWlkID4+IHR5cGVfYml0cyAmIGlu
ZGV4X21hc2spICE9IDA7IH0KfTsKZW51bSB2ZXJiX3R5cGUKewoKICB2X2hhbmRsZSwgdl9sb2Fk
LCB2X3N0b3JlLCB2X3JlbW92ZSwKCiAgZW51bV92ZXJiX3R5cGVfbWF4Cn07CgplbnVtIGFkdmVy
Yl90eXBlCnsKCiAgYXZfbm9uZSwgYXZfY29udGQsIGF2X2Fuc3dlciwgYXZfc3luY2gsIGF2X3Jh
bmdlLCBhdl9maXJzdCwgYXZfbGFzdCwKCiAgZW51bV9hZHZlcmJfdHlwZV9tYXgKfTsKCmVudW0g
c2VudGVuY2VfZmxhZ19lbnVtCnsKCiAgc2Zfbm9fYW5zd2VyLCBzZl9ub19zdGF0dXMsIHNmX25v
X3N1YnNjcmliZSwgc2Zfbm9fcmFuZ2UsCgogIGVudW1fc2VudGVuY2VfZmxhZ19tYXgKfTsKCmVu
dW0gc2VudGVuY2VfZmxhZ190eXBlCnsKCiAgc2ZfYW5zd2VyID0gMSA8PCBzZl9ub19hbnN3ZXIs
IHNmX3N0YXR1cyA9IDEgPDwgc2Zfbm9fc3RhdHVzLCBzZl9zdWJzY3JpYmUgPSAxIDw8IHNmX25v
X3N1YnNjcmliZSwgc2ZfcmFuZ2UgPSAxIDw8IHNmX25vX3JhbmdlLAoKICBzZW50ZW5jZV9iaXRz
X21hc2sgPSAoMSA8PCBlbnVtX3NlbnRlbmNlX2ZsYWdfbWF4KSAtIDEKfTsKCnN0cnVjdCB2ZXJi
X2Rlc2NfdHlwZTsKc3RydWN0IGFkdmVyYl9kZXNjX3R5cGU7CnN0cnVjdCBmbGFnX2Rlc2NfdHlw
ZTsKCgoKCmNsYXNzIFNlbnRlbmNlOwp0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgU2VudGVuY2VU
OwoKCgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB2ZXJiX3JlcF90eXBlOwp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IG5vdW5fcmVwX3R5cGU7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgY291bnRfcmVw
X3R5cGU7CgoKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1lc3NhZ2VfcmVmX3R5cGU7CgpjbGFz
cyBNZXNzYWdlOwoKCgoKCgoKCgoKCgoKCmNsYXNzIFZlY3RvckJhc2UKewpwcm90ZWN0ZWQ6CiAg
dm9pZCAqX3BvbGljeTsKICB2b2lkICpfZGF0YTsKICB1bnNpZ25lZCBfc2l6ZTsKICB1bnNpZ25l
ZCBfY291bnQ7CgogIFZlY3RvckJhc2UoKSB7fQogIFZlY3RvckJhc2UgKHVuc2lnbmVkIGluaXRp
YWxfY2FwYWNpdHkpIHsKICAgIF9zaXplID0gaW5pdGlhbF9jYXBhY2l0eTsgX2NvdW50ID0gMDsg
fQogIHZvaWQgc3dhcCAoVmVjdG9yQmFzZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz
KSxfX3N0ZGNhbGxfXykpOwoKcHVibGljOgogIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgeyByZXR1
cm4gX2NvdW50OyB9CiAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9zaXplOyB9CiAg
dW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBfc2l6ZTsgfQp9OwoKCmNsYXNzIFNl
dEJhc2UgOiBwdWJsaWMgVmVjdG9yQmFzZQp7CnByb3RlY3RlZDoKICB1bnNpZ25lZCBfYml0czsK
ICB1bnNpZ25lZCBfbWFzazsKCiAgaW5saW5lIHVuc2lnbmVkIGggKHVuc2lnbmVkIEspIGNvbnN0
OwoKICB2b2lkIHNldF9jYXBhY2l0eSAodW5zaWduZWQgY2FwYWNpdHkpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgU2V0QmFzZSAodW5zaWduZWQgaW5pdGlh
bF9jYXBhY2l0eSkgewogICAgc2V0X2NhcGFjaXR5IChpbml0aWFsX2NhcGFjaXR5KTsgX2NvdW50
ID0gMDsgfQogIHZvaWQgc3dhcCAoU2V0QmFzZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKcHVibGljOgogIFNldEJhc2UoKSB7fQogIHVuc2lnbmVkIGNh
cGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX3NpemUgLyAyOyB9Cn07CgoKY2xhc3MgSXRlcmF0b3JC
YXNlCnsKcHJvdGVjdGVkOgogIFZlY3RvckJhc2UgY29uc3QgKl92ZWN0b3I7CiAgdm9pZCAqX3Bv
c2l0aW9uOwp9OwoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBnZW5lcmljX3NldF90LCBjbGFzcyB3cmFw
cGVkX3NldF90LCBjbGFzcyBtZW1iZXJfdD4KY2xhc3MgV3JhcFNldEl0IDogcHVibGljIGdlbmVy
aWNfc2V0X3Q6Okl0CnsKICB0eXBlZGVmIHR5cGVuYW1lIGdlbmVyaWNfc2V0X3Q6Okl0IGdlbmVy
aWNfaXRfdDsKCnB1YmxpYzoKICBXcmFwU2V0SXQgKHdyYXBwZWRfc2V0X3QgJnMpCiAgICA6IGdl
bmVyaWNfaXRfdCAocykge30KCiAgbWVtYmVyX3Qgb3BlcmF0b3IoKSgpIGNvbnN0IHsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxtZW1iZXJfdD4gKGdlbmVyaWNfaXRfdDo6b3BlcmF0b3IoKSgpKTsg
fQoKICBtZW1iZXJfdCBvcGVyYXRvcisrKCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1lbWJl
cl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrKCkpOyB9CgogIG1lbWJlcl90IG9wZXJhdG9y
KysgKGludCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1lbWJlcl90PiAoZ2VuZXJpY19pdF90
OjpvcGVyYXRvcisrICgwKSk7IH0KfTsKCgp0ZW1wbGF0ZTxjbGFzcyBnZW5lcmljX21hcF90LCBj
bGFzcyB3cmFwcGVkX21hcF90LCBjbGFzcyBrZXlfdCwgY2xhc3MgbWVtYmVyX3Q+CmNsYXNzIFdy
YXBNYXBJdCA6IHB1YmxpYyBnZW5lcmljX21hcF90OjpJdAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBn
ZW5lcmljX21hcF90OjpJdCBnZW5lcmljX2l0X3Q7CgpwdWJsaWM6CiAgV3JhcE1hcEl0ICh3cmFw
cGVkX21hcF90ICZtKQogICAgOiBnZW5lcmljX2l0X3QgKG0pIHt9CgogIGtleV90IGtleSgpIGNv
bnN0IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxrZXlfdD4gKGdlbmVyaWNfaXRfdDo6a2V5KCkp
OyB9CgogIG1lbWJlcl90ICZ2YWwoKSBjb25zdCB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxtZW1iZXJfdCAmPiAoZ2VuZXJpY19pdF90Ojp2YWwoKSk7IH0KCiAgbWVtYmVyX3Qgb3BlcmF0
b3IoKSgpIGNvbnN0IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxtZW1iZXJfdD4gKGdlbmVyaWNf
aXRfdDo6b3BlcmF0b3IoKSgpKTsgfQoKICBtZW1iZXJfdCBvcGVyYXRvcisrKCkgewogICAgcmV0
dXJuIHN0YXRpY19jYXN0PG1lbWJlcl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrKCkpOyB9
CgogIG1lbWJlcl90IG9wZXJhdG9yKysgKGludCkgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PG1l
bWJlcl90PiAoZ2VuZXJpY19pdF90OjpvcGVyYXRvcisrICgwKSk7IH0KfTsKCgp0ZW1wbGF0ZTxj
bGFzcyBrZXlfdCwgY2xhc3MgdmFsX3Q+CmNsYXNzIE51bU1hcCA6IHB1YmxpYyBTZXRCYXNlCnsK
cHVibGljOgogIH5OdW1NYXAoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh
bGxfXykpOwogIE51bU1hcCAoa2V5X3Qgbm9fa2V5ID0gMCwgdW5zaWduZWQgaW5pdGlhbF9jYXBh
Y2l0eSA9IDgpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK
ICB2b2lkIHN3YXAgKE51bU1hcCAmb3RoZXIpIHsgU2V0QmFzZTo6c3dhcCAob3RoZXIpOyB9CgoK
ICBib29sIGluY2x1ZGVzIChrZXlfdCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o
MyksX19zdGRjYWxsX18pKTsKCgogIHZhbF90IGF0IChrZXlfdCkgY29uc3QgX19hdHRyaWJ1dGVf
XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKICB2YWxfdCByZW1vdmUgKGtleV90
KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgdm9pZCBy
ZW1vdmVfYWxsICh1bnNpZ25lZCBpbml0aWFsX2NhcGFjaXR5KSBfX2F0dHJpYnV0ZV9fKChfX3Jl
Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKICB2YWxfdCAmc2xvdCAoa2V5X3QpIF9fYXR0
cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgdmFsX3QgJm9wZXJhdG9y
W10gKGtleV90IGspIHsgcmV0dXJuIHNsb3QgKGspOyB9CgoKICBjbGFzcyBJdCA6IHB1YmxpYyBJ
dGVyYXRvckJhc2UKICB7CiAgcHVibGljOgogICAgSXQgKE51bU1hcDxrZXlfdCwgdmFsX3Q+ICYp
IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2b2lkIHJl
c2V0KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIGJv
b2wgZW5kKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKICAgIGtleV90IGtleSgpIGNvbnN0IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9f
c3RkY2FsbF9fKSk7CiAgICB2YWxfdCAmdmFsKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIHZhbF90IG9wZXJhdG9yKCkoKSBjb25zdCBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogICAgdmFsX3Qgb3BlcmF0
b3IrKygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2
YWxfdCBvcGVyYXRvcisrKGludCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKICB9Owp9OwoKCnR5cGVkZWYgTnVtTWFwPGludCwgaW50PiBJbnRJbnRNYXA7CnR5
cGVkZWYgTnVtTWFwPHVsbG9uZ190LCB1bGxvbmdfdD4gVWxsVWxsTWFwOwp0ZW1wbGF0ZTxjbGFz
cyBUPgpjbGFzcyBJbnRQdHJNYXAgOiBwdWJsaWMgTnVtTWFwPGludCwgdm9pZCAqPgp7CiAgdHlw
ZWRlZiBOdW1NYXA8aW50LCB2b2lkICo+IGJhc2VfdDsKcHVibGljOgogIEludFB0ck1hcCAoaW50
IG5vX251bSA9IDAsIGludCBpbml0aWFsX3N6ID0gOCkKICAgIDogYmFzZV90IChub19udW0sIGlu
aXRpYWxfc3opIHt9CgogIFQgKmF0IChpbnQgbikgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQgKj4gKGJhc2VfdDo6YXQgKG4pKTsgfQogIFQgKnJlbW92ZSAoaW50IG4pIHsKICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxUICo+IChiYXNlX3Q6OnJlbW92ZSAobikpOyB9CiAgVCAqJm9wZXJh
dG9yW10gKGludCBuKSB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUIComPiAoYmFzZV90
OjpzbG90IChuKSk7IH0KICB2b2lkIHN3YXAgKEludFB0ck1hcCAmb3RoZXIpIHsKICAgIGJhc2Vf
dDo6c3dhcCAob3RoZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgSW50UHRyTWFw
PFQ+LCBpbnQsIFQgKj4gSXQ7CgogIHZvaWQgZGVsZXRlX3ZhbHVlcygpIHsKICAgIEl0IGl0ICgq
dGhpcyk7CiAgICBmb3IgKFQgKnAgPSBpdCgpOyAhaXQuZW5kKCk7IHAgPSArK2l0KQogICAgICBk
ZWxldGUgcDsgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgZml4ZWRfdCwgY2xhc3MgVD4KY2xhc3MgRml4
UHRyTWFwIDogcHVibGljIE51bU1hcDxpbnQsIHZvaWQgKj4KewogIHR5cGVkZWYgTnVtTWFwPGlu
dCwgdm9pZCAqPiBiYXNlX3Q7CnB1YmxpYzoKICBGaXhQdHJNYXAgKGludCBpbml0aWFsX3N6ID0g
OCkKICAgIDogYmFzZV90ICgoLTIxNDc0ODM2NDcgLTEpLCBpbml0aWFsX3N6KSB7fQoKICBUICph
dCAoZml4ZWRfdCBjb25zdCAmbikgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4g
KGJhc2VfdDo6YXQgKG4ucmVwKCkpKTsgfQogIFQgKnJlbW92ZSAoZml4ZWRfdCBjb25zdCAmbikg
ewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4gKGJhc2VfdDo6cmVtb3ZlIChuLnJlcCgpKSk7
IH0KICBUIComb3BlcmF0b3JbXSAoZml4ZWRfdCBjb25zdCAmbikgewogICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VCAqJj4gKGJhc2VfdDo6c2xvdCAobi5yZXAoKSkpOyB9CiAgdm9pZCBzd2Fw
IChGaXhQdHJNYXAgJm90aGVyKSB7CiAgICBiYXNlX3Q6OnN3YXAgKG90aGVyKTsgfQoKICB0eXBl
ZGVmIFdyYXBNYXBJdDxiYXNlX3QsIEZpeFB0ck1hcDxmaXhlZF90LCBUPiwgaW50LCBUICo+IGJh
c2VfaXRfdDsKICBzdHJ1Y3QgSXQgOiBwdWJsaWMgYmFzZV9pdF90CiAgewogICAgSXQgKEZpeFB0
ck1hcCAmbSkKICAgICAgOiBiYXNlX2l0X3QgKG0pIHt9CiAgICBmaXhlZF90IGNvbnN0IGtleSgp
IGNvbnN0IHsKICAgICAgcmV0dXJuIGZpeGVkX3QgKGJhc2VfdDo6SXQ6OmtleSgpLCAwKTsgfQog
IH07CgogIHRlbXBsYXRlPGNsYXNzIHNvbWVfdD4KICB2b2lkIGFkZF9rZXlzX3RvIChzb21lX3Qg
JmJhZykgewogICAgZm9yIChJdCBpdCAoKnRoaXMpOyAhaXQuZW5kKCk7ICsraXQpCiAgICAgIGJh
Zy5hZGQgKGl0LmtleSgpKTsgfQoKICB2b2lkIGRlbGV0ZV92YWx1ZXMoKSB7CiAgICBJdCBpdCAo
KnRoaXMpOwogICAgZm9yIChUICpwID0gaXQoKTsgIWl0LmVuZCgpOyBwID0gKytpdCkKICAgICAg
ZGVsZXRlIHA7IH0KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBpbnRfdD4KY2xhc3Mg
UHRySW50TWFwIDogcHVibGljIE51bU1hcDx2b2lkICosIHZvaWQgKj4KewogIHR5cGVkZWYgTnVt
TWFwPHZvaWQgKiwgdm9pZCAqPiBiYXNlX3Q7CgpwdWJsaWM6CiAgUHRySW50TWFwIChpbnQgaW5p
dF9zeiA9IDgpIDogYmFzZV90ICgwLCBpbml0X3N6KSB7fQoKICBpbnRfdCBhdCAoSyAqaykgY29u
c3QgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50X3Q+IChiYXNlX3Q6OmF0IChrKSk7
IH0KICBpbnRfdCByZW1vdmUgKEsgKmspIHsKICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGlu
dF90PiAoYmFzZV90OjpyZW1vdmUgKGspKTsgfQogIGludF90ICZvcGVyYXRvcltdIChLICprKSB7
CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRfdCAmPiAoYmFzZV90OjpzbG90IChrKSk7
IH0KICB2b2lkIHN3YXAgKFB0ckludE1hcCAmb3RoZXIpIHsKICAgIGJhc2VfdDo6c3dhcCAob3Ro
ZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgUHRySW50TWFwPEssIGludF90Piwg
SyAqLCBpbnRfdD4gSXQ7CgogIHZvaWQgZGVsZXRlX2tleXMoKSB7CiAgICBJdCBpdCAoKnRoaXMp
OwogICAgZm9yICg7IEsgKmsgPSBpdC5rZXkoKTsgKytpdCkKICAgICAgZGVsZXRlIGs7IH0KfTsK
CgoKCgp0ZW1wbGF0ZTxjbGFzcyBLLCBjbGFzcyBUPgpjbGFzcyBQdHJQdHJNYXAgOiBwdWJsaWMg
TnVtTWFwPHZvaWQgKiwgdm9pZCAqPgp7CiAgdHlwZWRlZiBOdW1NYXA8dm9pZCAqLCB2b2lkICo+
IGJhc2VfdDsKCnB1YmxpYzoKICBQdHJQdHJNYXAgKGludCBpbml0X3N6ID0gOCkgOiBiYXNlX3Qg
KDAsIGluaXRfc3opIHt9CgogIFQgKmF0IChLICprKSBjb25zdCB7CiAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VCAqPiAoYmFzZV90OjphdCAoaykpOyB9CiAgVCAqcmVtb3ZlIChLICprKSB7CiAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCAqPiAoYmFzZV90OjpyZW1vdmUgKGspKTsgfQogIFQgKiZvcGVy
YXRvcltdIChLICprKSB7CiAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUIComPiAoYmFzZV90
OjpzbG90IChrKSk7IH0KICB2b2lkIHN3YXAgKFB0clB0ck1hcCAmb3RoZXIpIHsKICAgIGJhc2Vf
dDo6c3dhcCAob3RoZXIpOyB9CgogIHR5cGVkZWYgV3JhcE1hcEl0PGJhc2VfdCwgUHRyUHRyTWFw
PEssIFQ+LCBLICosIFQgKj4gSXQ7CgogIHZvaWQgZGVsZXRlX2tleXMoKSB7CiAgICBJdCBpdCAo
KnRoaXMpOwogICAgZm9yICg7IEsgKmsgPSBpdC5rZXkoKTsgKytpdCkKICAgICAgZGVsZXRlIGs7
IH0KCiAgdm9pZCBkZWxldGVfdmFsdWVzKCkgewogICAgSXQgaXQgKCp0aGlzKTsKICAgIGZvciAo
VCAqcCA9IGl0KCk7IGl0LmtleSgpOyBwID0gKytpdCkKICAgICAgZGVsZXRlIHA7IH0KCiAgdm9p
ZCBkZWxldGVfYWxsKCkgewogICAgSXQgaXQgKCp0aGlzKTsKICAgIGZvciAoVCAqdCA9IGl0KCk7
IEsgKmsgPSBpdC5rZXkoKTsgdCA9ICsraXQpIHsKICAgICAgZGVsZXRlIGs7IGRlbGV0ZSB0OyB9
IH0KfTsKdGVtcGxhdGUgPGNsYXNzIHZhbF90PgpjbGFzcyBDb25TdHJNYXBCYXNlIDogcHVibGlj
IFNldEJhc2UKewpwdWJsaWM6CiAgfkNvblN0ck1hcEJhc2UoKSBfX2F0dHJpYnV0ZV9fKChfX3Jl
Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIENvblN0ck1hcEJhc2UgKHVuc2lnbmVkIGluaXRp
YWxfY2FwYWNpdHkgPSA4LCB1bnNpZ25lZCBsZW5ndGggPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3Jl
Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBpbmNsdWRlcyAoY2hhciBjb25zdCAq
cykgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgog
IHZhbF90IGF0IChjaGFyIGNvbnN0ICpzKSBjb25zdCBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKCgogIHZhbF90IHJlbW92ZSAoY2hhciBjb25zdCAqcykgX19h
dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgcmVtb3Zl
X2FsbCAodW5zaWduZWQgaW5pdGlhbF9jYXBhY2l0eSA9IDgpIF9fYXR0cmlidXRlX18oKF9fcmVn
cGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgogIHZhbF90ICZzbG90IChjaGFyIGNvbnN0ICpz
KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgdm9pZCBn
cm93ICh1bnNpZ25lZCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf
XykpOwoKCiAgY2xhc3MgSXQgOiBwdWJsaWMgSXRlcmF0b3JCYXNlCiAgewogIHB1YmxpYzoKICAg
IEl0IChDb25TdHJNYXBCYXNlICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSk7CiAgICB2b2lkIHJlc2V0KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks
X19zdGRjYWxsX18pKTsKICAgIGJvb2wgZW5kKCkgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIGNoYXIgY29uc3QgKmtleSgpIGNvbnN0IF9fYXR0
cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2YWxfdCAmdmFsKCkg
Y29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICAgIHZh
bF90IG9wZXJhdG9yKCkoKSBjb25zdCBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0
ZGNhbGxfXykpOwogICAgdmFsX3Qgb3BlcmF0b3IrKygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgICB2YWxfdCBvcGVyYXRvcisrIChpbnQpIF9fYXR0cmli
dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgfTsKfTsKCnR5cGVkZWYgQ29u
U3RyTWFwQmFzZTxpbnQ+IENvblN0ckludE1hcDsKdHlwZWRlZiBDb25TdHJNYXBCYXNlPHZvaWQg
Kj4gQ29uU3RyUHRyTWFwOwoKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIENvblN0ck1hcCA6IHB1
YmxpYyBDb25TdHJQdHJNYXAKewogIHR5cGVkZWYgQ29uU3RyUHRyTWFwIGJhc2VfdDsKcHVibGlj
OgogIENvblN0ck1hcCAodW5zaWduZWQgaW5pdGlhbF9jYXBhY2l0eSA9IDgsIHVuc2lnbmVkIGxl
bmd0aCA9IDApCiAgICA6IGJhc2VfdCAoaW5pdGlhbF9jYXBhY2l0eSwgbGVuZ3RoKSB7fQoKICBU
ICphdCAoY2hhciBjb25zdCAqcykgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4g
KGJhc2VfdDo6YXQgKHMpKTsgfQogIFQgKnJlbW92ZSAoY2hhciBjb25zdCAqcykgewogICAgcmV0
dXJuIHN0YXRpY19jYXN0PFQgKj4gKGJhc2VfdDo6cmVtb3ZlIChzKSk7IH0KICBUIComb3BlcmF0
b3JbXSAoY2hhciBjb25zdCAqcykgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCAqJj4g
KGJhc2VfdDo6c2xvdCAocykpOyB9CiAgVCAqJnNsb3QgKGNoYXIgY29uc3QgKnMpIHsKICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFQgKiY+IChiYXNlX3Q6OnNsb3QgKHMpKTsgfQogIHZvaWQg
c3dhcCAoQ29uU3RyTWFwICZvdGhlcikgewogICAgYmFzZV90Ojpzd2FwIChvdGhlcik7IH0KCiAg
dHlwZWRlZiBXcmFwTWFwSXQ8YmFzZV90LCBDb25TdHJNYXAsIGNoYXIgY29uc3QgKiwgVCAqPiBJ
dDsKCiAgdm9pZCBkZWxldGVfYWxsKCkgewogICAgZm9yIChJdCBpdCAoKnRoaXMpOyBpdC5rZXko
KTsgKytpdCkgZGVsZXRlIGl0KCk7IH0KfTsKCgoKCgoKZW51bSBzb2wzX2lkc19lbnVtCnsKCgoK
CiAgcmlkX3NvbDNfdW5pcXVlLAogIHJpZF9zb2wzX3VuaXF1ZV9pZCwKICByaWRfc29sM19nbG9i
YWxfaWQsCiAgcmlkX3NvbDNfbG9hZF9pZCwKICByaWRfc29sM19yZXZpc2lvbiwKICByaWRfc29s
M19kYXRlX3RpbWUsCiAgcmlkX3NvbDNfbG9nX2VudHJ5X191bnVzZWQsCiAgcmlkX3NvbDNfYWNj
ZXNzX2NvbnRyb2wsCiAgcmlkX3NvbDNfY29udHJvbGxlZCwKICByaWRfc29sM19uYW1lZCwKICBy
aWRfc29sM19vd25lZCwKICByaWRfc29sM19ldmVudCwKICByaWRfc29sM190cmFuc2FjdGlvbiwK
ICByaWRfc29sM19hdF9leGNoYW5nZSwKICByaWRfc29sM19leGNoYW5nZV9ldmVudCwKCiAgcmlk
X3NvbDNfdXNlciwKICByaWRfc29sM19ncm91cCwKICByaWRfc29sM19jdXN0b21lciwKICByaWRf
c29sM19hY2NvdW50LAogIHJpZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZiwKICByaWRfc29sM19wYWly
LAoKICByaWRfc29sM190cmFkZXIsCgogIHJpZF9zb2wzX3RpY2tfc2l6ZSwKICByaWRfc29sM19p
bnN0cnVtZW50LAogIHJpZF9zb2wzX2Rlcml2YXRpdmUsCiAgcmlkX3NvbDNfZGVyaXZhdGl2ZV9j
bnRyLAogIHJpZF9zb2wzX2NudHJfZ3JvdXBfMSwKICByaWRfc29sM19jbnRyX2dyb3VwXzIsCiAg
cmlkX3NvbDNfY250cl9ncm91cF8zLAogIHJpZF9zb2wzX3NwcmVhZF9kZWYsCiAgcmlkX3NvbDNf
c3ByZWFkLAoKICByaWRfc29sM19pbnN0cl9zdG9jaywKICByaWRfc29sM19kaXZpZGVuZCwKCiAg
cmlkX3NvbDNfaW5zdHJfaW5kZXgsCgogIHJpZF9zb2wzX2luc3RyX2Z1dHVyZSwKICByaWRfc29s
M19pbnN0cl9mdXR1cmVfY250ciwKCiAgcmlkX3NvbDNfaW5zdHJfb3B0aW9uLAogIHJpZF9zb2wz
X2luc3RyX29wdGlvbl9jbnRyLAoKICByaWRfc29sM19pbnN0cl9jdXJyZW5jeSwKCiAgcmlkX3Nv
bDNfbWFya2V0X2VudHJ5LAogIHJpZF9zb2wzX21hcmtldF9jb3JyLAogIHJpZF9zb2wzX21hcmtl
dF9kaWZmLAogIHJpZF9zb2wzX21hcmtldCwKICByaWRfc29sM190aWNrLAogIHJpZF9zb2wzX3By
aWNlcywKCiAgcmlkX3NvbDNfdGhlb19wYXJhbWV0ZXJzLAogIHJpZF9zb2wzX3RoZW9fcGF5bWVu
dCwKICByaWRfc29sM190aGVvX2lucHV0LAogIHJpZF9zb2wzX3RoZW9fb3V0cHV0LAoKICByaWRf
c29sM19kcmF3bl9mdW5jdGlvbiwKICByaWRfc29sM19jb25zdF9yYXRlLAogIHJpZF9zb2wzX2Ry
YXduX3JhdGUsCiAgcmlkX3NvbDNfY29uc3Rfdm9sYSwKICByaWRfc29sM19kcmF3bl92b2xhLAog
IHJpZF9zb2wzX3NrZXdlZF92b2xhLAogIHJpZF9zb2wzX3NtaWxlX3NoYXBlLAogIHJpZF9zb2wz
X2tpX3N0YXRpY19zbWlsZSwKICByaWRfc29sM19raV9keW5hbWljX3NtaWxlLAogIHJpZF9zb2wz
X3ZvbGFfZ3JvdXAsCiAgcmlkX3NvbDNfdm9sYV9jdXJ2ZSwKICByaWRfc29sM19yYXRlX2N1cnZl
LAoKICByaWRfc29sM190cmFkaW5nX3RpbWVfdmFsLAogIHJpZF9zb2wzX3JlYWxfbWFya2V0X3Zh
bCwKICByaWRfc29sM19jb21ib19tYXJrZXRfdmFsLAogIHJpZF9zb2wzX3JlYWxfbWFya2V0X3Np
ZGVfdmFsLAogIHJpZF9zb2wzX3JlYWxfcHJpY2VfdmFsLAogIHJpZF9zb2wzX2NvbWJvX3ByaWNl
X3ZhbCwKICByaWRfc29sM19raV9keW5hbWljX3NtaWxlX3ZhbCwKICByaWRfc29sM19jb25zdF9k
aXNjb3VudF9wcmljZV92YWwsCiAgcmlkX3NvbDNfZGlzY291bnRfcHJpY2VfdmFsLAogIHJpZF9z
b2wzX3JhdGVfdmFsLAogIHJpZF9zb2wzX2ltbWVkaWF0ZV9jb25zdF9yYXRlX3ZhbCwKICByaWRf
c29sM190aGVvX21hcmtldF92YWwsCiAgcmlkX3NvbDNfdGhlb19tYXJrZXRfZ3JvdXBfdmFsLAog
IHJpZF9zb2wzX2F1dG9fdGhlb192YWwsCiAgcmlkX3NvbDNfaW1wbGllZF92b2xhX3ZhbCwKICBy
aWRfc29sM19wb3NpdGlvbl92YWwsCiAgcmlkX3NvbDNfY29udHJhY3RfcG9zX3ZhbCwKICByaWRf
c29sM19jb250cmFjdF9wb3NfdGhlb192YWwsCiAgcmlkX3NvbDNfZnV0dXJlX3RoZW9fbWFya2V0
X3ZhbCwKICByaWRfc29sM19wb3J0Zm9saW9fdmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19wb3Nf
dmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19wb3NfdGhlb192YWwsCgogIHJpZF9zb2wzX29yZGVy
ZGF0YSwKICByaWRfc29sM19vcmRlciwKICByaWRfc29sM19vcmRlcnN0YXRlLAogIHJpZF9zb2wz
X29yZGVybG9nLAoKICByaWRfc29sM190cmFkZSwKCiAgcmlkX3NvbDNfdHJhbnNmZXIsCiAgcmlk
X3NvbDNfcG9zaXRpb24sCgogIHJpZF9zb2wzX3BvcnRmb2xpbywKICByaWRfc29sM19wb3J0Zm9s
aW9fbWJyLAoKICByaWRfc29sM19reWVfdGhlb19kb21haW4sCiAgcmlkX3NvbDNfa3llX3Rhc2ss
CiAgcmlkX3NvbDNfa3llX3Rhc2tfdmFsLAogIHJpZF9zb2wzX2t5ZV9zdGF0aXN0aWNzLAogIHJp
ZF9zb2wzX2t5ZV9zdGF0dXMsCgogIHJpZF9zb2wzX3Jlc291cmNlX3NldCwKICByaWRfc29sM19y
ZXNvdXJjZV9rZXksCiAgcmlkX3NvbDNfcmVzb3VyY2UsCiAgcmlkX3NvbDNfcmVzb3VyY2VfdmFs
LAoKCiAgcmlkX3NvbDNfYXV0b19vcHBvcnR1bml0eV92YWwsCiAgcmlkX3NvbDNfZGl2aWRlbmRf
c2V0LAogIHJpZF9zb2wzX2F1dG9fZGFydGJvYXJkX3ZhbCwKICByaWRfc29sM19vd25fb3JkZXJf
dmFsLAogIHJpZF9zb2wzX3BvcnRmb2xpb19jdHJfYWNjc192YWwsCiAgcmlkX3NvbDNfcXVvdGUs
CiAgcmlkX3NvbDNfcXVvdGVfcmVxdWVzdCwKICByaWRfc29sM19pbnN0cl9jb21ibywKICByaWRf
c29sM19pbnN0cl9jb21ib19tZW1iZXIsCgoKICByaWRfc29sM19ub19yZWNvcmQsCiAgcmlkX3Nv
bDNfZ2VuZXJpYywKICByaWRfc29sM19zdGF0dXMsCiAgcmlkX3NvbDNfa2V5X2V4Y2hhbmdlLAog
IHJpZF9zb2wzX2FwcGxpY2F0aW9uLAogIHJpZF9zb2wzX2FwcF9sb2dpbiwKICByaWRfc29sM19z
ZXRfZGF0ZSwKICByaWRfc29sM191c2VyX2xvZ2luXzEsCiAgcmlkX3NvbDNfdXNlcl9sb2dpbl8y
LAogIHJpZF9zb2wzX3VzZXJfbG9naW5fMywKICByaWRfc29sM191c2VyX2xvZ2luXzQsCiAgcmlk
X3NvbDNfcGFzc3dvcmRfY2hhbmdlLAogIHJpZF9zb2wzX2xvZ2luX2luZm8sCiAgcmlkX3NvbDNf
bG9nb3V0X2luZm8sCiAgcmlkX3NvbDNfbGljZW5zZSwKICByaWRfc29sM19saWNlbnNlX2luZm8s
CiAgcmlkX3NvbDNfYWRtaW5fcmVxdWVzdCwKICByaWRfc29sM19hZG1pbl9jb21tYW5kLAogIHJp
ZF9zb2wzX3JlcmVxdWVzdCwKICByaWRfc29sM19zb2wzZF9zdGFydCwKICByaWRfc29sM19pbnF1
aXJlX2NvbW1fZGV0YWlscywKICByaWRfc29sM19jb21tX2RldGFpbHMsCgoKICByaWRfc29sM19x
dW90ZV9zaWRlLAogIHJpZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYywKICByaWRfc29sM19leGNoYW5n
ZV9wcml2YXRlX191bnVzZWQsCiAgcmlkX3NvbDNfbmV3cywKICByaWRfc29sM19mZWVfZGVmLAog
IHJpZF9zb2wzX2ZlZV9zdHJ1Y3R1cmUsCgogIHJpZF9zb2wzX3JlZ2lzdGVyX29kcnBkciwKICBy
aWRfc29sM19vcmRlcl9yb3V0ZSwKICByaWRfc29sM19pbnN0cl9jb21ib19jbnRyLAoKCgoKICBy
aWRfc29sM190aWNrX2N1cnZlX3ZhbCwKICByaWRfc29sM19xdW90ZV92YWwsCiAgcmlkX3NvbDNf
cXVvdGVfcmVxX3ZhbCwKICByaWRfc29sM19reWVfcmF0ZV92YWwsCiAgcmlkX3NvbDNfa3llX2Vl
eWVfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90ZV9leWVfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90
ZXJfdmFsLAogIHJpZF9zb2wzX2t5ZV9xdW90ZXJfZ3JvdXBfdmFsLAogIHJpZF9zb2wzX2NsaWNr
X3F0eV92YWwsCiAgcmlkX3NvbDNfcG9zX3ZhbCwKICByaWRfc29sM19wb3NfbWt0X3ZhbCwKICBy
aWRfc29sM19wb3NfdGhlb192YWwsCiAgcmlkX3NvbDNfcG5sX3ZhbCwKICByaWRfc29sM19wbmxf
bWt0X3ZhbCwKICByaWRfc29sM19wbmxfdGhlb192YWwsCiAgcmlkX3NvbDNfYXV0b19yYXRlX3Zh
bCwKICByaWRfc29sM19hdXRvX3ZvbGFfdmFsLAogIHJpZF9zb2wzX3ZvbGFfdmFsLAogIHJpZF9z
b2wzX3Bvc19lcXVpdl92YWwsCiAgcmlkX3NvbDNfcHJpY2VzX3ZhbCwKICByaWRfc29sM19tYXZn
X2N1cnZlX3ZhbCwKICByaWRfc29sM19kaXZpZGVuZF92YWwsCiAgcmlkX3NvbDNfY29tYm9fcHJp
Y2VzX3ZhbCwKICByaWRfc29sM19yaXNrX29mZnNldF92YWwsCiAgcmlkX3NvbDNfYXV0b192YWws
CiAgcmlkX3NvbDNfcmlza19vZmZzZXQsCiAgcmlkX3NvbDNfY3VycmVuY3lfY3Z0X3ZhbCwKICBy
aWRfc29sM190cmFkZV92b2x1bWVfdmFsLAoKICByaWRfc29sM19tYXJrZXRfbW92ZV92YWwsCiAg
cmlkX3NvbDNfdGlja2VyX3ZhbCwKCiAgcmlkX3NvbDNfbWFjaF9rZXksCiAgcmlkX3NvbDNfbWFj
aF90a2V5LAogIHJpZF9zb2wzX21hY2hfY3RsLAogIHJpZF9zb2wzX21hY2hfc3RhdGUsCgogIHJp
ZF9zb2wzX21hY2hfc2VsLAogIHJpZF9zb2wzX21hY2hfdmFsLAogIHJpZF9zb2wzX21hY2hfc2Vs
X3ZhbCwKCiAgcmlkX3NvbDNfa3llX2VkZ2VfdmFsLAogIHJpZF9zb2wzX21hY2hfa3llX3ZhbCwK
ICByaWRfc29sM19tYWNoX2t5ZV9xcmFfdmFsLAogIHJpZF9zb2wzX21hY2hfcW1fdmFsLAoKICBy
aWRfc29sM19tYWNoX3Nob3RzX3ZhbCwKICByaWRfc29sM19tYWNoX3N0YXRpc3RpY3MsCiAgcmlk
X3NvbDNfbWFjaF9zdGF0LAoKICByaWRfc29sM19tYWNoX2F1dG9kZWxfdmFsLAoKICByaWRfc29s
M19hdXRvX2dycF92YWwsCiAgcmlkX3NvbDNfYXV0b190aGVvX2dycF92YWwsCgogIHJpZF9zb2wz
X19tYXgKfTsKc3RydWN0IGZpZWxkX3R5cGUKewogIGZpZWxkX3R5cGUgY29uc3QgKnByZXY7CiAg
Y2hhciBjb25zdCAqbmFtZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgdW5zaWduZWQgc2hvcnQgdHlw
ZTsKICB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CiAgdW5zaWduZWQgc2hvcnQgc2l6ZTsKICByZWNv
cmRfdHlwZSBjb25zdCAqcmVjb3JkOwogIGluZGV4X3R5cGUgY29uc3QgKnNlbGVjdHM7Cn07CgoK
CnN0cnVjdCBwYXJlbnRfdHlwZQp7CiAgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZDsKICB1bnNp
Z25lZCBvZmZzZXQ7Cn07CgoKCnN0cnVjdCBtZW1iZXJfdHlwZQp7CiAgY2hhciBjb25zdCAqbmFt
ZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgZmllbGRfdHlwZSBjb25zdCAqZmllbGQ7CiAgcmVjb3Jk
X3R5cGUgY29uc3QgKnJlY29yZDsKICB1bnNpZ25lZCBzaG9ydCBjb3VudDsKICB1bnNpZ25lZCBz
aG9ydCBvZmZzZXQ7Cn07CgoKCnN0cnVjdCByZWNvcmRfdHlwZQp7CiAgcmVjb3JkX3R5cGUgY29u
c3QgKnByZXY7CiAgY2hhciBjb25zdCAqbmFtZTsKICBjaGFyIGNvbnN0ICpkb2M7CiAgdW5zaWdu
ZWQgc2hvcnQgdHlwZV9pZDsKICB1bnNpZ25lZCBzaG9ydCBzaXplOwogIHVuc2lnbmVkIHNob3J0
IG5pbmRpY2VzOwogIHVuc2lnbmVkIHNob3J0IGZsYWdzOwogIHBhcmVudF90eXBlIGNvbnN0ICpj
b25zdCAqcGFyZW50czsKICBtZW1iZXJfdHlwZSBjb25zdCAqY29uc3QgKm1lbWJlcnM7CiAgaW5k
ZXhfdHlwZSBjb25zdCAqY29uc3QgKmluZGljZXM7Cn07CgoKCgoKCnN0cnVjdCBpbmRleF9tZW1i
ZXJfdHlwZQp7CiAgbWVtYmVyX3R5cGUgY29uc3QgKm1lbWJlcjsKICB1bnNpZ25lZCBzaG9ydCBy
ZWNvcmRfb2Zmc2V0OwogIHVuc2lnbmVkIHNob3J0IGluZGV4X29mZnNldDsKfTsKCgoKCnN0cnVj
dCBpbmRleF90eXBlCnsKICBjaGFyIGNvbnN0ICpuYW1lOwogIGNoYXIgY29uc3QgKmRvYzsKICB1
bnNpZ25lZCBzaG9ydCB0eXBlX2lkOwogIHVuc2lnbmVkIHNob3J0IHNpemU7CiAgdW5zaWduZWQg
c2hvcnQgZmxhZ3M7CiAgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZDsKICBpbmRleF9tZW1iZXJf
dHlwZSBjb25zdCAqY29uc3QgKm1lbWJlcnM7Cn07CgoKCgoKCnN0cnVjdCBmbGF0X21lbWJlcl90
eXBlCnsKICBjaGFyIGNvbnN0ICpuYW1lOwogIGZpZWxkX3R5cGUgY29uc3QgKmZpZWxkOwogIHVu
c2lnbmVkIHNob3J0IG9mZnNldDsKfTsKCnN0cnVjdCBmbGF0X2luZGV4X3R5cGUKewogIGZsYXRf
bWVtYmVyX3R5cGUgY29uc3QgKm1lbWJlcnM7CiAgdW5zaWduZWQgc2hvcnQgbm1lbWJlcnM7Cn07
CgpzdHJ1Y3QgZmxhdF9yZWNvcmRfdHlwZQp7CiAgZmxhdF9tZW1iZXJfdHlwZSBjb25zdCAqbWVt
YmVyczsKICBmbGF0X2luZGV4X3R5cGUgY29uc3QgKmluZGljZXM7CiAgdW5zaWduZWQgc2hvcnQg
bm1lbWJlcnM7CiAgdW5zaWduZWQgc2hvcnQgbmluZGljZXM7Cn07CgoKCgoKc3RydWN0IGxpbmdv
X3R5cGUKewogIGNoYXIgY29uc3QgKm5hbWU7CiAgZmllbGRfdHlwZSBjb25zdCAqbGFzdF9maWVs
ZDsKICByZWNvcmRfdHlwZSBjb25zdCAqbGFzdF9yZWNvcmQ7Cn07CgoKCgoKc3RydWN0IGluZGV4
X2luZm9fdAp7CiAgdW5zaWduZWQgc2hvcnQgbGluZWFyX3NpemU7CiAgdW5zaWduZWQgc2hvcnQg
Y29sdW1uczsKICB1bnNpZ25lZCBzaG9ydCBjcmM7Cn07Cgp0eXBlZGVmIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgYm9vbCB2YWxpZGF0ZV90ICgKICByZWNvcmRf
dHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBjb25zdCAmLCB2b2lkIGNvbnN0ICosIGNoYXIgKmV4
cGxhaW4pOwoKc3RydWN0IHJlY29yZF9pbmZvX3QKewogIGluZGV4X2luZm9fdCAqaW5kZXhfaW5m
bzsKICBpbmRleF90eXBlIGNvbnN0ICpwcmltYXJ5X2luZGV4OwogIHZhbGlkYXRlX3QgKnZhbGlk
YXRlOwogIHVuc2lnbmVkIHNob3J0IGxpbmVhcl9zaXplOwogIHVuc2lnbmVkIHNob3J0IGNvbHVt
bnM7CiAgdW5zaWduZWQgc2hvcnQgY3JjOwogIHVuc2lnbmVkIHNob3J0IHVuaXFfbWFzazsKfTsK
CgpjbGFzcyBMaW5nbwp7CgogIHN0YXRpYyBQdHJJbnRNYXA8Y2hhciwgaW50PiBfcmVmY291bnQ7
CgoKICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgKl9yZWNvcmRbXTsKICBzdGF0aWMgcmVjb3Jk
X2luZm9fdCAqX3JlY29yZF9pbmZvW107CgoKICBzdGF0aWMgQ29uU3RyTWFwPGZpZWxkX3R5cGU+
IF9maWVsZHNfYnlfbmFtZTsKICBzdGF0aWMgQ29uU3RyTWFwPHJlY29yZF90eXBlPiBfcmVjb3Jk
c19ieV9uYW1lOwogIHN0YXRpYyBDb25TdHJNYXA8aW5kZXhfdHlwZT4gX2luZGljZXNfYnlfbmFt
ZTsKCgogIGxpbmdvX3R5cGUgY29uc3QgJl9saW5nbzsKCnB1YmxpYzoKICB+TGluZ28oKSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIExpbmdvIChsaW5nb190
eXBlIGNvbnN0ICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CgoKICBvcGVyYXRvciBsaW5nb190eXBlIGNvbnN0ICYoKSBjb25zdCB7IHJldHVybiBfbGluZ287
IH0KCgogIGNoYXIgY29uc3QgKm5hbWUoKSBjb25zdCB7IHJldHVybiBfbGluZ28ubmFtZTsgfQog
IHJlY29yZF90eXBlIGNvbnN0ICphdCAodW5zaWduZWQgaSkgY29uc3QgeyByZXR1cm4gX3JlY29y
ZFtpXTsgfQoKCgoKCgogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAqZ2V0X3JlY29yZCAodW5z
aWduZWQgbm91bikgewogICAgcmV0dXJuIG5vdW4gPCByaWRfc29sM19fbWF4ID8gX3JlY29yZFtu
b3VuXSA6IDA7IH0KCiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgKmdldF9pbmRleCAodW5zaWdu
ZWQgbm91bikgewogICAgdW5zaWduZWQgcmlkID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6OmdldF9y
ZWNvcmRfaWQgKG5vdW4pOwogICAgdW5zaWduZWQgaWlkID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6
OmdldF9pbmRleF9pZCAobm91bik7CiAgICByZWNvcmRfdHlwZSBjb25zdCAqcmRlc2MgPSBnZXRf
cmVjb3JkIChyaWQpOwogICAgcmV0dXJuIHJkZXNjICYmIGlpZCA8IHJkZXNjLT5uaW5kaWNlcyA/
IHJkZXNjLT5pbmRpY2VzW2lpZF0gOiAwOyB9CgoKICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg
JnJlY29yZCAodW5zaWduZWQgcmlkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0
ZGNhbGxfXykpOwogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZpbmRleCAodW5zaWduZWQgaWlk
KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKcHJpdmF0ZToK
ICBzdGF0aWMgcmVjb3JkX2luZm9fdCBjb25zdCAmcmVjb3JkX2luZm8gKHVuc2lnbmVkIHJpZCkg
ewogICAgcmV0dXJuICpfcmVjb3JkX2luZm9bcmlkXTsgfQogIHN0YXRpYyBpbmRleF9pbmZvX3Qg
Y29uc3QgJmluZGV4X2luZm8gKHVuc2lnbmVkIGlpZCkgewogICAgcmV0dXJuIChfcmVjb3JkX2lu
Zm9bc2VudGVuY2VfaGVhZGVyX2RlZnM6OmdldF9yZWNvcmRfaWQgKGlpZCldCiAgICAgICAgICAg
IC0+aW5kZXhfaW5mb1tzZW50ZW5jZV9oZWFkZXJfZGVmczo6Z2V0X2luZGV4X2lkIChpaWQpXSk7
IH0KCnB1YmxpYzoKCgogIHN0YXRpYyBmaWVsZF90eXBlIGNvbnN0ICpmaWVsZCAoY2hhciBjb25z
dCAqbmFtZSkgewogICAgcmV0dXJuIF9maWVsZHNfYnlfbmFtZS5hdCAobmFtZSk7IH0KICBzdGF0
aWMgcmVjb3JkX3R5cGUgY29uc3QgKnJlY29yZCAoY2hhciBjb25zdCAqbmFtZSkgewogICAgcmV0
dXJuIF9yZWNvcmRzX2J5X25hbWUuYXQgKG5hbWUpOyB9CiAgc3RhdGljIGluZGV4X3R5cGUgY29u
c3QgKmluZGV4IChjaGFyIGNvbnN0ICpuYW1lKSB7CiAgICByZXR1cm4gX2luZGljZXNfYnlfbmFt
ZS5hdCAobmFtZSk7IH0KCgoKCgogIHN0YXRpYyBpbmxpbmUgcmVjb3JkX2luZm9fdCBjb25zdCAm
aW5mbyAocmVjb3JkX3R5cGUgY29uc3QgJmRlc2MpIHsKICAgIHJldHVybiByZWNvcmRfaW5mbyAo
ZGVzYy50eXBlX2lkKTsgfQogIHN0YXRpYyBpbmxpbmUgaW5kZXhfaW5mb190IGNvbnN0ICZpbmZv
IChpbmRleF90eXBlIGNvbnN0ICZpbmRleCkgewogICAgcmV0dXJuIGluZGV4X2luZm8gKGluZGV4
LnR5cGVfaWQpOyB9Cn07CgoKCgoKCgoKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgp1bmlvbiB3YWl0
CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWdu
ZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3JlZHVtcDox
OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2lnbmVkIGlu
dDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QKICAgICAg
ewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNpZ25lZCBp
bnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAgICAgIH0g
X193YWl0X3N0b3BwZWQ7CiAgfTsKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90Owog
ICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50
IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKCgpfX2V4dGVuc2lvbl9f
IHR5cGVkZWYgc3RydWN0CiAgewogICAgbG9uZyBsb25nIGludCBxdW90OwogICAgbG9uZyBsb25n
IGludCByZW07CiAgfSBsbGRpdl90OwoKCmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3Vy
X21heCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9fY29uc3QgY2hh
ciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp
bnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBsb25nIGxvbmcgaW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gZG91YmxlIHN0cnRv
ZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQg
c3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gbG9uZyBpbnQgc3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSkgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo
cm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv
dyAoKTsKCgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0
aHJvdyAoKTsKCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2Nh
bGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19j
dHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlw
ZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7CgoK
CmV4dGVybiBsb25nIGludCBzdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0
aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsX2wgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5z
aW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5z
aWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq
X19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90
IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHN0cnRvZl9sIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSBzdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQg
X19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGlu
dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2lu
dGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoK
ZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50
IF9fc3RydG91bF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNp
b25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChf
X2NvbnN0IGNoYXIgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBfX2lubGluZSBkb3VibGUK
c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvZF9pbnRlcm5hbCAoX19ucHRy
LCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50CnN0cnRvbCAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAg
ICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICBy
ZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9
CgoKCgpleHRlcm4gX19pbmxpbmUgZmxvYXQKc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVy
biBfX3N0cnRvZl9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5s
aW5lIGxvbmcgZG91YmxlCnN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIs
IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9s
ZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0
ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICBpbnQgX19iYXNl
KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0
ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBfX2lubGluZSB1bnNpZ25lZCBs
b25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNo
YXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7
CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg
MCk7Cn0KCgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3Ry
dG9sbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0
b2xsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9u
X18gZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29u
c3QgY2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRl
cm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCgoKZXh0ZXJuIF9faW5saW5l
IGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBz
dHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJuIF9faW5saW5lIGludAph
dG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiAoaW50KSBzdHJ0
b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVybiBfX2lubGluZSBsb25n
IGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJldHVybiBzdHJ0
b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKCgpfX2V4dGVuc2lvbl9fIGV4
dGVybiBfX2lubGluZSBsb25nIGxvbmcgaW50CmF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
dGhyb3cgKCkKewogIHJldHVybiBzdHJ0b2xsIChfX25wdHIsIChjaGFyICoqKSBfX251bGwsIDEw
KTsKfQoKZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJu
IGxvbmcgaW50IGE2NGwgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCgpleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1
bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsK
Cgp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191
aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2ln
bmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0
eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVm
IHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCgoKCgpfX2V4dGVuc2lvbl9fIHR5cGVk
ZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX19kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aWRfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX19naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2lub190Owp0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbm82NF90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf
X21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19ubGlua190Owp0eXBlZGVmIGxvbmcgaW50
IF9fb2ZmX3Q7CnR5cGVkZWYgbG9uZyBsb25nIGludCBfX29mZjY0X3Q7CnR5cGVkZWYgaW50IF9f
cGlkX3Q7CnR5cGVkZWYgc3RydWN0IHsgaW50IF9fdmFsWzJdOyB9IF9fZnNpZF90Owp0eXBlZGVm
IGxvbmcgaW50IF9fY2xvY2tfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3JsaW1fdDsK
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fcmxpbTY0X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9faWRfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7Cgp0eXBl
ZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zd2Jsa190Owp0eXBlZGVmIGlu
dCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9fY2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGlt
ZXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGlu
dCBfX2Jsa2NudF90Owp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19ibGtjbnQ2NF90OwoKCnR5cGVk
ZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mc2Jsa2NudF90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
bG9uZyBpbnQgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2Zz
ZmlsY250X3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX2ZzZmlsY250NjRfdDsK
CgoKCnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX29mZjY0X3QgX19sb2ZmX3Q7CnR5
cGVkZWYgX19xdWFkX3QgKl9fcWFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7CgoKdHlw
ZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsK
CgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5
cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19x
dWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lk
X3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2ZmX3Q7CgoKCnR5cGVkZWYgX19pbm9f
dCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5vNjRfdDsKCgoKCnR5cGVkZWYgX19k
ZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19tb2Rl
X3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYgX191
aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCnR5cGVkZWYgX19v
ZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3QgcGlkX3Q7CgoKCgp0eXBlZGVmIF9f
aWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgp0eXBlZGVmIF9f
ZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90OwoKCgoKCnR5cGVkZWYg
X19rZXlfdCBrZXlfdDsKCgp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwoKCgoKCnR5cGVkZWYg
X190aW1lX3QgdGltZV90OwoKCgp0eXBlZGVmIF9fY2xvY2tpZF90IGNsb2NraWRfdDsKdHlwZWRl
ZiBfX3RpbWVyX3QgdGltZXJfdDsKCgoKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsK
CgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCgoKCnR5cGVkZWYgdW5z
aWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsK
dHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmlidXRl
X18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50OF90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYg
dW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykp
KTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21vZGVf
XyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fd29yZF9fKSkpOwoKCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICog
c2l6ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwoKCgp0eXBlZGVm
IF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1l
X3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9OwoKc3RydWN0IHRpbWV2YWwKICB7
CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3VzZWM7CiAgfTsKdHlw
ZWRlZiBsb25nIGludCBfX2ZkX21hc2s7CnR5cGVkZWYgc3RydWN0CiAgewoKCgogICAgX19mZF9t
YXNrIGZkc19iaXRzWzEwMjQgLyAoOCAqIHNpemVvZiAoX19mZF9tYXNrKSldOwoKCgoKCiAgfSBm
ZF9zZXQ7CgoKCgoKCnR5cGVkZWYgX19mZF9tYXNrIGZkX21hc2s7CmV4dGVybiAiQyIgewoKCgoK
CgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVh
ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAog
ICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAg
ICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmlj
dCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3Jp
dGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRz
LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBf
X3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmlj
dCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KCgoKCgoKdHlwZWRlZiBfX2Jsa3NpemVfdCBibGtz
aXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2Zz
YmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNmaWxjbnRfdDsK
dHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBm
c2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCgoKCnN0
cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCnR5
cGVkZWYgaW50IF9fYXRvbWljX2xvY2tfdDsKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewog
IGxvbmcgaW50IF9fc3RhdHVzOwogIF9fYXRvbWljX2xvY2tfdCBfX3NwaW5sb2NrOwoKfTsKCgoK
dHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoK
Cgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsK
ICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07
CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6
ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBf
X3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVj
dCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGlu
ZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9
IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90
OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291
bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVm
IHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5
cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcnds
b2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndf
cmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBf
X3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAg
aW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0
aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlu
bG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19i
YV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJl
YWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3Ry
dWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBl
ZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKCgp9CgoKCgoKCmV4dGVybiBsb25nIGlu
dCByYW5kb20gKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNyYW5kb20gKHVuc2lnbmVk
IGludCBfX3NlZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2ln
bmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX3N0YXRlbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnNldHN0YXRlIChj
aGFyICpfX3N0YXRlYnVmKSB0aHJvdyAoKTsKCgoKCgoKCnN0cnVjdCByYW5kb21fZGF0YQogIHsK
ICAgIGludDMyX3QgKmZwdHI7CiAgICBpbnQzMl90ICpycHRyOwogICAgaW50MzJfdCAqc3RhdGU7
CiAgICBpbnQgcmFuZF90eXBlOwogICAgaW50IHJhbmRfZGVnOwogICAgaW50IHJhbmRfc2VwOwog
ICAgaW50MzJfdCAqZW5kX3B0cjsKICB9OwoKZXh0ZXJuIGludCByYW5kb21fciAoc3RydWN0IHJh
bmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBpbnQzMl90
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3JhbmRvbV9yICh1
bnNpZ25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fcmVz
dHJpY3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVs
ZW4sCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNldHN0YXRlX3IgKGNoYXIgKl9fcmVzdHJp
Y3QgX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEg
Kl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZvaWQp
IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBk
b3VibGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50
IG5yYW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFu
ZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgc3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVk
IHNob3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJv
dyAoKTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10p
IHRocm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNp
Z25lZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0
cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVy
YW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAg
ICAgICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZl
ciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJp
WzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmlj
dCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9f
cmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhf
ZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50
ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVu
c2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
IGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNy
YW5kNDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZl
cikKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGlu
dCBfX3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9y
dCBpbnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2Rh
dGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsKCgoKCgoKCgoKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6
ZV90IF9fc2l6ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVy
biB2b2lkICpjYWxsb2MgKHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCgpleHRlcm4gdm9pZCAqcmVh
bGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBjZnJlZSAodm9pZCAqX19wdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJu
ICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9jYSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7
CgoKCgoKfQoKCgoKZXh0ZXJuIHZvaWQgKnZhbGxvYyAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgcG9zaXhfbWVtYWxp
Z24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxpZ25tZW50LCBzaXplX3QgX19zaXplKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gdm9p
ZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoK
CgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQg
Kl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIGV4
aXQgKGludCBfX3N0YXR1cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp
OwoKCgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRl
bnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVu
diAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2Nv
bnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQog
ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1l
KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CmV4
dGVybiBjaGFyICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwoKCgoKCgoKZXh0
ZXJuIGludCBta3N0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBt
a3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwpleHRlcm4gY2hhciAqbWtkdGVt
cCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzeXN0ZW0gKF9f
Y29uc3QgY2hhciAqX19jb21tYW5kKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBjaGFyICpjYW5v
bmljYWxpemVfZmlsZV9uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CmV4dGVy
biBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgpOwoK
CgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19jb25z
dCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoKCgoK
CmV4dGVybiB2b2lkICpic2VhcmNoIChfX2NvbnN0IHZvaWQgKl9fa2V5LCBfX2NvbnN0IHZvaWQg
Kl9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19z
aXplLCBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQg
Kl9fYmFzZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg
ICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxvbmcgaW50IGxhYnMg
KGxvbmcgaW50IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpf
X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9f
eCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCgpleHRl
cm4gZGl2X3QgZGl2IChpbnQgX19udW1lciwgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgKGxvbmcgaW50IF9f
bnVtZXIsIGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKX19leHRlbnNpb25fXyBleHRlcm4gbGxkaXZfdCBsbGRpdiAobG9uZyBs
b25nIGludCBfX251bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25n
IGxvbmcgaW50IF9fZGVub20pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0
IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0
IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwK
ICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3Ry
aWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192
YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBf
X2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFn
Y3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4gaW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUs
IGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAg
ICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAo
bG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAg
ICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7
CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAog
ICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJp
Y3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNp
emVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0IGNo
YXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9tYiAo
Y2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IG1i
c3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7Cgpl
eHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKTsKCgoKCgoKCgpleHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hh
ciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19y
ZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpf
X3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBj
aGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50
IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7
CgoKCgoKfQppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgdW5zaWduZWQgY2hhciBt
YXhfdmFsICh1bnNpZ25lZCBjaGFyKSB7IHJldHVybiAyNTU7IH0gaW5saW5lIF9fYXR0cmlidXRl
X18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWduZWQgY2hhcikgeyByZXR1cm4gMzsg
fTsKaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIHVuc2lnbmVkIHNob3J0IG1heF92
YWwgKHVuc2lnbmVkIHNob3J0KSB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0gaW5saW5lIF9f
YXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWduZWQgc2hvcnQpIHsg
cmV0dXJuIDQ7IH07CmlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKSB1bnNpZ25lZCBp
bnQgbWF4X3ZhbCAodW5zaWduZWQgaW50KSB7IHJldHVybiAoMjE0NzQ4MzY0NyAqIDJVICsgMSk7
IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBsYmJpdHNvZiAodW5zaWdu
ZWQgaW50KSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkg
dW5zaWduZWQgbG9uZyBtYXhfdmFsICh1bnNpZ25lZCBsb25nKSB7IHJldHVybiAyMTQ3NDgzNjQ3
TDsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50IGxiYml0c29mICh1bnNp
Z25lZCBsb25nKSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9f
KSkgdWxsb25nX3QgbWF4X3ZhbCAodWxsb25nX3QpIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1
ODA3TEwgKiAyVUxMICsgMSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGlu
dCBsYmJpdHNvZiAodWxsb25nX3QpIHsgcmV0dXJuIDY7IH07CgppbmxpbmUgX19hdHRyaWJ1dGVf
XygoX19jb25zdF9fKSkgY2hhciBtaW5fdmFsIChjaGFyKSB7IHJldHVybiBjaGFyICgoLTEyOCkp
OyB9IGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKSBjaGFyIG1heF92YWwgKGNoYXIp
IHsgcmV0dXJuIDEyNzsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50IGxi
Yml0c29mIChjaGFyKSB7IHJldHVybiAzOyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25z
dF9fKSkgc2hvcnQgbWluX3ZhbCAoc2hvcnQpIHsgcmV0dXJuIHNob3J0ICgoLTMyNzY3IC0xKSk7
IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIHNob3J0IG1heF92YWwgKHNob3J0
KSB7IHJldHVybiAzMjc2NzsgfSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSkgaW50
IGxiYml0c29mIChzaG9ydCkgeyByZXR1cm4gNDsgfTsKaW5saW5lIF9fYXR0cmlidXRlX18oKF9f
Y29uc3RfXykpIGludCBtaW5fdmFsIChpbnQpIHsgcmV0dXJuIGludCAoKC0yMTQ3NDgzNjQ3IC0x
KSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGludCBtYXhfdmFsIChpbnQp
IHsgcmV0dXJuIDIxNDc0ODM2NDc7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykp
IGludCBsYmJpdHNvZiAoaW50KSB7IHJldHVybiA1OyB9OwppbmxpbmUgX19hdHRyaWJ1dGVfXygo
X19jb25zdF9fKSkgbG9uZyBtaW5fdmFsIChsb25nKSB7IHJldHVybiBsb25nICgoLTIxNDc0ODM2
NDdMIC0xKSk7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGxvbmcgbWF4X3Zh
bCAobG9uZykgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9f
Y29uc3RfXykpIGludCBsYmJpdHNvZiAobG9uZykgeyByZXR1cm4gNTsgfTsKaW5saW5lIF9fYXR0
cmlidXRlX18oKF9fY29uc3RfXykpIGxsb25nX3QgbWluX3ZhbCAobGxvbmdfdCkgeyByZXR1cm4g
bGxvbmdfdCAoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgLTEpKTsgfSBpbmxpbmUgX19hdHRyaWJ1
dGVfXygoX19jb25zdF9fKSkgbGxvbmdfdCBtYXhfdmFsIChsbG9uZ190KSB7IHJldHVybiA5MjIz
MzcyMDM2ODU0Nzc1ODA3TEw7IH0gaW5saW5lIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpIGlu
dCBsYmJpdHNvZiAobGxvbmdfdCkgeyByZXR1cm4gNjsgfTsKdW5zaWduZWQgbW9zdF9zaWduaWZp
Y2FudF9iaXQgKHVuc2lnbmVkIG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVuc2lnbmVkIG1vc3Rfc2lnbmlm
aWNhbnRfYml0ICh1bGxvbmdfdCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0
ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKdW5zaWduZWQgbGVhc3Rfc2ln
bmlmaWNhbnRfYml0ICh1bnNpZ25lZCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf
X3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwp1bnNpZ25lZCBsZWFzdF9z
aWduaWZpY2FudF9iaXQgKHVsbG9uZ190IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMp
LF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgoKCnVuc2lnbmVkIG9u
ZV9iaXRzICh2b2lkIGNvbnN0ICosIHNpemVfdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o
MyksX19zdGRjYWxsX18pKTsKdW5zaWduZWQgb25lX2JpdHMgKHVuc2lnbmVkIHNob3J0KSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9f
Y29uc3RfXykpOwp1bnNpZ25lZCBvbmVfYml0cyAodW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVu
c2lnbmVkIG9uZV9iaXRzICh1bGxvbmdfdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks
X19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKCgoKCgoKaW5saW5lIGRp
dl90CmZsb29yZWRfZGl2IChpbnQgbnVtLCBpbnQgZGVub20pCnsKICBkaXZfdCByZXM7CiAgcmVz
LnF1b3QgPSBudW0gLyBkZW5vbTsKICByZXMucmVtID0gbnVtICUgZGVub207CiAgaWYgKHJlcy5y
ZW0gJiYgKG51bSBeIGRlbm9tKSA8IDApCiAgICB7CiAgICAgIHJlcy5xdW90LS07CiAgICAgIHJl
cy5yZW0gKz0gZGVub207CiAgICB9CiAgcmV0dXJuIHJlczsKfQoKCgoKCnRlbXBsYXRlIDxjbGFz
cyB1aW50X3Q+IHVpbnRfdCBpc3FydCAodWludF90IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSk7CnRlbXBsYXRlIDxjbGFzcyB1aW50X3Q+IGlubGluZSB1aW50
X3QgaWxvZyAodWludF90IG4pIHsKICByZXR1cm4gbW9zdF9zaWduaWZpY2FudF9iaXQgKG4pOyB9
CgoKCgoKdGVtcGxhdGUgPGNsYXNzIG51bV90PiBpbmxpbmUKYm9vbAppbmNsdWRlcyAobnVtX3Qg
Y29uc3QgKmxpc3QsIHVuc2lnbmVkIGxlbmd0aCwgbnVtX3QgZWx0KQp7CiAgZm9yICg7IGxlbmd0
aCA+IDA7IC0tbGVuZ3RoKQogICAgaWYgKCpsaXN0KysgPT0gZWx0KQogICAgICByZXR1cm4gdHJ1
ZTsKICByZXR1cm4gZmFsc2U7Cn0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAq
c3RyLCBjaGFyICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b2wg
KHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0gPT0gJ1wwJzsgfQppbmxpbmUgYm9vbCBz
dHJfdG9fbnVtIChjaGFyIGNvbnN0ICpzdHIsIHNob3J0ICZ2YWwsIGludCBiYXNlID0gMTApIHsg
Y2hhciAqZW5kOyB2YWwgPSBzdHJ0b2wgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0g
PT0gJ1wwJzsgfQppbmxpbmUgYm9vbCBzdHJfdG9fbnVtIChjaGFyIGNvbnN0ICpzdHIsIGludCAm
dmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG9sIChzdHIsICZlbmQs
IGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAo
Y2hhciBjb25zdCAqc3RyLCBsb25nICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2
YWwgPSBzdHJ0b2wgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBlbmRbMF0gPT0gJ1wwJzsgfQoK
aW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBjaGFyICZ2
YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChzdHIsICZlbmQs
IGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAo
Y2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBzaG9ydCAmdmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNo
YXIgKmVuZDsgdmFsID0gc3RydG91bCAoc3RyLCAmZW5kLCBiYXNlKTsgcmV0dXJuIGVuZFswXSA9
PSAnXDAnOyB9CmlubGluZSBib29sIHN0cl90b19udW0gKGNoYXIgY29uc3QgKnN0ciwgdW5zaWdu
ZWQgaW50ICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChz
dHIsICZlbmQsIGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3Ry
X3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bnNpZ25lZCBsb25nICZ2YWwsIGludCBiYXNlID0g
MTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b3VsIChzdHIsICZlbmQsIGJhc2UpOyByZXR1cm4g
ZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3Ry
LCBsbG9uZ190ICZ2YWwsIGludCBiYXNlID0gMTApIHsgY2hhciAqZW5kOyB2YWwgPSBzdHJ0b2xs
IChzdHIsICZlbmQsIGJhc2UpOyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wg
c3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCB1bGxvbmdfdCAmdmFsLCBpbnQgYmFzZSA9IDEw
KSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG91bGwgKHN0ciwgJmVuZCwgYmFzZSk7IHJldHVybiBl
bmRbMF0gPT0gJ1wwJzsgfQpleHRlcm4gY2hhciBjb25zdCB3aGl0ZV9zcGFjZVtdOwoKCgpjaGFy
ICpzdHJfZHVwIChjaGFyIGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9f
c3RkY2FsbF9fKSk7CgoKCmNoYXIgKnN0cl9wY3B5IChjaGFyICosIGNoYXIgY29uc3QgKiwgdW5z
aWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCnVu
c2lnbmVkIHN0cl9ubGVuIChjaGFyIGNvbnN0ICosIHVuc2lnbmVkIGxlbikgX19hdHRyaWJ1dGVf
XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgppbnQgc3RyX2ljbXAgKGNoYXIgY29u
c3QgKnMsIGNoYXIgY29uc3QgKnQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmludCBzdHJfbmljbXAgKGNoYXIg
Y29uc3QgKnMsIGNoYXIgY29uc3QgKnQsIHNpemVfdCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh
cm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwoKCmJvb2wg
bWVtX2lzbnVsbCAodm9pZCBjb25zdCAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpjaGFyICpzdHJfdXBjYXNlIChjaGFyICpzKSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyICpzdHJfZG93bmNh
c2UgKGNoYXIgKnMpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CmNoYXIgKnN0cl9jYXBpdGFsaXplIChjaGFyICpzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKCmNoYXIgKnN0cl91cGNhc2UgKGNoYXIgY29uc3QgKiwgY2hh
ciAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKY2hhciAqc3RyX2Rvd25jYXNlIChjaGFyIGNvbnN0ICosIGNoYXIgKiwgdW5zaWduZWQpIF9f
YXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmNoYXIgKnN0cl9jYXBp
dGFsaXplIChjaGFyIGNvbnN0ICosIGNoYXIgKiwgdW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgpjaGFyICpzdHJfbGVmdF90cmltIChjaGFy
ICosIGNoYXIgY29uc3QgKiA9IHdoaXRlX3NwYWNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyICpzdHJfcmlnaHRfdHJpbSAoY2hhciAqLCBjaGFyIGNv
bnN0ICogPSB3aGl0ZV9zcGFjZSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKY2hhciAqc3RyX3RyaW0gKGNoYXIgKiwgY2hhciBjb25zdCAqID0gd2hpdGVfc3Bh
Y2UpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKY2hhciAq
c3RyX2JmY3B5IChjaGFyICosIGNoYXIgY29uc3QgKiwgaW50IG4pIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmNoYXIgKnN0cl96ZmNweSAoY2hhciAqLCBjaGFy
IGNvbnN0ICosIGludCBuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf
XykpOwoKCgoKCnVuc2lnbmVkIHN0cl9lbnRhYiAoY2hhciBjb25zdCAqcywgdW5zaWduZWQgaW5k
ZW50LCBjaGFyICp0LCB1bnNpZ25lZCB0bCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks
X19zdGRjYWxsX18pKTsKCgoKCmNoYXIgY29uc3QgKnN0cl9lcnJvciAoaW50IGVycikgX19hdHRy
aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpib29sIHN0cl9zaGVsbF9t
YXRjaCAoY2hhciBjb25zdCAqcCwgY2hhciBjb25zdCAqcykgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKYm9vbCBzdHJfcnVsZV9tYXRjaCAoY2hhciBjb25z
dCAqcCwgY2hhciBjb25zdCAqcywKICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqKm1w
LCB1bnNpZ25lZCAqbWwpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f
KSk7CgoKY2hhciBjb25zdCAqZ2V0X3Rva2VuIChjaGFyICpzLCB1bnNpZ25lZCBsZW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqdG9rcywgY2hhciBjb25zdCAqZGVscyA9IHdo
aXRlX3NwYWNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoK
CmJvb2wgYm9vbF9ldmFsIChjaGFyIGNvbnN0ICpzLCBib29sICZ2YWwpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKY2hhciAqZ2V0X2hvc3RfbmFtZSAoY2hh
ciAqYnVmLCBpbnQgbGVuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf
XykpOwoKCgpjaGFyICpnZXRfc3lzdGVtX3VzZXIgKGNoYXIgKmJ1ZiwgaW50IGxlbikgX19hdHRy
aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgpleHRlcm4gY2hhciBhcHBs
aWNhdGlvbl91c2VyWzEzXTsKCgpleHRlcm4gYm9vbCBzaW11bGF0aW9uX2Vudmlyb25tZW50Owpl
eHRlcm4gYm9vbCB0cmFpbmluZ19lbnZpcm9ubWVudDsKCgp2b2lkIHNldF9lbnZpcm9ubWVudCAo
Y2hhciBjb25zdCAqdmFyLCBjaGFyIGNvbnN0ICpmbXQgLi4uKQogIF9fYXR0cmlidXRlX18oKF9f
Zm9ybWF0X18ocHJpbnRmLCAyLCAzKSkpOwpjaGFyIGNvbnN0ICpnZXRfZW52aXJvbm1lbnQgKGNo
YXIgY29uc3QgKnZhcm5hbWUpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2Fs
bF9fKSk7CgoKCmJvb2wgZXhwYW5kX2Vudmlyb25tZW50X3ZhcmlhYmxlcyAoY2hhciBjb25zdCAq
LCBjaGFyICosIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCB2ZXJiYXRpbV9tYXNrID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCAqdmFyaWFibGVfY291bnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKCgpjaGFyIGNoZWNrX2RpZ2l0IChjaGFyIGNvbnN0ICosIHVu
c2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoK
CgoKc3RydWN0IGZzX3JzX3QKewogIGNoYXIgZnM7CiAgY2hhciBmc3I7CiAgY2hhciByczsKICBj
aGFyIHJzcjsKICBjaGFyIHF1b3RlOwp9OwpleHRlcm4gZnNfcnNfdCBjb25zdCBkZWZhdWx0X2Zz
X3JzOwoKdm9pZCB1bnNwYWNpZnkgKGNoYXIgY29uc3QgKmluLCBjaGFyICpvdXQsCiAgICAgICAg
ICAgICAgICBmc19yc190IGNvbnN0ICYgPSBkZWZhdWx0X2ZzX3JzKSBfX2F0dHJpYnV0ZV9fKChf
X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCnZvaWQgc3BhY2lmeSAoY2hhciBjb25zdCAq
aW4sIGNoYXIgKm91dCwKICAgICAgICAgICAgICBmc19yc190IGNvbnN0ICYgPSBkZWZhdWx0X2Zz
X3JzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpjaGFyIGNv
bnN0ICpudWxfdGVybWluYXRlZCAoY2hhciBjb25zdCAqcywgdW5zaWduZWQgbikgX19hdHRyaWJ1
dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGUgPGNsYXNzIHJlcF90
LCByZXBfdCBzY2FsZT4KY2xhc3MgZml4ZWRfVAp7CnByb3RlY3RlZDoKICByZXBfdCB4OwoKcHVi
bGljOgogIGZpeGVkX1QoKSA6IHggKG1pbl92YWwgKHgpKSB7fQoKCiAgZml4ZWRfVCAoZml4ZWRf
VCBjb25zdCAmbykgOiB4IChvLngpIHt9CiAgZml4ZWRfVCAmb3BlcmF0b3I9IChmaXhlZF9UIGNv
bnN0ICZvKSB7IHggPSBvLng7IHJldHVybiAqdGhpczsgfQoKCiAgZml4ZWRfVCAocmVwX3QgcmVw
LCBpbnQpIDogeCAocmVwKSB7fQoKCiAgZml4ZWRfVCAoZG91YmxlIHkpIDogeCAocmVwX3QgKFJp
bnQgKHkgKiBzY2FsZSkpKSB7fQogIGZpeGVkX1QgJm9wZXJhdG9yPSAoZG91YmxlIHkpIHsgeCA9
IHJlcF90IChSaW50ICh5ICogc2NhbGUpKTsgcmV0dXJuICp0aGlzOyB9CgoKCiAgZml4ZWRfVCAo
aW50IG4pIDogeCAobiAqIHNjYWxlKSB7fSBmaXhlZF9UICZvcGVyYXRvcj0gKGludCBuKSB7IHgg
PSBuICogc2NhbGU7IHJldHVybiAqdGhpczsgfTsKICBmaXhlZF9UICh1bnNpZ25lZCBuKSA6IHgg
KG4gKiBzY2FsZSkge30gZml4ZWRfVCAmb3BlcmF0b3I9ICh1bnNpZ25lZCBuKSB7IHggPSBuICog
c2NhbGU7IHJldHVybiAqdGhpczsgfTsKICBmaXhlZF9UIChsb25nIG4pIDogeCAobiAqIHNjYWxl
KSB7fSBmaXhlZF9UICZvcGVyYXRvcj0gKGxvbmcgbikgeyB4ID0gbiAqIHNjYWxlOyByZXR1cm4g
KnRoaXM7IH07CiAgZml4ZWRfVCAodW5zaWduZWQgbG9uZyBuKSA6IHggKG4gKiBzY2FsZSkge30g
Zml4ZWRfVCAmb3BlcmF0b3I9ICh1bnNpZ25lZCBsb25nIG4pIHsgeCA9IG4gKiBzY2FsZTsgcmV0
dXJuICp0aGlzOyB9OwogIGZpeGVkX1QgKGxsb25nX3QgbikgOiB4IChuICogc2NhbGUpIHt9IGZp
eGVkX1QgJm9wZXJhdG9yPSAobGxvbmdfdCBuKSB7IHggPSBuICogc2NhbGU7IHJldHVybiAqdGhp
czsgfTsKICBmaXhlZF9UICh1bGxvbmdfdCBuKSA6IHggKG4gKiBzY2FsZSkge30gZml4ZWRfVCAm
b3BlcmF0b3I9ICh1bGxvbmdfdCBuKSB7IHggPSBuICogc2NhbGU7IHJldHVybiAqdGhpczsgfTsK
CgoKICBvcGVyYXRvciBkb3VibGUoKSBjb25zdCB7IHJldHVybiB4ICogKDEuMC9zY2FsZSk7IH0K
ICBkb3VibGUgb3BlcmF0b3IoKSgpIGNvbnN0IHsgcmV0dXJuIHggKiAoMS4wL3NjYWxlKTsgfQoK
CiAgYm9vbCBpc19udWxsKCkgY29uc3QgeyByZXR1cm4geCA9PSBtaW5fdmFsICh4KTsgfQogIHZv
aWQgc2V0X251bGwoKSB7IHggPSBtaW5fdmFsICh4KTsgfQoKCiAgaW50IGNvbXBhcmUgKGZpeGVk
X1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHggLSBvLng7IH0KICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+ICh4KTsgfQogIHJlcF90IHJlcCgp
IGNvbnN0IHsgcmV0dXJuIHg7IH0KCgoKCiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IrPSAoZml4
ZWRfVCBjb25zdCAmbykgewogICAgeCArPSBvLng7IHJldHVybiAqdGhpczsgfQogIGZpeGVkX1Qg
Y29uc3QgJm9wZXJhdG9yLT0gKGZpeGVkX1QgY29uc3QgJm8pIHsKICAgIHggLT0gby54OyByZXR1
cm4gKnRoaXM7IH0KCgoKCiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IqPSAoaW50IG8pIHsKICAg
IHggKj0gbzsgcmV0dXJuICp0aGlzOyB9CiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0b3IvPSAoaW50
IG8pIHsKICAgIHggLz0gbzsgcmV0dXJuICp0aGlzOyB9CiAgZml4ZWRfVCBjb25zdCAmb3BlcmF0
b3IqPSAoZG91YmxlIG8pIHsKICAgIHggPSBzdGF0aWNfY2FzdDxyZXBfdD4gKFJpbnQgKHggKiBv
KSk7IHJldHVybiAqdGhpczsgfQogIGZpeGVkX1QgY29uc3QgJm9wZXJhdG9yLz0gKGRvdWJsZSBv
KSB7CiAgICB4ID0gc3RhdGljX2Nhc3Q8cmVwX3Q+IChSaW50ICh4IC8gbykpOyByZXR1cm4gKnRo
aXM7IH0KCiAgZml4ZWRfVCBvcGVyYXRvci0oKSBjb25zdCB7CiAgICByZXR1cm4gZml4ZWRfVCAo
LXgpOyB9CgoKCiAgZml4ZWRfVCBvcGVyYXRvciArIChmaXhlZF9UIGNvbnN0ICYgbykgY29uc3Qg
eyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpICs9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAtIChm
aXhlZF9UIGNvbnN0ICYgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpIC09IG87IH07
CiAgZml4ZWRfVCBvcGVyYXRvciAqIChpbnQgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRo
aXMpICo9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAvIChpbnQgbykgY29uc3QgeyByZXR1cm4g
Zml4ZWRfVCAoKnRoaXMpIC89IG87IH07CiAgZml4ZWRfVCBvcGVyYXRvciAqIChkb3VibGUgbykg
Y29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpICo9IG87IH07CiAgZml4ZWRfVCBvcGVyYXRv
ciAvIChkb3VibGUgbykgY29uc3QgeyByZXR1cm4gZml4ZWRfVCAoKnRoaXMpIC89IG87IH07CiAg
Ym9vbCBvcGVyYXRvciA8IChpbnQgeSkgY29uc3QgeyByZXR1cm4geCA8IHkgKiBzY2FsZTsgfSBi
b29sIG9wZXJhdG9yIDwgKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4IDwgUmludCAoeSAqIHNj
YWxlKTsgfSBib29sIG9wZXJhdG9yIDwgKGZpeGVkX1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJu
IHggPCBvLng7IH0gYm9vbCBvcGVyYXRvciA8PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggPD0g
eSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgPD0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4
IDw9IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRvciA8PSAoZml4ZWRfVCBjb25zdCAm
bykgY29uc3QgeyByZXR1cm4geCA8PSBvLng7IH07CiAgYm9vbCBvcGVyYXRvciAhPSAoaW50IHkp
IGNvbnN0IHsgcmV0dXJuIHggIT0geSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgIT0gKGRvdWJs
ZSB5KSBjb25zdCB7IHJldHVybiB4ICE9IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRv
ciAhPSAoZml4ZWRfVCBjb25zdCAmbykgY29uc3QgeyByZXR1cm4geCAhPSBvLng7IH0gYm9vbCBv
cGVyYXRvciA9PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHggPT0geSAqIHNjYWxlOyB9IGJvb2wg
b3BlcmF0b3IgPT0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVybiB4ID09IFJpbnQgKHkgKiBzY2Fs
ZSk7IH0gYm9vbCBvcGVyYXRvciA9PSAoZml4ZWRfVCBjb25zdCAmbykgY29uc3QgeyByZXR1cm4g
eCA9PSBvLng7IH07CiAgYm9vbCBvcGVyYXRvciA+PSAoaW50IHkpIGNvbnN0IHsgcmV0dXJuIHgg
Pj0geSAqIHNjYWxlOyB9IGJvb2wgb3BlcmF0b3IgPj0gKGRvdWJsZSB5KSBjb25zdCB7IHJldHVy
biB4ID49IFJpbnQgKHkgKiBzY2FsZSk7IH0gYm9vbCBvcGVyYXRvciA+PSAoZml4ZWRfVCBjb25z
dCAmbykgY29uc3QgeyByZXR1cm4geCA+PSBvLng7IH0gYm9vbCBvcGVyYXRvciA+IChpbnQgeSkg
Y29uc3QgeyByZXR1cm4geCA+IHkgKiBzY2FsZTsgfSBib29sIG9wZXJhdG9yID4gKGRvdWJsZSB5
KSBjb25zdCB7IHJldHVybiB4ID4gUmludCAoeSAqIHNjYWxlKTsgfSBib29sIG9wZXJhdG9yID4g
KGZpeGVkX1QgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHggPiBvLng7IH07Cgp9OwoKZXh0ZXJu
IHVuc2lnbmVkIGNvbnN0IGZsb2F0X05hTl9yZXBbMV07CmV4dGVybiB1bnNpZ25lZCBjb25zdCBk
b3VibGVfTmFOX3JlcFsyXTsKaW5saW5lIGludCByYWRpeCgpIHsgcmV0dXJuIDI7IH0KaW5saW5l
IGludCByb3VuZHMoKSB7IHJldHVybiAxOyB9CmlubGluZSBpbnQgZGlnIChmbG9hdCkgeyByZXR1
cm4gNjsgfSBpbmxpbmUgZmxvYXQgZXBzaWxvbiAoZmxvYXQpIHsgcmV0dXJuIDEuMTkyMDkyOTBl
LTA3RjsgfSBpbmxpbmUgaW50IG1hbnRfZGlnIChmbG9hdCkgeyByZXR1cm4gMjQ7IH0gaW5saW5l
IGZsb2F0IG1heGYgKGZsb2F0KSB7IHJldHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0gaW5saW5lIGlu
dCBtYXhfZXhwIChmbG9hdCkgeyByZXR1cm4gMTI4OyB9IGlubGluZSBpbnQgbWF4XzEwX2V4cCAo
ZmxvYXQpIHsgcmV0dXJuIDM4OyB9IGlubGluZSBmbG9hdCBtaW5mIChmbG9hdCkgeyByZXR1cm4g
MS4xNzU0OTQzNWUtMzhGOyB9IGlubGluZSBpbnQgbWluX2V4cCAoZmxvYXQpIHsgcmV0dXJuICgt
MTI1KTsgfSBpbmxpbmUgaW50IG1pbl8xMF9leHAgKGZsb2F0KSB7IHJldHVybiAoLTM3KTsgfSBp
bmxpbmUgZmxvYXQgTmFOIChmbG9hdCkgeyByZXR1cm4gKCpyZWludGVycHJldF9jYXN0PGZsb2F0
IGNvbnN0ICo+IChmbG9hdF9OYU5fcmVwKSk7IH0KaW5saW5lIGludCBkaWcgKGRvdWJsZSkgeyBy
ZXR1cm4gMTU7IH0gaW5saW5lIGRvdWJsZSBlcHNpbG9uIChkb3VibGUpIHsgcmV0dXJuIDIuMjIw
NDQ2MDQ5MjUwMzEzMWUtMTY7IH0gaW5saW5lIGludCBtYW50X2RpZyAoZG91YmxlKSB7IHJldHVy
biA1MzsgfSBpbmxpbmUgZG91YmxlIG1heGYgKGRvdWJsZSkgeyByZXR1cm4gMS43OTc2OTMxMzQ4
NjIzMTU3ZSszMDg7IH0gaW5saW5lIGludCBtYXhfZXhwIChkb3VibGUpIHsgcmV0dXJuIDEwMjQ7
IH0gaW5saW5lIGludCBtYXhfMTBfZXhwIChkb3VibGUpIHsgcmV0dXJuIDMwODsgfSBpbmxpbmUg
ZG91YmxlIG1pbmYgKGRvdWJsZSkgeyByZXR1cm4gMi4yMjUwNzM4NTg1MDcyMDE0ZS0zMDg7IH0g
aW5saW5lIGludCBtaW5fZXhwIChkb3VibGUpIHsgcmV0dXJuICgtMTAyMSk7IH0gaW5saW5lIGlu
dCBtaW5fMTBfZXhwIChkb3VibGUpIHsgcmV0dXJuICgtMzA3KTsgfSBpbmxpbmUgZG91YmxlIE5h
TiAoZG91YmxlKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlIGNvbnN0ICo+IChk
b3VibGVfTmFOX3JlcCkpOyB9CgppbmxpbmUgaW50IGRpZyAobG9uZyBkb3VibGUpIHsgcmV0dXJu
IDE4OyB9IGlubGluZSBsb25nIGRvdWJsZSBlcHNpbG9uIChsb25nIGRvdWJsZSkgeyByZXR1cm4g
MS4wODQyMDIxNzI0ODU1MDQ0MzQwMWUtMTlMOyB9IGlubGluZSBpbnQgbWFudF9kaWcgKGxvbmcg
ZG91YmxlKSB7IHJldHVybiA2NDsgfSBpbmxpbmUgbG9uZyBkb3VibGUgbWF4ZiAobG9uZyBkb3Vi
bGUpIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9IGlubGluZSBpbnQg
bWF4X2V4cCAobG9uZyBkb3VibGUpIHsgcmV0dXJuIDE2Mzg0OyB9IGlubGluZSBpbnQgbWF4XzEw
X2V4cCAobG9uZyBkb3VibGUpIHsgcmV0dXJuIDQ5MzI7IH0gaW5saW5lIGxvbmcgZG91YmxlIG1p
bmYgKGxvbmcgZG91YmxlKSB7IHJldHVybiAzLjM2MjEwMzE0MzExMjA5MzUwNjI2ZS00OTMyTDsg
fSBpbmxpbmUgaW50IG1pbl9leHAgKGxvbmcgZG91YmxlKSB7IHJldHVybiAoLTE2MzgxKTsgfSBp
bmxpbmUgaW50IG1pbl8xMF9leHAgKGxvbmcgZG91YmxlKSB7IHJldHVybiAoLTQ5MzEpOyB9IGlu
bGluZSBsb25nIGRvdWJsZSBOYU4gKGxvbmcgZG91YmxlKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0
X2Nhc3Q8ZG91YmxlIGNvbnN0ICo+IChkb3VibGVfTmFOX3JlcCkpOyB9CmV4dGVybiAiQyIgewoK
CgoKCgoKCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUg
ZG91YmxlX3Q7CgoKZXh0ZXJuIGRvdWJsZSBhY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh
c2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJs
ZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJs
ZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl
IHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRv
dWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nv
c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpf
X3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBhY29z
aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zaCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGRvdWJsZSBfX2FzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3Vi
bGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpl
eHRlcm4gZG91YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fZnJleHAgKGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp
IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9u
ZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19sb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3Vi
bGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91
YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwg
ZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGV4
cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cG0xIChkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
ZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nYiAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgZXhwMiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGxvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19jYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKCgpleHRl
cm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv
bnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZhYnMgKGRvdWJsZSBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2Zh
YnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbW9kIChkb3VibGUg
X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZiAoZG91Ymxl
IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
aW50IF9fZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGUgKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJu
IGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4g
ZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIGNv
cHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgpleHRlcm4g
ZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFyICpfX3RhZ2Ip
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IF9f
aXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGox
IChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7
CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJs
ZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93
ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGVyZiAo
ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2VyZiAoZG91YmxlKSB0aHJvdyAoKTsK
ZXh0ZXJuIGRvdWJsZSBlcmZjIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJm
YyAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJsZSkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19sZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBkb3VibGUgdGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGdhbW1h
IChkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0
ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAo
KTsKCgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5l
eHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91
YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGJuIChkb3VibGUgX194LCBpbnQg
X19uKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gaW50IF9faWxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJs
ZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGRvdWJsZSBuZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSByb3Vu
ZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yb3VuZCAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g
ZG91YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19yZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAq
X19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGxvbmcgaW50IF9fbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBf
X2xyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91
bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZkaW0gKGRvdWJsZSBfX3gs
IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZmRpbSAoZG91YmxlIF9feCwg
ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4IChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYXggKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1pbiAoZG91YmxlIF9feCwgZG91
YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnkgKGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g
aW50IF9fc2lnbmJpdCAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91Ymxl
IF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWEgKGRvdWJsZSBf
X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBz
Y2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19z
Y2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGFj
b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hY29zZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXRh
bmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5mIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZmxvYXQgY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBzaW5mIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zaW5mIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X3RhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY29zaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5oZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0
ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxv
YXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBh
Y29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h
dCBhdGFuaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg
cG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGV4cG0xZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBmbG9hdCBsb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZzFw
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoK
CmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
c3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGh5cG90ZiAoZmxv
YXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19oeXBvdGYgKGZsb2F0
IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNicnRmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZhYnNm
IChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu
IGZsb2F0IF9fZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBmbW9k
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbW9kZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAo
ZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBpc2luZmYgKGZsb2F0IF9fdmFsdWUpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZpbml0ZWYg
KGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl
eHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBjb3B5
c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGZsb2F0
IG5hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX2lzbmFu
ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBm
bG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwg
ZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxv
YXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZs
b2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSB0aHJvdyAoKTsg
ZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgZXJmY2Yg
KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsK
ZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh
bW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIGZsb2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1t
YWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQs
IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxv
YXQsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0
YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv
YXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAo
ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAo
ZmxvYXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxv
YXQgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4
dGVybiBmbG9hdCBfX25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCByb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5j
ZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpl
eHRlcm4gZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50
ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50
IF9fbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxy
b3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3Vu
ZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194
LCBmbG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9h
dCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWdu
Yml0ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCmV4dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQg
X196KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ks
IGZsb2F0IF9feikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gs
IGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBm
bG9hdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRv
dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IGNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19z
aW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91Ymxl
ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgYWNvc2hsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hY29zaGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmhsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmhsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hdGFuaGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9uZyBkb3VibGUg
X194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJsZSBf
X3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZyZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX21vZGZs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9f
eCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlwb3Rs
IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBs
b25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZhYnNsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBk
b3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91YmxlIF9fdmFsdWUp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fZmlu
aXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWdu
aWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19j
b3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChf
X2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
ZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxv
bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91Ymxl
LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFs
X3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u
ZyBkb3VibGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
bmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJk
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFp
bmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f
bikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlp
bnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFy
YnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
cm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19y
b3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0
cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJl
bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25n
IGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQg
bHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmlu
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxy
aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3Vu
ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91
bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRp
bWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg
Zm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVl
KSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50
IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBs
b25nIGRvdWJsZSBfX3opIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBzaWduZ2FtOwplbnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklO
SVRFLAoKICAgIEZQX1pFUk8sCgogICAgRlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9
Owp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5fLAogIF9Q
T1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJQl9WRVJT
SU9OX1RZUEUgX0xJQl9WRVJTSU9OOwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQg
dHlwZTsKICAgIGNoYXIgKm5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwog
ICAgZG91YmxlIHJldHZhbDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhj
ZXB0aW9uICpfX2V4YykgdGhyb3cgKCk7Cl9faW5saW5lIGludApfX3NpZ25iaXRmIChmbG9hdCBf
X3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZmxvYXQgX19mOyBpbnQgX19p
OyB9IF9fdSA9IHsgX19mOiBfX3ggfTsKICByZXR1cm4gX191Ll9faSA8IDA7Cn0KX19pbmxpbmUg
aW50Cl9fc2lnbmJpdCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5p
b24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9IF9fdSA9IHsgX19kOiBfX3ggfTsKICByZXR1
cm4gX191Ll9faVsxXSA8IDA7Cn0KX19pbmxpbmUgaW50Cl9fc2lnbmJpdGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCkKewogIF9fZXh0ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX2w7
IGludCBfX2lbM107IH0gX191ID0geyBfX2w6IF9feCB9OwogIHJldHVybiAoX191Ll9faVsyXSAm
IDB4ODAwMCkgIT0gMDsKfQpfX2lubGluZSBkb3VibGUgX19zZ24gKGRvdWJsZSkgdGhyb3cgKCk7
IF9faW5saW5lIGRvdWJsZSBfX3NnbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194
ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBmbG9h
dCBfX3NnbmYgKGZsb2F0KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19zZ25mIChmbG9hdCBf
X3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAgPyAwLjAgOiAoX194ID4gMC4wID8gMS4w
IDogLTEuMCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19zZ25sIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7IF9faW5saW5lIGxvbmcgZG91YmxlIF9fc2dubCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAuMCA/IDEuMCA6IC0xLjAp
OyB9CgoKCgpfX2lubGluZSBkb3VibGUgX19wb3cyIChkb3VibGUpIHRocm93ICgpOyBfX2lubGlu
ZSBkb3VibGUgX19wb3cyIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9u
X18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChs
b25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20g
X192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIg
ImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihm
cmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAi
MCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6
ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVy
biBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IF9fcG93MmYgKGZsb2F0KSB0aHJvdyAoKTsgX19p
bmxpbmUgZmxvYXQgX19wb3cyZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5z
aW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9uZyBsb25nIGludCkgX194OyBpZiAoX194ID09
IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19h
c20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClcblx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5c
dCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkjIGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAy
XihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkg
OiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxl
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJl
dHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIF9fcG93MmwgKGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3VibGUgX19wb3cybCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fZXhwb25lbnQ7IF9fZXh0ZW5zaW9uX18gbG9uZyBsb25nIGludCBfX3AgPSAobG9u
ZyBsb25nIGludCkgX194OyBpZiAoX194ID09IChsb25nIGRvdWJsZSkgX19wKSB7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoMS4wKSwgInUiIChf
X3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19hc20gX192b2xhdGlsZV9fICgiZmxkCSUlc3QoMClc
blx0IiAiZnJuZGludAkJCSMgaW50KHgpXG5cdCIgImZ4Y2hcblx0IiAiZnN1YgklJXN0KDEpCQkj
IGZyYWN0KHgpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4KSkgLSAxXG5cdCIgOiAiPXQiIChf
X3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3ZhbHVlICs9IDEuMDsg
X19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3Zh
bHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9Cl9faW5saW5lIHZvaWQK
X19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhy
b3cgKCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fY29zcjsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19zaW5yOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2luY29zXG5cdCIgImZuc3RzdwklJWF4
XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAianoJMWZcblx0IiAiZmxkcGlcblx0IiAi
ZmFkZAklJXN0KDApXG5cdCIgImZ4Y2gJJSVzdCgxKVxuXHQiICIyOiBmcHJlbTFcblx0IiAiZm5z
dHN3CSUlYXhcblx0IiAidGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqbnoJMmJcblx0IiAiZnN0
cAklJXN0KDEpXG5cdCIgImZzaW5jb3Ncblx0IiAiMToiIDogIj10IiAoX19jb3NyKSwgIj11IiAo
X19zaW5yKSA6ICIwIiAoX194KSk7ICpfX3NpbnggPSBfX3NpbnI7ICpfX2Nvc3ggPSBfX2Nvc3I7
Cn0KCl9faW5saW5lIHZvaWQKX19zaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZs
b2F0ICpfX2Nvc3gpIHRocm93ICgpCnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX2Nvc3I7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fc2lucjsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbmNvc1xu
XHQiICJmbnN0c3cJJSVheFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImp6CTFmXG5c
dCIgImZsZHBpXG5cdCIgImZhZGQJJSVzdCgwKVxuXHQiICJmeGNoCSUlc3QoMSlcblx0IiAiMjog
ZnByZW0xXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInRlc3RsCSQweDQwMCwgJSVlYXhcblx0IiAi
am56CTJiXG5cdCIgImZzdHAJJSVzdCgxKVxuXHQiICJmc2luY29zXG5cdCIgIjE6IiA6ICI9dCIg
KF9fY29zciksICI9dSIgKF9fc2lucikgOiAiMCIgKF9feCkpOyAqX19zaW54ID0gX19zaW5yOyAq
X19jb3N4ID0gX19jb3NyOwp9CgpfX2lubGluZSB2b2lkCl9fc2luY29zbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKQp7
CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19jb3NyOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Np
bnI7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW5jb3Ncblx0IiAiZm5zdHN3CSUlYXhcblx0IiAi
dGVzdGwJJDB4NDAwLCAlJWVheFxuXHQiICJqegkxZlxuXHQiICJmbGRwaVxuXHQiICJmYWRkCSUl
c3QoMClcblx0IiAiZnhjaAklJXN0KDEpXG5cdCIgIjI6IGZwcmVtMVxuXHQiICJmbnN0c3cJJSVh
eFxuXHQiICJ0ZXN0bAkkMHg0MDAsICUlZWF4XG5cdCIgImpuegkyYlxuXHQiICJmc3RwCSUlc3Qo
MSlcblx0IiAiZnNpbmNvc1xuXHQiICIxOiIgOiAiPXQiIChfX2Nvc3IpLCAiPXUiIChfX3NpbnIp
IDogIjAiIChfX3gpKTsgKl9fc2lueCA9IF9fc2lucjsgKl9fY29zeCA9IF9fY29zcjsKfQpfX2lu
bGluZSBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
Z2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhwb25l
bnQ7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdGVtcDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk
bDJlCQkJIyBlXnggLSAxID0gMl4oeCAqIGxvZzIoZSkpIC0gMVxuXHQiICJmbXVsCSUlc3QoMSkJ
CSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMgaW50KHgg
KiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4ICogbG9n
MihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5cdCIgImZz
Y2FsZQkJCSMgMl4oeCAqIGxvZzIoZSkpIC0gMl4oaW50KHggKiBsb2cyKGUpKSlcblx0IiA6ICI9
dCIgKF9fdmFsdWUpLCAiPXUiIChfX2V4cG9uZW50KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoImZzY2FsZQkJCSMgMl5pbnQoeCAqIGxvZzIoZSkpXG5cdCIgOiAiPXQiIChfX3Rl
bXApIDogIjAiICgxLjApLCAidSIgKF9fZXhwb25lbnQpKTsgX190ZW1wIC09IDEuMDsgcmV0dXJu
IF9fdGVtcCArIF9fdmFsdWUgPzogX194OyB9Cl9faW5saW5lIGRvdWJsZSBleHAgKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg
PSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIg
ImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhj
aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJ
IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIg
KF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19l
eHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBleHBmIChmbG9hdCBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbDJlCQkJIyBlXngg
PSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIg
ImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhj
aFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJ
IyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192YWx1ZSksICI9dSIg
KF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9fYXNtIF9fdm9sYXRp
bGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1ZSksICJ1IiAoX19l
eHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBleHBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leHBvbmVudDsgX19hc20gX192b2xhdGlsZV9fICgiZmxk
bDJlCQkJIyBlXnggPSAyXih4ICogbG9nMihlKSlcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBs
b2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihl
KSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5c
dCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiIDogIj10IiAoX192
YWx1ZSksICI9dSIgKF9fZXhwb25lbnQpIDogIjAiIChfX3gpKTsgX192YWx1ZSArPSAxLjA7IF9f
YXNtIF9fdm9sYXRpbGVfXyAoImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX192YWx1
ZSksICJ1IiAoX19leHBvbmVudCkpOyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBsb25nIGRv
dWJsZSBfX2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyBfX2FzbSBfX3Zv
bGF0aWxlX18gKCJmbGRsMmUJCQkjIGVeeCA9IDJeKHggKiBsb2cyKGUpKVxuXHQiICJmbXVsCSUl
c3QoMSkJCSMgeCAqIGxvZzIoZSlcblx0IiAiZnN0CSUlc3QoMSlcblx0IiAiZnJuZGludAkJCSMg
aW50KHggKiBsb2cyKGUpKVxuXHQiICJmeGNoXG5cdCIgImZzdWIJJSVzdCgxKQkJIyBmcmFjdCh4
ICogbG9nMihlKSlcblx0IiAiZjJ4bTEJCQkjIDJeKGZyYWN0KHggKiBsb2cyKGUpKSkgLSAxXG5c
dCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX3Zh
bHVlICs9IDEuMDsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3ZhbHVlKSwgInUiIChfX2V4cG9uZW50KSk7IHJldHVybiBfX3ZhbHVlOyB9CgoK
X19pbmxpbmUgZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlMiBfX2F0dHJpYnV0
ZV9fICgoX191bnVzZWRfXykpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmcHRhbiIgOiAiPXQiIChf
X3ZhbHVlMiksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgZmxvYXQgdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWUyIF9fYXR0cmlidXRl
X18gKChfX3VudXNlZF9fKSk7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwdGFuIiA6ICI9dCIgKF9f
dmFsdWUyKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTIg
X19hdHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKTsgX19hc20gX192b2xhdGlsZV9fICgiZnB0YW4i
IDogIj10IiAoX192YWx1ZTIpLCAiPXUiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IHJldHVybiBf
X3ZhbHVlOyB9Cl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJz
dCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFuMmYgKGZsb2F0IF9f
eSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9f
YXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwg
InUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnBhdGFu
IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAic3QoMSkiKTsgcmV0
dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91Ymxl
IF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9f
dmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9CgoKX19pbmxp
bmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0
ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW1cblx0
IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9f
aW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglmcHJlbVxu
XHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0g
X19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9s
YXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNhaGZcblx0IiAianAJ
MWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJheCIsICJjYyIp
OyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhy
b3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZz
cXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf
X2lubGluZSBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0
IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3FydCIgOiAiPXQiIChfX3Jlc3VsdCkg
OiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgc3Fy
dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jl
c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAi
IChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9Cl9faW5saW5lIGxvbmcgZG91YmxlIF9fc3FydGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3Vs
dDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChf
X3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9CgoKX19pbmxpbmUgZG91YmxlIGZhYnMgKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzIChfX3gpOyB9Cl9faW5saW5lIGZs
b2F0IGZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZiAo
X194KTsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2wgKF9feCk7IH0KX19pbmxpbmUgbG9uZyBkb3Vi
bGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5f
ZmFic2wgKF9feCk7IH0KCgoKCgoKCl9faW5saW5lIGRvdWJsZSBzaW4gKGRvdWJsZSBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
c2luIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsgfSBf
X2lubGluZSBmbG9hdCBzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQg
X19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzaW4iIDogIj10IiAoX19yZXN1bHQpIDog
IjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNpbmwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jlc3Vs
dDsgX19hc20gX192b2xhdGlsZV9fICgiZnNpbiIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9f
eCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCJmY29zIiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSk7IHJldHVybiBfX3Jlc3VsdDsg
fSBfX2lubGluZSBmbG9hdCBjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxv
YXQgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZjb3MiIDogIj10IiAoX19yZXN1bHQp
IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNv
c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Jl
c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmNvcyIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIg
KF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9faW5saW5lIGRvdWJsZSBsb2cgKGRvdWJsZSBf
X3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6
ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxvYXQgbG9nZiAoZmxvYXQg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxl
X18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194KSA6
ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fcmVzdWx0
OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsbjI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVz
dWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUg
ZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jl
c3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkbGcyOyBmeGNoOyBmeWwyeCIgOiAiPXQiIChf
X3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5s
aW5lIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGZsb2F0IF9f
cmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGRsZzI7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIg
KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxnMjsg
ZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQpIDogIjAiIChfX3gpIDogInN0KDEpIik7IHJl
dHVybiBfX3Jlc3VsdDsgfQoKX19pbmxpbmUgZG91YmxlIGFzaW4gKGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmV0dXJuIF9fYXRhbjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9
IF9faW5saW5lIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYXRh
bjJsIChfX3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIGFzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9fYXRhbjJsIChf
X3gsIF9fc3FydGwgKDEuMCAtIF9feCAqIF9feCkpOyB9Cl9faW5saW5lIGRvdWJsZSBhY29zIChk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194
ICogX194KSwgX194KTsgfSBfX2lubGluZSBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAo
KSB7IHJldHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJl
dHVybiBfX2F0YW4ybCAoX19zcXJ0bCAoMS4wIC0gX194ICogX194KSwgX194KTsgfQoKCl9faW5s
aW5lIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBf
X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVz
dWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUg
ZmxvYXQgYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3Vs
dDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIgKF9fcmVzdWx0KSA6
ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBk
b3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnBhdGFuIiA6ICI9dCIg
KF9fcmVzdWx0KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0KCl9f
aW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxp
bmUgbG9uZyBkb3VibGUgX19zZ24xbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IF9fZXh0
ZW5zaW9uX18gdW5pb24geyBsb25nIGRvdWJsZSBfX3hsZDsgdW5zaWduZWQgaW50IF9feGlbM107
IH0gX19uID0geyBfX3hsZDogX194IH07IF9fbi5fX3hpWzJdID0gKF9fbi5fX3hpWzJdICYgMHg4
MDAwKSB8IDB4M2ZmZjsgX19uLl9feGlbMV0gPSAweDgwMDAwMDAwOyBfX24uX194aVswXSA9IDA7
IHJldHVybiBfX24uX194bGQ7IH0KX19pbmxpbmUgZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRo
cm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wg
KF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApICsgX19leG0xKSAq
IF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoX19mYWJzbCAoX194
KSk7IHJldHVybiAwLjUgKiAoX19leG0xIC8gKF9fZXhtMSArIDEuMCkgKyBfX2V4bTEpICogX19z
Z24xbCAoX194KTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXhtMSA9IF9fZXhwbTFsIChfX2Zh
YnNsIChfX3gpKTsgcmV0dXJuIDAuNSAqIChfX2V4bTEgLyAoX19leG0xICsgMS4wKSArIF9fZXht
MSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCl9faW5saW5lIGRvdWJsZSBjb3NoIChkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fZXggPSBfX2V4cGwgKF9feCk7IHJl
dHVybiAwLjUgKiAoX19leCArIDEuMCAvIF9fZXgpOyB9IF9faW5saW5lIGZsb2F0IGNvc2hmIChm
bG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leCA9IF9fZXhwbCAo
X194KTsgcmV0dXJuIDAuNSAqIChfX2V4ICsgMS4wIC8gX19leCk7IH0gX19pbmxpbmUgbG9uZyBk
b3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRv
dWJsZSBfX2V4ID0gX19leHBsIChfX3gpOyByZXR1cm4gMC41ICogKF9fZXggKyAxLjAgLyBfX2V4
KTsgfQoKCgpfX2lubGluZSBkb3VibGUgdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX2V4bTEgPSBfX2V4cG0xbCAoLV9fZmFic2wgKF9feCArIF9feCkp
OyByZXR1cm4gX19leG0xIC8gKF9fZXhtMSArIDIuMCkgKiBfX3NnbjFsICgtX194KTsgfSBfX2lu
bGluZSBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91
YmxlIF9fZXhtMSA9IF9fZXhwbTFsICgtX19mYWJzbCAoX194ICsgX194KSk7IHJldHVybiBfX2V4
bTEgLyAoX19leG0xICsgMi4wKSAqIF9fc2duMWwgKC1fX3gpOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX19leG0xID0gX19leHBtMWwgKC1fX2ZhYnNsIChfX3ggKyBfX3gpKTsgcmV0dXJuIF9fZXht
MSAvIChfX2V4bTEgKyAyLjApICogX19zZ24xbCAoLV9feCk7IH0KCgoKCl9faW5saW5lIGRvdWJs
ZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3Zh
bHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2ln
bmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9
bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192
b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUg
KCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGls
ZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5l
IGZsb2F0IGZsb29yZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUg
dW5zaWduZWQgc2hvcnQgaW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAi
IDogIj1tIiAoX19jdykpOyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xh
dGlsZSAoImZybmRpbnQiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3Zv
bGF0aWxlICgiZmxkY3cgJTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19p
bmxpbmUgbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQg
X19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xh
dGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNm
ZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3Rt
cCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAo
X194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1
cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCkg
eyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0
IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2FzbSBf
X3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3ICYg
MHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChf
X2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3KSk7
IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGNlaWxmIChmbG9hdCBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBz
aG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19h
c20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19j
dyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJt
IiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVl
KSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
dykpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp
OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgZG91YmxlCmxk
ZXhwIChkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3Vi
bGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9
CgoKCgoKCl9faW5saW5lIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdp
c3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50
OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwy
ZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkj
IHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICog
bG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIo
ZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2Nh
bGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQi
IChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0
aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1w
KSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBf
X3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfSBfX2lubGluZSBmbG9hdCBleHBtMWYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0
IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cyKGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZy
bmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlcblx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJ
CSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIgImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihl
KSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJeKHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9n
MihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVlKSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9f
eCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxu
XHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAoMS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVt
cCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBfX3ZhbHVlID86IF9feDsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25n
IGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2V4cG9uZW50OyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX3RlbXA7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGwyZQkJCSMgZV54
IC0gMSA9IDJeKHggKiBsb2cyKGUpKSAtIDFcblx0IiAiZm11bAklJXN0KDEpCQkjIHggKiBsb2cy
KGUpXG5cdCIgImZzdAklJXN0KDEpXG5cdCIgImZybmRpbnQJCQkjIGludCh4ICogbG9nMihlKSlc
blx0IiAiZnhjaFxuXHQiICJmc3ViCSUlc3QoMSkJCSMgZnJhY3QoeCAqIGxvZzIoZSkpXG5cdCIg
ImYyeG0xCQkJIyAyXihmcmFjdCh4ICogbG9nMihlKSkpIC0gMVxuXHQiICJmc2NhbGUJCQkjIDJe
KHggKiBsb2cyKGUpKSAtIDJeKGludCh4ICogbG9nMihlKSkpXG5cdCIgOiAiPXQiIChfX3ZhbHVl
KSwgIj11IiAoX19leHBvbmVudCkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
c2NhbGUJCQkjIDJeaW50KHggKiBsb2cyKGUpKVxuXHQiIDogIj10IiAoX190ZW1wKSA6ICIwIiAo
MS4wKSwgInUiIChfX2V4cG9uZW50KSk7IF9fdGVtcCAtPSAxLjA7IHJldHVybiBfX3RlbXAgKyBf
X3ZhbHVlID86IF9feDsgfQoKCgoKCgpfX2lubGluZSBkb3VibGUgbG9nMXAgKGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9f
eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2ds
ICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNo
XG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg
cmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0g
MS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAg
KyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNoXG5cdCIg
ImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJu
IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYgKF9fZmFic2wgKF9f
eCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9fdmFsdWUgPSBsb2ds
ICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxuMlxuXHQiICJmeGNo
XG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsg
cmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgZG91YmxlIGFzaW5oIChkb3VibGUgX194KSB0aHJv
dyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAo
bG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSArIDEuMCkgKyBf
X3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxpbmUgZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0
dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChfX3kgKiBfX3kgKyAxLjApICsgMS4w
KSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfSBfX2lubGluZSBsb25nIGRvdWJsZSBhc2luaGwg
KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBf
X2ZhYnNsIChfX3gpOyByZXR1cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAq
IF9feSArIDEuMCkgKyAxLjApICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9CgoKCgpfX2lubGlu
ZSBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCAr
IF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBm
bG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nbCAoX194ICsgX19z
cXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9IF9faW5saW5lIGxvbmcg
ZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChf
X3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0KCgpfX2lu
bGluZSBkb3VibGUgYXRhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBk
b3VibGUgX195ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsg
X195KSAvICgxLjAgKyBfX3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgZmxvYXQgYXRh
bmhmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19m
YWJzbCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBf
X3kpKSAqIF9fc2duMWwgKF9feCk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXRhbmhsIChsb25n
IGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195ID0gX19mYWJz
bCAoX194KTsgcmV0dXJuIC0wLjUgKiBsb2cxcGwgKC0oX195ICsgX195KSAvICgxLjAgKyBfX3kp
KSAqIF9fc2duMWwgKF9feCk7IH0KCgoKCl9faW5saW5lIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195
ICogX195KTsgfSBfX2lubGluZSBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0
aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9IF9faW5s
aW5lIGxvbmcgZG91YmxlIGh5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp
IHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCArIF9feSAqIF9feSk7IH0KCl9f
aW5saW5lIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xh
dGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAi
MCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBsb2diZiAoZmxvYXQg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fanVuazsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10
IiAoX19qdW5rKSwgIj11IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7
IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fanVu
azsgX19hc20gX192b2xhdGlsZV9fICgiZnh0cmFjdFxuXHQiIDogIj10IiAoX19qdW5rKSwgIj11
IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyByZXR1cm4gX192YWx1ZTsgfQpfX2lubGluZSBkb3Vi
bGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX19yZXN1bHQ7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZ4Y2g7IGZ5bDJ4IiA6ICI9dCIgKF9fcmVzdWx0
KSA6ICIwIiAoX194KSA6ICJzdCgxKSIpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgZmxv
YXQgbG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBfX3Jlc3VsdDsg
X19hc20gX192b2xhdGlsZV9fICgiZmxkMTsgZnhjaDsgZnlsMngiIDogIj10IiAoX19yZXN1bHQp
IDogIjAiIChfX3gpIDogInN0KDEpIik7IHJldHVybiBfX3Jlc3VsdDsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcg
ZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmbGQxOyBmeGNoOyBmeWwyeCIg
OiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0
OyB9CgoKX19pbmxpbmUgZmxvYXQKbGRleHBmIChmbG9hdCBfX3gsIGludCBfX3kpIHRocm93ICgp
CnsKICByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJm
c2NhbGUiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoKGxvbmcgZG91YmxlKSBf
X3kpKTsgcmV0dXJuIF9fdmFsdWU7Cn0KCl9faW5saW5lIGxvbmcgZG91YmxlCmxkZXhwbCAobG9u
ZyBkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CgoK
X19pbmxpbmUgZG91YmxlIGZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikg
dGhyb3cgKCkgeyByZXR1cm4gKF9feCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgZmxvYXQgZm1h
ZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCkgeyByZXR1cm4gKF9f
eCAqIF9feSkgKyBfX3o7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUg
X194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCkgeyByZXR1cm4g
KF9feCAqIF9feSkgKyBfX3o7IH0KCl9faW5saW5lIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0
aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgi
ZnJuZGludCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7
IH0gX19pbmxpbmUgZmxvYXQgcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBm
bG9hdCBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnJuZGludCIgOiAiPXQiIChfX3Jl
c3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19pbmxpbmUgbG9uZyBkb3Vi
bGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJs
ZSBfX3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnJuZGludCIgOiAiPXQiIChfX3Jlc3Vs
dCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0KX19pbmxpbmUgbG9uZyBpbnQKbHJp
bnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9f
IF9fdm9sYXRpbGVfXyAoImZpc3RwbCAlMCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194
KSA6ICJzdCIpOyByZXR1cm4gX19scmludHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAo
ZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192
b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDog
InN0Iik7IHJldHVybiBfX2xyaW50cmVzOwp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBf
X3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAiIDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkg
OiAic3QiKTsgcmV0dXJuIF9fbHJpbnRyZXM7Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJp
bnRmIChmbG9hdCBfX3gpIHRocm93ICgpCnsKICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBf
X2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDog
InQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxv
bmcgaW50CmxscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19s
bHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xs
cmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9Cl9faW5s
aW5lIGxvbmcgbG9uZyBpbnQKbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7CiAg
bG9uZyBsb25nIGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxs
ICUwIiA6ICI9bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19s
bHJpbnRyZXM7Cn0KCgoKCgoKCl9faW5saW5lIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3Vi
bGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQg
X19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Ns
b2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIHsg
cmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBfX2Nsb2JiZXJlZDsgX19hc20g
X192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUlYXhcblx0IiAic2FoZlxuXHQi
ICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xvYmJlcmVkKSA6ICIwIiAoX194
KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91
YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgeyBy
ZWdpc3RlciBkb3VibGUgX192YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBf
X3ZvbGF0aWxlX18gKCIxOglmcHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIg
ImpwCTFiIiA6ICI9dCIgKF9fdmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gp
LCAidSIgKF9feSkgOiAiY2MiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgaW50Cl9fZmlu
aXRlIChkb3VibGUgX194KSB0aHJvdyAoKQp7CiAgcmV0dXJuIChfX2V4dGVuc2lvbl9fCiAgICAg
ICAgICAoKCgoKHVuaW9uIHsgZG91YmxlIF9fZDsgaW50IF9faVsyXTsgfSkge19fZDogX194fSku
X19pWzFdCiAgICAgICAgICAgICB8IDB4ODAwZmZmZmZ1KSArIDEpID4+IDMxKSk7Cn0KCgoKX19p
bmxpbmUgZG91YmxlIF9fY29zaG0xIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUg
X19jb3NobTEgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19l
eG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChf
X2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfSBfX2lubGluZSBmbG9hdCBfX2Nvc2htMWYgKGZsb2F0
KSB0aHJvdyAoKTsgX19pbmxpbmUgZmxvYXQgX19jb3NobTFmIChmbG9hdCBfX3gpIHRocm93ICgp
IHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkp
OyByZXR1cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfSBfX2lu
bGluZSBsb25nIGRvdWJsZSBfX2Nvc2htMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxp
bmUgbG9uZyBkb3VibGUgX19jb3NobTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVn
aXN0ZXIgbG9uZyBkb3VibGUgX19leG0xID0gX19leHBtMWwgKF9fZmFic2wgKF9feCkpOyByZXR1
cm4gMC41ICogKF9fZXhtMSAvIChfX2V4bTEgKyAxLjApKSAqIF9fZXhtMTsgfQoKCgpfX2lubGlu
ZSBkb3VibGUgX19hY29zaDFwIChkb3VibGUpIHRocm93ICgpOyBfX2lubGluZSBkb3VibGUgX19h
Y29zaDFwIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2cxcGwgKF9feCArIF9fc3Fy
dGwgKF9feCkgKiBfX3NxcnRsIChfX3ggKyAyLjApKTsgfSBfX2lubGluZSBmbG9hdCBfX2Fjb3No
MXBmIChmbG9hdCkgdGhyb3cgKCk7IF9faW5saW5lIGZsb2F0IF9fYWNvc2gxcGYgKGZsb2F0IF9f
eCkgdGhyb3cgKCkgeyByZXR1cm4gbG9nMXBsIChfX3ggKyBfX3NxcnRsIChfX3gpICogX19zcXJ0
bCAoX194ICsgMi4wKSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgX19hY29zaDFwbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOyBfX2lubGluZSBsb25nIGRvdWJsZSBfX2Fjb3NoMXBsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZzFwbCAoX194ICsgX19zcXJ0bCAoX194KSAq
IF9fc3FydGwgKF9feCArIDIuMCkpOyB9Cn0KaW5saW5lIGZsb2F0IEFjb3MgKGZsb2F0IGEpIHsg
cmV0dXJuIGFjb3MgKGEpOyB9IGlubGluZSBmbG9hdCBBc2luIChmbG9hdCBhKSB7IHJldHVybiBh
c2luIChhKTsgfSBpbmxpbmUgZmxvYXQgQXRhbiAoZmxvYXQgYSkgeyByZXR1cm4gYXRhbiAoYSk7
IH0gaW5saW5lIGZsb2F0IEF0YW4yIChmbG9hdCBhLCBmbG9hdCBiKSB7IHJldHVybiBhdGFuMiAo
YSwgYik7IH0gaW5saW5lIGZsb2F0IENvcyAoZmxvYXQgYSkgeyByZXR1cm4gY29zIChhKTsgfSBp
bmxpbmUgZmxvYXQgU2luIChmbG9hdCBhKSB7IHJldHVybiBzaW4gKGEpOyB9IGlubGluZSBmbG9h
dCBUYW4gKGZsb2F0IGEpIHsgcmV0dXJuIHRhbiAoYSk7IH0gaW5saW5lIGZsb2F0IENvc2ggKGZs
b2F0IGEpIHsgcmV0dXJuIGNvc2ggKGEpOyB9IGlubGluZSBmbG9hdCBTaW5oIChmbG9hdCBhKSB7
IHJldHVybiBzaW5oIChhKTsgfSBpbmxpbmUgZmxvYXQgVGFuaCAoZmxvYXQgYSkgeyByZXR1cm4g
dGFuaCAoYSk7IH0gaW5saW5lIGZsb2F0IEFicyAoZmxvYXQgYSkgeyByZXR1cm4gZmFicyAoYSk7
IH0gaW5saW5lIGZsb2F0IENlaWwgKGZsb2F0IGEpIHsgcmV0dXJuIGNlaWwgKGEpOyB9IGlubGlu
ZSBmbG9hdCBGbG9vciAoZmxvYXQgYSkgeyByZXR1cm4gZmxvb3IgKGEpOyB9IGlubGluZSBmbG9h
dCBSaW50IChmbG9hdCBhKSB7IHJldHVybiBmbG9vciAoYSArIC41KTsgfSBpbmxpbmUgZmxvYXQg
Rm1vZCAoZmxvYXQgeCwgZmxvYXQgeSkgeyByZXR1cm4gZm1vZCAoeCwgeSk7IH0gaW5saW5lIGZs
b2F0IE1vZGYgKGZsb2F0IHgsIGZsb2F0ICpwaW50KSB7IGRvdWJsZSBoLCByID0gbW9kZiAoeCwg
JmgpOyAqcGludCA9IGg7IHJldHVybiByOyB9IGlubGluZSBmbG9hdCBGcmV4cCAoZmxvYXQgeCwg
aW50ICpwZXhwKSB7IHJldHVybiBmcmV4cCAoeCwgcGV4cCk7IH0gaW5saW5lIGZsb2F0IExkZXhw
IChmbG9hdCB4LCBpbnQgZXhwKSB7IHJldHVybiBsZGV4cCAoeCwgZXhwKTsgfSBpbmxpbmUgZmxv
YXQgRXhwIChmbG9hdCBhKSB7IHJldHVybiBleHAgKGEpOyB9IGlubGluZSBmbG9hdCBMb2dOIChm
bG9hdCBhKSB7IHJldHVybiBsb2cgKGEpOyB9IGlubGluZSBmbG9hdCBMb2cxMCAoZmxvYXQgYSkg
eyByZXR1cm4gbG9nMTAgKGEpOyB9IGlubGluZSBmbG9hdCBQb3cgKGZsb2F0IGEsIGZsb2F0IGIp
IHsgcmV0dXJuIHBvdyAoYSwgYik7IH0gaW5saW5lIGZsb2F0IFNxcnQgKGZsb2F0IGEpIHsgcmV0
dXJuIHNxcnQgKGEpOyB9IGlubGluZSBmbG9hdCBJc05hTiAoZmxvYXQgYSkgeyByZXR1cm4gKHNp
emVvZiAoYSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2lzbmFuZiAoYSkgOiBzaXplb2YgKGEpID09
IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKGEpIDogX19pc25hbmwgKGEpKTsgfSBpbmxpbmUg
ZmxvYXQgSXNJbmYgKGZsb2F0IGEpIHsgcmV0dXJuIChzaXplb2YgKGEpID09IHNpemVvZiAoZmxv
YXQpID8gX19pc2luZmYgKGEpIDogc2l6ZW9mIChhKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2lz
aW5mIChhKSA6IF9faXNpbmZsIChhKSk7IH0KaW5saW5lIGRvdWJsZSBBY29zIChkb3VibGUgYSkg
eyByZXR1cm4gYWNvcyAoYSk7IH0gaW5saW5lIGRvdWJsZSBBc2luIChkb3VibGUgYSkgeyByZXR1
cm4gYXNpbiAoYSk7IH0gaW5saW5lIGRvdWJsZSBBdGFuIChkb3VibGUgYSkgeyByZXR1cm4gYXRh
biAoYSk7IH0gaW5saW5lIGRvdWJsZSBBdGFuMiAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVy
biBhdGFuMiAoYSwgYik7IH0gaW5saW5lIGRvdWJsZSBDb3MgKGRvdWJsZSBhKSB7IHJldHVybiBj
b3MgKGEpOyB9IGlubGluZSBkb3VibGUgU2luIChkb3VibGUgYSkgeyByZXR1cm4gc2luIChhKTsg
fSBpbmxpbmUgZG91YmxlIFRhbiAoZG91YmxlIGEpIHsgcmV0dXJuIHRhbiAoYSk7IH0gaW5saW5l
IGRvdWJsZSBDb3NoIChkb3VibGUgYSkgeyByZXR1cm4gY29zaCAoYSk7IH0gaW5saW5lIGRvdWJs
ZSBTaW5oIChkb3VibGUgYSkgeyByZXR1cm4gc2luaCAoYSk7IH0gaW5saW5lIGRvdWJsZSBUYW5o
IChkb3VibGUgYSkgeyByZXR1cm4gdGFuaCAoYSk7IH0gaW5saW5lIGRvdWJsZSBBYnMgKGRvdWJs
ZSBhKSB7IHJldHVybiBmYWJzIChhKTsgfSBpbmxpbmUgZG91YmxlIENlaWwgKGRvdWJsZSBhKSB7
IHJldHVybiBjZWlsIChhKTsgfSBpbmxpbmUgZG91YmxlIEZsb29yIChkb3VibGUgYSkgeyByZXR1
cm4gZmxvb3IgKGEpOyB9IGlubGluZSBkb3VibGUgUmludCAoZG91YmxlIGEpIHsgcmV0dXJuIGZs
b29yIChhICsgLjUpOyB9IGlubGluZSBkb3VibGUgRm1vZCAoZG91YmxlIHgsIGRvdWJsZSB5KSB7
IHJldHVybiBmbW9kICh4LCB5KTsgfSBpbmxpbmUgZG91YmxlIE1vZGYgKGRvdWJsZSB4LCBkb3Vi
bGUgKnBpbnQpIHsgcmV0dXJuIG1vZGYgKHgsIHBpbnQpOyB9IGlubGluZSBkb3VibGUgRnJleHAg
KGRvdWJsZSB4LCBpbnQgKnBleHApIHsgcmV0dXJuIGZyZXhwICh4LCBwZXhwKTsgfSBpbmxpbmUg
ZG91YmxlIExkZXhwIChkb3VibGUgeCwgaW50IGV4cCkgeyByZXR1cm4gbGRleHAgKHgsIGV4cCk7
IH0gaW5saW5lIGRvdWJsZSBFeHAgKGRvdWJsZSBhKSB7IHJldHVybiBleHAgKGEpOyB9IGlubGlu
ZSBkb3VibGUgTG9nTiAoZG91YmxlIGEpIHsgcmV0dXJuIGxvZyAoYSk7IH0gaW5saW5lIGRvdWJs
ZSBMb2cxMCAoZG91YmxlIGEpIHsgcmV0dXJuIGxvZzEwIChhKTsgfSBpbmxpbmUgZG91YmxlIFBv
dyAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVybiBwb3cgKGEsIGIpOyB9IGlubGluZSBkb3Vi
bGUgU3FydCAoZG91YmxlIGEpIHsgcmV0dXJuIHNxcnQgKGEpOyB9IGlubGluZSBkb3VibGUgSXNO
YU4gKGRvdWJsZSBhKSB7IHJldHVybiAoc2l6ZW9mIChhKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
aXNuYW5mIChhKSA6IHNpemVvZiAoYSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAoYSkg
OiBfX2lzbmFubCAoYSkpOyB9IGlubGluZSBkb3VibGUgSXNJbmYgKGRvdWJsZSBhKSB7IHJldHVy
biAoc2l6ZW9mIChhKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChhKSA6IHNpemVvZiAo
YSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoYSkgOiBfX2lzaW5mbCAoYSkpOyB9Cmlu
bGluZSBsb25nIGRvdWJsZSBBY29zIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBhY29zbCAoYSk7
IH0gaW5saW5lIGxvbmcgZG91YmxlIEFzaW4gKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIGFzaW5s
IChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgQXRhbiAobG9uZyBkb3VibGUgYSkgeyByZXR1cm4g
YXRhbmwgKGEpOyB9IGlubGluZSBsb25nIGRvdWJsZSBBdGFuMiAobG9uZyBkb3VibGUgYSwgbG9u
ZyBkb3VibGUgYikgeyByZXR1cm4gYXRhbjJsIChhLCBiKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUg
Q29zIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBjb3NsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3Vi
bGUgU2luIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBzaW5sIChhKTsgfSBpbmxpbmUgbG9uZyBk
b3VibGUgVGFuIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiB0YW5sIChhKTsgfSBpbmxpbmUgbG9u
ZyBkb3VibGUgQ29zaCAobG9uZyBkb3VibGUgYSkgeyByZXR1cm4gY29zaGwgKGEpOyB9IGlubGlu
ZSBsb25nIGRvdWJsZSBTaW5oIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBzaW5obCAoYSk7IH0g
aW5saW5lIGxvbmcgZG91YmxlIFRhbmggKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIHRhbmhsIChh
KTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgQWJzIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBmYWJz
bCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIENlaWwgKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJu
IGNlaWxsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgRmxvb3IgKGxvbmcgZG91YmxlIGEpIHsg
cmV0dXJuIGZsb29ybCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIFJpbnQgKGxvbmcgZG91Ymxl
IGEpIHsgcmV0dXJuIGZsb29ybCAoYSArIC41KTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgRm1vZCAo
bG9uZyBkb3VibGUgeCwgbG9uZyBkb3VibGUgeSkgeyByZXR1cm4gZm1vZGwgKHgsIHkpOyB9IGlu
bGluZSBsb25nIGRvdWJsZSBNb2RmIChsb25nIGRvdWJsZSB4LCBsb25nIGRvdWJsZSAqcGludCkg
eyByZXR1cm4gbW9kZmwgKHgsIHBpbnQpOyB9IGlubGluZSBsb25nIGRvdWJsZSBGcmV4cCAobG9u
ZyBkb3VibGUgeCwgaW50ICpwZXhwKSB7IHJldHVybiBmcmV4cGwgKHgsIHBleHApOyB9IGlubGlu
ZSBsb25nIGRvdWJsZSBMZGV4cCAobG9uZyBkb3VibGUgeCwgaW50IGV4cCkgeyByZXR1cm4gbGRl
eHBsICh4LCBleHApOyB9IGlubGluZSBsb25nIGRvdWJsZSBFeHAgKGxvbmcgZG91YmxlIGEpIHsg
cmV0dXJuIGV4cGwgKGEpOyB9IGlubGluZSBsb25nIGRvdWJsZSBMb2dOIChsb25nIGRvdWJsZSBh
KSB7IHJldHVybiBsb2dsIChhKTsgfSBpbmxpbmUgbG9uZyBkb3VibGUgTG9nMTAgKGxvbmcgZG91
YmxlIGEpIHsgcmV0dXJuIGxvZzEwbCAoYSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIFBvdyAobG9u
ZyBkb3VibGUgYSwgbG9uZyBkb3VibGUgYikgeyByZXR1cm4gcG93bCAoYSwgYik7IH0gaW5saW5l
IGxvbmcgZG91YmxlIFNxcnQgKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIHNxcnRsIChhKTsgfSBp
bmxpbmUgbG9uZyBkb3VibGUgSXNOYU4gKGxvbmcgZG91YmxlIGEpIHsgcmV0dXJuIGlzbmFubCAo
YSk7IH0gaW5saW5lIGxvbmcgZG91YmxlIElzSW5mIChsb25nIGRvdWJsZSBhKSB7IHJldHVybiBp
c2luZmwgKGEpOyB9CnRlbXBsYXRlIDxjbGFzcyBmbHRfdD4gaW5saW5lIGZsdF90IHJvdW5kX2Ru
IChmbHRfdCB4LCBmbHRfdCBuKSB7CiAgcmV0dXJuIHggLSBGbW9kICh4LCBuKTsgfQoKCnRlbXBs
YXRlIDxjbGFzcyBmbHRfdD4gaW5saW5lIGZsdF90IHJvdW5kX3VwIChmbHRfdCB4LCBmbHRfdCBu
KSB7CiAgZmx0X3QgciA9IEZtb2QgKHgsIG4pOyByZXR1cm4gciA9PSAwID8geCA6IHggLSByICsg
bjsgfQoKCgoKdGVtcGxhdGUgPGNsYXNzIGZsdF90PiBpbmxpbmUKYm9vbApmbHRfaXNfemVybyAo
Zmx0X3QgeCkKewogIHJldHVybiBBYnMgKHgpIDwgZXBzaWxvbiAoeCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBmbHRfdD4gaW5saW5lCmJvb2wKZmx0X2VxIChmbHRfdCB4LCBmbHRfdCB5KQp7CiAgaWYg
KHggPT0gMCkKICAgIHJldHVybiB5ID09IDA7CiAgZWxzZQogICAgcmV0dXJuIEFicyAoeCAvIHkg
LSAxKSA8IDggKiBlcHNpbG9uICh4KTsKfQoKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2du
dWNfdmFfbGlzdDsKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwpleHRlcm4gIkMiIHsK
CgoKCgoKCgpleHRlcm4gdm9pZCAqbWVtY3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19uKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtbW92ZSAodm9pZCAqX19kZXN0LCBfX2Nv
bnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgpleHRlcm4g
dm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQg
X19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2
b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25z
dCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiB2b2lkICpyYXdtZW1jaHIgKF9fY29uc3Qg
dm9pZCAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gdm9pZCAqbWVtcmNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVf
dCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4
dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNweSAo
Y2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqX19y
ZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3RyY21wIChf
X2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFy
ICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2NvbnN0IGNo
YXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3RyY29sbF9sIChfX2NvbnN0
IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm1f
bCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3QgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo
YXIgKnN0cmR1cCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X21hbGxvY19fKSk7CgoKCgoKCmV4dGVybiBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9f
c3RyaW5nLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxv
Y19fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2Mp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKnN0cnJj
aHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNoYXIgKl9f
cywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3Jl
amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g
c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq
c3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3Ry
IChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0
b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSkKICAgICB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpfX3N0cnRva19yIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3Qg
X19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RydG9rX3IgKGNoYXIgKl9fcmVz
dHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6
ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19u
ZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf
X3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICpf
X3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y
ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBz
dHJsZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcs
IHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6
ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9f
cywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZv
aWQgKl9fc3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2
b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
YmNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIg
KmluZGV4IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3Ms
IGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4g
aW50IGZmcyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CgoKZXh0ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25n
IGludCBfX2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK
CmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg
Kl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJu
IGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CgoKZXh0ZXJuIGludCBzdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj
aGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jYXNlY21w
X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hh
ciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN0cnZlcnNj
bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGlu
dCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z
dHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0
ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
CgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lKSB0aHJv
dyAoKTsKfQoKCgoKY2xhc3MgYm9vbF90eXBlCnsKICB0eXBlZGVmIHNpZ25lZCBjaGFyIGJvb2xf
dDsKICBib29sX3QgeDsKCnB1YmxpYzoKICBlbnVtIHsgbmlsID0gLTEgfTsKCnB1YmxpYzoKICBi
b29sX3R5cGUoKSA6IHggKHN0YXRpY19jYXN0PGJvb2xfdD4gKG5pbCkpIHt9CiAgYm9vbF90eXBl
IChib29sIGIpIDogeCAoc3RhdGljX2Nhc3Q8Ym9vbF90PiAoYikpIHt9CiAgYm9vbF90eXBlICZv
cGVyYXRvcj0gKGJvb2wgYikgeyB4ID0gc3RhdGljX2Nhc3Q8Ym9vbF90PiAoYik7IHJldHVybiAq
dGhpczsgfQoKICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4geCAhPSAnXDAnOyB9CiAg
Ym9vbCBvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4geCAhPSAnXDAnOyB9CiAgYm9vbF90ICZv
cGVyYXRvcigpKCkgeyByZXR1cm4geDsgfQoKICBib29sIGlzX251bGwoKSBjb25zdCB7IHJldHVy
biB4ID09IHN0YXRpY19jYXN0PGJvb2xfdD4gKG5pbCk7IH0KICB2b2lkIHNldF9udWxsKCkgeyB4
ID0gc3RhdGljX2Nhc3Q8Ym9vbF90PiAobmlsKTsgfQp9OwoKCgoKCgoKdGVtcGxhdGUgPGNsYXNz
IFB5PgpjbGFzcyB3cmFwX2ludF90CnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgUHk6Om51
bV90IG51bV90OwoKcHJpdmF0ZToKICBudW1fdCB4OwoKcHVibGljOgogIHdyYXBfaW50X3QgKG51
bV90IGNvbnN0IGkgPSBQeTo6bmlsKCkpCiAgICA6IHggKGkpIHt9CiAgd3JhcF9pbnRfdCAmb3Bl
cmF0b3I9IChudW1fdCBpKSB7CiAgICB4ID0gaTsgcmV0dXJuICp0aGlzOyB9CgogIGJvb2wgaXNf
bnVsbCgpIGNvbnN0IHsgcmV0dXJuIFB5Ojppc19udWxsICh4KTsgfQogIHZvaWQgc2V0X251bGwo
KSB7IHggPSBQeTo6bmlsKCk7IH0KCiAgb3BlcmF0b3IgbnVtX3QoKSBjb25zdCB7IHJldHVybiB4
OyB9CiAgbnVtX3QgY29uc3QgJm9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiB4OyB9CiAgbnVt
X3QgJm9wZXJhdG9yKCkoKSB7IHJldHVybiB4OyB9CgogIHdyYXBfaW50X3QgJm9wZXJhdG9yKz0g
KG51bV90IGkpIHsgeCArPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2ludF90ICZvcGVyYXRv
ci09IChudW1fdCBpKSB7IHggLT0gaTsgcmV0dXJuICp0aGlzOyB9CiAgd3JhcF9pbnRfdCAmb3Bl
cmF0b3IqPSAobnVtX3QgaSkgeyB4ICo9IGk7IHJldHVybiAqdGhpczsgfQogIHdyYXBfaW50X3Qg
Jm9wZXJhdG9yLz0gKG51bV90IGkpIHsgeCAvPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2lu
dF90ICZvcGVyYXRvciU9IChudW1fdCBpKSB7IHggJT0gaTsgcmV0dXJuICp0aGlzOyB9CgogIHdy
YXBfaW50X3QgJm9wZXJhdG9yJj0gKG51bV90IGkpIHsgeCAmPSBpOyByZXR1cm4gKnRoaXM7IH0K
ICB3cmFwX2ludF90ICZvcGVyYXRvcnw9IChudW1fdCBpKSB7IHggfD0gaTsgcmV0dXJuICp0aGlz
OyB9CiAgd3JhcF9pbnRfdCAmb3BlcmF0b3JePSAobnVtX3QgaSkgeyB4IF49IGk7IHJldHVybiAq
dGhpczsgfQoKICBudW1fdCBvcGVyYXRvcisrKCkgeyByZXR1cm4gKyt4OyB9IG51bV90IG9wZXJh
dG9yKysgKGludCkgeyByZXR1cm4geCsrOyB9CiAgbnVtX3Qgb3BlcmF0b3ItLSgpIHsgcmV0dXJu
IC0teDsgfSBudW1fdCBvcGVyYXRvci0tIChpbnQpIHsgcmV0dXJuIHgtLTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIFB5PgpjbGFzcyB3cmFwX2ZsdF90CnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5h
bWUgUHk6Om51bV90IG51bV90OwoKcHJpdmF0ZToKICBudW1fdCB4OwoKcHVibGljOgogIHdyYXBf
Zmx0X3QgKG51bV90IGNvbnN0IGkgPSBQeTo6bmlsKCkpCiAgICA6IHggKGkpIHt9CiAgd3JhcF9m
bHRfdCAmb3BlcmF0b3I9IChudW1fdCBpKSB7CiAgICB4ID0gaTsgcmV0dXJuICp0aGlzOyB9Cgog
IGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsgcmV0dXJuIFB5Ojppc19udWxsICh4KTsgfQogIHZvaWQg
c2V0X251bGwoKSB7IHggPSBQeTo6bmlsKCk7IH0KCiAgb3BlcmF0b3IgbnVtX3QoKSBjb25zdCB7
IHJldHVybiB4OyB9CiAgbnVtX3QgY29uc3QgJm9wZXJhdG9yKCkoKSBjb25zdCB7IHJldHVybiB4
OyB9CiAgbnVtX3QgJm9wZXJhdG9yKCkoKSB7IHJldHVybiB4OyB9CgogIHdyYXBfZmx0X3QgJm9w
ZXJhdG9yKz0gKG51bV90IGkpIHsgeCArPSBpOyByZXR1cm4gKnRoaXM7IH0KICB3cmFwX2ZsdF90
ICZvcGVyYXRvci09IChudW1fdCBpKSB7IHggLT0gaTsgcmV0dXJuICp0aGlzOyB9CiAgd3JhcF9m
bHRfdCAmb3BlcmF0b3IqPSAobnVtX3QgaSkgeyB4ICo9IGk7IHJldHVybiAqdGhpczsgfQogIHdy
YXBfZmx0X3QgJm9wZXJhdG9yLz0gKG51bV90IGkpIHsgeCAvPSBpOyByZXR1cm4gKnRoaXM7IH0K
CiAgaW50IGNvbXBhcmUgKHdyYXBfZmx0X3QgY29uc3QgJnkpIGNvbnN0CiAgewogICAgaWYgKGlz
X251bGwoKSkKICAgICAgaWYgKHkuaXNfbnVsbCgpKQogICAgICAgIHJldHVybiAwOwogICAgICBl
bHNlCiAgICAgICAgcmV0dXJuIC0xOwogICAgaWYgKHkuaXNfbnVsbCgpKQogICAgICByZXR1cm4g
MTsKICAgIGlmIChmbHRfZXEgKHgsIHkoKSkpCiAgICAgIHJldHVybiAwOwogICAgaWYgKHggPCB5
KCkpCiAgICAgIHJldHVybiAtMTsKICAgIGVsc2UKICAgICAgcmV0dXJuIDE7CiAgfQp9OwpzdHJ1
Y3QgY2hhcl9weV90IHsgdHlwZWRlZiBjaGFyIG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyBy
ZXR1cm4gKC0xMjgpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHgg
PT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMg
Y2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8Y2hh
cl9weV90PiBjaGFyX3R5cGU7CnN0cnVjdCB0aW55X3B5X3QgeyB0eXBlZGVmIHNpZ25lZCBjaGFy
IG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKC0xMjgpOyB9IHN0YXRpYyBib29s
IGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29u
c3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2Zt
dFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8dGlueV9weV90PiB0aW55X3R5cGU7CnN0cnVjdCB1
dGlueV9weV90IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIG51bV90OyBzdGF0aWMgbnVtX3Qgbmls
KCkgeyByZXR1cm4gMjU1OyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJu
IHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0
aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8
dXRpbnlfcHlfdD4gdXRpbnlfdHlwZTsKc3RydWN0IHNob3J0X3B5X3QgeyB0eXBlZGVmIHNpZ25l
ZCBzaG9ydCBudW1fdDsgc3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgtMzI3NjcgLTEpOyB9
IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJuIHggPT0gbmlsKCk7IH0gc3Rh
dGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0aWMgY2hhciBjb25zdCBkZWNp
bWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8c2hvcnRfcHlfdD4gc2hvcnRf
dHlwZTsKc3RydWN0IHVzaG9ydF9weV90IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBudW1fdDsg
c3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgzMjc2NyAqIDIgKyAxKTsgfSBzdGF0aWMgYm9v
bCBpc19udWxsIChudW1fdCB4KSB7IHJldHVybiB4ID09IG5pbCgpOyB9IHN0YXRpYyBjaGFyIGNv
bnN0IGRlY2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9m
bXRbXTsgfTsgdHlwZWRlZiB3cmFwX2ludF90PHVzaG9ydF9weV90PiB1c2hvcnRfdHlwZTsKc3Ry
dWN0IGludF9weV90IHsgdHlwZWRlZiBzaWduZWQgaW50IG51bV90OyBzdGF0aWMgbnVtX3Qgbmls
KCkgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3IC0xKTsgfSBzdGF0aWMgYm9vbCBpc19udWxsIChudW1f
dCB4KSB7IHJldHVybiB4ID09IG5pbCgpOyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfc2Nh
bl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9mbXRbXTsgfTsgdHlwZWRl
ZiB3cmFwX2ludF90PGludF9weV90PiBpbnRfdHlwZTsKc3RydWN0IHVpbnRfcHlfdCB7IHR5cGVk
ZWYgdW5zaWduZWQgaW50IG51bV90OyBzdGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKDIxNDc0
ODM2NDcgKiAyVSArIDEpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsgcmV0dXJu
IHggPT0gbmlsKCk7IH0gc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9zY2FuX2ZtdFtdOyBzdGF0
aWMgY2hhciBjb25zdCBkZWNpbWFsX3ByaW50X2ZtdFtdOyB9OyB0eXBlZGVmIHdyYXBfaW50X3Q8
dWludF9weV90PiB1aW50X3R5cGU7CnN0cnVjdCBsb25nX3B5X3QgeyB0eXBlZGVmIGxsb25nX3Qg
bnVtX3Q7IHN0YXRpYyBudW1fdCBuaWwoKSB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdM
TCAtMSk7IH0gc3RhdGljIGJvb2wgaXNfbnVsbCAobnVtX3QgeCkgeyByZXR1cm4geCA9PSBuaWwo
KTsgfSBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3NjYW5fZm10W107IHN0YXRpYyBjaGFyIGNv
bnN0IGRlY2ltYWxfcHJpbnRfZm10W107IH07IHR5cGVkZWYgd3JhcF9pbnRfdDxsb25nX3B5X3Q+
IGxvbmdfdHlwZTsKc3RydWN0IHVsb25nX3B5X3QgeyB0eXBlZGVmIHVsbG9uZ190IG51bV90OyBz
dGF0aWMgbnVtX3QgbmlsKCkgeyByZXR1cm4gKDkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAqIDJVTEwg
KyAxKTsgfSBzdGF0aWMgYm9vbCBpc19udWxsIChudW1fdCB4KSB7IHJldHVybiB4ID09IG5pbCgp
OyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29u
c3QgZGVjaW1hbF9wcmludF9mbXRbXTsgfTsgdHlwZWRlZiB3cmFwX2ludF90PHVsb25nX3B5X3Q+
IHVsb25nX3R5cGU7CnN0cnVjdCBmbG9hdF9weV90IHsgdHlwZWRlZiBkb3VibGUgbnVtX3Q7IHN0
YXRpYyBudW1fdCBuaWwoKSB7IHJldHVybiAoKnJlaW50ZXJwcmV0X2Nhc3Q8ZG91YmxlIGNvbnN0
ICo+IChkb3VibGVfTmFOX3JlcCkpOyB9IHN0YXRpYyBib29sIGlzX251bGwgKG51bV90IHgpIHsg
cmV0dXJuIElzTmFOICh4KTsgfSBzdGF0aWMgY2hhciBjb25zdCBkZWNpbWFsX3NjYW5fZm10W107
IHN0YXRpYyBjaGFyIGNvbnN0IGRlY2ltYWxfcHJpbnRfZm10W107IH07IHR5cGVkZWYgd3JhcF9m
bHRfdDxmbG9hdF9weV90PiBmbG9hdF90eXBlOwpzdHJ1Y3QgZG91YmxlX3B5X3QgeyB0eXBlZGVm
IGRvdWJsZSBudW1fdDsgc3RhdGljIG51bV90IG5pbCgpIHsgcmV0dXJuICgqcmVpbnRlcnByZXRf
Y2FzdDxkb3VibGUgY29uc3QgKj4gKGRvdWJsZV9OYU5fcmVwKSk7IH0gc3RhdGljIGJvb2wgaXNf
bnVsbCAobnVtX3QgeCkgeyByZXR1cm4gSXNOYU4gKHgpOyB9IHN0YXRpYyBjaGFyIGNvbnN0IGRl
Y2ltYWxfc2Nhbl9mbXRbXTsgc3RhdGljIGNoYXIgY29uc3QgZGVjaW1hbF9wcmludF9mbXRbXTsg
fTsgdHlwZWRlZiB3cmFwX2ZsdF90PGRvdWJsZV9weV90PiBkb3VibGVfdHlwZTsKdHlwZWRlZiBm
aXhlZF9UPGludCwgMTAwPiBmaXhlZDJfdHlwZTsKdHlwZWRlZiBmaXhlZF9UPGludCwgMTAwMD4g
Zml4ZWQzX3R5cGU7CnR5cGVkZWYgZml4ZWRfVDxpbnQsIDEwMDAwPiBmaXhlZDRfdHlwZTsKdHlw
ZWRlZiBmaXhlZF9UPGludCwgMTAwMDAwPiBmaXhlZDVfdHlwZTsKCgoKCnZvaWQgY29weSAoY2hh
ciAqZHN0LCB1bnNpZ25lZCBkc3RsZW4sIGNoYXIgZHN0X3BhZCwKICAgICAgICAgICBjaGFyIGNv
bnN0ICpzcmMsIHVuc2lnbmVkIHNyY2xlbikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks
X19zdGRjYWxsX18pKTsKCgoKCnZvaWQgY29weSAoY2hhciAqZHN0LCB1bnNpZ25lZCBkc3RsZW4s
IGNoYXIgY29uc3QgKnNyYywgdW5zaWduZWQgc3JjbGVuKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh
cm1fXygzKSxfX3N0ZGNhbGxfXykpOwp2b2lkIGNvcHkgKGNoYXIgKmRzdCwgdW5zaWduZWQgZHN0
bGVuLCBjaGFyIGNvbnN0ICpzcmMpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSk7CgoKdm9pZCBjb3B5c2IgKGNoYXIgKiwgdW5zaWduZWQsIGNoYXIgY29uc3QgKiwg
dW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK
CgoKdm9pZCBzZXRfbnVsbCAoY2hhciAqcCwgaW50IGxlbikgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgoKdGVtcGxhdGUgPGludCBOPgpjbGFzcyBzdHJm
aXhfdHlwZQp7CiAgY2hhciB4W04rMV07CgpwdWJsaWM6CiAgc3RyZml4X3R5cGUoKSB7IHNldF9u
dWxsKCk7IH0KICBzdHJmaXhfdHlwZSAoY2hhciBjb25zdCAqcykgeyA6OmNvcHkgKHgsIE4rMSwg
cyk7IH0KICBzdHJmaXhfdHlwZSAmb3BlcmF0b3I9IChjaGFyIGNvbnN0ICpzKXsgOjpjb3B5ICh4
LCBOKzEsIHMpOyByZXR1cm4gKnRoaXM7IH0KCgogIGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsKICAg
IHJldHVybiB4WzBdID09IGNoYXJfcHlfdDo6bmlsKCk7IH0KICB2b2lkIHNldF9udWxsKCkgewog
ICAgOjpzZXRfbnVsbCAoeCwgTisxKTsgfQoKCgoKCiAgY2hhciAqb3BlcmF0b3IoKSgpIHsgcmV0
dXJuIHg7IH0KICBjaGFyIGNvbnN0ICpvcGVyYXRvcigpKCkgY29uc3QgeyByZXR1cm4geDsgfQoK
CgoKCgoKICBib29sIG9wZXJhdG9yIDwgKGNoYXIgY29uc3QgKnMpIGNvbnN0IHsgcmV0dXJuIHN0
cm5jbXAgKHgsIHMsIE4rMSkgPCAwOyB9IGJvb2wgb3BlcmF0b3IgPCAoc3RyZml4X3R5cGUgY29u
c3QgJm8pIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSA8IDA7IH0gYm9vbCBv
cGVyYXRvciA8PSAoY2hhciBjb25zdCAqcykgY29uc3QgeyByZXR1cm4gc3RybmNtcCAoeCwgcywg
TisxKSA8PSAwOyB9IGJvb2wgb3BlcmF0b3IgPD0gKHN0cmZpeF90eXBlIGNvbnN0ICZvKSBjb25z
dCB7IHJldHVybiBzdHJuY21wICh4LCBvLngsIE4rMSkgPD0gMDsgfTsKICBib29sIG9wZXJhdG9y
ICE9IChjaGFyIGNvbnN0ICpzKSBjb25zdCB7IHJldHVybiBzdHJuY21wICh4LCBzLCBOKzEpICE9
IDA7IH0gYm9vbCBvcGVyYXRvciAhPSAoc3RyZml4X3R5cGUgY29uc3QgJm8pIGNvbnN0IHsgcmV0
dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSAhPSAwOyB9IGJvb2wgb3BlcmF0b3IgPT0gKGNoYXIg
Y29uc3QgKnMpIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIHMsIE4rMSkgPT0gMDsgfSBib29s
IG9wZXJhdG9yID09IChzdHJmaXhfdHlwZSBjb25zdCAmbykgY29uc3QgeyByZXR1cm4gc3RybmNt
cCAoeCwgby54LCBOKzEpID09IDA7IH07CiAgYm9vbCBvcGVyYXRvciA+PSAoY2hhciBjb25zdCAq
cykgY29uc3QgeyByZXR1cm4gc3RybmNtcCAoeCwgcywgTisxKSA+PSAwOyB9IGJvb2wgb3BlcmF0
b3IgPj0gKHN0cmZpeF90eXBlIGNvbnN0ICZvKSBjb25zdCB7IHJldHVybiBzdHJuY21wICh4LCBv
LngsIE4rMSkgPj0gMDsgfSBib29sIG9wZXJhdG9yID4gKGNoYXIgY29uc3QgKnMpIGNvbnN0IHsg
cmV0dXJuIHN0cm5jbXAgKHgsIHMsIE4rMSkgPiAwOyB9IGJvb2wgb3BlcmF0b3IgPiAoc3RyZml4
X3R5cGUgY29uc3QgJm8pIGNvbnN0IHsgcmV0dXJuIHN0cm5jbXAgKHgsIG8ueCwgTisxKSA+IDA7
IH07CgoKCiAgdm9pZCBhc3NpZ24gKGNoYXIgY29uc3QgKnMsIHVuc2lnbmVkIGwpIHsKICAgIDo6
Y29weSAoeCwgTisxLCBzLCBsKTsgfQoKCiAgdm9pZCBhc3NpZ25fc2IgKGNoYXIgY29uc3QgKnMs
IHVuc2lnbmVkIGwpIHsKICAgIDo6Y29weXNiICh4LCBOKzEsIHMsIGwpOyB9CgoKICB2b2lkIGNv
cHlfb3V0IChjaGFyICpzLCB1bnNpZ25lZCBsKSBjb25zdCB7CiAgICA6OmNvcHkgKHMsIGwsIHgs
IE4rMSk7IH0KCgogIGludCB2IChjaGFyIGNvbnN0ICp0ZXh0LCB2YV9saXN0IGFyZ3MpIHsKICAg
IHJldHVybiB2c25wcmludGYgKHgsIE4rMSwgdGV4dCwgYXJncyk7IH0KCiAgaW50IG9wZXJhdG9y
KCkgKGNoYXIgY29uc3QgKnRleHQgLi4uKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KHByaW50ZiwgMiwgMykpKTsKICBpbnQgb3BlcmF0b3IoKSAoY2hhciBjb25zdCAqdGV4dCwgdmFf
bGlzdCBhcmdzKSB7CiAgICByZXR1cm4gdiAodGV4dCwgYXJncyk7IH07Cn07Cgp0ZW1wbGF0ZSA8
aW50IE4+CmludApzdHJmaXhfdHlwZTxOPjo6b3BlcmF0b3IoKSAoY2hhciBjb25zdCAqdGV4dCAu
Li4pCnsKICB2YV9saXN0IGFyZ3M7CiAgX19idWlsdGluX3N0ZGFyZ19zdGFydCgoYXJncyksdGV4
dCk7CiAgaW50IHJlc3VsdCA9IHYgKHRleHQsIGFyZ3MpOwogIF9fYnVpbHRpbl92YV9lbmQgKGFy
Z3MpOwogIHJldHVybiByZXN1bHQ7Cn0KCgoKCgpjbGFzcyBzdHJmaXhfY3BfdAp7CiAgc3RhdGlj
IGNoYXIgY29uc3QgX251bGxbXTsKICBjaGFyIGNvbnN0ICpfcDsKcHVibGljOgogIHN0cmZpeF9j
cF90IChjaGFyIGNvbnN0ICpwKQogICAgOiBfcCAocCkge30KICBib29sIGlzX251bGwoKSBjb25z
dCB7CiAgICByZXR1cm4gX3AgPT0gMCB8fCAqX3AgPT0gY2hhcl9weV90OjpuaWwoKTsgfQogIGNo
YXIgY29uc3QgKm9wZXJhdG9yKCkoKSB7CiAgICByZXR1cm4gaXNfbnVsbCgpID8gX251bGwgOiBf
cDsgfQogIG9wZXJhdG9yIGNoYXIgY29uc3QgKigpIHsKICAgIHJldHVybiBvcGVyYXRvcigpKCk7
IH0KfTsKCgoKc3RydWN0IHJlY29yZF9iYXNlX3R5cGUKewoKfTsKCgpzdHJ1Y3QgaW5kZXhfYmFz
ZV90eXBlCnsKICB1c2hvcnRfdHlwZSBfc3BlY2lmaWVkOwogIGluZGV4X2Jhc2VfdHlwZSgpIDog
X3NwZWNpZmllZCAoMCkge30KfTsKCgoKCgpzdHJ1Y3QgaW5kZXhfbWF4X3R5cGUgOiBwdWJsaWMg
aW5kZXhfYmFzZV90eXBlCnsKICBkb3VibGUgeFszMF07CiAgaW5kZXhfbWF4X3R5cGUoKSB7IG1l
bXNldCAoeCwgMCwgc2l6ZW9mIHgpOyB9Cn07CgpleHRlcm4gaW5kZXhfbWF4X3R5cGUgY29uc3Qg
bG9hZF9hbGxfaW5kZXg7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCmV4dGVybiAiQyIgewoKCgoKCgoK
CgoKCgpzdHJ1Y3QgdG0KewogIGludCB0bV9zZWM7CiAgaW50IHRtX21pbjsKICBpbnQgdG1faG91
cjsKICBpbnQgdG1fbWRheTsKICBpbnQgdG1fbW9uOwogIGludCB0bV95ZWFyOwogIGludCB0bV93
ZGF5OwogIGludCB0bV95ZGF5OwogIGludCB0bV9pc2RzdDsKCgogIGxvbmcgaW50IHRtX2dtdG9m
ZjsKICBfX2NvbnN0IGNoYXIgKnRtX3pvbmU7CgoKCgp9OwoKCgoKCgoKCnN0cnVjdCBpdGltZXJz
cGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVz
cGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgpleHRlcm4gY2xvY2tfdCBj
bG9jayAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lICh0aW1lX3QgKl9fdGlt
ZXIpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0
aW1lX3QgX190aW1lMCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKCgoK
ZXh0ZXJuIHNpemVfdCBzdHJmdGltZSAoY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21h
eHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVz
dHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3RwKQogICAgIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIHNpemVfdCBzdHJmdGltZV9sIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QgX190cCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90
IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210
aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCmV4dGVybiBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3Rp
bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9f
dHApIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0
aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAq
YXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFy
ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGNoYXIgKmFzY3RpbWVfciAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCwKICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGNoYXIgKmN0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIs
CiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBjaGFyICpfX3R6bmFtZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRl
cm4gbG9uZyBpbnQgX190aW1lem9uZTsKCgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4
dGVybiB2b2lkIHR6c2V0ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBkYXlsaWdodDsK
ZXh0ZXJuIGxvbmcgaW50IHRpbWV6b25lOwoKCgoKCmV4dGVybiBpbnQgc3RpbWUgKF9fY29uc3Qg
dGltZV90ICpfX3doZW4pIHRocm93ICgpOwpleHRlcm4gdGltZV90IHRpbWVnbSAoc3RydWN0IHRt
ICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3RydWN0IHRtICpf
X3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCmV4dGVybiBpbnQgbmFub3NsZWVwIChf
X2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW1haW5pbmcpIHRocm93ICgpOwoKCgpleHRlcm4g
aW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAq
X19yZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9f
Y2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBj
bG9ja19zZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgX19jb25zdCBzdHJ1Y3QgdGltZXNw
ZWMgKl9fdHApCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChj
bG9ja2lkX3QgX19jbG9ja19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNs
b2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRo
cm93ICgpOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVhdGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lk
LAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0IF9f
ZXZwLAogICAgICAgICAgICAgICAgICAgICAgICAgdGltZXJfdCAqX19yZXN0cmljdCBfX3RpbWVy
aWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZGVsZXRlICh0aW1lcl90IF9fdGltZXJp
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJp
ZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg
aXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBzdHJ1Y3QgaXRpbWVyc3Bl
YyAqX192YWx1ZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2dldG92ZXJydW4g
KHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoK
CgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBnZXRkYXRlX3IgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3N0
cmluZywKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3Jlc2J1
ZnApIHRocm93ICgpOwoKCn0KCgoKCgpkb3VibGUgY29uc3QgZGF5c19wZXJfeWVhciA9IDM2NS4y
NTsKZG91YmxlIGNvbnN0IHllYXJzX3Blcl9kYXkgPSAxIC8gZGF5c19wZXJfeWVhcjsKCmVudW0K
ewogIGp1bGlhbl9kYXlfMTU4MjEwMTUgPSAyMjk5MTYxLAogIGp1bGlhbl9kYXlfZXBvY2ggPSAy
NDQwNTg4LAogIHNlY29uZHNfcGVyX2RheSA9IDI0ICogNjAgKiA2MCwKICB0aWNrc19wZXJfc2Vj
b25kID0gMTAwMDAKfTsKYm9vbCBpc19kYXRlIChpbnQgJnksIGludCBtLCBpbnQgZCkgX19hdHRy
aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKYm9vbCBpc190aW1lIChpbnQg
aGgsIGludCBtbSwgaW50IHNzID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19z
dGRjYWxsX18pKTsKCgoKCgppbnQgamRheSAoaW50IHksIGludCBtLCBpbnQgZCkgX19hdHRyaWJ1
dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgp2b2lkIG1keSAoaW50IGos
IGludCAmbW0sIGludCAmZGQsIGludCAmeXkpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMp
LF9fc3RkY2FsbF9fKSk7CgoKaW50IGVhc3RlciAoaW50IHllYXIpIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCmVudW0geyBzdW5kYXksIG1vbmRheSwgdHVl
c2RheSwgd2VkbmVzZGF5LCB0aHVyc2RheSwgZnJpZGF5LCBzYXR1cmRheSB9OwppbmxpbmUgaW50
IGRheV9vZl93ZWVrIChpbnQgaikgeyByZXR1cm4gKGogKyAxKSAlIDc7IH0KZXh0ZXJuIGNoYXIg
Y29uc3Qgd2Vla2RheV9uYW1lc1tdWzRdOwoKCmV4dGVybiBjaGFyIGNvbnN0IG1vbnRoX25hbWVz
W11bNF07CgoKdW5zaWduZWQgdHJhbnNsYXRlX21vbnRoIChjaGFyIGNvbnN0ICpzKSBfX2F0dHJp
YnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKdW5zaWduZWQgdGlja190
b192aXN1YWwgKHVuc2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh
bGxfXykpOwp1bnNpZ25lZCB2aXN1YWxfdG9fdGljayAodW5zaWduZWQpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnVuc2lnbmVkIGpkYXlfdG9fdmlzdWFsICh1
bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdW5z
aWduZWQgdmlzdWFsX3RvX2pkYXkgKHVuc2lnbmVkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKCnZvaWQgdm1zX3RvX2RhdGVfdGltZSAobGxvbmdfdCB2bXMs
IGludCAmamRheSwgaW50ICZ0aWNrKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0
ZGNhbGxfXykpOwoKCgpleHRlcm4gYm9vbCBydW5zX2F0X2RhdGVfb2Zmc2V0OwpleHRlcm4gaW50
IGdsb2JhbF9kYXRlX29mZnNldDsKCgoKCgpjbGFzcyB1dGNfb2Zmc2V0X3QKewogIGludCBfbGFz
dF9kYXRlOwogIGludCBfbGFzdF9ob3VyOwogIGludCBfc2VjOwoKICB2b2lkIHNldCAoaW50IGRh
dGUsIGludCBob3VyKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykp
OwpwdWJsaWM6CiAgaW5saW5lIHV0Y19vZmZzZXRfdCgpOwogIGlubGluZSBpbnQgb3BlcmF0b3Io
KSAoaW50IGRhdGUsIGludCBob3VyKTsKICBvcGVyYXRvciBpbnQoKSB7IHJldHVybiBfc2VjOyB9
Cn07CgpleHRlcm4gdXRjX29mZnNldF90IHV0Y190b19sb2NhbHRpbWVfb2Zmc2V0OwpleHRlcm4g
dXRjX29mZnNldF90IGxvY2FsdGltZV90b191dGNfb2Zmc2V0OwoKCgoKCgoKY2xhc3MgdGltZV90
eXBlCnsKcHJvdGVjdGVkOgogIGludCBfdGljazsKCnB1YmxpYzoKICBlbnVtIHsgdGlja19udWxs
ID0gKC0yMTQ3NDgzNjQ3IC0xKSwKICAgICAgICAgdGlja3NfcGVyX21zZWMgPSB0aWNrc19wZXJf
c2Vjb25kIC8gMTAwMCwKICAgICAgICAgdXNlY19wZXJfdGljayA9IDEwMDAwMDAgLyB0aWNrc19w
ZXJfc2Vjb25kLAogICAgICAgICB0aWNrc19wZXJfZGF5ID0gc2Vjb25kc19wZXJfZGF5ICogdGlj
a3NfcGVyX3NlY29uZCB9OwoKICB0aW1lX3R5cGUgKGludCBoaCwgaW50IG1tLCBpbnQgc3MgPSAw
LCBpbnQgbXMgPSAwKSB7CiAgICBzZXQgKGhoLCBtbSwgc3MsIG1zKTsgfQoKICB0aW1lX3R5cGUg
KGJvb2wgaW5pdCA9IGZhbHNlKSB7IGlmIChpbml0KSBub3coKTsgZWxzZSBfdGljayA9IHRpY2tf
bnVsbDsgfQogIHRpbWVfdHlwZSAoaW50IHQpIDogX3RpY2sgKHQpIHt9CiAgdGltZV90eXBlICh1
bnNpZ25lZCB0KSA6IF90aWNrICh0KSB7fQogIHRpbWVfdHlwZSAmb3BlcmF0b3I9IChpbnQgdCkg
eyBfdGljayA9IHQ7IHJldHVybiAqdGhpczsgfQoKICB2b2lkIHNldF9udWxsKCkgeyBfdGljayA9
IHRpY2tfbnVsbDsgfQogIGJvb2wgaXNfbnVsbCgpIGNvbnN0IHsgcmV0dXJuIF90aWNrID09IHRp
Y2tfbnVsbDsgfQoKCiAgaW50IHRpY2soKSBjb25zdCB7IHJldHVybiBfdGljazsgfQoKICBpbnQg
aG91cigpIGNvbnN0IHsgcmV0dXJuIF90aWNrIC8gKDYwICogNjAgKiB0aWNrc19wZXJfc2Vjb25k
KTsgfQogIGludCBtaW4oKSBjb25zdCB7IHJldHVybiBfdGljayAvICg2MCAqIHRpY2tzX3Blcl9z
ZWNvbmQpICUgNjA7IH0KICBpbnQgc2VjKCkgY29uc3QgeyByZXR1cm4gX3RpY2sgLyB0aWNrc19w
ZXJfc2Vjb25kICUgNjA7IH0KICBpbnQgbXNlYygpIGNvbnN0IHsgcmV0dXJuIF90aWNrICUgdGlj
a3NfcGVyX3NlY29uZCAvIHRpY2tzX3Blcl9tc2VjOyB9CiAgaW50IHVzZWMoKSBjb25zdCB7IHJl
dHVybiBfdGljayAlIHRpY2tzX3Blcl9zZWNvbmQgKiB1c2VjX3Blcl90aWNrOyB9CgogIHZvaWQg
bm93KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICBib29s
IHNldCAoaW50IGhoLCBpbnQgbW0sIGludCBzcyA9IDAsIGludCBtcyA9IDApIF9fYXR0cmlidXRl
X18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICB1bnNpZ25lZCB2aXN1YWwoKSBj
b25zdCB7IHJldHVybiB0aWNrX3RvX3Zpc3VhbCAoX3RpY2spOyB9CiAgdm9pZCBzZXRfZnJvbV92
aXN1YWwgKHVuc2lnbmVkIHRpY2spIHsgX3RpY2sgPSB2aXN1YWxfdG9fdGljayAodGljayk7IH0K
ICBib29sIHNldF9mcm9tX3Zpc3VhbCAoZG91YmxlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBzY2FuIChjaGFyIGNvbnN0ICopIF9fYXR0cmli
dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICBib29sIG9wZXJhdG9yPCAo
dGltZV90eXBlIGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfdGljayA8IHQuX3RpY2s7IH0KICBi
b29sIG9wZXJhdG9yPD0gKHRpbWVfdHlwZSBjb25zdCAmdCkgY29uc3QgeyByZXR1cm4gX3RpY2sg
PD0gdC5fdGljazsgfQogIGJvb2wgb3BlcmF0b3I+ICh0aW1lX3R5cGUgY29uc3QgJnQpIGNvbnN0
IHsgcmV0dXJuIF90aWNrID4gdC5fdGljazsgfQogIGJvb2wgb3BlcmF0b3I+PSAodGltZV90eXBl
IGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfdGljayA+PSB0Ll90aWNrOyB9CiAgYm9vbCBvcGVy
YXRvcj09ICh0aW1lX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsgcmV0dXJuIF90aWNrID09IHQuX3Rp
Y2s7IH0KICBib29sIG9wZXJhdG9yIT0gKHRpbWVfdHlwZSBjb25zdCAmdCkgY29uc3QgeyByZXR1
cm4gX3RpY2sgIT0gdC5fdGljazsgfQoKCiAgdGltZV90eXBlICZvcGVyYXRvcis9ICh0aW1lX3R5
cGUgdCkgeyBfdGljayArPSB0Ll90aWNrOyByZXR1cm4gKnRoaXM7IH0KICB0aW1lX3R5cGUgJm9w
ZXJhdG9yLT0gKHRpbWVfdHlwZSB0KSB7IF90aWNrIC09IHQuX3RpY2s7IHJldHVybiAqdGhpczsg
fQp9OwoKCgoKCmNsYXNzIGRhdGVfdHlwZQp7CnByb3RlY3RlZDoKICBpbnQgX2RheTsKCnB1Ymxp
YzoKICBlbnVtIHsgZGF5X251bGwgPSAoLTIxNDc0ODM2NDcgLTEpIH07CgoKICB2b2lkIHRpbWUg
KHRpbWVfdCAqdCkgeyBfZGF5ID0gKCh1bnNpZ25lZCAoKnQpIC8gc2Vjb25kc19wZXJfZGF5KQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBqdWxpYW5fZGF5X2Vwb2NoICsgZ2xv
YmFsX2RhdGVfb2Zmc2V0KTsgfQogIHZvaWQgdG9kYXkoKSB7IHRpbWVfdCB0OyA6OnRpbWUgKCZ0
KTsgdGltZSAoJnQpOyB9CgoKICBkYXRlX3R5cGUgKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBk
YXkpCiAgICA6IF9kYXkgKGpkYXkgKHllYXIsIG1vbnRoLCBkYXkpKSB7fQoKICBkYXRlX3R5cGUg
KGJvb2wgaW5pdCA9IGZhbHNlKSB7IGlmIChpbml0KSB0b2RheSgpOyBlbHNlIF9kYXkgPSBkYXlf
bnVsbDsgfQogIGRhdGVfdHlwZSAoaW50IHQpIDogX2RheSAodCkge30KICBkYXRlX3R5cGUgJm9w
ZXJhdG9yPSAoaW50IGQpIHsgX2RheSA9IGQ7IHJldHVybiAqdGhpczsgfQoKICBpbnQgamR5KCkg
Y29uc3QgeyByZXR1cm4gX2RheTsgfQoKICB2b2lkIHNldF9udWxsKCkgeyBfZGF5ID0gZGF5X251
bGw7IH0KICBib29sIGlzX251bGwoKSBjb25zdCB7IHJldHVybiBfZGF5ID09IGRheV9udWxsOyB9
CgoKICBib29sIHNldCAoaW50IHksIGludCBtLCBpbnQgZCkgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgeW1kIChpbnQgJnksIGludCAmbSwgaW50
ICZkKSBjb25zdCB7CiAgICBpZiAoaXNfbnVsbCgpKSB5ID0gbSA9IGQgPSAwOyBlbHNlIG1keSAo
X2RheSwgbSwgZCwgeSk7IH0KCgogIGludCBkYXlfb2Zfd2VlaygpIGNvbnN0IHsgcmV0dXJuIDo6
ZGF5X29mX3dlZWsgKF9kYXkpOyB9CiAgaW5saW5lIGJvb2wgaXNfd2Vla2VuZCgpIHsKICAgIHVu
c2lnbmVkIHdlZWtkYXkgPSBkYXlfb2Zfd2VlaygpOwogICAgcmV0dXJuICh3ZWVrZGF5ICUgNyA9
PSAwIHx8IHdlZWtkYXkgJSA3ID09IDYpOyB9CgoKICB1bnNpZ25lZCB2aXN1YWwoKSBjb25zdCB7
IHJldHVybiBqZGF5X3RvX3Zpc3VhbCAoX2RheSk7IH0KICB2b2lkIHNldF9mcm9tX3Zpc3VhbCAo
dW5zaWduZWQgZGF0ZSkgeyBfZGF5ID0gdmlzdWFsX3RvX2pkYXkgKGRhdGUpOyB9CgoKICBib29s
IHNjYW4gKGNoYXIgY29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKCgogIGJvb2wgb3BlcmF0b3I8IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsg
cmV0dXJuIF9kYXkgPCB0Ll9kYXk7IH0KICBib29sIG9wZXJhdG9yPD0gKGRhdGVfdHlwZSBjb25z
dCAmdCkgY29uc3QgeyByZXR1cm4gX2RheSA8PSB0Ll9kYXk7IH0KICBib29sIG9wZXJhdG9yPiAo
ZGF0ZV90eXBlIGNvbnN0ICZ0KSBjb25zdCB7IHJldHVybiBfZGF5ID4gdC5fZGF5OyB9CiAgYm9v
bCBvcGVyYXRvcj49IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsgcmV0dXJuIF9kYXkgPj0g
dC5fZGF5OyB9CiAgYm9vbCBvcGVyYXRvcj09IChkYXRlX3R5cGUgY29uc3QgJnQpIGNvbnN0IHsg
cmV0dXJuIF9kYXkgPT0gdC5fZGF5OyB9CiAgYm9vbCBvcGVyYXRvciE9IChkYXRlX3R5cGUgY29u
c3QgJnQpIGNvbnN0IHsgcmV0dXJuIF9kYXkgIT0gdC5fZGF5OyB9CgoKICBkYXRlX3R5cGUgY29u
c3QgJm9wZXJhdG9yKz0gKGludCBkYXlzKSB7IF9kYXkgKz0gZGF5czsgcmV0dXJuICp0aGlzOyB9
CiAgZGF0ZV90eXBlIGNvbnN0ICZvcGVyYXRvci09IChpbnQgZGF5cykgeyBfZGF5IC09IGRheXM7
IHJldHVybiAqdGhpczsgfQoKCiAgZGF0ZV90eXBlIGNvbnN0ICZwbHVzX3llYXJzIChpbnQgbikg
X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKICBkYXRlX3R5
cGUgY29uc3QgJnBsdXNfbW9udGhzIChpbnQgbikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o
MyksX19zdGRjYWxsX18pKTsKCgogIGRhdGVfdHlwZSBjb25zdCAmcGx1c193b3JrZGF5cyAoaW50
IG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7Cn07CgoKCgoK
dm9pZCBsb2NhbHRpbWVfdG9fdXRjIChkYXRlX3R5cGUgJiwgdGltZV90eXBlICYpIF9fYXR0cmli
dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgdXRjX3RvX2xvY2FsdGlt
ZSAoZGF0ZV90eXBlICYsIHRpbWVfdHlwZSAmKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz
KSxfX3N0ZGNhbGxfXykpOwoKCgp2b2lkIGRlY3JlbWVudCAoZGF0ZV90eXBlICYsIHRpbWVfdHlw
ZSAmLCB0aW1lX3R5cGUpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f
KSk7CnZvaWQgaW5jcmVtZW50IChkYXRlX3R5cGUgJiwgdGltZV90eXBlICYsIHRpbWVfdHlwZSkg
X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgpjbGFzcyBk
YXRlX3RpbWVfdHlwZSA6IHB1YmxpYyBkYXRlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIHRpbWVfdHlwZQp7CnB1YmxpYzoKCiAgZGF0ZV90aW1lX3R5cGUgKGJvb2wgc2V0ID0g
ZmFsc2UpIHsKICAgIGlmIChzZXQpIG5vdygpOyB9CgoKICBkYXRlX3RpbWVfdHlwZSAoZGF0ZV90
eXBlIGNvbnN0ICZkYXRlLCB0aW1lX3R5cGUgY29uc3QgJnRpbWUpCiAgICA6IGRhdGVfdHlwZSAo
ZGF0ZSksIHRpbWVfdHlwZSAodGltZSkge30KCgogIGRhdGVfdGltZV90eXBlIChpbnQgeSwgaW50
IG0sIGludCBkLCBpbnQgSCwgaW50IE0sIGludCBTID0gMCwgaW50IE1TID0gMCkKICAgIDogZGF0
ZV90eXBlICh5LCBtLCBkKSwgdGltZV90eXBlIChILCBNLCBTLCBNUykge30KCiAgc3RhdGljIGRh
dGVfdGltZV90eXBlIGNvbnN0IHVya25hbGw7CiAgc3RhdGljIGRhdGVfdGltZV90eXBlIGNvbnN0
IHNhbmt0X25pbW1lcmxlaW47CgoKICB2b2lkIHNldF9kYXRlIChpbnQgeSwgaW50IG0sIGludCBk
KSB7IGRhdGVfdHlwZTo6c2V0ICh5LCBtLCBkKTsgfQogIHZvaWQgc2V0X3RpbWUgKGludCBoLCBp
bnQgbSwgaW50IHMpIHsgdGltZV90eXBlOjpzZXQgKGgsIG0sIHMpOyB9CgogIHZvaWQgc2V0IChp
bnQgeSwgaW50IG0sIGludCBkLCBpbnQgSCwgaW50IE0sIGludCBTKSB7CiAgICBkYXRlX3R5cGU6
OnNldCAoeSwgbSwgZCk7IHRpbWVfdHlwZTo6c2V0IChILCBNLCBTKTsgfQoKICB2b2lkIHNldF9m
cm9tX3ZtcyAobGxvbmdfdCB2bXNfdGltZSkgewogICAgdm1zX3RvX2RhdGVfdGltZSAodm1zX3Rp
bWUsIF9kYXksIF90aWNrKTsgfQoKICB2b2lkIG5vdygpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgdGltZV90IHVuaXhfdGltZSgpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgogIHZvaWQgbG9jYWx0aW1lX3RvX3V0Yygp
IHsgOjpsb2NhbHRpbWVfdG9fdXRjICgqdGhpcywgKnRoaXMpOyB9CiAgdm9pZCB1dGNfdG9fbG9j
YWx0aW1lKCkgeyA6OnV0Y190b19sb2NhbHRpbWUgKCp0aGlzLCAqdGhpcyk7IH0KCiAgZGF0ZV90
aW1lX3R5cGUgdXRjX29mKCkgY29uc3QgewogICAgZGF0ZV90aW1lX3R5cGUgdG1wICgqdGhpcyk7
IHRtcC5sb2NhbHRpbWVfdG9fdXRjKCk7IHJldHVybiB0bXA7IH0KICBkYXRlX3RpbWVfdHlwZSBs
b2NhbHRpbWVfb2YoKSBjb25zdCB7CiAgICBkYXRlX3RpbWVfdHlwZSB0bXAgKCp0aGlzKTsgdG1w
LnV0Y190b19sb2NhbHRpbWUoKTsgcmV0dXJuIHRtcDsgfQoKCiAgYm9vbCBvcGVyYXRvcjwgKGRh
dGVfdGltZV90eXBlIGNvbnN0ICZ5KSBjb25zdCB7CiAgICByZXR1cm4gamR5KCkgPCB5LmpkeSgp
IHx8IGpkeSgpID09IHkuamR5KCkgJiYgdGljaygpIDwgeS50aWNrKCk7IH0KICBib29sIG9wZXJh
dG9yPiAoZGF0ZV90aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsgcmV0dXJuICh5IDwgKnRoaXMp
OyB9CiAgYm9vbCBvcGVyYXRvcj49IChkYXRlX3RpbWVfdHlwZSBjb25zdCAmeSkgY29uc3QgeyBy
ZXR1cm4gISgqdGhpcyA8IHkpOyB9CiAgYm9vbCBvcGVyYXRvcjw9IChkYXRlX3RpbWVfdHlwZSBj
b25zdCAmeSkgY29uc3QgeyByZXR1cm4gISh5IDwgKnRoaXMpOyB9CgogIGJvb2wgb3BlcmF0b3I9
PSAoZGF0ZV90aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsKICAgIHJldHVybiBqZHkoKSA9PSB5
LmpkeSgpICYmIHRpY2soKSA9PSB5LnRpY2soKTsgfQogIGJvb2wgb3BlcmF0b3IhPSAoZGF0ZV90
aW1lX3R5cGUgY29uc3QgJnkpIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0geSk7IH0KCgogIGRh
dGVfdGltZV90eXBlIGNvbnN0ICZvcGVyYXRvcis9ICh0aW1lX3R5cGUgdCkgewogICAgaW5jcmVt
ZW50ICgqdGhpcywgKnRoaXMsIHQpOwogICAgcmV0dXJuICp0aGlzOyB9CiAgZGF0ZV90aW1lX3R5
cGUgY29uc3QgJm9wZXJhdG9yKz0gKGRhdGVfdHlwZSBkKSB7CiAgICBzdGF0aWNfY2FzdDxkYXRl
X3R5cGUgJj4gKCp0aGlzKSArPSBkLmpkeSgpOwogICAgcmV0dXJuICp0aGlzOyB9CiAgZGF0ZV90
aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yKz0gKGRhdGVfdGltZV90eXBlIGNvbnN0ICZkKSB7CiAg
ICBvcGVyYXRvcis9IChzdGF0aWNfY2FzdDxkYXRlX3R5cGUgY29uc3QgJj4gKGQpKTsKICAgIG9w
ZXJhdG9yKz0gKHN0YXRpY19jYXN0PHRpbWVfdHlwZSBjb25zdCAmPiAoZCkpOwogICAgcmV0dXJu
ICp0aGlzOyB9CgogIGRhdGVfdGltZV90eXBlIGNvbnN0ICZvcGVyYXRvci09ICh0aW1lX3R5cGUg
dCkgewogICAgZGVjcmVtZW50ICgqdGhpcywgKnRoaXMsIHQpOwogICAgcmV0dXJuICp0aGlzOyB9
CiAgZGF0ZV90aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yLT0gKGRhdGVfdHlwZSBkKSB7CiAgICBz
dGF0aWNfY2FzdDxkYXRlX3R5cGUgJj4gKCp0aGlzKSAtPSBkLmpkeSgpOwogICAgcmV0dXJuICp0
aGlzOyB9CiAgZGF0ZV90aW1lX3R5cGUgY29uc3QgJm9wZXJhdG9yLT0gKGRhdGVfdGltZV90eXBl
IGNvbnN0ICZkKSB7CiAgICAqdGhpcyAtPSBzdGF0aWNfY2FzdDxkYXRlX3R5cGUgY29uc3QgJj4g
KGQpOwogICAgKnRoaXMgLT0gc3RhdGljX2Nhc3Q8dGltZV90eXBlIGNvbnN0ICY+IChkKTsKICAg
IHJldHVybiAqdGhpczsgfQp9OwoKCmRvdWJsZSBkZWx0YV95ZWFycyAoZGF0ZV90aW1lX3R5cGUg
Y29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh
cm1fXygzKSxfX3N0ZGNhbGxfXykpOwpkb3VibGUgZGVsdGFfZGF5cyAoZGF0ZV90aW1lX3R5cGUg
Y29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bh
cm1fXygzKSxfX3N0ZGNhbGxfXykpOwpkb3VibGUgZGVsdGFfc2Vjb25kcyAoZGF0ZV90aW1lX3R5
cGUgY29uc3QgJmEsIGRhdGVfdGltZV90eXBlIGNvbnN0ICZiKSBfX2F0dHJpYnV0ZV9fKChfX3Jl
Z3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKZGF0ZV90aW1lX3R5cGUgZG91YmxlMmRhdGUgKGRv
dWJsZSB4KTsKdm9pZCBkb3VibGUyZGF0ZSAoZG91YmxlIHgsIGludCAmZGF0ZSwgaW50ICZ0aW1l
KTsKZG91YmxlIGRhdGUyZG91YmxlIChpbnQgZGF0ZSwgaW50IHRpbWUpOwpkb3VibGUgZGF0ZTJk
b3VibGUgKGRhdGVfdGltZV90eXBlIGNvbnN0ICYpOwoKCgoKCnN0cnVjdCBmaWVsZF90eXBlOwpz
dHJ1Y3QgbWVtYmVyX3R5cGU7CnN0cnVjdCByZWNvcmRfdHlwZTsKc3RydWN0IGluZGV4X3R5cGU7
CgoKdm9pZCBpbml0aWFsaXplIChyZWNvcmRfdHlwZSBjb25zdCAmLCB2b2lkICopIF9fYXR0cmli
dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgaW5pdGlhbGl6ZSAoaW5k
ZXhfdHlwZSBjb25zdCAmLCBpbmRleF9iYXNlX3R5cGUgKmtleSkgX19hdHRyaWJ1dGVfXygoX19y
ZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCnR5cGVkZWYgdXRpbnlfdHlwZSBzb2wzX2J5dGVf
dHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19ieXRlOwoKdHlwZWRlZiB1aW50
X3R5cGUgc29sM19lcnJvcl90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Vy
cm9yOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTw4MD4gc29sM19tZXNzYWdlX3R5cGU7CmV4dGVybiBm
aWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfbWVzc2FnZTsKCnR5cGVkZWYgYm9vbF90eXBlIHNvbDNf
Ym9vbF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Jvb2w7Cgp0eXBlZGVm
IGludF90eXBlIHNvbDNfaW50X3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNf
aW50OwoKdHlwZWRlZiB1aW50X3R5cGUgc29sM191aW50X3R5cGU7CmV4dGVybiBmaWVsZF90eXBl
IGNvbnN0IGZkX3NvbDNfdWludDsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19zbWFsbF9jb3Vu
dF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3NtYWxsX2NvdW50OwoKdHlw
ZWRlZiB1aW50X3R5cGUgc29sM19jb3VudF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm
ZF9zb2wzX2NvdW50OwoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfYml0X21hc2tfOF90eXBlOwpl
eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2JpdF9tYXNrXzg7Cgp0eXBlZGVmIHVzaG9y
dF90eXBlIHNvbDNfYml0X21hc2tfMTZfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRf
c29sM19iaXRfbWFza18xNjsKCnR5cGVkZWYgdWludF90eXBlIHNvbDNfYml0X21hc2tfMzJfdHlw
ZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19iaXRfbWFza18zMjsKCnR5cGVkZWYg
ZGF0ZV90eXBlIHNvbDNfZGF0ZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz
X2RhdGU7Cgp0eXBlZGVmIHRpbWVfdHlwZSBzb2wzX3RpbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5
cGUgY29uc3QgZmRfc29sM190aW1lOwoKdHlwZWRlZiBzdHJ1Y3Qgc29sM19kYXRlX3RpbWVfdHlw
ZSBzb2wzX2RhdGVfdGltZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2Rh
dGVfdGltZTsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19uZXRfcGFydG5lcl9pZF90eXBlOwpl
eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX25ldF9wYXJ0bmVyX2lkOwoKdHlwZWRlZiB1
dGlueV90eXBlIHNvbDNfbm9kZV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9z
b2wzX25vZGVfaWQ7Cgp0eXBlZGVmIHVpbnRfdHlwZSBzb2wzX2F1dG9faWRfdHlwZTsKZXh0ZXJu
IGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19hdXRvX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBz
b2wzX3R5cGVfaWRfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM190eXBlX2lk
OwoKdHlwZWRlZiB1aW50X3R5cGUgc29sM19sb2NhbF9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlw
ZSBjb25zdCBmZF9zb2wzX2xvY2FsX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX29mZnNl
dF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX29mZnNldDsKCnR5cGVkZWYg
c3RyZml4X3R5cGU8MzA+IHNvbDNfbmFtZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm
ZF9zb2wzX25hbWU7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDYwPiBzb2wzX3RleHRfdHlwZTsKZXh0
ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM190ZXh0OwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwx
Mj4gc29sM19pc2luX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfaXNpbjsK
CnR5cGVkZWYgZG91YmxlX3R5cGUgc29sM19wcmljZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj
b25zdCBmZF9zb2wzX3ByaWNlOwoKdHlwZWRlZiBkb3VibGVfdHlwZSBzb2wzX3F1YW50aXR5X3R5
cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfcXVhbnRpdHk7Cgp0eXBlZGVmIGZp
eGVkNF90eXBlIHNvbDNfc2hvcnRfcHJpY2VfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3Qg
ZmRfc29sM19zaG9ydF9wcmljZTsKCnR5cGVkZWYgZml4ZWQzX3R5cGUgc29sM19zaG9ydF9xdWFu
dGl0eV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3Nob3J0X3F1YW50aXR5
OwoKdHlwZWRlZiBmaXhlZDRfdHlwZSBzb2wzX3NtYWxsX3F1YW50aXR5X3R5cGU7CmV4dGVybiBm
aWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfc21hbGxfcXVhbnRpdHk7Cgp0eXBlZGVmIGZpeGVkNV90
eXBlIHNvbDNfc21hbGxfcmF0aW9fdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29s
M19zbWFsbF9yYXRpbzsKCnR5cGVkZWYgY2hhcl90eXBlIHNvbDNfcXVhbGl0eV90eXBlOwpleHRl
cm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3F1YWxpdHk7Cgp0eXBlZGVmIHN0cmZpeF90eXBl
PDI+IHNvbDNfY291bnRyeV9hMl90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz
X2NvdW50cnlfYTI7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDM+IHNvbDNfY3VycmVuY3lfYTNfdHlw
ZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19jdXJyZW5jeV9hMzsKCnR5cGVkZWYg
c3RyZml4X3R5cGU8ND4gc29sM19leGNoYW5nZV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj
b25zdCBmZF9zb2wzX2V4Y2hhbmdlX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJk
X3NvbDNfdW5pcXVlOwoKc3RydWN0IHNvbDNfdW5pcXVlX3R5cGUKewogIGVudW0geyBfcmlkID0g
cmlkX3NvbDNfdW5pcXVlIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfdW5pcXVl
X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJk
X3NvbDNfdW5pcXVlOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMp
OyB9CgogIHNvbDNfYXV0b19pZF90eXBlIGlkOwogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7Cn07
CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191bmlxdWVfbWVtYmVyX2lkOwpleHRlcm4g
bWVtYmVyX3R5cGUgY29uc3Qgc29sM191bmlxdWVfbWVtYmVyX25vZGU7CgoKCgoKZXh0ZXJuIHJl
Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfdW5pcXVlX2lkOwoKc3RydWN0IHNvbDNfdW5pcXVlX2lk
X3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfdW5pcXVlX2lkIH07CiAgZW51bSB7CiAg
ICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXggfTsKICBzb2wzX3VuaXF1ZV9pZF90eXBlKCkge30K
ICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3VuaXF1
ZV9pZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz
b2wzX2xvY2FsX2lkX3R5cGUgaWQ7CiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKfTsKCmV4dGVy
biBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VuaXF1ZV9pZF9tZW1iZXJfaWQ7CmV4dGVybiBtZW1i
ZXJfdHlwZSBjb25zdCBzb2wzX3VuaXF1ZV9pZF9tZW1iZXJfbm9kZTsKCgoKCmV4dGVybiBpbmRl
eF90eXBlIGNvbnN0IGlkX3NvbDNfdW5pcXVlX2lkX2J5X2FsbDsKCnN0cnVjdCBzb2wzX3VuaXF1
ZV9pZF9ieV9hbGxfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9y
aWQgPSAoc29sM191bmlxdWVfaWRfdHlwZTo6aWlkX2J5X2FsbCArIDEgPDwgc2VudGVuY2VfaGVh
ZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdW5pcXVlX2lkX3R5cGU6Ol9yaWQpIH07CgogIHNv
bDNfdW5pcXVlX2lkX2J5X2FsbF90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm
ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfdW5pcXVlX2lkX2J5X2FsbDsgfQogIHZvaWQgaW5pdCgp
IHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25vZGVfaWRfdHlwZSBub2Rl
OwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZDsKfTsKCgp0eXBlZGVmIHN0cnVjdCBzb2wzX3VuaXF1
ZV9pZF90eXBlIHNvbDNfdW5pcXVlX2lkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZk
X3NvbDNfdW5pcXVlX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZ2xv
YmFsX2lkOwoKc3RydWN0IHNvbDNfZ2xvYmFsX2lkX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlk
X3NvbDNfZ2xvYmFsX2lkIH07CiAgZW51bSB7CiAgICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXgg
fTsKICBzb2wzX2dsb2JhbF9pZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg
JmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2dsb2JhbF9pZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5p
dGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWQ7CiAgc29s
M19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX3R5cGVfaWRfdHlwZSB0eXBlOwp9OwoKZXh0ZXJu
IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZ2xvYmFsX2lkX21lbWJlcl9pZDsKZXh0ZXJuIG1lbWJl
cl90eXBlIGNvbnN0IHNvbDNfZ2xvYmFsX2lkX21lbWJlcl9ub2RlOwpleHRlcm4gbWVtYmVyX3R5
cGUgY29uc3Qgc29sM19nbG9iYWxfaWRfbWVtYmVyX3R5cGU7CgoKCgpleHRlcm4gaW5kZXhfdHlw
ZSBjb25zdCBpZF9zb2wzX2dsb2JhbF9pZF9ieV9hbGw7CgpzdHJ1Y3Qgc29sM19nbG9iYWxfaWRf
YnlfYWxsX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0g
KHNvbDNfZ2xvYmFsX2lkX3R5cGU6OmlpZF9ieV9hbGwgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9k
ZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2dsb2JhbF9pZF90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2ds
b2JhbF9pZF9ieV9hbGxfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2Mo
KSB7IHJldHVybiBpZF9zb2wzX2dsb2JhbF9pZF9ieV9hbGw7IH0KICB2b2lkIGluaXQoKSB7IGlu
aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZTsKICBz
b2wzX25vZGVfaWRfdHlwZSBub2RlOwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZDsKfTsKCgp0eXBl
ZGVmIHN0cnVjdCBzb2wzX2dsb2JhbF9pZF90eXBlIHNvbDNfZ2xvYmFsX2lkX3R5cGU7CmV4dGVy
biBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZ2xvYmFsX2lkOwoKCgoKZXh0ZXJuIHJlY29yZF90
eXBlIGNvbnN0IHJkX3NvbDNfbG9hZF9pZDsKCnN0cnVjdCBzb2wzX2xvYWRfaWRfdHlwZQp7CiAg
ZW51bSB7IF9yaWQgPSByaWRfc29sM19sb2FkX2lkIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9
OwogIHNvbDNfbG9hZF9pZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRl
c2MoKSB7IHJldHVybiByZF9zb2wzX2xvYWRfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxp
emUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZTsKICBzb2wzX2Nv
dW50X3R5cGUgY291bnQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19sb2FkX2lk
X21lbWJlcl90eXBlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19sb2FkX2lkX21lbWJl
cl9jb3VudDsKCgp0eXBlZGVmIHVzaG9ydF90eXBlIHNvbDNfcmV2aXNpb25fbm9fdHlwZTsKZXh0
ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19yZXZpc2lvbl9ubzsKCgoKCmV4dGVybiByZWNv
cmRfdHlwZSBjb25zdCByZF9zb2wzX3JldmlzaW9uOwoKc3RydWN0IHNvbDNfcmV2aXNpb25fdHlw
ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19yZXZpc2lvbiB9OwogIGVudW0gewogICAgaWlk
X19tYXggfTsKICBzb2wzX3JldmlzaW9uX3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBj
b25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfcmV2aXNpb247IH0KICB2b2lkIGluaXQoKSB7
IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19yZXZpc2lvbl9ub190eXBlIHJl
dmlzaW9uOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmV2aXNpb25fbWVtYmVy
X3JldmlzaW9uOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX25hbWVkOwoK
c3RydWN0IHNvbDNfbmFtZWRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19uYW1lZCB9
OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX25hbWVkX3R5cGUoKSB7fQogIHN0YXRp
YyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfbmFtZWQ7IH0KICB2
b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19uYW1lX3R5
cGUgbmFtZTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX25hbWVkX21lbWJlcl9u
YW1lOwoKCnR5cGVkZWYgc3RydWN0IHNvbDNfdW5pcXVlX2lkX3R5cGUgc29sM191c2VyX2lkX3R5
cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfdXNlcl9pZDsKCnR5cGVkZWYgc3Ry
dWN0IHNvbDNfdW5pcXVlX2lkX3R5cGUgc29sM19ncm91cF9pZF90eXBlOwpleHRlcm4gZmllbGRf
dHlwZSBjb25zdCBmZF9zb2wzX2dyb3VwX2lkOwoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX2Fj
Y2Vzc19iaXRzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfYWNjZXNzX2Jp
dHM7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19hY2Nlc3NfY29udHJvbDsK
CnN0cnVjdCBzb2wzX2FjY2Vzc19jb250cm9sX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3Nv
bDNfYWNjZXNzX2NvbnRyb2wgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19hY2Nl
c3NfY29udHJvbF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7
IHJldHVybiByZF9zb2wzX2FjY2Vzc19jb250cm9sOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFs
aXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfdXNlcl9pZF90eXBlIG93bmVyOwogIHNvbDNf
Z3JvdXBfaWRfdHlwZSBncm91cDsKICBzb2wzX2FjY2Vzc19iaXRzX3R5cGUgYWNjZXNzOwp9OwoK
ZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYWNjZXNzX2NvbnRyb2xfbWVtYmVyX293bmVy
OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hY2Nlc3NfY29udHJvbF9tZW1iZXJfZ3Jv
dXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY2Vzc19jb250cm9sX21lbWJlcl9h
Y2Nlc3M7CgoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZGF0ZV90aW1lOwoK
c3RydWN0IHNvbDNfZGF0ZV90aW1lX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZGF0
ZV90aW1lIH07CiAgZW51bSB7CiAgICBpaWRfYnlfYWxsLAogICAgaWlkX19tYXggfTsKICBzb2wz
X2RhdGVfdGltZV90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7
IHJldHVybiByZF9zb2wzX2RhdGVfdGltZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo
ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2RhdGVfdHlwZSBkYXRlOwogIHNvbDNfdGltZV90eXBl
IHRpbWU7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19kYXRlX3RpbWVfbWVtYmVy
X2RhdGU7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2RhdGVfdGltZV9tZW1iZXJfdGlt
ZTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfZGF0ZV90aW1lX2J5X2FsbDsK
CnN0cnVjdCBzb2wzX2RhdGVfdGltZV9ieV9hbGxfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2Vf
dHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19kYXRlX3RpbWVfdHlwZTo6aWlkX2J5X2FsbCAr
IDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfZGF0ZV90aW1lX3R5
cGU6Ol9yaWQpIH07CgogIHNvbDNfZGF0ZV90aW1lX2J5X2FsbF90eXBlKCkge30KICBzdGF0aWMg
aW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfZGF0ZV90aW1lX2J5X2Fs
bDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz
X2RhdGVfdHlwZSBkYXRlOwogIHNvbDNfdGltZV90eXBlIHRpbWU7Cn07CgoKCgoKZXh0ZXJuIHJl
Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfY29udHJvbGxlZDsKCnN0cnVjdCBzb2wzX2NvbnRyb2xs
ZWRfdHlwZQogIDogcHVibGljIHNvbDNfdW5pcXVlX3R5cGUKICAsIHB1YmxpYyBzb2wzX2FjY2Vz
c19jb250cm9sX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfY29udHJvbGxlZCB9Owog
IGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX2NvbnRyb2xsZWRfdHlwZSgpIHt9CiAgc3Rh
dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19jb250cm9sbGVk
OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9Cgp9OwoKCgp0
eXBlZGVmIHN0cnVjdCBzb2wzX3VuaXF1ZV9pZF90eXBlIHNvbDNfYWNjb3VudF9pZF90eXBlOwpl
eHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2FjY291bnRfaWQ7CgoKCgpleHRlcm4gcmVj
b3JkX3R5cGUgY29uc3QgcmRfc29sM19vd25lZDsKCnN0cnVjdCBzb2wzX293bmVkX3R5cGUKewog
IGVudW0geyBfcmlkID0gcmlkX3NvbDNfb3duZWQgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07
CiAgc29sM19vd25lZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2Mo
KSB7IHJldHVybiByZF9zb2wzX293bmVkOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChk
ZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfYWNjb3VudF9pZF90eXBlIGFjY291bnQ7Cn07CgpleHRl
cm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19vd25lZF9tZW1iZXJfYWNjb3VudDsKCgoKCgpleHRl
cm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM190cmFuc2ZlcjsKCnN0cnVjdCBzb2wzX3RyYW5z
ZmVyX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfdHJhbnNmZXIgfTsKICBlbnVtIHsK
ICAgIGlpZF9fbWF4IH07CiAgc29sM190cmFuc2Zlcl90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk
X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3RyYW5zZmVyOyB9CiAgdm9pZCBp
bml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfYWNjb3VudF9pZF90
eXBlIGRlYml0OwogIHNvbDNfYWNjb3VudF9pZF90eXBlIGNyZWRpdDsKICBzb2wzX2dsb2JhbF9p
ZF90eXBlIGNvbnRyYWN0OwogIHNvbDNfcXVhbnRpdHlfdHlwZSBxdWFudGl0eTsKfTsKCmV4dGVy
biBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYW5zZmVyX21lbWJlcl9kZWJpdDsKZXh0ZXJuIG1l
bWJlcl90eXBlIGNvbnN0IHNvbDNfdHJhbnNmZXJfbWVtYmVyX2NyZWRpdDsKZXh0ZXJuIG1lbWJl
cl90eXBlIGNvbnN0IHNvbDNfdHJhbnNmZXJfbWVtYmVyX2NvbnRyYWN0OwpleHRlcm4gbWVtYmVy
X3R5cGUgY29uc3Qgc29sM190cmFuc2Zlcl9tZW1iZXJfcXVhbnRpdHk7CgoKCgoKZXh0ZXJuIHJl
Y29yZF90eXBlIGNvbnN0IHJkX3NvbDNfZXZlbnQ7CgpzdHJ1Y3Qgc29sM19ldmVudF90eXBlCiAg
OiBwdWJsaWMgc29sM191bmlxdWVfdHlwZQogICwgcHVibGljIHNvbDNfZGF0ZV90aW1lX3R5cGUK
ewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZXZlbnQgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4
IH07CiAgc29sM19ldmVudF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRl
c2MoKSB7IHJldHVybiByZF9zb2wzX2V2ZW50OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXpl
IChkZXNjKCksIHRoaXMpOyB9Cgp9OwoKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRf
c29sM19hdF9leGNoYW5nZTsKCnN0cnVjdCBzb2wzX2F0X2V4Y2hhbmdlX3R5cGUKewogIGVudW0g
eyBfcmlkID0gcmlkX3NvbDNfYXRfZXhjaGFuZ2UgfTsKICBlbnVtIHsKICAgIGlpZF9ieV9hbGws
CiAgICBpaWRfX21heCB9OwogIHNvbDNfYXRfZXhjaGFuZ2VfdHlwZSgpIHt9CiAgc3RhdGljIHJl
Y29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hdF9leGNoYW5nZTsgfQog
IHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2V4Y2hh
bmdlX2lkX3R5cGUgZXhjaGFuZ2U7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19h
dF9leGNoYW5nZV9tZW1iZXJfZXhjaGFuZ2U7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBp
ZF9zb2wzX2F0X2V4Y2hhbmdlX2J5X2FsbDsKCnN0cnVjdCBzb2wzX2F0X2V4Y2hhbmdlX2J5X2Fs
bF90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wz
X2F0X2V4Y2hhbmdlX3R5cGU6OmlpZF9ieV9hbGwgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZz
Ojp0eXBlX2JpdHMgfCBzb2wzX2F0X2V4Y2hhbmdlX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfYXRf
ZXhjaGFuZ2VfYnlfYWxsX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNj
KCkgeyByZXR1cm4gaWRfc29sM19hdF9leGNoYW5nZV9ieV9hbGw7IH0KICB2b2lkIGluaXQoKSB7
IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19leGNoYW5nZV9pZF90eXBlIGV4
Y2hhbmdlOwp9OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2V4Y2hhbmdl
X2V2ZW50OwoKc3RydWN0IHNvbDNfZXhjaGFuZ2VfZXZlbnRfdHlwZQogIDogcHVibGljIHNvbDNf
ZXZlbnRfdHlwZQogICwgcHVibGljIHNvbDNfb3duZWRfdHlwZQogICwgcHVibGljIHNvbDNfcmV2
aXNpb25fdHlwZQogICwgcHVibGljIHNvbDNfYXRfZXhjaGFuZ2VfdHlwZQp7CiAgZW51bSB7IF9y
aWQgPSByaWRfc29sM19leGNoYW5nZV9ldmVudCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsK
ICBzb2wzX2V4Y2hhbmdlX2V2ZW50X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25z
dCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfZXhjaGFuZ2VfZXZlbnQ7IH0KICB2b2lkIGluaXQo
KSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCn07CgoKCgoKCmV4dGVybiByZWNvcmRf
dHlwZSBjb25zdCByZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYzsKCnN0cnVjdCBzb2wzX2V4Y2hhbmdl
X3B1YmxpY190eXBlCiAgOiBwdWJsaWMgc29sM19leGNoYW5nZV9ldmVudF90eXBlCnsKICBlbnVt
IHsgX3JpZCA9IHJpZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYyB9OwogIGVudW0gewogICAgaWlkX19t
YXggfTsKICBzb2wzX2V4Y2hhbmdlX3B1YmxpY190eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5
cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2V4Y2hhbmdlX3B1YmxpYzsgfQogIHZv
aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX3F1YWxpdHlf
dHlwZSBxdWFsaXR5Owp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZXhjaGFuZ2Vf
cHVibGljX21lbWJlcl9xdWFsaXR5OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9z
b2wzX25vX3JlY29yZDsKCnN0cnVjdCBzb2wzX25vX3JlY29yZF90eXBlCnsKICBlbnVtIHsgX3Jp
ZCA9IHJpZF9zb2wzX25vX3JlY29yZCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz
X25vX3JlY29yZF90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7
IHJldHVybiByZF9zb2wzX25vX3JlY29yZDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo
ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2J5dGVfdHlwZSBkYXRhX2ZpZWxkWzJdOwp9OwoKZXh0
ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfbm9fcmVjb3JkX21lbWJlcl9kYXRhX2ZpZWxkOwoK
CgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2dlbmVyaWM7CgpzdHJ1Y3Qgc29s
M19nZW5lcmljX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfZ2VuZXJpYyB9OwogIGVu
dW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX2dlbmVyaWNfdHlwZSgpIHt9CiAgc3RhdGljIHJl
Y29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19nZW5lcmljOyB9CiAgdm9p
ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaW50X3R5cGUg
dmFsdWVbMTBdOwogIHNvbDNfdGV4dF90eXBlIHRleHQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUg
Y29uc3Qgc29sM19nZW5lcmljX21lbWJlcl92YWx1ZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0
IHNvbDNfZ2VuZXJpY19tZW1iZXJfdGV4dDsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3Qg
cmRfc29sM19zdGF0dXM7CgpzdHJ1Y3Qgc29sM19zdGF0dXNfdHlwZQp7CiAgZW51bSB7IF9yaWQg
PSByaWRfc29sM19zdGF0dXMgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19zdGF0
dXNfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g
cmRfc29sM19zdGF0dXM7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhp
cyk7IH0KCiAgc29sM19lcnJvcl90eXBlIGVycm9yOwogIHNvbDNfbWVzc2FnZV90eXBlIG1lc3Nh
Z2U7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zdGF0dXNfbWVtYmVyX2Vycm9y
OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zdGF0dXNfbWVtYmVyX21lc3NhZ2U7CgoK
dHlwZWRlZiB1dGlueV90eXBlIHNvbDNfcHVibGljX2tleV90eXBlWzEyOF07CmV4dGVybiBmaWVs
ZF90eXBlIGNvbnN0IGZkX3NvbDNfcHVibGljX2tleTsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBj
b25zdCByZF9zb2wzX2tleV9leGNoYW5nZTsKCnN0cnVjdCBzb2wzX2tleV9leGNoYW5nZV90eXBl
CnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX2tleV9leGNoYW5nZSB9OwogIGVudW0gewogICAg
aWlkX19tYXggfTsKICBzb2wzX2tleV9leGNoYW5nZV90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk
X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2tleV9leGNoYW5nZTsgfQogIHZv
aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX3B1YmxpY19r
ZXlfdHlwZSBwazsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2tleV9leGNoYW5n
ZV9tZW1iZXJfcGs7CgoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfaXBfYWRkcmVzc190eXBlWzRd
OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2lwX2FkZHJlc3M7CgoKCgpleHRlcm4g
cmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19pbnF1aXJlX2NvbW1fZGV0YWlsczsKCnN0cnVjdCBz
b2wzX2lucXVpcmVfY29tbV9kZXRhaWxzX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNf
aW5xdWlyZV9jb21tX2RldGFpbHMgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM19p
bnF1aXJlX2NvbW1fZGV0YWlsc190eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3Qg
JmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2lucXVpcmVfY29tbV9kZXRhaWxzOyB9CiAgdm9pZCBp
bml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaXBfYWRkcmVzc190
eXBlIGlwX2FkZHJlc3M7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19pbnF1aXJl
X2NvbW1fZGV0YWlsc19tZW1iZXJfaXBfYWRkcmVzczsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUg
Y29uc3QgcmRfc29sM19jb21tX2RldGFpbHM7CgpzdHJ1Y3Qgc29sM19jb21tX2RldGFpbHNfdHlw
ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19jb21tX2RldGFpbHMgfTsKICBlbnVtIHsKICAg
IGlpZF9fbWF4IH07CiAgc29sM19jb21tX2RldGFpbHNfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29y
ZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19jb21tX2RldGFpbHM7IH0KICB2
b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19pcF9hZGRy
ZXNzX3R5cGUgbXVsdGljYXN0X2FkZHJlc3M7CiAgc29sM19ib29sX3R5cGUgY29tcHJlc3M7CiAg
c29sM19ib29sX3R5cGUgZW5jcnlwdDsKICBzb2wzX2Jvb2xfdHlwZSBtdWx0aWNhc3Q7Cn07Cgpl
eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNfbWVtYmVyX211bHRpY2Fz
dF9hZGRyZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNfbWVt
YmVyX2NvbXByZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19jb21tX2RldGFpbHNf
bWVtYmVyX2VuY3J5cHQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2NvbW1fZGV0YWls
c19tZW1iZXJfbXVsdGljYXN0OwoKCnR5cGVkZWYgc3RyZml4X3R5cGU8NTA+IHNvbDNfaG9zdG5h
bWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19ob3N0bmFtZTsKCnR5cGVk
ZWYgc3RyZml4X3R5cGU8NTA+IHNvbDNfZGlzcGxheV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBj
b25zdCBmZF9zb2wzX2Rpc3BsYXk7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDUwPiBzb2wzX2FwcGxp
Y2F0aW9uX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19hcHBsaWNh
dGlvbl9uYW1lOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwxMj4gc29sM19zeXN0ZW1fdXNlcl90eXBl
OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3N5c3RlbV91c2VyOwoKCgoKZXh0ZXJu
IHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfYXBwbGljYXRpb247CgpzdHJ1Y3Qgc29sM19hcHBs
aWNhdGlvbl90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX2FwcGxpY2F0aW9uIH07CiAg
ZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfYXBwbGljYXRpb25fdHlwZSgpIHt9CiAgc3Rh
dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hcHBsaWNhdGlv
bjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz
X2hvc3RuYW1lX3R5cGUgaG9zdG5hbWU7CiAgc29sM19pcF9hZGRyZXNzX3R5cGUgaXBfYWRkcmVz
czsKICBzb2wzX2lwX2FkZHJlc3NfdHlwZSBtdWx0aWNhc3RfZ3JvdXA7CiAgc29sM19kaXNwbGF5
X3R5cGUgZGlzcGxheTsKICBzb2wzX2FwcGxpY2F0aW9uX25hbWVfdHlwZSBhcHBsaWNhdGlvbjsK
ICBzb2wzX3N5c3RlbV91c2VyX3R5cGUgc3lzdGVtX3VzZXI7CiAgc29sM19ib29sX3R5cGUgY29t
cHJlc3Npb247CiAgc29sM19pbnRfdHlwZSBwaW5nX2ludGVydmFsOwogIHNvbDNfdWludF90eXBl
IGFsaWdubWVudDsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcGxpY2F0aW9u
X21lbWJlcl9ob3N0bmFtZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRp
b25fbWVtYmVyX2lwX2FkZHJlc3M7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcGxp
Y2F0aW9uX21lbWJlcl9tdWx0aWNhc3RfZ3JvdXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz
b2wzX2FwcGxpY2F0aW9uX21lbWJlcl9kaXNwbGF5OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg
c29sM19hcHBsaWNhdGlvbl9tZW1iZXJfYXBwbGljYXRpb247CmV4dGVybiBtZW1iZXJfdHlwZSBj
b25zdCBzb2wzX2FwcGxpY2F0aW9uX21lbWJlcl9zeXN0ZW1fdXNlcjsKZXh0ZXJuIG1lbWJlcl90
eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRpb25fbWVtYmVyX2NvbXByZXNzaW9uOwpleHRlcm4gbWVt
YmVyX3R5cGUgY29uc3Qgc29sM19hcHBsaWNhdGlvbl9tZW1iZXJfcGluZ19pbnRlcnZhbDsKZXh0
ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYXBwbGljYXRpb25fbWVtYmVyX2FsaWdubWVudDsK
CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19hcHBfbG9naW47CgpzdHJ1Y3Qg
c29sM19hcHBfbG9naW5fdHlwZQogIDogcHVibGljIHNvbDNfYXBwbGljYXRpb25fdHlwZQp7CiAg
ZW51bSB7IF9yaWQgPSByaWRfc29sM19hcHBfbG9naW4gfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4
IH07CiAgc29sM19hcHBfbG9naW5fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0
ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hcHBfbG9naW47IH0KICB2b2lkIGluaXQoKSB7IGlu
aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19pbnRfdHlwZSBub2RlX2lkOwogIHNv
bDNfaW50X3R5cGUgdW5peF90aW1lOwogIHNvbDNfaW50X3R5cGUgZGF0ZV9vZmZzZXQ7Cn07Cgpl
eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hcHBfbG9naW5fbWVtYmVyX25vZGVfaWQ7CmV4
dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FwcF9sb2dpbl9tZW1iZXJfdW5peF90aW1lOwpl
eHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19hcHBfbG9naW5fbWVtYmVyX2RhdGVfb2Zmc2V0
OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3NldF9kYXRlOwoKc3RydWN0
IHNvbDNfc2V0X2RhdGVfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19zZXRfZGF0ZSB9
OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX3NldF9kYXRlX3R5cGUoKSB7fQogIHN0
YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfc2V0X2RhdGU7
IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19p
bnRfdHlwZSBkYXRlX29mZnNldDsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3Nl
dF9kYXRlX21lbWJlcl9kYXRlX29mZnNldDsKCgp0eXBlZGVmIHN0cmZpeF90eXBlPDEyPiBzb2wz
X2xvZ2luX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19sb2dpbl9u
YW1lOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfdXNlcl9sb2dpbl8xOwoK
c3RydWN0IHNvbDNfdXNlcl9sb2dpbl8xX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNf
dXNlcl9sb2dpbl8xIH07CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfdXNlcl9sb2dp
bl8xX3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJu
IHJkX3NvbDNfdXNlcl9sb2dpbl8xOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNj
KCksIHRoaXMpOyB9CgogIHNvbDNfbG9naW5fbmFtZV90eXBlIGxvZ2luX25hbWU7Cn07CgpleHRl
cm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191c2VyX2xvZ2luXzFfbWVtYmVyX2xvZ2luX25hbWU7
CgoKdHlwZWRlZiB1dGlueV90eXBlIHNvbDNfc2FsdF90eXBlWzRdOwpleHRlcm4gZmllbGRfdHlw
ZSBjb25zdCBmZF9zb2wzX3NhbHQ7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29s
M191c2VyX2xvZ2luXzI7CgpzdHJ1Y3Qgc29sM191c2VyX2xvZ2luXzJfdHlwZQp7CiAgZW51bSB7
IF9yaWQgPSByaWRfc29sM191c2VyX2xvZ2luXzIgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07
CiAgc29sM191c2VyX2xvZ2luXzJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0
ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM191c2VyX2xvZ2luXzI7IH0KICB2b2lkIGluaXQoKSB7
IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19zYWx0X3R5cGUgcGFzc3dkX3Nh
bHQ7CiAgc29sM19wdWJsaWNfa2V5X3R5cGUgcHVibGljX2tleTsKfTsKCmV4dGVybiBtZW1iZXJf
dHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fMl9tZW1iZXJfcGFzc3dkX3NhbHQ7CmV4dGVybiBt
ZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fMl9tZW1iZXJfcHVibGljX2tleTsKCgp0
eXBlZGVmIHV0aW55X3R5cGUgc29sM19pbml0dmVjX3R5cGVbOF07CmV4dGVybiBmaWVsZF90eXBl
IGNvbnN0IGZkX3NvbDNfaW5pdHZlYzsKCnR5cGVkZWYgdXRpbnlfdHlwZSBzb2wzX2hhc2hfdHlw
ZVsxNl07CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfaGFzaDsKCgoKCmV4dGVybiBy
ZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3VzZXJfbG9naW5fMzsKCnN0cnVjdCBzb2wzX3VzZXJf
bG9naW5fM190eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3VzZXJfbG9naW5fMyB9Owog
IGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wzX3VzZXJfbG9naW5fM190eXBlKCkge30KICBz
dGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX3VzZXJfbG9n
aW5fMzsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz
b2wzX3B1YmxpY19rZXlfdHlwZSBwdWJsaWNfa2V5OwogIHNvbDNfaGFzaF90eXBlIGtleV9oYXNo
OwogIHNvbDNfaW5pdHZlY190eXBlIGluaXR2ZWM7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29u
c3Qgc29sM191c2VyX2xvZ2luXzNfbWVtYmVyX3B1YmxpY19rZXk7CmV4dGVybiBtZW1iZXJfdHlw
ZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fM19tZW1iZXJfa2V5X2hhc2g7CmV4dGVybiBtZW1iZXJf
dHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fM19tZW1iZXJfaW5pdHZlYzsKCgoKCgpleHRlcm4g
cmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM191c2VyX2xvZ2luXzQ7CgpzdHJ1Y3Qgc29sM191c2Vy
X2xvZ2luXzRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM191c2VyX2xvZ2luXzQgfTsK
ICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29sM191c2VyX2xvZ2luXzRfdHlwZSgpIHt9CiAg
c3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM191c2VyX2xv
Z2luXzQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg
c29sM19oYXNoX3R5cGUga2V5X2hhc2g7CiAgc29sM19pbml0dmVjX3R5cGUgaW5pdHZlYzsKfTsK
CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fNF9tZW1iZXJfa2V5X2hh
c2g7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbG9naW5fNF9tZW1iZXJfaW5p
dHZlYzsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19wYXNzd29yZF9jaGFu
Z2U7CgpzdHJ1Y3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSBy
aWRfc29sM19wYXNzd29yZF9jaGFuZ2UgfTsKICBlbnVtIHsKICAgIGlpZF9fbWF4IH07CiAgc29s
M19wYXNzd29yZF9jaGFuZ2VfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZk
ZXNjKCkgeyByZXR1cm4gcmRfc29sM19wYXNzd29yZF9jaGFuZ2U7IH0KICB2b2lkIGluaXQoKSB7
IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19sb2dpbl9uYW1lX3R5cGUgdXNl
cjsKICBzb2wzX2hhc2hfdHlwZSBvbGRfcGFzc3dkX2hhc2g7CiAgc29sM19zYWx0X3R5cGUgcGFz
c3dkX3NhbHQ7CiAgc29sM19oYXNoX3R5cGUgcGFzc3dkX2hhc2g7Cn07CgpleHRlcm4gbWVtYmVy
X3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfbWVtYmVyX3VzZXI7CmV4dGVybiBtZW1i
ZXJfdHlwZSBjb25zdCBzb2wzX3Bhc3N3b3JkX2NoYW5nZV9tZW1iZXJfb2xkX3Bhc3N3ZF9oYXNo
OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2VfbWVtYmVyX3Bh
c3N3ZF9zYWx0OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYXNzd29yZF9jaGFuZ2Vf
bWVtYmVyX3Bhc3N3ZF9oYXNoOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wz
X2xvZ2luX2luZm87CgpzdHJ1Y3Qgc29sM19sb2dpbl9pbmZvX3R5cGUKewogIGVudW0geyBfcmlk
ID0gcmlkX3NvbDNfbG9naW5faW5mbyB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz
X2xvZ2luX2luZm9fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkg
eyByZXR1cm4gcmRfc29sM19sb2dpbl9pbmZvOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXpl
IChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbmV0X3BhcnRuZXJfaWRfdHlwZSBwYXJ0bmVyX2lk
OwogIHNvbDNfbG9naW5fbmFtZV90eXBlIGxvZ2luX25hbWU7CiAgc29sM19hcHBsaWNhdGlvbl9u
YW1lX3R5cGUgYXBwbGljYXRpb247Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19s
b2dpbl9pbmZvX21lbWJlcl9wYXJ0bmVyX2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s
M19sb2dpbl9pbmZvX21lbWJlcl9sb2dpbl9uYW1lOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg
c29sM19sb2dpbl9pbmZvX21lbWJlcl9hcHBsaWNhdGlvbjsKCgoKCgpleHRlcm4gcmVjb3JkX3R5
cGUgY29uc3QgcmRfc29sM19sb2dvdXRfaW5mbzsKCnN0cnVjdCBzb2wzX2xvZ291dF9pbmZvX3R5
cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfbG9nb3V0X2luZm8gfTsKICBlbnVtIHsKICAg
IGlpZF9fbWF4IH07CiAgc29sM19sb2dvdXRfaW5mb190eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk
X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2xvZ291dF9pbmZvOyB9CiAgdm9p
ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbmV0X3BhcnRu
ZXJfaWRfdHlwZSBwYXJ0bmVyX2lkOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNf
bG9nb3V0X2luZm9fbWVtYmVyX3BhcnRuZXJfaWQ7CgoKdHlwZWRlZiBjaGFyX3R5cGUgc29sM19s
aWNlbnNlX29wX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfbGljZW5zZV9v
cDsKCnR5cGVkZWYgdXNob3J0X3R5cGUgc29sM19mZWF0dXJlX3R5cGU7CmV4dGVybiBmaWVsZF90
eXBlIGNvbnN0IGZkX3NvbDNfZmVhdHVyZTsKCnR5cGVkZWYgdWludF90eXBlIHNvbDNfZmVhdHVy
ZXNfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19mZWF0dXJlczsKCgoKCmV4
dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2xpY2Vuc2U7CgpzdHJ1Y3Qgc29sM19saWNl
bnNlX3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfbGljZW5zZSB9OwogIGVudW0gewog
ICAgaWlkX19tYXggfTsKICBzb2wzX2xpY2Vuc2VfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90
eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19saWNlbnNlOyB9CiAgdm9pZCBpbml0
KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbGljZW5zZV9vcF90eXBl
IG9wOwogIHNvbDNfZmVhdHVyZXNfdHlwZSBmZWF0dXJlczsKfTsKCmV4dGVybiBtZW1iZXJfdHlw
ZSBjb25zdCBzb2wzX2xpY2Vuc2VfbWVtYmVyX29wOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qg
c29sM19saWNlbnNlX21lbWJlcl9mZWF0dXJlczsKCgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29u
c3QgcmRfc29sM19saWNlbnNlX2luZm87CgpzdHJ1Y3Qgc29sM19saWNlbnNlX2luZm9fdHlwZQp7
CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19saWNlbnNlX2luZm8gfTsKICBlbnVtIHsKICAgIGlp
ZF9fbWF4IH07CiAgc29sM19saWNlbnNlX2luZm9fdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90
eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19saWNlbnNlX2luZm87IH0KICB2b2lk
IGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19mZWF0dXJlX3R5
cGUgZmVhdHVyZTsKICBzb2wzX2NvdW50X3R5cGUgaW51c2U7CiAgc29sM19jb3VudF90eXBlIHRv
dGFsOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfbGljZW5zZV9pbmZvX21lbWJl
cl9mZWF0dXJlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19saWNlbnNlX2luZm9fbWVt
YmVyX2ludXNlOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19saWNlbnNlX2luZm9fbWVt
YmVyX3RvdGFsOwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2FkbWluX3Jl
cXVlc3Q7CgpzdHJ1Y3Qgc29sM19hZG1pbl9yZXF1ZXN0X3R5cGUKewogIGVudW0geyBfcmlkID0g
cmlkX3NvbDNfYWRtaW5fcmVxdWVzdCB9OwogIGVudW0gewogICAgaWlkX19tYXggfTsKICBzb2wz
X2FkbWluX3JlcXVlc3RfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNj
KCkgeyByZXR1cm4gcmRfc29sM19hZG1pbl9yZXF1ZXN0OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0
aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfaW50X3R5cGUgcGFydG5lcjsKICBzb2wz
X2J5dGVfdHlwZSByZWxvYWQ7CiAgc29sM19ib29sX3R5cGUgc2h1dGRvd247CiAgc29sM19pbnRf
dHlwZSBwcmlvcml0eTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FkbWluX3Jl
cXVlc3RfbWVtYmVyX3BhcnRuZXI7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FkbWlu
X3JlcXVlc3RfbWVtYmVyX3JlbG9hZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfYWRt
aW5fcmVxdWVzdF9tZW1iZXJfc2h1dGRvd247CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz
X2FkbWluX3JlcXVlc3RfbWVtYmVyX3ByaW9yaXR5OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBj
b25zdCByZF9zb2wzX2FkbWluX2NvbW1hbmQ7CgpzdHJ1Y3Qgc29sM19hZG1pbl9jb21tYW5kX3R5
cGUKICA6IHB1YmxpYyBzb2wzX2FwcGxpY2F0aW9uX3R5cGUKICAsIHB1YmxpYyBzb2wzX2FkbWlu
X3JlcXVlc3RfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM19hZG1pbl9jb21tYW5kIH07
CiAgZW51bSB7CiAgICBpaWRfX21heCB9OwogIHNvbDNfYWRtaW5fY29tbWFuZF90eXBlKCkge30K
ICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2FkbWlu
X2NvbW1hbmQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0K
CiAgc29sM19sb2dpbl9uYW1lX3R5cGUgbG9naW5fbmFtZTsKfTsKCmV4dGVybiBtZW1iZXJfdHlw
ZSBjb25zdCBzb2wzX2FkbWluX2NvbW1hbmRfbWVtYmVyX2xvZ2luX25hbWU7CgoKdHlwZWRlZiB1
c2hvcnRfdHlwZSBzb2wzX3N0cmVhbV9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBm
ZF9zb2wzX3N0cmVhbV9pZDsKCnR5cGVkZWYgaW50X3R5cGUgc29sM19zZXF1ZW5jZV9ub190eXBl
OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3NlcXVlbmNlX25vOwoKCgoKZXh0ZXJu
IHJlY29yZF90eXBlIGNvbnN0IHJkX3NvbDNfcmVyZXF1ZXN0OwoKc3RydWN0IHNvbDNfcmVyZXF1
ZXN0X3R5cGUKewogIGVudW0geyBfcmlkID0gcmlkX3NvbDNfcmVyZXF1ZXN0IH07CiAgZW51bSB7
CiAgICBpaWRfX21heCB9OwogIHNvbDNfcmVyZXF1ZXN0X3R5cGUoKSB7fQogIHN0YXRpYyByZWNv
cmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfcmVyZXF1ZXN0OyB9CiAgdm9p
ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfc3RyZWFtX2lk
X3R5cGUgc3RyZWFtX2lkOwogIHNvbDNfc2VxdWVuY2Vfbm9fdHlwZSBzZXFfbG87CiAgc29sM19z
ZXF1ZW5jZV9ub190eXBlIHNlcV9oaTsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz
X3JlcmVxdWVzdF9tZW1iZXJfc3RyZWFtX2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s
M19yZXJlcXVlc3RfbWVtYmVyX3NlcV9sbzsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNf
cmVyZXF1ZXN0X21lbWJlcl9zZXFfaGk7CgoKdHlwZWRlZiB1c2hvcnRfdHlwZSBzb2wzX3BvcnRf
bnVtYmVyX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfcG9ydF9udW1iZXI7
Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDI1Nj4gc29sM19jb21tYW5kbGluZV90eXBlOwpleHRlcm4g
ZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2NvbW1hbmRsaW5lOwoKCgoKZXh0ZXJuIHJlY29yZF90
eXBlIGNvbnN0IHJkX3NvbDNfc29sM2Rfc3RhcnQ7CgpzdHJ1Y3Qgc29sM19zb2wzZF9zdGFydF90
eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3NvbDNkX3N0YXJ0IH07CiAgZW51bSB7CiAg
ICBpaWRfX21heCB9OwogIHNvbDNfc29sM2Rfc3RhcnRfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29y
ZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19zb2wzZF9zdGFydDsgfQogIHZv
aWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2lwX2FkZHJl
c3NfdHlwZSBob3N0X2lkOwogIHNvbDNfcG9ydF9udW1iZXJfdHlwZSBwb3J0X2lkOwogIHNvbDNf
Y29tbWFuZGxpbmVfdHlwZSBleGVjdXRhYmxlOwogIHNvbDNfY29tbWFuZGxpbmVfdHlwZSBwcm9n
cmFtOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfc29sM2Rfc3RhcnRfbWVtYmVy
X2hvc3RfaWQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3NvbDNkX3N0YXJ0X21lbWJl
cl9wb3J0X2lkOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19zb2wzZF9zdGFydF9tZW1i
ZXJfZXhlY3V0YWJsZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfc29sM2Rfc3RhcnRf
bWVtYmVyX3Byb2dyYW07CgoKdHlwZWRlZiBzdHJmaXhfdHlwZTwyNz4gc29sM19wYXNzd29yZF90
eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX3Bhc3N3b3JkOwoKdHlwZWRlZiB1
aW50X3R5cGUgc29sM19wcml2aWxlZ2VzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZk
X3NvbDNfcHJpdmlsZWdlczsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3Vz
ZXI7CgpzdHJ1Y3Qgc29sM191c2VyX3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRyb2xsZWRfdHlw
ZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM191c2VyIH07CiAgZW51bSB7CiAgICBpaWRfYnlf
aWQsCiAgICBpaWRfYnlfbmFtZSwKICAgIGlpZF9fbWF4IH07CiAgc29sM191c2VyX3R5cGUoKSB7
fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJkX3NvbDNfdXNl
cjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wz
X2xvZ2luX25hbWVfdHlwZSBuYW1lOwogIHNvbDNfcGFzc3dvcmRfdHlwZSBwYXNzd29yZDsKICBz
b2wzX3ByaXZpbGVnZXNfdHlwZSBncmFudGVkOwogIHNvbDNfcHJpdmlsZWdlc190eXBlIGRlbmll
ZDsKICBzb2wzX2dyb3VwX2lkX3R5cGUgc2lnbl9ncm91cDsKICBzb2wzX2FjY2Vzc19iaXRzX3R5
cGUgc2lnbl9hY2Nlc3M7CiAgc29sM190ZXh0X3R5cGUgdGV4dFsyXTsKICBzb2wzX3VuaXF1ZV9p
ZF90eXBlIHJlc291cmNlX3NldDsKICBzb2wzX3VuaXF1ZV9pZF90eXBlIHBvcnRmb2xpbzsKfTsK
CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVyX25hbWU7CmV4dGVybiBt
ZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVyX3Bhc3N3b3JkOwpleHRlcm4gbWVtYmVy
X3R5cGUgY29uc3Qgc29sM191c2VyX21lbWJlcl9ncmFudGVkOwpleHRlcm4gbWVtYmVyX3R5cGUg
Y29uc3Qgc29sM191c2VyX21lbWJlcl9kZW5pZWQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz
b2wzX3VzZXJfbWVtYmVyX3NpZ25fZ3JvdXA7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wz
X3VzZXJfbWVtYmVyX3NpZ25fYWNjZXNzOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191
c2VyX21lbWJlcl90ZXh0OwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM191c2VyX21lbWJl
cl9yZXNvdXJjZV9zZXQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3VzZXJfbWVtYmVy
X3BvcnRmb2xpbzsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdXNlcl9ieV9p
ZDsKCnN0cnVjdCBzb2wzX3VzZXJfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlw
ZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM191c2VyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2Vu
dGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdXNlcl90eXBlOjpfcmlkKSB9OwoK
ICBzb2wzX3VzZXJfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRl
c2MoKSB7IHJldHVybiBpZF9zb2wzX3VzZXJfYnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRp
YWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wz
X2F1dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNf
dXNlcl9ieV9uYW1lOwoKc3RydWN0IHNvbDNfdXNlcl9ieV9uYW1lX3R5cGUKICA6IHB1YmxpYyBp
bmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfdXNlcl90eXBlOjppaWRfYnlf
bmFtZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdXNlcl90
eXBlOjpfcmlkKSB9OwoKICBzb2wzX3VzZXJfYnlfbmFtZV90eXBlKCkge30KICBzdGF0aWMgaW5k
ZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfdXNlcl9ieV9uYW1lOyB9CiAg
dm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbG9naW5f
bmFtZV90eXBlIG5hbWU7Cn07CgoKdHlwZWRlZiBzdHJmaXhfdHlwZTwyMD4gc29sM19ncm91cF9u
YW1lX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZ3JvdXBfbmFtZTsKCgoK
CmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2dyb3VwOwoKc3RydWN0IHNvbDNfZ3Jv
dXBfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxlZF90eXBlCnsKICBlbnVtIHsgX3JpZCA9
IHJpZF9zb2wzX2dyb3VwIH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAgICBpaWRfYnlfbmFt
ZSwKICAgIGlpZF9fbWF4IH07CiAgc29sM19ncm91cF90eXBlKCkge30KICBzdGF0aWMgcmVjb3Jk
X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiByZF9zb2wzX2dyb3VwOyB9CiAgdm9pZCBpbml0
KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfZ3JvdXBfbmFtZV90eXBl
IG5hbWU7CiAgc29sM19wcml2aWxlZ2VzX3R5cGUgZ3JhbnRlZDsKICBzb2wzX3ByaXZpbGVnZXNf
dHlwZSBkZW5pZWQ7CiAgc29sM190ZXh0X3R5cGUgdGV4dFsyXTsKfTsKCmV4dGVybiBtZW1iZXJf
dHlwZSBjb25zdCBzb2wzX2dyb3VwX21lbWJlcl9uYW1lOwpleHRlcm4gbWVtYmVyX3R5cGUgY29u
c3Qgc29sM19ncm91cF9tZW1iZXJfZ3JhbnRlZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNv
bDNfZ3JvdXBfbWVtYmVyX2RlbmllZDsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfZ3Jv
dXBfbWVtYmVyX3RleHQ7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2dyb3Vw
X2J5X2lkOwoKc3RydWN0IHNvbDNfZ3JvdXBfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jh
c2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19ncm91cF90eXBlOjppaWRfYnlfaWQgKyAx
IDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2dyb3VwX3R5cGU6Ol9y
aWQpIH07CgogIHNvbDNfZ3JvdXBfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUg
Y29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2dyb3VwX2J5X2lkOyB9CiAgdm9pZCBpbml0
KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5v
ZGU7CiAgc29sM19hdXRvX2lkX3R5cGUgaWQ7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25z
dCBpZF9zb2wzX2dyb3VwX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM19ncm91cF9ieV9uYW1lX3R5cGUK
ICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfZ3JvdXBf
dHlwZTo6aWlkX2J5X25hbWUgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMg
fCBzb2wzX2dyb3VwX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfZ3JvdXBfYnlfbmFtZV90eXBlKCkg
e30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfZ3Jv
dXBfYnlfbmFtZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsg
fQoKICBzb2wzX2dyb3VwX25hbWVfdHlwZSBuYW1lOwp9OwoKCnR5cGVkZWYgc3RyZml4X3R5cGU8
MjA+IHNvbDNfZmlyc3RfbmFtZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wz
X2ZpcnN0X25hbWU7Cgp0eXBlZGVmIHN0cmZpeF90eXBlPDIwPiBzb2wzX2xhc3RfbmFtZV90eXBl
OwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2xhc3RfbmFtZTsKCnR5cGVkZWYgc3Ry
Zml4X3R5cGU8MzA+IHNvbDNfb3JnYW5pemF0aW9uX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNv
bnN0IGZkX3NvbDNfb3JnYW5pemF0aW9uOwoKdHlwZWRlZiBzdHJmaXhfdHlwZTwzMD4gc29sM19h
ZGRyZXNzX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfYWRkcmVzczsKCgoK
CmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2N1c3RvbWVyOwoKc3RydWN0IHNvbDNf
Y3VzdG9tZXJfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxlZF90eXBlCnsKICBlbnVtIHsg
X3JpZCA9IHJpZF9zb2wzX2N1c3RvbWVyIH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAgICBp
aWRfYnlfbmFtZSwKICAgIGlpZF9ieV9vcmdhbml6YXRpb24sCiAgICBpaWRfX21heCB9OwogIHNv
bDNfY3VzdG9tZXJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkg
eyByZXR1cm4gcmRfc29sM19jdXN0b21lcjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAo
ZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX2ZpcnN0X25hbWVfdHlwZSBmaXJzdF9uYW1lOwogIHNv
bDNfbGFzdF9uYW1lX3R5cGUgbGFzdF9uYW1lOwogIHNvbDNfb3JnYW5pemF0aW9uX3R5cGUgb3Jn
YW5pemF0aW9uOwogIHNvbDNfYWRkcmVzc190eXBlIGFkZHJlc3NbM107Cn07CgpleHRlcm4gbWVt
YmVyX3R5cGUgY29uc3Qgc29sM19jdXN0b21lcl9tZW1iZXJfZmlyc3RfbmFtZTsKZXh0ZXJuIG1l
bWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX2xhc3RfbmFtZTsKZXh0ZXJuIG1l
bWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX29yZ2FuaXphdGlvbjsKZXh0ZXJu
IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfY3VzdG9tZXJfbWVtYmVyX2FkZHJlc3M7CgoKCgpleHRl
cm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2N1c3RvbWVyX2J5X2lkOwoKc3RydWN0IHNvbDNf
Y3VzdG9tZXJfYnlfaWRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7
IF9yaWQgPSAoc29sM19jdXN0b21lcl90eXBlOjppaWRfYnlfaWQgKyAxIDw8IHNlbnRlbmNlX2hl
YWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2N1c3RvbWVyX3R5cGU6Ol9yaWQpIH07CgogIHNv
bDNfY3VzdG9tZXJfYnlfaWRfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRl
c2MoKSB7IHJldHVybiBpZF9zb2wzX2N1c3RvbWVyX2J5X2lkOyB9CiAgdm9pZCBpbml0KCkgeyBp
bml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7CiAg
c29sM19hdXRvX2lkX3R5cGUgaWQ7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9z
b2wzX2N1c3RvbWVyX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM19jdXN0b21lcl9ieV9uYW1lX3R5cGUK
ICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfY3VzdG9t
ZXJfdHlwZTo6aWlkX2J5X25hbWUgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2Jp
dHMgfCBzb2wzX2N1c3RvbWVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfY3VzdG9tZXJfYnlfbmFt
ZV90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlk
X3NvbDNfY3VzdG9tZXJfYnlfbmFtZTsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVz
YygpLCB0aGlzKTsgfQoKICBzb2wzX2xhc3RfbmFtZV90eXBlIGxhc3RfbmFtZTsKICBzb2wzX2Zp
cnN0X25hbWVfdHlwZSBmaXJzdF9uYW1lOwogIHNvbDNfb3JnYW5pemF0aW9uX3R5cGUgb3JnYW5p
emF0aW9uOwp9OwoKCgoKZXh0ZXJuIGluZGV4X3R5cGUgY29uc3QgaWRfc29sM19jdXN0b21lcl9i
eV9vcmdhbml6YXRpb247CgpzdHJ1Y3Qgc29sM19jdXN0b21lcl9ieV9vcmdhbml6YXRpb25fdHlw
ZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19jdXN0
b21lcl90eXBlOjppaWRfYnlfb3JnYW5pemF0aW9uICsgMSA8PCBzZW50ZW5jZV9oZWFkZXJfZGVm
czo6dHlwZV9iaXRzIHwgc29sM19jdXN0b21lcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2N1c3Rv
bWVyX2J5X29yZ2FuaXphdGlvbl90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm
ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfY3VzdG9tZXJfYnlfb3JnYW5pemF0aW9uOyB9CiAgdm9p
ZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfb3JnYW5pemF0
aW9uX3R5cGUgb3JnYW5pemF0aW9uOwogIHNvbDNfbGFzdF9uYW1lX3R5cGUgbGFzdF9uYW1lOwog
IHNvbDNfZmlyc3RfbmFtZV90eXBlIGZpcnN0X25hbWU7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc29s
M191bmlxdWVfaWRfdHlwZSBzb2wzX2N1c3RvbWVyX2lkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBl
IGNvbnN0IGZkX3NvbDNfY3VzdG9tZXJfaWQ7Cgp0eXBlZGVmIGNoYXJfdHlwZSBzb2wzX2FjY291
bnRfdHlwZV90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25zdCBmZF9zb2wzX2FjY291bnRfdHlw
ZTsKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX2FjY291bnQ7CgpzdHJ1Y3Qg
c29sM19hY2NvdW50X3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRyb2xsZWRfdHlwZQp7CiAgZW51
bSB7IF9yaWQgPSByaWRfc29sM19hY2NvdW50IH07CiAgZW51bSB7CiAgICBpaWRfYnlfaWQsCiAg
ICBpaWRfYnlfbmFtZSwKICAgIGlpZF9ieV9leGNoYW5nZSwKICAgIGlpZF9ieV9jdXN0b21lciwK
ICAgIGlpZF9ieV90eXBlLAogICAgaWlkX19tYXggfTsKICBzb2wzX2FjY291bnRfdHlwZSgpIHt9
CiAgc3RhdGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19hY2Nv
dW50OyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNv
bDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsKICBzb2wzX2JpdF9tYXNrXzhfdHlwZSBmbGFnczsK
ICBzb2wzX2N1c3RvbWVyX2lkX3R5cGUgY3VzdG9tZXI7CiAgc29sM19uYW1lX3R5cGUgbmFtZTsK
ICBzb2wzX2V4Y2hhbmdlX2lkX3R5cGUgZXhjaGFuZ2U7CiAgc29sM190ZXh0X3R5cGUgdGV4dDsK
fTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX3R5cGU7CmV4
dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX2ZsYWdzOwpleHRlcm4g
bWVtYmVyX3R5cGUgY29uc3Qgc29sM19hY2NvdW50X21lbWJlcl9jdXN0b21lcjsKZXh0ZXJuIG1l
bWJlcl90eXBlIGNvbnN0IHNvbDNfYWNjb3VudF9tZW1iZXJfbmFtZTsKZXh0ZXJuIG1lbWJlcl90
eXBlIGNvbnN0IHNvbDNfYWNjb3VudF9tZW1iZXJfZXhjaGFuZ2U7CmV4dGVybiBtZW1iZXJfdHlw
ZSBjb25zdCBzb2wzX2FjY291bnRfbWVtYmVyX3RleHQ7CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBj
b25zdCBpZF9zb2wzX2FjY291bnRfYnlfaWQ7CgpzdHJ1Y3Qgc29sM19hY2NvdW50X2J5X2lkX3R5
cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfYWNj
b3VudF90eXBlOjppaWRfYnlfaWQgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2Jp
dHMgfCBzb2wzX2FjY291bnRfdHlwZTo6X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5X2lkX3R5
cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gaWRfc29s
M19hY2NvdW50X2J5X2lkOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRo
aXMpOyB9CgogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGU7CiAgc29sM19hdXRvX2lkX3R5cGUgaWQ7
Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX2FjY291bnRfYnlfbmFtZTsK
CnN0cnVjdCBzb2wzX2FjY291bnRfYnlfbmFtZV90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90
eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX2FjY291bnRfdHlwZTo6aWlkX2J5X25hbWUgKyAx
IDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX2FjY291bnRfdHlwZTo6
X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5X25hbWVfdHlwZSgpIHt9CiAgc3RhdGljIGluZGV4
X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2FjY291bnRfYnlfbmFtZTsgfQog
IHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25hbWVf
dHlwZSBuYW1lOwogIHNvbDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsKICBzb2wzX2V4Y2hhbmdl
X2lkX3R5cGUgZXhjaGFuZ2U7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wz
X2FjY291bnRfYnlfZXhjaGFuZ2U7CgpzdHJ1Y3Qgc29sM19hY2NvdW50X2J5X2V4Y2hhbmdlX3R5
cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfYWNj
b3VudF90eXBlOjppaWRfYnlfZXhjaGFuZ2UgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0
eXBlX2JpdHMgfCBzb2wzX2FjY291bnRfdHlwZTo6X3JpZCkgfTsKCiAgc29sM19hY2NvdW50X2J5
X2V4Y2hhbmdlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyBy
ZXR1cm4gaWRfc29sM19hY2NvdW50X2J5X2V4Y2hhbmdlOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0
aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5n
ZTsKICBzb2wzX25hbWVfdHlwZSBuYW1lOwogIHNvbDNfYWNjb3VudF90eXBlX3R5cGUgdHlwZTsK
fTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfYWNjb3VudF9ieV9jdXN0b21l
cjsKCnN0cnVjdCBzb2wzX2FjY291bnRfYnlfY3VzdG9tZXJfdHlwZQogIDogcHVibGljIGluZGV4
X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19hY2NvdW50X3R5cGU6OmlpZF9ieV9j
dXN0b21lciArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfYWNj
b3VudF90eXBlOjpfcmlkKSB9OwoKICBzb2wzX2FjY291bnRfYnlfY3VzdG9tZXJfdHlwZSgpIHt9
CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX2FjY291
bnRfYnlfY3VzdG9tZXI7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhp
cyk7IH0KCiAgc29sM19jdXN0b21lcl9pZF90eXBlIGN1c3RvbWVyOwp9OwoKCgoKZXh0ZXJuIGlu
ZGV4X3R5cGUgY29uc3QgaWRfc29sM19hY2NvdW50X2J5X3R5cGU7CgpzdHJ1Y3Qgc29sM19hY2Nv
dW50X2J5X3R5cGVfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9y
aWQgPSAoc29sM19hY2NvdW50X3R5cGU6OmlpZF9ieV90eXBlICsgMSA8PCBzZW50ZW5jZV9oZWFk
ZXJfZGVmczo6dHlwZV9iaXRzIHwgc29sM19hY2NvdW50X3R5cGU6Ol9yaWQpIH07CgogIHNvbDNf
YWNjb3VudF9ieV90eXBlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNj
KCkgeyByZXR1cm4gaWRfc29sM19hY2NvdW50X2J5X3R5cGU7IH0KICB2b2lkIGluaXQoKSB7IGlu
aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19hY2NvdW50X3R5cGVfdHlwZSB0eXBl
OwogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX25hbWVfdHlwZSBuYW1l
Owp9OwoKCgoKCmV4dGVybiByZWNvcmRfdHlwZSBjb25zdCByZF9zb2wzX3JlZ2lzdGVyX3hjaGdp
ZjsKCnN0cnVjdCBzb2wzX3JlZ2lzdGVyX3hjaGdpZl90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJp
ZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZiB9OwogIGVudW0gewogICAgaWlkX2J5X2V4Y2hhbmdlLAog
ICAgaWlkX2J5X3BhcnRuZXIsCiAgICBpaWRfX21heCB9OwogIHNvbDNfcmVnaXN0ZXJfeGNoZ2lm
X3R5cGUoKSB7fQogIHN0YXRpYyByZWNvcmRfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIHJk
X3NvbDNfcmVnaXN0ZXJfeGNoZ2lmOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNj
KCksIHRoaXMpOyB9CgogIHNvbDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX2Jp
dF9tYXNrXzMyX3R5cGUgZnVuY3Rpb25zOwogIHNvbDNfbmV0X3BhcnRuZXJfaWRfdHlwZSBwYXJ0
bmVyX2lkOwp9OwoKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmVnaXN0ZXJfeGNoZ2lm
X21lbWJlcl9leGNoYW5nZTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcmVnaXN0ZXJf
eGNoZ2lmX21lbWJlcl9mdW5jdGlvbnM7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3Jl
Z2lzdGVyX3hjaGdpZl9tZW1iZXJfcGFydG5lcl9pZDsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNv
bnN0IGlkX3NvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X2V4Y2hhbmdlOwoKc3RydWN0IHNvbDNfcmVn
aXN0ZXJfeGNoZ2lmX2J5X2V4Y2hhbmdlX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUK
ewogIGVudW0geyBfcmlkID0gKHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX3R5cGU6OmlpZF9ieV9leGNo
YW5nZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfcmVnaXN0
ZXJfeGNoZ2lmX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X2V4Y2hh
bmdlX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g
aWRfc29sM19yZWdpc3Rlcl94Y2hnaWZfYnlfZXhjaGFuZ2U7IH0KICB2b2lkIGluaXQoKSB7IGlu
aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19leGNoYW5nZV9pZF90eXBlIGV4Y2hh
bmdlOwogIHNvbDNfYml0X21hc2tfMzJfdHlwZSBmdW5jdGlvbnM7Cn07CgoKCgpleHRlcm4gaW5k
ZXhfdHlwZSBjb25zdCBpZF9zb2wzX3JlZ2lzdGVyX3hjaGdpZl9ieV9wYXJ0bmVyOwoKc3RydWN0
IHNvbDNfcmVnaXN0ZXJfeGNoZ2lmX2J5X3BhcnRuZXJfdHlwZQogIDogcHVibGljIGluZGV4X2Jh
c2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19yZWdpc3Rlcl94Y2hnaWZfdHlwZTo6aWlk
X2J5X3BhcnRuZXIgKyAxIDw8IHNlbnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wz
X3JlZ2lzdGVyX3hjaGdpZl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3JlZ2lzdGVyX3hjaGdpZl9i
eV9wYXJ0bmVyX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyBy
ZXR1cm4gaWRfc29sM19yZWdpc3Rlcl94Y2hnaWZfYnlfcGFydG5lcjsgfQogIHZvaWQgaW5pdCgp
IHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBzb2wzX25ldF9wYXJ0bmVyX2lkX3R5
cGUgcGFydG5lcl9pZDsKfTsKCgp0eXBlZGVmIHN0cmZpeF90eXBlPDEyPiBzb2wzX29yZGVyX3Jv
dXRlcl9uYW1lX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfb3JkZXJfcm91
dGVyX25hbWU7CgoKCgpleHRlcm4gcmVjb3JkX3R5cGUgY29uc3QgcmRfc29sM19yZWdpc3Rlcl9v
ZHJwZHI7CgpzdHJ1Y3Qgc29sM19yZWdpc3Rlcl9vZHJwZHJfdHlwZQp7CiAgZW51bSB7IF9yaWQg
PSByaWRfc29sM19yZWdpc3Rlcl9vZHJwZHIgfTsKICBlbnVtIHsKICAgIGlpZF9ieV9wcm92aWRl
ciwKICAgIGlpZF9fbWF4IH07CiAgc29sM19yZWdpc3Rlcl9vZHJwZHJfdHlwZSgpIHt9CiAgc3Rh
dGljIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19yZWdpc3Rlcl9v
ZHJwZHI7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg
c29sM19vcmRlcl9yb3V0ZXJfbmFtZV90eXBlIHByb3ZpZGVyX25hbWU7CiAgc29sM19uZXRfcGFy
dG5lcl9pZF90eXBlIHBhcnRuZXJfaWQ7Cn07CgpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29s
M19yZWdpc3Rlcl9vZHJwZHJfbWVtYmVyX3Byb3ZpZGVyX25hbWU7CmV4dGVybiBtZW1iZXJfdHlw
ZSBjb25zdCBzb2wzX3JlZ2lzdGVyX29kcnBkcl9tZW1iZXJfcGFydG5lcl9pZDsKCgoKCmV4dGVy
biBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfcmVnaXN0ZXJfb2RycGRyX2J5X3Byb3ZpZGVyOwoK
c3RydWN0IHNvbDNfcmVnaXN0ZXJfb2RycGRyX2J5X3Byb3ZpZGVyX3R5cGUKICA6IHB1YmxpYyBp
bmRleF9iYXNlX3R5cGUKewogIGVudW0geyBfcmlkID0gKHNvbDNfcmVnaXN0ZXJfb2RycGRyX3R5
cGU6OmlpZF9ieV9wcm92aWRlciArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0
cyB8IHNvbDNfcmVnaXN0ZXJfb2RycGRyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcmVnaXN0ZXJf
b2RycGRyX2J5X3Byb3ZpZGVyX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZk
ZXNjKCkgeyByZXR1cm4gaWRfc29sM19yZWdpc3Rlcl9vZHJwZHJfYnlfcHJvdmlkZXI7IH0KICB2
b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19vcmRlcl9y
b3V0ZXJfbmFtZV90eXBlIHByb3ZpZGVyX25hbWU7Cn07CgoKdHlwZWRlZiBzdHJ1Y3Qgc29sM191
bmlxdWVfaWRfdHlwZSBzb2wzX3RyYWRlcl9pZF90eXBlOwpleHRlcm4gZmllbGRfdHlwZSBjb25z
dCBmZF9zb2wzX3RyYWRlcl9pZDsKCnR5cGVkZWYgc3RyZml4X3R5cGU8MzI+IHNvbDNfZXhjaGFu
Z2VfdHJhZGVyX25hbWVfdHlwZTsKZXh0ZXJuIGZpZWxkX3R5cGUgY29uc3QgZmRfc29sM19leGNo
YW5nZV90cmFkZXJfbmFtZTsKCnR5cGVkZWYgc3RyZml4X3R5cGU8MzI+IHNvbDNfZXhjaGFuZ2Vf
dHJhZGVyX3Bhc3N3b3JkX3R5cGU7CmV4dGVybiBmaWVsZF90eXBlIGNvbnN0IGZkX3NvbDNfZXhj
aGFuZ2VfdHJhZGVyX3Bhc3N3b3JkOwoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3Nv
bDNfdHJhZGVyOwoKc3RydWN0IHNvbDNfdHJhZGVyX3R5cGUKICA6IHB1YmxpYyBzb2wzX2NvbnRy
b2xsZWRfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSByaWRfc29sM190cmFkZXIgfTsKICBlbnVtIHsK
ICAgIGlpZF9ieV9pZCwKICAgIGlpZF9ieV9uYW1lLAogICAgaWlkX19tYXggfTsKICBzb2wzX3Ry
YWRlcl90eXBlKCkge30KICBzdGF0aWMgcmVjb3JkX3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVy
biByZF9zb2wzX3RyYWRlcjsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0
aGlzKTsgfQoKICBzb2wzX2V4Y2hhbmdlX2lkX3R5cGUgZXhjaGFuZ2U7CiAgc29sM19leGNoYW5n
ZV90cmFkZXJfbmFtZV90eXBlIHRyYWRlcl9uYW1lOwogIHNvbDNfZXhjaGFuZ2VfdHJhZGVyX3Bh
c3N3b3JkX3R5cGUgZXhjaGFuZ2VfcGFzc3dvcmQ7CiAgc29sM190ZXh0X3R5cGUgdGV4dDsKfTsK
CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfZXhjaGFuZ2U7CmV4
dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfdHJhZGVyX25hbWU7CmV4
dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfZXhjaGFuZ2VfcGFzc3dv
cmQ7CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3RyYWRlcl9tZW1iZXJfdGV4dDsKCgoK
CmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdHJhZGVyX2J5X2lkOwoKc3RydWN0IHNv
bDNfdHJhZGVyX2J5X2lkX3R5cGUKICA6IHB1YmxpYyBpbmRleF9iYXNlX3R5cGUKewogIGVudW0g
eyBfcmlkID0gKHNvbDNfdHJhZGVyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2VudGVuY2VfaGVh
ZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdHJhZGVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNf
dHJhZGVyX2J5X2lkX3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkg
eyByZXR1cm4gaWRfc29sM190cmFkZXJfYnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxp
emUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX2F1
dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfdHJh
ZGVyX2J5X25hbWU7CgpzdHJ1Y3Qgc29sM190cmFkZXJfYnlfbmFtZV90eXBlCiAgOiBwdWJsaWMg
aW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX3RyYWRlcl90eXBlOjppaWRf
YnlfbmFtZSArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0cyB8IHNvbDNfdHJh
ZGVyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfdHJhZGVyX2J5X25hbWVfdHlwZSgpIHt9CiAgc3Rh
dGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX3RyYWRlcl9ieV9u
YW1lOyB9CiAgdm9pZCBpbml0KCkgeyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNv
bDNfZXhjaGFuZ2VfaWRfdHlwZSBleGNoYW5nZTsKICBzb2wzX2V4Y2hhbmdlX3RyYWRlcl9uYW1l
X3R5cGUgdHJhZGVyX25hbWU7Cn07CgoKCgoKZXh0ZXJuIHJlY29yZF90eXBlIGNvbnN0IHJkX3Nv
bDNfcGFpcjsKCnN0cnVjdCBzb2wzX3BhaXJfdHlwZQogIDogcHVibGljIHNvbDNfY29udHJvbGxl
ZF90eXBlCnsKICBlbnVtIHsgX3JpZCA9IHJpZF9zb2wzX3BhaXIgfTsKICBlbnVtIHsKICAgIGlp
ZF9ieV9pZCwKICAgIGlpZF9ieV8xc3QsCiAgICBpaWRfYnlfMm5kLAogICAgaWlkX2J5X3R5cGVz
LAogICAgaWlkX19tYXggfTsKICBzb2wzX3BhaXJfdHlwZSgpIHt9CiAgc3RhdGljIHJlY29yZF90
eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4gcmRfc29sM19wYWlyOyB9CiAgdm9pZCBpbml0KCkg
eyBpbml0aWFsaXplIChkZXNjKCksIHRoaXMpOyB9CgogIHNvbDNfdHlwZV9pZF90eXBlIHR5cGVf
MTsKICBzb2wzX25vZGVfaWRfdHlwZSBub2RlXzE7CiAgc29sM19sb2NhbF9pZF90eXBlIGlkXzE7
CiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwogIHNvbDNfbm9kZV9pZF90eXBlIG5vZGVfMjsK
ICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMjsKfTsKCmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBz
b2wzX3BhaXJfbWVtYmVyX3R5cGVfMTsKZXh0ZXJuIG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcGFp
cl9tZW1iZXJfbm9kZV8xOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYWlyX21lbWJl
cl9pZF8xOwpleHRlcm4gbWVtYmVyX3R5cGUgY29uc3Qgc29sM19wYWlyX21lbWJlcl90eXBlXzI7
CmV4dGVybiBtZW1iZXJfdHlwZSBjb25zdCBzb2wzX3BhaXJfbWVtYmVyX25vZGVfMjsKZXh0ZXJu
IG1lbWJlcl90eXBlIGNvbnN0IHNvbDNfcGFpcl9tZW1iZXJfaWRfMjsKCgoKCmV4dGVybiBpbmRl
eF90eXBlIGNvbnN0IGlkX3NvbDNfcGFpcl9ieV9pZDsKCnN0cnVjdCBzb2wzX3BhaXJfYnlfaWRf
dHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlwZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19w
YWlyX3R5cGU6OmlpZF9ieV9pZCArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2RlZnM6OnR5cGVfYml0
cyB8IHNvbDNfcGFpcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3BhaXJfYnlfaWRfdHlwZSgpIHt9
CiAgc3RhdGljIGluZGV4X3R5cGUgY29uc3QgJmRlc2MoKSB7IHJldHVybiBpZF9zb2wzX3BhaXJf
YnlfaWQ7IH0KICB2b2lkIGluaXQoKSB7IGluaXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAg
c29sM19ub2RlX2lkX3R5cGUgbm9kZTsKICBzb2wzX2F1dG9faWRfdHlwZSBpZDsKfTsKCgoKCmV4
dGVybiBpbmRleF90eXBlIGNvbnN0IGlkX3NvbDNfcGFpcl9ieV8xc3Q7CgpzdHJ1Y3Qgc29sM19w
YWlyX2J5XzFzdF90eXBlCiAgOiBwdWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3Jp
ZCA9IChzb2wzX3BhaXJfdHlwZTo6aWlkX2J5XzFzdCArIDEgPDwgc2VudGVuY2VfaGVhZGVyX2Rl
ZnM6OnR5cGVfYml0cyB8IHNvbDNfcGFpcl90eXBlOjpfcmlkKSB9OwoKICBzb2wzX3BhaXJfYnlf
MXN0X3R5cGUoKSB7fQogIHN0YXRpYyBpbmRleF90eXBlIGNvbnN0ICZkZXNjKCkgeyByZXR1cm4g
aWRfc29sM19wYWlyX2J5XzFzdDsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygp
LCB0aGlzKTsgfQoKICBzb2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM19ub2RlX2lkX3R5
cGUgbm9kZV8xOwogIHNvbDNfbG9jYWxfaWRfdHlwZSBpZF8xOwogIHNvbDNfdHlwZV9pZF90eXBl
IHR5cGVfMjsKICBzb2wzX25vZGVfaWRfdHlwZSBub2RlXzI7CiAgc29sM19sb2NhbF9pZF90eXBl
IGlkXzI7Cn07CgoKCgpleHRlcm4gaW5kZXhfdHlwZSBjb25zdCBpZF9zb2wzX3BhaXJfYnlfMm5k
OwoKc3RydWN0IHNvbDNfcGFpcl9ieV8ybmRfdHlwZQogIDogcHVibGljIGluZGV4X2Jhc2VfdHlw
ZQp7CiAgZW51bSB7IF9yaWQgPSAoc29sM19wYWlyX3R5cGU6OmlpZF9ieV8ybmQgKyAxIDw8IHNl
bnRlbmNlX2hlYWRlcl9kZWZzOjp0eXBlX2JpdHMgfCBzb2wzX3BhaXJfdHlwZTo6X3JpZCkgfTsK
CiAgc29sM19wYWlyX2J5XzJuZF90eXBlKCkge30KICBzdGF0aWMgaW5kZXhfdHlwZSBjb25zdCAm
ZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfcGFpcl9ieV8ybmQ7IH0KICB2b2lkIGluaXQoKSB7IGlu
aXRpYWxpemUgKGRlc2MoKSwgdGhpcyk7IH0KCiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwog
IHNvbDNfbm9kZV9pZF90eXBlIG5vZGVfMjsKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMjsKICBz
b2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM19ub2RlX2lkX3R5cGUgbm9kZV8xOwogIHNv
bDNfbG9jYWxfaWRfdHlwZSBpZF8xOwp9OwoKCgoKZXh0ZXJuIGluZGV4X3R5cGUgY29uc3QgaWRf
c29sM19wYWlyX2J5X3R5cGVzOwoKc3RydWN0IHNvbDNfcGFpcl9ieV90eXBlc190eXBlCiAgOiBw
dWJsaWMgaW5kZXhfYmFzZV90eXBlCnsKICBlbnVtIHsgX3JpZCA9IChzb2wzX3BhaXJfdHlwZTo6
aWlkX2J5X3R5cGVzICsgMSA8PCBzZW50ZW5jZV9oZWFkZXJfZGVmczo6dHlwZV9iaXRzIHwgc29s
M19wYWlyX3R5cGU6Ol9yaWQpIH07CgogIHNvbDNfcGFpcl9ieV90eXBlc190eXBlKCkge30KICBz
dGF0aWMgaW5kZXhfdHlwZSBjb25zdCAmZGVzYygpIHsgcmV0dXJuIGlkX3NvbDNfcGFpcl9ieV90
eXBlczsgfQogIHZvaWQgaW5pdCgpIHsgaW5pdGlhbGl6ZSAoZGVzYygpLCB0aGlzKTsgfQoKICBz
b2wzX3R5cGVfaWRfdHlwZSB0eXBlXzE7CiAgc29sM190eXBlX2lkX3R5cGUgdHlwZV8yOwogIHNv
bDNfbm9kZV9pZF90eXBlIG5vZGVfMTsKICBzb2wzX2xvY2FsX2lkX3R5cGUgaWRfMTsKICBzb2wz
X25vZGVfaWRfdHlwZSBub2RlXzI7CiAgc29sM19sb2NhbF9pZF90eXBlIGlkXzI7Cn07CgoKZXh0
ZXJuIGxpbmdvX3R5cGUgY29uc3Qgc29sM19saW5nbzsKCgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBU
PiBpbmxpbmUgVCBjb25zdCAmbm9fb3AgKFQgY29uc3QgJnQpIHsKICByZXR1cm4gdDsgfQp0ZW1w
bGF0ZSA8Y2xhc3MgVD4gaW5saW5lIFQgY29uc3QgJk1pbiAoVCBjb25zdCAmYSwgVCBjb25zdCAm
YikgewogIHJldHVybiBhIDwgYiA/IGEgOiBiOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg
VCBjb25zdCAmTWF4IChUIGNvbnN0ICZhLCBUIGNvbnN0ICZiKSB7CiAgcmV0dXJuIGEgPiBiID8g
YSA6IGI7IH0KCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUgdm9pZCBTd2FwIChUICZhLCBUICZi
KSB7CiAgVCBjID0gYjsgYiA9IGE7IGEgPSBjOyB9CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUg
VCAqaW5jcmVtZW50ZWQgKFQgKmEsIGludCBuKSB7CiAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCAqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFyICo+IChhKSArIG4pOyB9CnRlbXBsYXRlIDxjbGFz
cyBUPiBpbmxpbmUgVCBjb25zdCAqaW5jcmVtZW50ZWQgKFQgY29uc3QgKmEsIGludCBuKSB7CiAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCBjb25zdCAqPiAocmVpbnRlcnByZXRfY2FzdDxjaGFy
IGNvbnN0ICo+IChhKSArIG4pOyB9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCBpbml0
aWFsaXplZCA6IHB1YmxpYyBUCnsKICBpbml0aWFsaXplZCgpIHsKICAgIDo6aW5pdGlhbGl6ZSAo
VDo6X2Rlc2MsIHRoaXMpOyB9CgogIGluaXRpYWxpemVkICZvcGVyYXRvcj0gKFQgY29uc3QgJnQp
IHsKICAgICpzdGF0aWNfY2FzdDxUICo+ICh0aGlzKSA9IHQ7IHJldHVybiAqdGhpczsgfQp9OwoK
CgoKCnZvaWQgcmFuZG9tX3NhbHQgKHNvbDNfc2FsdF90eXBlIHB3ZF9oYXNoKSBfX2F0dHJpYnV0
ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBoYXNoX3Bhc3N3b3JkIChj
aGFyIGNvbnN0ICpwYXNzd29yZCwKICAgICAgICAgICAgICAgICAgICBzb2wzX3NhbHRfdHlwZSBj
b25zdCBwd2Rfc2FsdCwKICAgICAgICAgICAgICAgICAgICBzb2wzX2hhc2hfdHlwZSBwd2RfaGFz
aCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgplbnVt
IGxpY2Vuc2Vfb3BfZW51bQp7CiAgbGljZW5zZV9vcF9lbnVtZXJhdGUgPSAnRScsCiAgbGljZW5z
ZV9vcF9pbnF1aXJlID0gJ0knLAogIGxpY2Vuc2Vfb3BfYWNxdWlyZSA9ICdBJywKICBsaWNlbnNl
X29wX3JlbGVhc2UgPSAnUicKfTsKCmVudW0gbGljZW5zZV9mZWF0dXJlX2VudW0KewogIGZlYXR1
cmVfY2xpZW50LAogIGZlYXR1cmVfc2NyaXB0LAogIGZlYXR1cmVfZXVyZXgsCiAgZmVhdHVyZV94
ZXRyYSwKICBmZWF0dXJlX2FnZW50LAogIGZlYXR1cmVfcXVvdGUsCiAgZmVhdHVyZV9lZXllLAog
IGZlYXR1cmVfdHJhaW5lciwKICBmZWF0dXJlX25vX3N1Y2gKfTsKCmV4dGVybiBjaGFyIGNvbnN0
IGZlYXR1cmVfbmFtZVtdWzhdOwpsaWNlbnNlX2ZlYXR1cmVfZW51bSBsaWNlbnNlX2ZlYXR1cmVf
aWQgKGNoYXIgY29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxs
X18pKTsKCgoKCgp2b2lkIGNvbWJpbmVfcGFzc3dvcmQgKHNvbDNfaGFzaF90eXBlIGNvbnN0IGhh
c2gsCiAgICAgICAgICAgICAgICAgICAgICAgc29sM19zYWx0X3R5cGUgY29uc3Qgc2FsdCwKICAg
ICAgICAgICAgICAgICAgICAgICBzb2wzX3Bhc3N3b3JkX3R5cGUgJnB3ZCkgX19hdHRyaWJ1dGVf
XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCnZvaWQgc3BsaXRfcGFzc3dvcmQgKHNv
bDNfcGFzc3dvcmRfdHlwZSBjb25zdCAmcHdkLAogICAgICAgICAgICAgICAgICAgICBzb2wzX2hh
c2hfdHlwZSBoYXNoLAogICAgICAgICAgICAgICAgICAgICBzb2wzX3NhbHRfdHlwZSBzYWx0KSBf
X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBzZXRfcGFz
c3dvcmQgKGNoYXIgY29uc3QgKnBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgc29sM19zYWx0
X3R5cGUgY29uc3Qgc2FsdCwKICAgICAgICAgICAgICAgICAgIHNvbDNfcGFzc3dvcmRfdHlwZSAm
cHdkKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKdm9pZCBz
ZXRfcGFzc3dvcmQgKGNoYXIgY29uc3QgKnBhc3N3b3JkLAogICAgICAgICAgICAgICAgICAgc29s
M19wYXNzd29yZF90eXBlICZwd2QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSk7CgoKCgoKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKYm9vbCBpc19zZXQgKFQg
Y29uc3QgJnQpIHsKICByZXR1cm4gIXQuaXNfbnVsbCgpICYmIHQoKSAhPSAwOyB9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgVD4gaW5saW5lCmJvb2wgaXNfdWlkIChUIGNvbnN0ICZ0KSB7CiAgcmV0dXJuICF0
Lm5vZGUuaXNfbnVsbCgpICYmIGlzX3NldCAodC5pZCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBUPiBp
bmxpbmUKYm9vbCBpc19naWQgKFQgY29uc3QgJmcpIHsKICByZXR1cm4gaXNfc2V0ICh0LnR5cGUp
ICYmICF0Lm5vZGUuaXNfbnVsbCgpICYmIGlzX3NldCAodC5pZCk7IH0KCnRlbXBsYXRlIDxjbGFz
cyBUMSwgY2xhc3MgVDI+IGlubGluZQpib29sIHVpZF9lcSAoVDEgY29uc3QgJmEsIFQyIGNvbnN0
ICZiKSB7CiAgcmV0dXJuIGEuaWQoKSA9PSBiLmlkKCkgJiYgYS5ub2RlKCkgPT0gYi5ub2RlKCk7
IH0KCnRlbXBsYXRlIDxjbGFzcyBUMSwgY2xhc3MgVDI+IGlubGluZQp2b2lkIGFzc2lnbl91aWQg
KFQxICZhLCBUMiBjb25zdCAmYikgewogIGEubm9kZSA9IGIubm9kZTsgYS5pZCA9IGIuaWQ7IH0K
CnRlbXBsYXRlIDxjbGFzcyBUPiBpbmxpbmUKYm9vbCBnaWRfZXEgKHNvbDNfZ2xvYmFsX2lkX3R5
cGUgY29uc3QgJmEsIFQgY29uc3QgJmIpIHsKICByZXR1cm4gYS5pZCgpID09IGIuaWQoKSAmJiBh
Lm5vZGUoKSA9PSBiLm5vZGUoKSAmJiBhLnR5cGUoKSA9PSBiLl9yaWQ7IH0KCnRlbXBsYXRlIDw+
IGlubGluZQpib29sIGdpZF9lcTxzb2wzX2dsb2JhbF9pZF90eXBlPiAoc29sM19nbG9iYWxfaWRf
dHlwZSBjb25zdCAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbDNfZ2xv
YmFsX2lkX3R5cGUgY29uc3QgJmIpIHsKICByZXR1cm4gYS5pZCgpID09IGIuaWQoKSAmJiBhLm5v
ZGUoKSA9PSBiLm5vZGUoKSAmJiBhLnR5cGUoKSA9PSBiLnR5cGUoKTsgfQoKdGVtcGxhdGUgPGNs
YXNzIFQxLCBjbGFzcyBUMj4gaW5saW5lCnZvaWQgYXNzaWduX2dpZCAoVDEgJmEsIFQyIGNvbnN0
ICZiKSB7CiAgYS50eXBlID0gYi50eXBlOyBhLm5vZGUgPSBiLm5vZGU7IGEuaWQgPSBiLmlkOyB9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgVDEsIGNsYXNzIFQyPiBpbmxpbmUKdm9pZCBnaWRfZnJvbV91aWQg
KFQxICZhLCBUMiBjb25zdCAmYikgewogIGEudHlwZSA9IGIuX3JpZDsgYS5ub2RlID0gYi5ub2Rl
OyBhLmlkID0gYi5pZDsgfQoKCmJvb2wgaXNfdW5pcXVlX2lkX2luZGV4IChpbmRleF90eXBlIGNv
bnN0ICZpbmRleCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsK
Ym9vbCBoYXNfdW5pcXVlX2FzX3ByaW1hcnkgKHJlY29yZF90eXBlIGNvbnN0ICZkZXNjKSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpib29sIGxvY2F0ZV91bmlx
dWVfaWQgKHJlY29yZF90eXBlIGNvbnN0ICZkZXNjLAogICAgICAgICAgICAgICAgICAgICAgIHZv
aWQgY29uc3QgKnJlY29yZCwKICAgICAgICAgICAgICAgICAgICAgICBzb2wzX3VuaXF1ZV90eXBl
IGNvbnN0IComdW5pcXVlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxf
XykpOwppbmxpbmUgYm9vbCBsb2NhdGVfdW5pcXVlX2lkIChyZWNvcmRfdHlwZSBjb25zdCAmZGVz
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcmVjb3JkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzb2wzX3VuaXF1ZV90eXBlIComdW5pcXVlKSB7CiAgcmV0dXJu
IGxvY2F0ZV91bmlxdWVfaWQgKGRlc2MsIHJlY29yZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3RfY2FzdDxzb2wzX3VuaXF1ZV90eXBlIGNvbnN0IComPiAodW5pcXVlKSk7IH0KCgoK
CgplbnVtIHNvbDNfaW50ZXJmYWNlX2Z1bmN0aW9uc19lbnVtCnsKCiAgaW50ZXJmYWNlX2Z1bmN0
aW9uX21hcmtldHMgPSAxIDw8IDAsCiAgaW50ZXJmYWNlX2Z1bmN0aW9uX3RyYWRlcyA9IDEgPDwg
MSwKICBpbnRlcmZhY2VfZnVuY3Rpb25fb3JkZXIgPSAxIDw8IDIsCiAgaW50ZXJmYWNlX2Z1bmN0
aW9uX3F1b3RlID0gMSA8PCAzCn07Cgp2b2lkIGludGVyZmFjZV9mdW5jdGlvbnNfdG9fc3RyaW5n
ICh1bnNpZ25lZCBmdW5jdGlvbnNfbWFzaywgY2hhciAqLCB1bnNpZ25lZCk7CgoKCgoKZW51bSBz
b2wzX3F1YWxpdHlfZW51bQp7CiAgc29sM19xdWFsaXR5X2EgPSAnQScsCiAgc29sM19xdWFsaXR5
X2IgPSAnQicsCiAgc29sM19xdWFsaXR5X2MgPSAnQycKfTsKCgoKCgoKCmVudW0gc29sM19hY2Nl
c3NfYml0c19lbnVtCnsKICBvd25lcl9hY2Nlc3NfcmVhZCA9IDEgPDwgMSwKICBvd25lcl9hY2Nl
c3Nfd3JpdGUgPSAxIDw8IDIsCgogIGdyb3VwX2FjY2Vzc19yZWFkID0gMSA8PCA0LAogIGdyb3Vw
X2FjY2Vzc193cml0ZSA9IDEgPDwgNSwKCiAgd29ybGRfYWNjZXNzX3JlYWQgPSAxIDw8IDcsCiAg
d29ybGRfYWNjZXNzX3dyaXRlID0gMSA8PCA4LAoKICBhY2Nlc3NfcndfcndfcncgPSAob3duZXJf
YWNjZXNzX3JlYWQgfCBvd25lcl9hY2Nlc3Nfd3JpdGUgfAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdyb3VwX2FjY2Vzc19yZWFkIHwgZ3JvdXBfYWNjZXNzX3dyaXRlIHwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JsZF9hY2Nlc3NfcmVhZCB8IHdvcmxk
X2FjY2Vzc193cml0ZSkKfTsKCgoKCgoKZW51bSBzb2wzX3ByaXZpbGVnZXNfYml0c19lbnVtCnsK
CiAgcHJpdl9sb2dpbiA9IDEgPDwgMCwKCgogIHByaXZfb3duX3Bhc3N3b3JkX2NoYW5nZSA9IDEg
PDwgMSwKCgogIHByaXZfb3duX3VzZXJfY2hhbmdlID0gMSA8PCAyLAoKCiAgcHJpdl9hZGRfYWNj
b3VudCA9IDEgPDwgMywKCgogIHByaXZfZ3JvdXBfYWNjb3VudCA9IDEgPDwgNCwKCgogIHByaXZf
b3JkZXIgPSAxIDw8IDEwLAoKCiAgcHJpdl90cmFkZSA9IDEgPDwgMTEsCgoKICBwcml2X2ZlYXR1
cmVfcXVvdGUgPSAxIDw8IDE2LAogIHByaXZfZmVhdHVyZV9lZXllID0gMSA8PCAxNywKCgogIHBy
aXZfdXNlcl9hZG1pbiA9IDEgPDwgMjQsCiAgcHJpdl9sb2dpbl9pbmZvID0gMSA8PCAyNywKICBw
cml2X2tpbGxfc2VydmVyID0gMSA8PCAyOCwKICBwcml2X2tpbGxfcHJvZ3JhbXMgPSAxIDw8IDI5
LAogIHByaXZfZXZlcnl0aGluZ19yZWFkID0gMSA8PCAzMCwKICBwcml2X2V2ZXJ5dGhpbmdfd3Jp
dGUgPSAxIDw8IDMxLAoKCiAgcHJpdl9hZG1pbl9kZW5pZWQgPSBwcml2X29yZGVyLAogIHByaXZf
YWRtaW5fZ3JhbnRlZCA9IH5wcml2X2FkbWluX2RlbmllZCwKCgogIHByaXZfaW50ZXJmYWNlX2Rl
bmllZCA9IDAsCiAgcHJpdl9pbnRlcmZhY2VfZ3JhbnRlZCA9IH5wcml2X2ludGVyZmFjZV9kZW5p
ZWQKfTsKCgoKCgplbnVtIGFjY291bnRfdHlwZV9lbnVtCnsKICBhY2NvdW50X3R5cGVfY29sbGVj
dGlvbiA9ICctJywKICBhY2NvdW50X3R5cGVfZXF5X2xvbmcgPSAnTCcsCiAgYWNjb3VudF90eXBl
X2VxeV9zaG9ydCA9ICdTJywKICBhY2NvdW50X3R5cGVfY2FzaCA9ICdDJywKICBhY2NvdW50X3R5
cGVfZmVlID0gJ0YnLAogIGFjY291bnRfdHlwZV94Y2hnX2ZlZSA9ICdYJwp9OwoKZW51bSBhdmVy
YWdlX2ZsYWdfYml0X2VudW0KewogIGF2ZXJhZ2VfZmxhZ19ub25lID0gMCwKICBhdmVyYWdlX2Zs
YWdfZHVtYiA9IDEgPDwgMCwKICBhdmVyYWdlX2ZsYWdfZmlmbyA9IDEgPDwgMSwKICBhdmVyYWdl
X2ZsYWdfbWFzayA9IDB4Mwp9OwpjbGFzcyBJT0hhbmRsZXI7CgpjbGFzcyBJb0RldmljZTsKY2xh
c3MgRmlsZURlc2M7CgpjbGFzcyBzb2NrX2FkZHJfdDsKY2xhc3Mgc3VibmV0X3R5cGU7CgpjbGFz
cyBTb2NrZXQ7CmNsYXNzIFBvcnQ7CmNsYXNzIEJDYXN0U29ja2V0OwpjbGFzcyBNQ2FzdFNvY2tl
dDsKCmNsYXNzIElvU3RhY2s7CmNsYXNzIElvQ29udGV4dDsKY2xhc3MgU2VudE5vdGlmaWVkOwoK
Y2xhc3MgTWFpbGJveDsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgb2N0ZXRfdHlwZTsKCgpjbGFz
cyBzb2NrX2FkZHJfdDsKCgoKZXh0ZXJuIGNsYXNzIExvZyBuZXRsb2c7CgoKCmV4dGVybiBJb0Nv
bnRleHQgZGVmYXVsdF9pb19jb250ZXh0OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgcGFydG5l
cl9pZF90eXBlOwoKCmVudW0geyBwYXJ0bmVyX25hbWVfbGVuID0gMzIgfTsKCgoKCgoKCmNsYXNz
IE11dGV4CnsKcHJpdmF0ZToKCgoKICB1bnNpZ25lZCBfYnVmWygyNCArMykvNF07CgoKcHVibGlj
OgogIE11dGV4KCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsK
ICB+TXV0ZXgoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoK
ICB2b2lkIGdldCgpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CiAgdm9pZCByZWxlYXNlKCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxs
X18pKTsKfTsKY2xhc3MgV2l0aExvY2sKewpwcml2YXRlOgogIE11dGV4ICZfbXV0ZXg7CgpwdWJs
aWM6CiAgV2l0aExvY2sgKE11dGV4ICZtdXRleCkgOiBfbXV0ZXggKG11dGV4KSB7IF9tdXRleC5n
ZXQoKTsgfQogIH5XaXRoTG9jaygpIHsgX211dGV4LnJlbGVhc2UoKTsgfQp9OwoKCmV4dGVybiAi
QyIgewoKCgoKCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CgoKCgoKdHlwZWRlZiBzdHJ1
Y3QgX0lPX0ZJTEUgX19GSUxFOwp0eXBlZGVmIHVuc2lnbmVkIGludCB3aW50X3Q7CgoKCgoKCgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBf
X3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKCnR5
cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0g
X0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0
ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CgoKCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9
IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgog
IF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lM
TEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVH
QUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9f
R0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIK
fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1
Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5
cGVkZWYgd2ludF90ICgqX19nY29udl9idG93Y19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos
IHVuc2lnbmVkIGNoYXIpOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVj
dCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChz
dHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAq
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVm
IGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWdu
ZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgq
X19nY29udl90cmFuc19xdWVyeV9mY3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoq
KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFy
ICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3Ry
dWN0IF9fZ2NvbnZfdHJhbnNfZGF0YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0
OwogIF9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2dj
b252X3RyYW5zX2VuZF9mY3QgX190cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1
Y3QgX19nY29udl90cmFuc19kYXRhICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAK
ewogIHN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29u
c3QgY2hhciAqX19tb2RuYW1lOwoKICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFt
ZTsKICBjaGFyICpfX3RvX25hbWU7CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfYnRv
d2NfZmN0IF9fYnRvd2NfZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBfX2dj
b252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBpbnQg
X19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhfbmVl
ZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3RydWN0
IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNpZ25l
ZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZvY2F0
aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAqX19z
dGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFuc19k
YXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNpemVf
dCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5zaW9u
X18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90Owp0eXBl
ZGVmIHVuaW9uCnsKICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAg
c3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9f
ZGF0YTsKICB9IF9fY29tYmluZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2
X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2lu
dDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWdu
ZWQgaW50IF9HX3VpbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0
eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fU0lfXykpKTsKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKdHlwZWRlZiB2
b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFy
a2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwp9OwoK
CmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0
aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CnN0cnVjdCBfSU9f
RklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNoYXIqIF9J
T19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9iYXNl
OwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBjaGFyKiBf
SU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZlX2Jhc2U7
CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAgc3RydWN0
IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsKCiAgaW50
IF9maWxlbm87CgoKCiAgaW50IF9mbGFnczI7CgogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoKCiAg
dW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZzZXQ7
CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiAgX19vZmY2NF90
IF9vZmZzZXQ7CgoKCgoKICB2b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21v
ZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lk
ICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9f
Ml8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87
CnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19uYnl0ZXMpOwoKCgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0
ZV9mbiAodm9pZCAqX19jb29raWUsIF9fY29uc3QgY2hhciAqX19idWYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKCgoKCgoKdHlwZWRlZiBpbnQgX19pb19z
ZWVrX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19vZmY2NF90ICpfX3BvcywgaW50IF9fdyk7CgoKdHlw
ZWRlZiBpbnQgX19pb19jbG9zZV9mbiAodm9pZCAqX19jb29raWUpOwoKCgoKdHlwZWRlZiBfX2lv
X3JlYWRfZm4gY29va2llX3JlYWRfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3dyaXRlX2ZuIGNv
b2tpZV93cml0ZV9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fc2Vla19mbiBjb29raWVfc2Vla19m
dW5jdGlvbl90Owp0eXBlZGVmIF9faW9fY2xvc2VfZm4gY29va2llX2Nsb3NlX2Z1bmN0aW9uX3Q7
CgoKdHlwZWRlZiBzdHJ1Y3QKewogIF9faW9fcmVhZF9mbiAqcmVhZDsKICBfX2lvX3dyaXRlX2Zu
ICp3cml0ZTsKICBfX2lvX3NlZWtfZm4gKnNlZWs7CiAgX19pb19jbG9zZV9mbiAqY2xvc2U7Cn0g
X0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdDsKdHlwZWRlZiBfSU9fY29va2llX2lvX2Z1bmN0aW9u
c190IGNvb2tpZV9pb19mdW5jdGlvbnNfdDsKCnN0cnVjdCBfSU9fY29va2llX2ZpbGU7CgoKZXh0
ZXJuIHZvaWQgX0lPX2Nvb2tpZV9pbml0IChzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlICpfX2NmaWxl
LCBpbnQgX19yZWFkX3dyaXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9f
Y29va2llLCBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9fZm5zKTsKCgoKCmV4dGVybiAiQyIg
ewoKCmV4dGVybiBpbnQgX191bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4g
aW50IF9fdWZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cg
KF9JT19GSUxFICosIGludCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dW5kZXJmbG93IChf
SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1ZmxvdyAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsK
ZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpl
eHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoKZXh0ZXJuIGludCBfSU9fcGVl
a2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgX0lP
X2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mdW5sb2Nr
ZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAo
X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9JT19GSUxFICog
X19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpleHRlcm4gaW50
IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhyb3cgKCk7CmV4
dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90KSB0aHJv
dyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQgKiwgc2l6ZV90
KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9f
b2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrcG9z
IChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4gdm9pZCBfSU9f
ZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7Cn0KCgoKCnR5cGVkZWYgX19n
bnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwoKCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsK
CgoKCgp0eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwoKCgpleHRlcm4gc3RydWN0IF9JT19G
SUxFICpzdGRpbjsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRSAqc3Rkb3V0OwpleHRlcm4gc3RydWN0
IF9JT19GSUxFICpzdGRlcnI7CgoKCgoKCgpleHRlcm4gaW50IHJlbW92ZSAoX19jb25zdCBjaGFy
ICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIg
Kl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUg
KnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gY2hhciAqdG1wbmFtX3IgKGNoYXIgKl9fcykgdGhyb3cgKCk7CmV4dGVybiBjaGFy
ICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2NvbnN0IGNoYXIgKl9fcGZ4KQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKZXh0ZXJuIGludCBm
Y2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF
ICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVvcGVuIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZvcGVuNjQgKF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMpIHRocm93ICgpOwpleHRlcm4gRklMRSAqZnJlb3Bl
bjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAg
ICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuY29va2llICh2b2lkICpfX3Jlc3RyaWN0IF9fbWFnaWNf
Y29va2llLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JT19jb29raWVfaW9fZnVuY3Rp
b25zX3QgX19pb19mdW5jcykgdGhyb3cgKCk7CgoKZXh0ZXJuIEZJTEUgKmZtZW1vcGVuICh2b2lk
ICpfX3MsIHNpemVfdCBfX2xlbiwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBGSUxFICpvcGVuX21lbXN0cmVhbSAoY2hhciAqKl9fcmVzdHJpY3QgX19idWZsb2Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc2l6ZWxv
YykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg
c2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1
ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBj
aGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3Np
emUpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGZwcmludGYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc3ByaW50ZiAoY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdmZwcmludGYgKEZJTEUg
Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFf
bGlzdCBfX2FyZykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
aW50IHNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywg
NCkpKTsKCmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgoKZXh0ZXJuIGludCB2
YXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mLAogICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7
CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7
CmV4dGVybiBpbnQgYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgpl
eHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0
ZXJuIGludCBkcHJpbnRmIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10
LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRm
X18sIDIsIDMpKSk7CgoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZmc2Nh
bmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgpleHRl
cm4gaW50IHZzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNf
dmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAo
X19zY2FuZl9fLCAxLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNzY2FuZiAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKCgoKCmV4dGVybiBpbnQg
ZmdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsK
CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biBpbnQgZmdldGNfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQg
cHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxv
Y2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBw
dXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBn
ZXR3IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193
LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmZnZXRzIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgaW50IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQg
X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3Ry
aWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19y
ZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90
IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5l
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwoKCgoKCmV4dGVybiBpbnQgZnB1dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5nZXRj
IChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJl
YWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoK
ZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6
ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVz
dHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnB1dHNfdW5sb2NrZWQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91
bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVh
bSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQg
Kl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGlu
dCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2ZmLCBp
bnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0ZXJu
IGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9fb2ZmNjRfdCBf
X29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBmdGVsbG82NCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklMRSAqX19y
ZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cg
KCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zNjRf
dCAqX19wb3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVy
biB2b2lkIGNsZWFyZXJyX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50
IGZlcnJvcl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiB2
b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50
IHN5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CgoK
ZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3QgX3N5c19l
cnJsaXN0W107CgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19j
b25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3Mp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgp
OwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0
IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGlu
dCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9fb2JzdGFjaywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJncykK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MCkpKTsKCgoKCgoKCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGZ0cnlsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7Cmlu
bGluZSBpbnQKdnByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBfX2dudWNf
dmFfbGlzdCBfX2FyZykgdGhyb3cgKCkKewogIHJldHVybiB2ZnByaW50ZiAoc3Rkb3V0LCBfX2Zt
dCwgX19hcmcpOwp9CgoKaW5saW5lIGludApnZXRjaGFyICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0
dXJuIF9JT19nZXRjIChzdGRpbik7Cn0KCgoKCmlubGluZSBpbnQKZ2V0Y191bmxvY2tlZCAoRklM
RSAqX19mcCkgdGhyb3cgKCkKewogIHJldHVybiAoKF9fZnApLT5fSU9fcmVhZF9wdHIgPj0gKF9f
ZnApLT5fSU9fcmVhZF9lbmQgPyBfX3VmbG93IChfX2ZwKSA6ICoodW5zaWduZWQgY2hhciAqKSAo
X19mcCktPl9JT19yZWFkX3B0cisrKTsKfQoKCmlubGluZSBpbnQKZ2V0Y2hhcl91bmxvY2tlZCAo
dm9pZCkgdGhyb3cgKCkKewogIHJldHVybiAoKHN0ZGluKS0+X0lPX3JlYWRfcHRyID49IChzdGRp
biktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKHN0ZGluKSA6ICoodW5zaWduZWQgY2hhciAqKSAo
c3RkaW4pLT5fSU9fcmVhZF9wdHIrKyk7Cn0KCgoKCmlubGluZSBpbnQKcHV0Y2hhciAoaW50IF9f
YykgdGhyb3cgKCkKewogIHJldHVybiBfSU9fcHV0YyAoX19jLCBzdGRvdXQpOwp9CgoKCgppbmxp
bmUgaW50CmZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkK
ewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFtKS0+X0lP
X3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIpIChfX2Mp
KSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9IChfX2Mp
KSk7Cn0KCgoKCgppbmxpbmUgaW50CnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAo
X19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWdu
ZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRl
X3B0cisrID0gKF9fYykpKTsKfQoKCmlubGluZSBpbnQKcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9f
YykgdGhyb3cgKCkKewogIHJldHVybiAoKChzdGRvdXQpLT5fSU9fd3JpdGVfcHRyID49IChzdGRv
dXQpLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKHN0ZG91dCwgKHVuc2lnbmVkIGNoYXIp
IChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihzdGRvdXQpLT5fSU9fd3JpdGVfcHRyKysgPSAo
X19jKSkpOwp9CgoKCgoKaW5saW5lIF9fc3NpemVfdApnZXRsaW5lIChjaGFyICoqX19saW5lcHRy
LCBzaXplX3QgKl9fbiwgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gX19nZXRk
ZWxpbSAoX19saW5lcHRyLCBfX24sICdcbicsIF9fc3RyZWFtKTsKfQoKCgoKCmlubGluZSBpbnQK
ZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19z
dHJlYW0pLT5fZmxhZ3MgJiAweDEwKSAhPSAwKTsKfQoKCmlubGluZSBpbnQKZmVycm9yX3VubG9j
a2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9m
bGFncyAmIDB4MjApICE9IDApOwp9CgoKfQoKCmNsYXNzIHN0cnZhcl90eXBlOwoKCmNsYXNzIExv
Zwp7CnB1YmxpYzoKCiAgZW51bSBwcmlvcml0eQogIHsKICAgIGVtZXJnLAogICAgYWxlcnQsCiAg
ICBjcml0LAogICAgZXJyLAogICAgd2FybmluZywKICAgIG5vdGljZSwKICAgIGluZm8sCiAgICBk
ZWJ1ZwogIH07Cgpwcml2YXRlOgoKICBGSUxFICpfZjsKCgogIHN0cnZhcl90eXBlICpfZGl2ZXJz
aW9uOwoKCiAgY2hhciBjb25zdCAqX3N0cmZ0aW1lX2ZtdDsKCgogIHByaW9yaXR5IF90aHJlc2hv
bGQ7CgoKICB0aW1lX3QgX2xhc3RfdGltZTsKICBjaGFyIF9mb3JtYXR0ZWRfdGltZVszMF07CiAg
c2hvcnQgX2Zvcm1hdHRlZF9sZW5ndGg7CgoKICBmcmllbmQgY2xhc3MgTG9nU2luazsKICBNdXRl
eCBfbXV0ZXg7CgoKICBpbmxpbmUgdm9pZCBwcmludCAoY2hhcikgX19hdHRyaWJ1dGVfXygoX19y
ZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICBpbmxpbmUgdm9pZCBwcmludCAoY2hhciBjb25z
dCAqLCB1bnNpZ25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKICBpbmxpbmUgdm9pZCB2Zm9ybWF0IChjaGFyIGNvbnN0ICosIHZhX2xpc3QpOwogIHZvaWQg
Zm9ybWF0IChjaGFyIGNvbnN0ICosIC4uLikgX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhwcmlu
dGYsIDIsIDMpKSk7CgoKCiAgdm9pZCB2X25vbG9jayAocHJpb3JpdHksIGNoYXIgY29uc3QgKiwg
dmFfbGlzdCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICB2
b2lkIHZfY29udF9ub2xvY2sgKHByaW9yaXR5LCBjaGFyIGNvbnN0ICptc2csIHZhX2xpc3QgYXJn
cykgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIGlubGlu
ZSB2b2lkIHN5bmNwIChwcmlvcml0eSk7CgoKCiAgTG9nIChjb25zdCBMb2cgJik7CiAgTG9nICZv
cGVyYXRvcj0gKGNvbnN0IExvZyAmKTsKCnB1YmxpYzoKCiAgc3RhdGljIGNoYXIgY29uc3QgeXlt
bWRkX2hobW1zc1tdOwogIHN0YXRpYyBjaGFyIGNvbnN0IG1tZGRfaGhtbXNzW107CiAgc3RhdGlj
IGNoYXIgY29uc3QgaGhtbXNzW107CgogIH5Mb2coKSB7IGNsb3NlKCk7IH0KCgogIExvZyAoRklM
RSAqZiA9IHN0ZGVyciwKICAgICAgIGNoYXIgY29uc3QgKnN0cmZ0aW1lX2ZtdCA9IG1tZGRfaGht
bXNzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgTG9n
IChjaGFyIGNvbnN0ICpuYW1lLAogICAgICAgY2hhciBjb25zdCAqc3RyZnRpbWVfZm10ID0gbW1k
ZF9oaG1tc3MpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK
CgogIHZvaWQgZGl2ZXJ0IChzdHJ2YXJfdHlwZSAqcykgeyBfZGl2ZXJzaW9uID0gczsgfQogIHZv
aWQgdW5kaXZlcnQgKHN0cnZhcl90eXBlIGNvbnN0ICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICBMb2cgJm9wZXJhdG9yPSAoY2hhciBjb25zdCAqKSBf
X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgTG9nICZvcGVy
YXRvcj0gKEZJTEUgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKCgogIHZvaWQgY2xvc2UoKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh
bGxfXykpOwoKCiAgRklMRSAqZmlsZSgpIGNvbnN0IHsgcmV0dXJuIF9mOyB9CgoKICB2b2lkIHBv
c2l0aW9uIChteV9mcG9zX3QgJikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKCgogIHByaW9yaXR5IHRocmVzaG9sZCAocHJpb3JpdHkpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCgogIGJvb2wgb3BlcmF0b3IoKSAocHJp
b3JpdHkgcCkgY29uc3QgeyByZXR1cm4gcCA8PSBfdGhyZXNob2xkOyB9CgoKCgoKICBib29sIHYg
KHByaW9yaXR5LCBjaGFyIGNvbnN0ICosIHZhX2xpc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSk7CiAgYm9vbCB2X2NvbnQgKHByaW9yaXR5LCBjaGFyIGNvbnN0
ICosIHZhX2xpc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CgoKICB2b2lkIG9wZXJhdG9yKCkgKHByaW9yaXR5LCBjaGFyIGNvbnN0ICogLi4uKQogICAgX19h
dHRyaWJ1dGVfXygoX19mb3JtYXRfXyhwcmludGYsIDMsIDQpKSk7CiAgdm9pZCBjb250IChwcmlv
cml0eSwgY2hhciBjb25zdCAqIC4uLikKICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18ocHJp
bnRmLCAzLCA0KSkpOwoKCgogIGJvb2wgb3BlcmF0b3IoKSAocHJpb3JpdHksIGludCwgY2hhciBj
b25zdCAqIC4uLikKICAgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18ocHJpbnRmLCA0LCA1KSkp
OwoKCiAgYm9vbCBkaXNwbGF5IChwcmlvcml0eSBwLCBjaGFyIGNvbnN0ICp0ZXh0LCBjaGFyIGNv
bnN0ICpoZWFkbGluZSAuLi4pCiAgICBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fKHByaW50Ziwg
NCwgNSkpKTsKCgogIGJvb2wgZHVtcCAocHJpb3JpdHksIHZvaWQgY29uc3QgKiwgc2l6ZV90KSBf
X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKCiAgdm9pZCBi
YWNrdHJhY2UgKHByaW9yaXR5KSB7fQoKCgogIHZvaWQgc3luYyAoYm9vbCB0b19kaXNrID0gZmFs
c2UpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7Cn07CgoKCmV4
dGVybiBMb2cgbWFpbmxvZzsKCgoKdm9pZCBiYWRfY29uZGl0aW9uX2Z1bmMgKGNoYXIgY29uc3Qg
KiwgdW5zaWduZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CmJvb2wgcHJlc3VtcHRpb25fd3JvbmcgKGNoYXIgY29uc3QgKiwgY2hhciBjb25zdCAqLCB1bnNp
Z25lZCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJp
YnV0ZV9fKChfX25vcmV0dXJuX18pKTsKCgoKCgoKc3RydWN0IHZlcmJfZGVzY190eXBlCnsKICB2
ZXJiX3R5cGUgdmVyYjsKICBjaGFyIGNvbnN0ICp0ZXh0Owp9OwoKc3RydWN0IGFkdmVyYl9kZXNj
X3R5cGUKewogIGFkdmVyYl90eXBlIGFkdmVyYjsKICBjaGFyIGNvbnN0ICp0ZXh0Owp9OwoKc3Ry
dWN0IGZsYWdfZGVzY190eXBlCnsKICBzZW50ZW5jZV9mbGFnX2VudW0gZmxhZzsKICBjaGFyIGNv
bnN0ICp0ZXh0Owp9OwoKZXh0ZXJuIHZlcmJfZGVzY190eXBlIGNvbnN0IHZlcmJfZGVzY1tdOwpl
eHRlcm4gYWR2ZXJiX2Rlc2NfdHlwZSBjb25zdCBhZHZlcmJfZGVzY1tdOwpleHRlcm4gZmxhZ19k
ZXNjX3R5cGUgY29uc3QgZmxhZ19kZXNjW107CnN0cnVjdCBzZW50ZW5jZV90eXBlCnsKICBlbnVt
IHsgaGVhZGVyX2J5dGVzID0gc2VudGVuY2VfaGVhZGVyX2RlZnM6OmhlYWRlcl9iaXRzIC8gOCwK
ICAgICAgICAgbGluZWFyX3NpemUgPSBoZWFkZXJfYnl0ZXMgKyAyIH07CgogIHVuc2lnbmVkIHNo
b3J0IF92ZXJiOwogIHVuc2lnbmVkIHNob3J0IF9hZHZlcmI7CiAgdW5zaWduZWQgc2hvcnQgX2Zs
YWdzOwogIHVuc2lnbmVkIHNob3J0IF9ub3VuOwogIHVuc2lnbmVkIF9jb3VudDsKCiAgc2VudGVu
Y2VfdHlwZSgpCiAgICA6IF92ZXJiICgwKSwgX2FkdmVyYiAoMCksIF9mbGFncyAoMCksIF9ub3Vu
ICgwKSwgX2NvdW50ICgwKSB7fQoKICBzZW50ZW5jZV90eXBlICh2ZXJiX3R5cGUgdiwgYWR2ZXJi
X3R5cGUgYXYsIHVuc2lnbmVkIGYsCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbiwgdW5zaWdu
ZWQgYykKICAgIDogX3ZlcmIgKHYpLCBfYWR2ZXJiIChhdiksIF9mbGFncyAoZiksIF9ub3VuIChu
KSwgX2NvdW50IChjKSB7fQp9OwoKCmNsYXNzIFNlbnRlbmNlIDogcHVibGljIFF1ZXVlPFNlbnRl
bmNlPjo6Tm9kZSwKICAgICAgICAgICAgICAgICBwcml2YXRlIHNlbnRlbmNlX3R5cGUKewogIHVu
c2lnbmVkIF9zaXplOwogIHZvaWQgKl9kYXRhOwoKICBmcmllbmQgY2xhc3MgTWVzc2FnZTsKICB2
b2lkIGxpbmVhcml6ZSAob2N0ZXRfdHlwZSAqJikgY29uc3QgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKICBib29sIGRlX2xpbmVhcml6ZSAob2N0ZXRfdHlwZSBj
b25zdCAqJiwgdW5zaWduZWQgJiwgTG9nOjpwcmlvcml0eSkgX19hdHRyaWJ1dGVfXygoX19yZWdw
YXJtX18oMyksX19zdGRjYWxsX18pKTsKCnByb3RlY3RlZDoKCiAgU2VudGVuY2UoKQogICAgOiBf
c2l6ZSAobGluZWFyX3NpemUpLCBfZGF0YSAoMCkge30KCnB1YmxpYzoKICB+U2VudGVuY2UoKSB7
CiAgICBpZiAoX2NvdW50ID4gMSkgZnJlZSAoX2RhdGEpOyB9CgoKCiAgU2VudGVuY2UgKFNlbnRl
bmNlICZzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwogIFNl
bnRlbmNlICZvcGVyYXRvcj0gKFNlbnRlbmNlICYpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f
KDMpLF9fc3RkY2FsbF9fKSk7CgoKCiAgdGVtcGxhdGUgPGNsYXNzIGRlc2NfdD4KICBTZW50ZW5j
ZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAg
ICAgICAgICAgIGRlc2NfdCBjb25zdCAmZGVzYywgdm9pZCBjb25zdCAqZGF0YSwgdW5zaWduZWQg
bikKICAgIDogc2VudGVuY2VfdHlwZSAodmVyYiwgYWR2ZXJiLCBmbGFncywgZGVzYy50eXBlX2lk
LCBuKQogIHsKICAgIF9zaXplID0gbGluZWFyX3NpemUgKyBuICogTGluZ286OmluZm8gKGRlc2Mp
LmxpbmVhcl9zaXplOwogICAgc3dpdGNoIChuKQogICAgICB7CiAgICAgIGNhc2UgMDoKICAgICAg
ICBfZGF0YSA9IDA7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMToKICAgICAgICBfZGF0YSA9
IHN0YXRpY19jYXN0PHZvaWQgKmNvbnN0ICo+IChkYXRhKVswXTsKICAgICAgICBicmVhazsKICAg
ICAgZGVmYXVsdDoKICAgICAgICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAodm9pZCAqKSk7
CiAgICAgICAgbWVtY3B5IChfZGF0YSwgZGF0YSwgbiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAg
ICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICBTZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVy
Yl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAgICAgICAgICAgIHJlY29yZF90eXBlIGNv
bnN0ICZkZXNjLCB2b2lkICpkYXRhKQogICAgOiBzZW50ZW5jZV90eXBlICh2ZXJiLCBhZHZlcmIs
IGZsYWdzLCBkZXNjLnR5cGVfaWQsIDEpCiAgewogICAgX3NpemUgPSBsaW5lYXJfc2l6ZSArIExp
bmdvOjppbmZvIChkZXNjKS5saW5lYXJfc2l6ZTsKICAgIF9kYXRhID0gZGF0YTsKICB9CgoKICBT
ZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxh
Z3MsCiAgICAgICAgICAgIGluZGV4X3R5cGUgY29uc3QgJmRlc2MsIHZvaWQgKmRhdGEpCiAgICA6
IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3MsIGRlc2MudHlwZV9pZCwgMSkKICB7
CiAgICBfc2l6ZSA9IGxpbmVhcl9zaXplICsgTGluZ286OmluZm8gKGRlc2MpLmxpbmVhcl9zaXpl
OwogICAgX2RhdGEgPSBkYXRhOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBUPgogIFNlbnRlbmNl
ICh2ZXJiX3R5cGUgdmVyYiwgYWR2ZXJiX3R5cGUgYWR2ZXJiLCB1bnNpZ25lZCBmbGFncywKICAg
ICAgICAgICAgVCBjb25zdCAqY29uc3QgKmRhdGEsIHVuc2lnbmVkIG4pCiAgICA6IHNlbnRlbmNl
X3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3MsIFQ6OmRlc2MoKS50eXBlX2lkLCBuKQogIHsKICAg
IF9zaXplID0gbGluZWFyX3NpemUgKyBuICogTGluZ286OmluZm8gKFQ6OmRlc2MoKSkubGluZWFy
X3NpemU7CiAgICBzd2l0Y2ggKG4pCiAgICAgIHsKICAgICAgY2FzZSAwOgogICAgICAgIF9kYXRh
ID0gMDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAxOgogICAgICAgIF9kYXRhID0gY29uc3Rf
Y2FzdDxUICo+IChkYXRhWzBdKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAg
ICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAgICAgbWVtY3B5IChf
ZGF0YSwgZGF0YSwgbiAqIHNpemVvZiAodm9pZCAqKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0K
ICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBTZW50ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFk
dmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3MsCiAgICAgICAgICAgIHVuc2lnbmVkIG4s
IFQgY29uc3QgKmRhdGEpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwgZmxhZ3Ms
IFQ6OmRlc2MoKS50eXBlX2lkLCBuKQogIHsKICAgIF9zaXplID0gbGluZWFyX3NpemUgKyBuICog
TGluZ286OmluZm8gKFQ6OmRlc2MoKSkubGluZWFyX3NpemU7CiAgICBzd2l0Y2ggKG4pCiAgICAg
IHsKICAgICAgY2FzZSAwOgogICAgICAgIF9kYXRhID0gMDsKICAgICAgICBicmVhazsKICAgICAg
Y2FzZSAxOgogICAgICAgIF9kYXRhID0gY29uc3RfY2FzdDxUICo+IChkYXRhKTsKICAgICAgICBi
cmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBfZGF0YSA9IG1hbGxvYyAobiAqIHNpemVvZiAo
dm9pZCAqKSk7CiAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG47ICsraSwgKytkYXRh
KQogICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZCBjb25zdCAqKj4gKF9kYXRhKVtpXSA9IGRhdGE7
CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgVD4KICBTZW50
ZW5jZSAodmVyYl90eXBlIHZlcmIsIGFkdmVyYl90eXBlIGFkdmVyYiwgdW5zaWduZWQgZmxhZ3Ms
CiAgICAgICAgICAgIFQgY29uc3QgJmRhdGEpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFk
dmVyYiwgZmxhZ3MsIFQ6OmRlc2MoKS50eXBlX2lkLCAxKQogIHsKICAgIF9zaXplID0gbGluZWFy
X3NpemUgKyBMaW5nbzo6aW5mbyAoVDo6ZGVzYygpKS5saW5lYXJfc2l6ZTsKICAgIF9kYXRhID0g
Y29uc3RfY2FzdDxUICo+ICgmZGF0YSk7CiAgfQoKCiAgU2VudGVuY2UgKHZlcmJfdHlwZSB2ZXJi
LCBhZHZlcmJfdHlwZSBhZHZlcmIsIHVuc2lnbmVkIGZsYWdzLAogICAgICAgICAgICB2b2lkICpk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCiAgICA6IHNlbnRlbmNlX3R5cGUgKHZlcmIsIGFkdmVyYiwg
ZmxhZ3MsIHJpZF9zb2wzX25vX3JlY29yZCwgMSkKICB7CiAgICBfc2l6ZSA9IGxpbmVhcl9zaXpl
ICsgbGVuZ3RoOwogICAgX2RhdGEgPSBkYXRhOwogIH0KCgogIHZvaWQgYWR2ZXJiIChhZHZlcmJf
dHlwZSBhZHZlcmIpIHsgX2FkdmVyYiA9IGFkdmVyYjsgfQoKCiAgdmVyYl90eXBlIHZlcmIoKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDx2ZXJiX3R5cGU+IChfdmVyYik7IH0KICBhZHZlcmJf
dHlwZSBhZHZlcmIoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxhZHZlcmJfdHlwZT4gKF9h
ZHZlcmIpOyB9CiAgdW5zaWduZWQgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfZmxhZ3M7IH0KICB1
bnNpZ25lZCBub3VuKCkgY29uc3QgeyByZXR1cm4gX25vdW47IH0KICB1bnNpZ25lZCBjb3VudCgp
IGNvbnN0IHsgcmV0dXJuIF9jb3VudDsgfQogIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBfc2l6ZTsgfQoKICBib29sIGlzX2luZGV4KCkgY29uc3QgewogICAgcmV0dXJuIHNlbnRlbmNl
X2hlYWRlcl9kZWZzOjppc19pbmRleCAobm91bigpKTsgfQoKICB2b2lkICpjb25zdCAqYWxsX2Rh
dGEoKSBjb25zdCB7CiAgICByZXR1cm4gKF9jb3VudCA9PSAwID8gMCA6IF9jb3VudCA9PSAxCiAg
ICAgICAgICAgID8gJl9kYXRhIDogc3RhdGljX2Nhc3Q8dm9pZCAqKj4gKF9kYXRhKSk7IH0KCiAg
dm9pZCAqKmFsbF9kYXRhKCkgewogICAgcmV0dXJuIGNvbnN0X2Nhc3Q8dm9pZCAqKj4gKAogICAg
ICBzdGF0aWNfY2FzdDxTZW50ZW5jZSBjb25zdCAqPiAodGhpcyktPmFsbF9kYXRhKCkpOyB9Cgog
IHZvaWQgKmRhdGEgKHVuc2lnbmVkIHNob3J0IGkpIGNvbnN0IHsKICAgIHJldHVybiAoaSA+PSBf
Y291bnQgPyAwIDogX2NvdW50ID09IDEgPyBfZGF0YQogICAgICAgICAgICA6IHN0YXRpY19jYXN0
PHZvaWQgKio+IChfZGF0YSlbaV0pOyB9CgogIGJvb2wgc2NvcGVfZmxhZygpIGNvbnN0IHsKICAg
IHJldHVybiBfZmxhZ3MgJiBzZl9zdWJzY3JpYmU7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBUPgog
IGJvb2wgYWNjZXNzIChpbnQgaSwgVCAqJngpCiAgewogICAgaWYgKGxpbmdvICE9IFQ6Ol9saWQg
fHwgdHlwZSAhPSBUOjpfcmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoY291bnQgPD0g
aSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgeCA9IGNvdW50ID09IDEKICAgICAgPyBzdGF0aWNf
Y2FzdDxUICo+IChfZGF0YSkKICAgICAgOiBzdGF0aWNfY2FzdDxUICoqPiAoX2RhdGEpW2ldOwog
ICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgdm9pZCBmcmVlX2RhdGEoKQogIHsKICAgIGlmIChfY291
bnQgPiAxKSB7CiAgICAgIHVuc2lnbmVkIHNob3J0IGkgPSAwOwogICAgICBkbwogICAgICAgIGZy
ZWUgKHN0YXRpY19jYXN0PHZvaWQgKio+IChfZGF0YSlbaV0pOwogICAgICB3aGlsZSAoKytpIDwg
X2NvdW50KTsgfQogICAgX2NvdW50ID0gMDsKICAgIGZyZWUgKF9kYXRhKTsKICAgIF9kYXRhID0g
MDsKICB9CgoKCgogIGNoYXIgKnRvX3N0cmluZyAoY2hhciAqcywgdW5zaWduZWQgbikgY29uc3Qg
X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgogIHVuc2lnbmVk
IHN0ZWFsX2RhdGEgKHZvaWQgKipwID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyks
X19zdGRjYWxsX18pKTsKCgogIHZvaWQgZGVlcGVuKCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJt
X18oMyksX19zdGRjYWxsX18pKTsKCgogIHZvaWQgcHJldHR5X3ByaW50IChMb2cgJiwgTG9nOjpw
cmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgY2hhciBjb25zdCAqd2hlcmUsIGludCBpbmRl
bnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBSPgpjbGFzcyBTZW50ZW5jZVQgOiBwdWJsaWMgU2VudGVuY2UKewpw
dWJsaWM6CiAgU2VudGVuY2VUKCkge30KICBTZW50ZW5jZVQgKHZlcmJfdHlwZSB2ZXJiLAogICAg
ICAgICAgICAgYWR2ZXJiX3R5cGUgYWR2ZXJiLAogICAgICAgICAgICAgdW5zaWduZWQgZmxhZ3Ms
CiAgICAgICAgICAgICBSICoqciwKICAgICAgICAgICAgIHVuc2lnbmVkIG4pCiAgICA6IFNlbnRl
bmNlICh2ZXJiLCBhZHZlcmIsIGZsYWdzLCAxLCAmcikge30KCiAgU2VudGVuY2VUICh2ZXJiX3R5
cGUgdmVyYiwKICAgICAgICAgICAgIGFkdmVyYl90eXBlIGFkdmVyYiwKICAgICAgICAgICAgIHVu
c2lnbmVkIGZsYWdzLAogICAgICAgICAgICAgUiAmcikKICAgIDogU2VudGVuY2UgKHZlcmIsIGFk
dmVyYiwgZmxhZ3MsIFI6OmRlc2MoKSwgJnIpIHt9CgoKICBTZW50ZW5jZVQgKFNlbnRlbmNlVDxS
PiAmcykgOiBTZW50ZW5jZSAocykge30KICBTZW50ZW5jZVQgJm9wZXJhdG9yPSAoU2VudGVuY2VU
PFI+ICZzKSB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2VudGVuY2VUICY+IChTZW50ZW5jZTo6
b3BlcmF0b3I9IChzKSk7IH0KCgogIFIgKmNvbnN0ICphbGwoKSBjb25zdCB7CiAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxSICpjb25zdCAqPiAoYWxsX2RhdGEoKSk7IH0KCiAgUiAqYXQgKHVu
c2lnbmVkIGkpIHsgcmV0dXJuIHN0YXRpY19jYXN0PFIgKj4gKGRhdGEgKGkpKTsgfQogIFIgJm9w
ZXJhdG9yW10gKHVuc2lnbmVkIGkpIHsgcmV0dXJuICphdCAoaSk7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgUj4KaW5saW5lIFNlbnRlbmNlVDxSPiAqaXNfYSAoU2VudGVuY2UgKnMsIFNlbnRlbmNl
VDxSPiAqJnQpIHsKICByZXR1cm4gdCA9IChzLT5ub3VuKCkgPT0gUjo6X3JpZAogICAgICAgICAg
ICAgID8gc3RhdGljX2Nhc3Q8U2VudGVuY2VUPFI+ICo+IChzKQogICAgICAgICAgICAgIDogMCk7
IH0KCnRlbXBsYXRlIDxjbGFzcyBSPgppbmxpbmUgU2VudGVuY2VUPFI+IGNvbnN0ICppc19hIChT
ZW50ZW5jZSBjb25zdCAqcywgU2VudGVuY2VUPFI+IGNvbnN0IComdCkgewogIHJldHVybiB0ID0g
KHMtPm5vdW4oKSA9PSBSOjpfcmlkCiAgICAgICAgICAgICAgPyBzdGF0aWNfY2FzdDxTZW50ZW5j
ZVQ8Uj4gY29uc3QgKj4gKHMpCiAgICAgICAgICAgICAgOiAwKTsgfQoKCnN0cnVjdCBtZXNzYWdl
X2hlYWRlcl90eXBlCnsKICB1bnNpZ25lZCBfc2l6ZTsKICBwYXJ0bmVyX2lkX3R5cGUgX3NlbmRl
cjsKICBtZXNzYWdlX3JlZl90eXBlIF9teV9yZWY7CiAgbWVzc2FnZV9yZWZfdHlwZSBfeXJfcmVm
OwoKCiAgZW51bSB7IGxpbmVhcl9zaXplID0gNCB9OwoKICBtZXNzYWdlX2hlYWRlcl90eXBlIChw
YXJ0bmVyX2lkX3R5cGUgc2VuZGVyLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVm
X3R5cGUgbXlfcmVmLAogICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfcmVmX3R5cGUgeXJf
cmVmKQogICAgOiBfc2l6ZSAobGluZWFyX3NpemUpCiAgICAsIF9zZW5kZXIgKHNlbmRlcikKICAg
ICwgX215X3JlZiAobXlfcmVmKQogICAgLCBfeXJfcmVmICh5cl9yZWYpIHt9Cn07CgoKY2xhc3Mg
TWVzc2FnZSA6IHB1YmxpYyBRdWV1ZTxNZXNzYWdlPjo6Tm9kZSwKICAgICAgICAgICAgICAgIHB1
YmxpYyBRdWV1ZTxTZW50ZW5jZT4sCiAgICAgICAgICAgICAgICBwcml2YXRlIG1lc3NhZ2VfaGVh
ZGVyX3R5cGUKewpwdWJsaWM6CiAgTWVzc2FnZSgpCiAgICA6IG1lc3NhZ2VfaGVhZGVyX3R5cGUg
KDAsIDAsIDApIHt9CgogIE1lc3NhZ2UgKHBhcnRuZXJfaWRfdHlwZSBzZW5kZXIpCiAgICA6IG1l
c3NhZ2VfaGVhZGVyX3R5cGUgKHNlbmRlciwgMCwgMCkge30KCiAgTWVzc2FnZSAobWVzc2FnZV9y
ZWZfdHlwZSBteV9yZWYsCiAgICAgICAgICAgbWVzc2FnZV9yZWZfdHlwZSB5cl9yZWYpCiAgICA6
IG1lc3NhZ2VfaGVhZGVyX3R5cGUgKDAsIG15X3JlZiwgeXJfcmVmKSB7fQoKICBNZXNzYWdlIChT
ZW50ZW5jZSAmcywKICAgICAgICAgICBtZXNzYWdlX3JlZl90eXBlIG15X3JlZiA9IDAsCiAgICAg
ICAgICAgbWVzc2FnZV9yZWZfdHlwZSB5cl9yZWYgPSAwKQogICAgOiBtZXNzYWdlX2hlYWRlcl90
eXBlICgwLCBteV9yZWYsIHlyX3JlZikgewogICAgYWRkIChzKTsgfQoKICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gX3NpemU7IH0KICBwYXJ0bmVyX2lkX3R5cGUgc2VuZGVyKCkgY29u
c3QgeyByZXR1cm4gX3NlbmRlcjsgfQogIG1lc3NhZ2VfcmVmX3R5cGUgbXlfcmVmKCkgY29uc3Qg
eyByZXR1cm4gX215X3JlZjsgfQogIG1lc3NhZ2VfcmVmX3R5cGUgeXJfcmVmKCkgY29uc3QgeyBy
ZXR1cm4gX3lyX3JlZjsgfQoKCiAgdm9pZCBzZXRfbXlfcmVmIChtZXNzYWdlX3JlZl90eXBlIHIp
IHsgX215X3JlZiA9IHI7IH0KICB2b2lkIHNldF95cl9yZWYgKG1lc3NhZ2VfcmVmX3R5cGUgcikg
eyBfeXJfcmVmID0gcjsgfQoKICB2b2lkIGFkZCAoU2VudGVuY2UgJnMpCiAgewogICAgX3NpemUg
Kz0gcy5zaXplKCk7CiAgICBxX2FkZCAoJnMpOwogIH0KCiAgU2VudGVuY2UgKnJlbW92ZSgpCiAg
ewogICAgU2VudGVuY2UgKnMgPSBxX3JlbW92ZSgpOwogICAgaWYgKHMpCiAgICAgIF9zaXplIC09
IHMtPnNpemUoKTsKICAgIHJldHVybiBzOwogIH0KCiAgdm9pZCBsaW5lYXJpemUgKG9jdGV0X3R5
cGUgKiYpIGNvbnN0IF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CiAgYm9vbCBkZV9saW5lYXJpemUgKHBhcnRuZXJfaWRfdHlwZSBzZW5kZXIsCiAgICAgICAgICAg
ICAgICAgICAgIG9jdGV0X3R5cGUgY29uc3QgKiYsIHVuc2lnbmVkLCBMb2c6OnByaW9yaXR5KSBf
X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCiAgYm9vbCBpc19s
YXN0KCkgY29uc3QgewogICAgcmV0dXJuIHFfbGFzdCgpID09IDAgfHwgcV9sYXN0KCktPmFkdmVy
YigpICE9IGF2X2NvbnRkOyB9CgoKICB2b2lkIGZyZWVfZGF0YSgpIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKICB2b2lkIHByZXR0eV9wcmludCAoTG9nICYs
IExvZzo6cHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgY29uc3QgKndoZXJlLCBp
bnQgaW5kZW50ID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKCgogIGNsYXNzIEhhbmRsZXIKICB7CiAgcHVibGljOgogICAgdmlydHVhbCB+SGFuZGxlcigp
OwogICAgdmlydHVhbCBib29sIGhhbmRsZSAoTWVzc2FnZSAmKSA9IDA7CiAgfTsKfTsKCmNsYXNz
IHN0cnZhcl90eXBlOwoKCgp1bnNpZ25lZCBucGFyZW50cyAocmVjb3JkX3R5cGUgY29uc3QgJikg
X19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9f
KChfX2NvbnN0X18pKTsKdW5zaWduZWQgbm1lbWJlcnMgKHJlY29yZF90eXBlIGNvbnN0ICYpIF9f
YXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygo
X19jb25zdF9fKSk7CnVuc2lnbmVkIG5tZW1iZXJzICggaW5kZXhfdHlwZSBjb25zdCAmKSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9f
Y29uc3RfXykpOwoKCnVuc2lnbmVkIGNvbHVtbnMgKHJlY29yZF90eXBlIGNvbnN0ICYpIF9fYXR0
cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19j
b25zdF9fKSk7CnVuc2lnbmVkIGNvbHVtbnMgKCBpbmRleF90eXBlIGNvbnN0ICYpIF9fYXR0cmli
dXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25z
dF9fKSk7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIGVsZW1lbnRfc2l6ZV90OwpleHRlcm4g
ZWxlbWVudF9zaXplX3QgY29uc3QgbGluZWFyX2VsZW1lbnRfc3pbXTsKCnVuc2lnbmVkIHNpemVf
b2YgKGZpZWxkX3R5cGUgY29uc3QgKiwgZWxlbWVudF9zaXplX3QgY29uc3QgKgogICAgICAgICAg
ICAgICAgICA9IGxpbmVhcl9lbGVtZW50X3N6KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz
KSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpOwp1bnNpZ25lZCBzaXpl
X29mIChtZW1iZXJfdHlwZSBjb25zdCAqLCBlbGVtZW50X3NpemVfdCBjb25zdCAqCiAgICAgICAg
ICAgICAgICAgID0gbGluZWFyX2VsZW1lbnRfc3opIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f
KDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CnVuc2lnbmVkIHNp
emVfb2YgKHJlY29yZF90eXBlIGNvbnN0ICYsIGVsZW1lbnRfc2l6ZV90IGNvbnN0ICoKICAgICAg
ICAgICAgICAgICAgPSBsaW5lYXJfZWxlbWVudF9zeikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJt
X18oMyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKdW5zaWduZWQg
c2l6ZV9vZiAoaW5kZXhfdHlwZSBjb25zdCAmLCBlbGVtZW50X3NpemVfdCBjb25zdCAqCiAgICAg
ICAgICAgICAgICAgID0gbGluZWFyX2VsZW1lbnRfc3opIF9fYXR0cmlidXRlX18oKF9fcmVncGFy
bV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CgoKdW5zaWdu
ZWQgb2Zmc2V0X29mIChyZWNvcmRfdHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBjb25zdCAqLAog
ICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfc2l6ZV90IGNvbnN0ICopIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7
CgoKCgpib29sIHNlYXJjaF9wYXJlbnRfKHJlY29yZF90eXBlIGNvbnN0ICZzZWFyY2gsIHJlY29y
ZF90eXBlIGNvbnN0ICZjaGlsZCwKICAgICAgICAgICAgICAgICAgICBpbnQgJm9mZnNldCkgX19h
dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5saW5lCmJvb2wgc2Vh
cmNoX3BhcmVudCAocmVjb3JkX3R5cGUgY29uc3QgJnNlYXJjaCwgcmVjb3JkX3R5cGUgY29uc3Qg
JmNoaWxkLAogICAgICAgICAgICAgICAgICAgIGludCAmb2Zmc2V0KSB7CiAgcmV0dXJuICZzZWFy
Y2ggPT0gJmNoaWxkIHx8IHNlYXJjaF9wYXJlbnRfIChzZWFyY2gsIGNoaWxkLCBvZmZzZXQpOyB9
CgoKYm9vbCBzZWFyY2hfbWVtYmVyIChyZWNvcmRfdHlwZSBjb25zdCAmLCBtZW1iZXJfdHlwZSBj
b25zdCAmLAogICAgICAgICAgICAgICAgICAgIGludCAmb2Zmc2V0KSBfX2F0dHJpYnV0ZV9fKChf
X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCm1lbWJlcl90eXBlIGNvbnN0ICpzZWFyY2hf
bWVtYmVyICgKICByZWNvcmRfdHlwZSBjb25zdCAmLCBjaGFyIGNvbnN0ICpuYW1lLCBpbnQgJm9m
ZnNldCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5kZXhf
bWVtYmVyX3R5cGUgY29uc3QgKnNlYXJjaF9tZW1iZXIgKAogIGluZGV4X3R5cGUgY29uc3QgJiwg
Y2hhciBjb25zdCAqbmFtZSwgaW50ICZvZmZzZXQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9f
KDMpLF9fc3RkY2FsbF9fKSk7CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgcGFyZW50X3QsIGNsYXNz
IGNoaWxkX3B0cl90PgppbmxpbmUgcGFyZW50X3QKZ2VuZXJpY19jYXN0IChyZWNvcmRfdHlwZSBj
b25zdCAmY2hpbGRfZGVzYywgY2hpbGRfcHRyX3QgKmNoaWxkX3JlY29yZCkKewogIGlmIChjaGls
ZF9yZWNvcmQgPT0gMCkKICAgIHJldHVybiAwOwogIGludCBvZmZzID0gMDsKICBpZiAoIXNlYXJj
aF9wYXJlbnQgKHBhcmVudF90ICgwKS0+ZGVzYygpLCBjaGlsZF9kZXNjLCBvZmZzKSkKICAgIHJl
dHVybiAwOwogIHJldHVybiBpbmNyZW1lbnRlZCAoc3RhdGljX2Nhc3Q8cGFyZW50X3Q+IChjaGls
ZF9yZWNvcmQpLCBvZmZzKTsKfQoKCnZvaWQgKmR1cCAocmVjb3JkX3R5cGUgY29uc3QgJiwgdm9p
ZCBjb25zdCAqKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwpp
bmRleF9iYXNlX3R5cGUgKmR1cCAoaW5kZXhfdHlwZSBjb25zdCAmLCBpbmRleF9iYXNlX3R5cGUg
Y29uc3QgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgcmVjb3JkX3R5cGU+IGlubGluZQpyZWNvcmRfdHlwZSAqaGVhcF9jb3B5
IChyZWNvcmRfdHlwZSBjb25zdCAmcmVjKSB7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHJlY29yZF90
eXBlICo+IChkdXAgKHJlYy5kZXNjKCksICZyZWMpKTsgfQoKCnZvaWQgaW5pdGlhbGl6ZSAocmVj
b3JkX3R5cGUgY29uc3QgJiwgdm9pZCAqKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxf
X3N0ZGNhbGxfXykpOwp2b2lkIGluaXRpYWxpemUgKGluZGV4X3R5cGUgY29uc3QgJiwgaW5kZXhf
YmFzZV90eXBlICprZXkpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f
KSk7CgoKdW5zaWduZWQgbm9uX251bGwgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LCBpbmRleF9i
YXNlX3R5cGUgY29uc3QgKmtleSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKdGVtcGxhdGUgPGNsYXNzIGtleV90PiBpbmxpbmUgdm9pZCBzZXRfc3BlY2lmaWVk
IChrZXlfdCAma2V5KSB7CiAga2V5Ll9zcGVjaWZpZWQgPSBub25fbnVsbCAoa2V5LmRlc2MoKSwg
JmtleSk7IH0KCgpib29sIGlzX2FsbF9zZXQgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LCB2b2lk
IGNvbnN0ICpyZWNvcmQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f
KSk7CgoKdm9pZCBsaW5lYXJpemUgKHJlY29yZF90eXBlIGNvbnN0ICYsIHZvaWQgY29uc3QgKiwg
b2N0ZXRfdHlwZSAqJikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKdm9pZCBkZV9saW5lYXJpemUgKHJlY29yZF90eXBlIGNvbnN0ICYsIG9jdGV0X3R5cGUgY29u
c3QgKiYsIHZvaWQgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKCgp2b2lkIGxpbmVhcml6ZSAoaW5kZXhfdHlwZSBjb25zdCAmLAogICAgICAgICAgICAgICAg
ICAgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICosIG9jdGV0X3R5cGUgKiYpIF9fYXR0cmlidXRlX18o
KF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgZGVfbGluZWFyaXplIChpbmRleF90
eXBlIGNvbnN0ICYsCiAgICAgICAgICAgICAgICAgICBvY3RldF90eXBlIGNvbnN0IComLCBpbmRl
eF9iYXNlX3R5cGUgKikgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18p
KTsKCgplbnVtIHsgdmFsaWRhdGVfZXhwbGFpbl9sZW5ndGggPSA4MCB9Owpib29sIHZhbGlkYXRl
IChyZWNvcmRfdHlwZSBjb25zdCAmLCB2b2lkIGNvbnN0ICosIGNoYXIgKmV4cGxhaW4pIF9fYXR0
cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CmJvb2wgdmFsaWRhdGUgKGlu
ZGV4X3R5cGUgY29uc3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICosIGNoYXIgKikgX19hdHRy
aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgp1bnNpZ25lZCBoYXNoX3Jl
Y29yZCAocmVjb3JkX3R5cGUgY29uc3QgJmRlc2MsIHZvaWQgY29uc3QgKnJlYykgX19hdHRyaWJ1
dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKdW5zaWduZWQgaGFzaF9yZWNv
cmQgKGluZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqcmVjKSBfX2F0dHJpYnV0ZV9fKChf
X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKdW5zaWduZWQgaGFzaF9rZXkgKGluZGV4
X3R5cGUgY29uc3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9f
cmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKaW50IGNvbXBhcmVfZmllbGRzIChmaWVsZF90
eXBlIGNvbnN0ICpmaWVsZCwKICAgICAgICAgICAgICAgICAgICB2b2lkIGNvbnN0ICpmMSwgdm9p
ZCBjb25zdCAqZjIsIHVuc2lnbmVkIG4sCiAgICAgICAgICAgICAgICAgICAgaW50ICZzcGVjaWZp
ZWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKaW50IGNv
bXBhcmVfcmVjb3JkcyAocmVjb3JkX3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqLCB2b2lkIGNv
bnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCmlu
dCBjb21wYXJlX3JlY29yZHMgKGluZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqLCB2b2lk
IGNvbnN0ICopIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoK
CgppbnQgY29tcGFyZV9rZXlzIChpbmRleF90eXBlIGNvbnN0ICYsIGludCBzcGVjaWZpZWQsCiAg
ICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqLCBpbmRleF9iYXNlX3R5cGUg
Y29uc3QgKiwKICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdXNpdmUgPSBmYWxzZSkgX19hdHRy
aWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKaW5saW5lIGludCBjb21wYXJl
X2tleXMgKGluZGV4X3R5cGUgY29uc3QgJmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhfYmFzZV90eXBlIGNvbnN0ICprMSwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICprMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVzaXZlID0gZmFsc2UpIHsKICByZXR1cm4g
Y29tcGFyZV9rZXlzIChpbmRleCwgTWluIChrMS0+X3NwZWNpZmllZCwgazItPl9zcGVjaWZpZWQp
LAogICAgICAgICAgICAgICAgICAgICAgIGsxLCBrMiwgaW5jbHVzaXZlKTsgfQoKCmludCBzcGVj
aWZpZWRfc2FtZSAoaW5kZXhfdHlwZSBjb25zdCAmLAogICAgICAgICAgICAgICAgICAgIGluZGV4
X2Jhc2VfdHlwZSBjb25zdCAqLCBpbmRleF9iYXNlX3R5cGUgY29uc3QgKikgX19hdHRyaWJ1dGVf
XygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgppbnQgY29tcGFyZV9rZXlfcmVjb3Jk
IChpbmRleF90eXBlIGNvbnN0ICYsCiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2Vf
dHlwZSBjb25zdCAqa2V5LCB2b2lkIGNvbnN0ICpyZWNvcmQpIF9fYXR0cmlidXRlX18oKF9fcmVn
cGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CgoKCnZvaWQgKmNvcHkgKAogIGluZGV4X3R5cGUgY29u
c3QgJiwgaW5kZXhfYmFzZV90eXBlIGNvbnN0ICprLCB2b2lkICpyKSBfX2F0dHJpYnV0ZV9fKChf
X3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwppbmRleF9iYXNlX3R5cGUgKmNvcHkgKAogIGlu
ZGV4X3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqciwgaW5kZXhfYmFzZV90eXBlICprKSBfX2F0
dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgppbmRleF9iYXNlX3R5
cGUgKgpjb3B5IChpbmRleF90eXBlIGNvbnN0ICYsIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqLAog
ICAgICBpbmRleF90eXBlIGNvbnN0ICYsIGluZGV4X2Jhc2VfdHlwZSAqKSBfX2F0dHJpYnV0ZV9f
KChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpOwoKCgoKCnN0cnVjdCB1cGRhdGVfdGVzdGVy
X3Vuc2V0OwpzdHJ1Y3QgdXBkYXRlX3Rlc3Rlcl9jaGFuZ2VkOwp0ZW1wbGF0ZSA8Y2xhc3M+IGJv
b2wgdXBkYXRlX3JlY29yZCAoCiAgcmVjb3JkX3R5cGUgY29uc3QgJiwgdm9pZCBjb25zdCAqc3Jj
LCB2b2lkICpkc3QpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7
CgppbmxpbmUgYm9vbCB1cGRhdGVfdW5zZXQgKHJlY29yZF90eXBlIGNvbnN0ICZkLCB2b2lkIGNv
bnN0ICpzcmMsIHZvaWQgKmRzdCkgewogIHJldHVybiB1cGRhdGVfcmVjb3JkPHVwZGF0ZV90ZXN0
ZXJfdW5zZXQ+IChkLCBzcmMsIGRzdCk7IH0KaW5saW5lIGJvb2wgdXBkYXRlX2NoYW5nZWQgKHJl
Y29yZF90eXBlIGNvbnN0ICZkLCB2b2lkIGNvbnN0ICpzcmMsIHZvaWQgKmRzdCkgewogIHJldHVy
biB1cGRhdGVfcmVjb3JkPHVwZGF0ZV90ZXN0ZXJfY2hhbmdlZD4gKGQsIHNyYywgZHN0KTsgfQoK
dGVtcGxhdGUgPGNsYXNzIHNvbWVfdD4gaW5saW5lIGJvb2wgdXBkYXRlX3Vuc2V0IChzb21lX3Qg
Y29uc3QgJnMsIHNvbWVfdCAmZCkgewogIHJldHVybiB1cGRhdGVfdW5zZXQgKHMuZGVzYygpLCAm
cywgJmQpOyB9CnRlbXBsYXRlIDxjbGFzcyBzb21lX3Q+IGlubGluZSBib29sIHVwZGF0ZV9jaGFu
Z2VkIChzb21lX3QgY29uc3QgJnMsIHNvbWVfdCAmZCl7CiAgcmV0dXJuIHVwZGF0ZV9jaGFuZ2Vk
IChzLmRlc2MoKSwgJnMsICZkKTsgfQoKCgoKCgoKY2xhc3MgVGV4dFNpbmsKewpwdWJsaWM6CiAg
dmlydHVhbCBpbnQgdiAoY2hhciBjb25zdCAqLCB2YV9saXN0KSA9IDA7CgogIGludCBvcGVyYXRv
cigpIChjaGFyIGNvbnN0ICogLi4uKQogICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKHBy
aW50ZiwgMiwgMykpKTsKfTsKCgpjbGFzcyBUZXh0RmlsZVNpbmsgOiBwdWJsaWMgVGV4dFNpbmsK
ewogIEZJTEUgKl9mOwpwdWJsaWM6CiAgdmlydHVhbCB+VGV4dEZpbGVTaW5rKCk7CiAgVGV4dEZp
bGVTaW5rIChGSUxFICpmKSA6IF9mIChmKSB7fQogIHZpcnR1YWwgaW50IHYgKGNoYXIgY29uc3Qg
KiwgdmFfbGlzdCk7Cn07CgoKY2xhc3MgVGV4dEJ1ZmZlciA6IHB1YmxpYyBUZXh0U2luawp7CiAg
Y2hhciAqcHRyOwoKcHVibGljOgogIFRleHRCdWZmZXIoKSA6IHB0ciAoMCkge30KICB2aXJ0dWFs
IGludCB2IChjaGFyIGNvbnN0ICosIHZhX2xpc3QpOwoKICBvcGVyYXRvciBjaGFyIGNvbnN0ICoo
KSBjb25zdCB7IHJldHVybiBwdHI7IH0KfTsKCgoKCgoKCmNsYXNzIExvZ1NpbmsgOiBwdWJsaWMg
VGV4dFNpbmsKewogIExvZyAmX2xvZzsKICBMb2c6OnByaW9yaXR5IF9wcmlvcml0eTsKICB1bnNp
Z25lZCBfbGluZTsKCnB1YmxpYzoKICBMb2dTaW5rIChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBw
cmlvcml0eSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKICB2
aXJ0dWFsIH5Mb2dTaW5rKCk7CiAgdmlydHVhbCBpbnQgdiAoY2hhciBjb25zdCAqLCB2YV9saXN0
KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCmNoYXIgY29uc3QgKgppZF9vcl9uaWwg
KGNoYXIgYnVmWzEwXSwgVCBjb25zdCAmeCkKewogIGlmICh4LmlzX251bGwoKSkKICAgIHJldHVy
biAiTlVMTCI7CiAgc25wcmludGYgKGJ1ZiwgMTAsICIldSIsIHgoKSk7CiAgcmV0dXJuIGJ1ZjsK
fQoKY2hhciBjb25zdCAqZ2V0X3R5cGVfbmFtZSAoY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIHVu
c2lnbmVkIHR5cGVfaWQpIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9f
KSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gaW5saW5lCmNoYXIgY29uc3QgKgp0eXBlX25hbWUgKGNo
YXIgYnVmWzIwXSwgVCBjb25zdCAmeCkKewogIGlmICh4LmlzX251bGwoKSkKICAgIHJldHVybiAi
TlVMTCI7CiAgZ2V0X3R5cGVfbmFtZSAoYnVmLCAyMCwgeCgpKTsKICByZXR1cm4gYnVmOwp9CgoK
CnZvaWQgcHJldHR5X3ByaW50IChUZXh0U2luayAmLCBjaGFyIGNvbnN0ICpuYW1lLAogICAgICAg
ICAgICAgICAgICAgcmVjb3JkX3R5cGUgY29uc3QgJiwKICAgICAgICAgICAgICAgICAgIHZvaWQg
Y29uc3QgKmRhdGEsIGludCBpbmRlbnQgPSAwKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz
KSxfX3N0ZGNhbGxfXykpOwp2b2lkIHByZXR0eV9wcmludCAoVGV4dFNpbmsgJiwgY2hhciBjb25z
dCAqbmFtZSwKICAgICAgICAgICAgICAgICAgIGluZGV4X3R5cGUgY29uc3QgJiwKICAgICAgICAg
ICAgICAgICAgIGluZGV4X2Jhc2VfdHlwZSBjb25zdCAqa2V5LCBpbnQgaW5kZW50ID0gMCkgX19h
dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGU8Y2xhc3Mg
dGhpbmdfdD4gaW5saW5lCnZvaWQgcHJldHR5X3ByaW50IChUZXh0U2luayAmc2luaywgY2hhciBj
b25zdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgIHRoaW5nX3QgJnRoaW5nLCBpbnQgaW5kZW50
ID0gMCkgewogIHByZXR0eV9wcmludCAoc2luaywgbmFtZSwgdGhpbmcuZGVzYygpLCAmdGhpbmcs
IGluZGVudCk7IH0KCgp2b2lkIHByZXR0eV9wcmludCAoTG9nICYsIExvZzo6cHJpb3JpdHksIGNo
YXIgY29uc3QgKm5hbWUsCiAgICAgICAgICAgICAgICAgICByZWNvcmRfdHlwZSBjb25zdCAmLAog
ICAgICAgICAgICAgICAgICAgdm9pZCBjb25zdCAqZGF0YSwgaW50IGluZGVudCA9IDApIF9fYXR0
cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3RkY2FsbF9fKSk7CnZvaWQgcHJldHR5X3ByaW50
IChMb2cgJiwgTG9nOjpwcmlvcml0eSwgY2hhciBjb25zdCAqbmFtZSwKICAgICAgICAgICAgICAg
ICAgIGluZGV4X3R5cGUgY29uc3QgJiwKICAgICAgICAgICAgICAgICAgIGluZGV4X2Jhc2VfdHlw
ZSBjb25zdCAqa2V5LCBpbnQgaW5kZW50ID0gMCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o
MyksX19zdGRjYWxsX18pKTsKdGVtcGxhdGU8Y2xhc3MgdGhpbmdfdD4gaW5saW5lCnZvaWQgcHJl
dHR5X3ByaW50IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwgY2hhciBjb25zdCAq
bmFtZSwKICAgICAgICAgICAgICAgICAgIHRoaW5nX3QgJnRoaW5nLCBpbnQgaW5kZW50ID0gMCkg
ewogIHByZXR0eV9wcmludCAobG9nLCBwcmlvcml0eSwgbmFtZSwgdGhpbmcuZGVzYygpLCAmdGhp
bmcsIGluZGVudCk7IH0KCnRlbXBsYXRlIDxjbGFzcyBkZXNjX3Q+CnZvaWQgcHJldHR5X3ByaW50
IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvLCBjaGFyIGNvbnN0ICp3aGVyZSwgaW50IGlu
ZGVudCwKICAgICAgICAgICAgICAgICAgIGRlc2NfdCBjb25zdCAmZGVzYywgdm9pZCBjb25zdCAq
Y29uc3QgKnAsIHVuc2lnbmVkIG4pIF9fYXR0cmlidXRlX18oKF9fcmVncGFybV9fKDMpLF9fc3Rk
Y2FsbF9fKSk7CmZsb2F0IHBvdzEwaWYgKGludCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18o
MyksX19zdGRjYWxsX18pKSBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKTsKZG91YmxlIHBvdzEw
aSAoaW50KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0
cmlidXRlX18oKF9fY29uc3RfXykpOwoKCgoKCgoKbG9uZyBkb3VibGUgcG93MTBpbCAoaW50KSBf
X2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18o
KF9fY29uc3RfXykpOwoKCgoKaW5saW5lIGZsb2F0IHBvdzEwaSAoZmxvYXQgeCwgaW50IG4pIHsg
cmV0dXJuIHggKiBwb3cxMGlmIChuKTsgfQppbmxpbmUgZG91YmxlIHBvdzEwaSAoZG91YmxlIHgs
IGludCBuKSB7IHJldHVybiB4ICogcG93MTBpIChuKTsgfQppbmxpbmUgbG9uZyBkb3VibGUgcG93
MTBpIChsb25nIGRvdWJsZSB4LCBpbnQgbikgeyByZXR1cm4geCAqIHBvdzEwaWwgKG4pOyB9CgoK
ZXh0ZXJuIGRvdWJsZSBjb25zdCBlZnAxaV90YmxbMzFdOwppbmxpbmUgZG91YmxlIGVmX3BvdzEw
aSAoaW50IG4pIHsKICByZXR1cm4gLTEwIDw9IG4gJiYgbiA8PSAyMCA/IGVmcDFpX3RibFtuICsg
MTBdIDogcG93MTBpIChuKTsgfQppbnQgZm9ybWF0IChsb25nIGRvdWJsZSB4LCBpbnQgZiwgY2hh
ciAqcywgaW50IGwsIGJvb2wgcGx1cyA9IGZhbHNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1f
XygzKSxfX3N0ZGNhbGxfXykpOwoKaW50IGZvcm1hdCAoIGRvdWJsZSB4LCBpbnQgZiwgY2hhciAq
cywgaW50IGwsIGJvb2wgcGx1cyA9IGZhbHNlKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygz
KSxfX3N0ZGNhbGxfXykpOwppbnQgZm9ybWF0ICggZmxvYXQgeCwgaW50IGYsIGNoYXIgKnMsIGlu
dCBsLCBib29sIHBsdXMgPSBmYWxzZSkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19z
dGRjYWxsX18pKTsKCgpkb3VibGUgcGljdHVyZSAoZG91YmxlIGRibGUsIGNoYXIgY29uc3QgKmZv
cm1hdCwgY2hhciAqb3V0cHV0KSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNh
bGxfXykpOwpkb3VibGUgcm91bmRfdG9fZGVjaW1hbF9wcmVjaXNvbiAoZG91YmxlLCBpbnQgcGxh
Y2VzKSBfX2F0dHJpYnV0ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmli
dXRlX18oKF9fY29uc3RfXykpOwpkb3VibGUgcHJvbW90ZV9kZWNpbWFsIChkb3VibGUgeCkgX19h
dHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRjYWxsX18pKTsKCgoKCgppbnQgZnJhY3Rp
b25hbF9kZWNpbWFscyAoZmxvYXQsIGZsb2F0IGggPSAxMDApIF9fYXR0cmlidXRlX18oKF9fcmVn
cGFybV9fKDMpLF9fc3RkY2FsbF9fKSkgX19hdHRyaWJ1dGVfXygoX19jb25zdF9fKSk7CmludCBm
cmFjdGlvbmFsX2RlY2ltYWxzIChkb3VibGUsIGRvdWJsZSBoID0gMTAwMDAwKSBfX2F0dHJpYnV0
ZV9fKChfX3JlZ3Bhcm1fXygzKSxfX3N0ZGNhbGxfXykpIF9fYXR0cmlidXRlX18oKF9fY29uc3Rf
XykpOwoKCmJvb2wgc2Nhbl9tb25ldGFyeSAoY2hhciBjb25zdCAqJnAsIGRvdWJsZSAmZCwgY2hh
ciBzZXAsIGNoYXIgZGVjaW1hbCkgX19hdHRyaWJ1dGVfXygoX19yZWdwYXJtX18oMyksX19zdGRj
YWxsX18pKTsKaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBjb25zdCAqc3RyLCBmbG9hdCAm
dmFsLCBpbnQgYmFzZSA9IDEwKSB7IGNoYXIgKmVuZDsgdmFsID0gc3RydG9kIChzdHIsICZlbmQp
OyByZXR1cm4gZW5kWzBdID09ICdcMCc7IH0KaW5saW5lIGJvb2wgc3RyX3RvX251bSAoY2hhciBj
b25zdCAqc3RyLCBkb3VibGUgJnZhbCwgaW50IGJhc2UgPSAxMCkgeyBjaGFyICplbmQ7IHZhbCA9
IHN0cnRvZCAoc3RyLCAmZW5kKTsgcmV0dXJuIGVuZFswXSA9PSAnXDAnOyB9CgoKCgp1bmlvbiBs
aW5fbWFwXzIgewogIG9jdGV0X3R5cGUgeFtfc2hvcnRfc2l6ZV07CiAgdW5zaWduZWQgc2hvcnQg
bjsgfTsKCnVuaW9uIGxpbl9tYXBfNCB7CiAgb2N0ZXRfdHlwZSB4W19pbnRfc2l6ZV07CiAgdW5z
aWduZWQgaW50IG47CiAgZmxvYXQgeTsgfTsKCnVuaW9uIGxpbl9tYXBfOCB7CiAgb2N0ZXRfdHlw
ZSB4W19sb25nX3NpemVdOwogIHVsbG9uZ190IG47CiAgZG91YmxlIHk7IH07CgppbmxpbmUgdm9p
ZApsaW5lYXJpemVfMiAodW5zaWduZWQgc2hvcnQgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBp
bnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKCiAgICAgICpy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0ICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7
IHJlZ2lzdGVyIHVuc2lnbmVkIHNob3J0IGludCBfX3YsIF9feCA9IChyW2ldKTsgaWYgKF9fYnVp
bHRpbl9jb25zdGFudF9wIChfX3gpKSBfX3YgPSAoKCgoX194KSA+PiA4KSAmIDB4ZmYpIHwgKCgo
X194KSAmIDB4ZmYpIDw8IDgpKTsgZWxzZSBfX2FzbV9fICgicm9ydyAkOCwgJXcwIiA6ICI9ciIg
KF9fdikgOiAiMCIgKF9feCkgOiAiY2MiKTsgX192OyB9KSk7CiAgICAgIHAgKz0gMjsKCgoKCgoK
ICAgIH0KfQoKaW5saW5lIHZvaWQKbGluZWFyaXplXzMgKHVuc2lnbmVkIGludCBjb25zdCAqciwg
b2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGxpbl9tYXBfNCBtOwogIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICBtLm4gPSByW2ldOwogICAgICBwWzBdID0gbS54
W19pbnRfMV07CiAgICAgIHBbMV0gPSBtLnhbX2ludF8yXTsKICAgICAgcFsyXSA9IG0ueFtfaW50
XzNdOwogICAgICBwICs9IDM7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6ZV80ICh1bnNp
Z25lZCBpbnQgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBpbnQgbiA9IDEpCnsKICBmb3IgKGlu
dCBpID0gMDsgaSA8IG47ICsraSkKICAgIHsKCiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGludCAqPiAocCkgPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQg
X192LCBfX3ggPSAocltpXSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0g
KCgoKF9feCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4g
OCkgfCAoKChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikg
PDwgMjQpKTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194
KSk7IF9fdjsgfSkpOwogICAgICBwICs9IDQ7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6
ZV84ICh1bGxvbmdfdCBjb25zdCAqciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgY29uc3QgKnMg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+ICgmcltpXSk7CiAgICAgICpyZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVy
IHVuc2lnbmVkIGludCBfX3YsIF9feCA9IChzWzFdKTsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9w
IChfX3gpKSBfX3YgPSAoKCgoX194KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKF9feCkgJiAw
eDAwZmYwMDAwKSA+PiA4KSB8ICgoKF9feCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKF9feCkg
JiAweDAwMDAwMGZmKSA8PCAyNCkpOyBlbHNlIF9fYXNtX18gKCJic3dhcCAlMCIgOiAiPXIiIChf
X3YpIDogIjAiIChfX3gpKTsgX192OyB9KSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkICo+IChwICsgNCkgPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQg
X192LCBfX3ggPSAoc1swXSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0g
KCgoKF9feCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4g
OCkgfCAoKChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikg
PDwgMjQpKTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194
KSk7IF9fdjsgfSkpOwogICAgICBwICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6
ZV9mbG9hdCAoZmxvYXRfdHlwZSBjb25zdCAqciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkK
ewogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgKytpKQogICAgewogICAgICB1bnNpZ25lZCB4Owog
ICAgICB1bnNpZ25lZCBjb25zdCAqcmVwID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjb25z
dCAqPiAoJnJbaV0pOwogICAgICBpZiAocmVwWzBdID09IGRvdWJsZV9OYU5fcmVwWzBdICYmCiAg
ICAgICAgICByZXBbMV0gPT0gZG91YmxlX05hTl9yZXBbMV0pCiAgICAgICAgeCA9IGZsb2F0X05h
Tl9yZXBbMF07CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBmbG9hdCB5ID0gcltpXTsK
ICAgICAgICAgIHggPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkICY+ICh5KTsKICAgICAgICB9
CgogICAgICAqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBpbnQgKj4gKHApID0gKF9fZXh0ZW5z
aW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fdiwgX194ID0gKHgpOyBpZiAoX19idWls
dGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkgPj4gMjQp
IHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZmMDApIDw8
IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAoImJzd2Fw
ICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0pKTsKICAgICAgcCArPSA0Owog
ICAgfQp9CgppbmxpbmUgdm9pZApsaW5lYXJpemVfZG91YmxlIChkb3VibGVfdHlwZSBjb25zdCAq
ciwgb2N0ZXRfdHlwZSAqJnAsIGludCBuID0gMSkKewogIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
KytpKQogICAgewoKICAgICAgdW5zaWduZWQgY29uc3QgKnMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNvbnN0ICo+ICgmcltpXSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVk
ICo+IChwKSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3YsIF9f
eCA9IChzWzFdKTsgaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX3gpKSBfX3YgPSAoKCgoX194
KSAmIDB4ZmYwMDAwMDApID4+IDI0KSB8ICgoKF9feCkgJiAweDAwZmYwMDAwKSA+PiA4KSB8ICgo
KF9feCkgJiAweDAwMDBmZjAwKSA8PCA4KSB8ICgoKF9feCkgJiAweDAwMDAwMGZmKSA8PCAyNCkp
OyBlbHNlIF9fYXNtX18gKCJic3dhcCAlMCIgOiAiPXIiIChfX3YpIDogIjAiIChfX3gpKTsgX192
OyB9KSk7CiAgICAgICpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkICo+IChwICsgNCkgPSAoX19l
eHRlbnNpb25fXyAoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgX192LCBfX3ggPSAoc1swXSk7IGlm
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAwMDAw
KSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgwMDAw
ZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f
ICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAgICBw
ICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmxpbmVhcml6ZV9zdHJpbmcgKHVuc2lnbmVkIGNo
YXIgY29uc3QgKnIsIG9jdGV0X3R5cGUgKiZwLCBpbnQgbGVuLCBpbnQgbiA9IDEpCnsKICB3aGls
ZSAoLS1uID49IDApCiAgICB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpCiAg
ICAgICAgaWYgKChwW2ldID0gcltpXSkgIT0gMCkKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgd2hpbGUgKCsraSA8IGxlbikKICAgICAgICAg
ICAgICBwW2ldID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIHAg
Kz0gbGVuOwogICAgICByICs9IGxlbiArIDE7CgogICAgfQp9CgoKaW5saW5lIHZvaWQKZGVfbGlu
ZWFyaXplXzIgKG9jdGV0X3R5cGUgY29uc3QgKiZwLCB1bnNpZ25lZCBzaG9ydCAqciwgaW50IG4g
PSAxKQp7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICB7CgogICAgICByW2ldID0g
KF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgc2hvcnQgaW50IF9fdiwgX194ID0g
KCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIHNob3J0IGNvbnN0ICo+IChwKSk7IGlmIChfX2J1
aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgPj4gOCkgJiAweGZmKSB8ICgo
KF9feCkgJiAweGZmKSA8PCA4KSk7IGVsc2UgX19hc21fXyAoInJvcncgJDgsICV3MCIgOiAiPXIi
IChfX3YpIDogIjAiIChfX3gpIDogImNjIik7IF9fdjsgfSkpOwogICAgICBwICs9IDI7CgoKCgoK
CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV8zIChvY3RldF90eXBlIGNvbnN0ICom
cCwgdW5zaWduZWQgaW50ICpyLCBpbnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47
ICsraSkKICAgIHsKICAgICAgbGluX21hcF80IG07CiAgICAgIG0ueFtfaW50XzBdID0gMDsKICAg
ICAgbS54W19pbnRfMV0gPSBwWzBdOwogICAgICBtLnhbX2ludF8yXSA9IHBbMV07CiAgICAgIG0u
eFtfaW50XzNdID0gcFsyXTsKICAgICAgcCArPSAzOwogICAgICByW2ldID0gbS5uOwogICAgfQp9
CgppbmxpbmUgdm9pZApkZV9saW5lYXJpemVfNCAob2N0ZXRfdHlwZSBjb25zdCAqJnAsIHVuc2ln
bmVkIGludCAqciwgaW50IG4gPSAxKQp7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAg
ICB7CgogICAgICByW2ldID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50
IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChwKSk7IGlm
IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAwMDAw
KSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgwMDAw
ZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2FzbV9f
ICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAgICBw
ICs9IDQ7CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV84IChvY3RldF90eXBlIGNv
bnN0IComcCwgdWxsb25nX3QgKnIsIGludCBuID0gMSkKewogIGZvciAoaW50IGkgPSAwOyBpIDwg
bjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgKnMgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkICo+ICgmcltpXSk7CiAgICAgIHNbMF0gPSAoX19leHRlbnNpb25fXyAoeyByZWdpc3RlciB1
bnNpZ25lZCBpbnQgX192LCBfX3ggPSAoKnJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY29uc3Qg
Kj4gKHAgKyA0KSk7IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9f
eCkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAo
KChfX3gpICYgMHgwMDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQp
KTsgZWxzZSBfX2FzbV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9f
djsgfSkpOwogICAgICBzWzFdID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWduZWQg
aW50IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChwKSk7
IGlmIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX194KSkgX192ID0gKCgoKF9feCkgJiAweGZmMDAw
MDAwKSA+PiAyNCkgfCAoKChfX3gpICYgMHgwMGZmMDAwMCkgPj4gOCkgfCAoKChfX3gpICYgMHgw
MDAwZmYwMCkgPDwgOCkgfCAoKChfX3gpICYgMHgwMDAwMDBmZikgPDwgMjQpKTsgZWxzZSBfX2Fz
bV9fICgiYnN3YXAgJTAiIDogIj1yIiAoX192KSA6ICIwIiAoX194KSk7IF9fdjsgfSkpOwogICAg
ICBwICs9IDg7CiAgICB9Cn0KCmlubGluZSB2b2lkCmRlX2xpbmVhcml6ZV9mbG9hdCAob2N0ZXRf
dHlwZSBjb25zdCAqJnAsIGZsb2F0X3R5cGUgKnIsIGludCBuID0gMSkKewogIGZvciAoaW50IGkg
PSAwOyBpIDwgbjsgKytpKQogICAgewoKICAgICAgdW5zaWduZWQgeCA9IChfX2V4dGVuc2lvbl9f
ICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX3YsIF9feCA9ICgqcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjb25zdCAqPiAocCkpOyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9f
diA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDAp
ID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAw
ZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAoImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIg
KF9feCkpOyBfX3Y7IH0pKTsKICAgICAgaWYgKHggPT0gZmxvYXRfTmFOX3JlcFswXSkKICAgICAg
ICByW2ldLnNldF9udWxsKCk7CiAgICAgIGVsc2UKICAgICAgICByW2ldID0gcHJvbW90ZV9kZWNp
bWFsIChyZWludGVycHJldF9jYXN0PGZsb2F0ICY+ICh4KSk7CiAgICAgIHAgKz0gNDsKICAgIH0K
fQoKaW5saW5lIHZvaWQKZGVfbGluZWFyaXplX2RvdWJsZSAob2N0ZXRfdHlwZSBjb25zdCAqJnAs
IGRvdWJsZV90eXBlICpyLCBpbnQgbiA9IDEpCnsKICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsr
aSkKICAgIHsKCiAgICAgIHVuc2lnbmVkICpzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCAq
PiAoJnJbaV0pOwogICAgICBzWzBdID0gKF9fZXh0ZW5zaW9uX18gKHsgcmVnaXN0ZXIgdW5zaWdu
ZWQgaW50IF9fdiwgX194ID0gKCpyZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNvbnN0ICo+IChw
ICsgNCkpOyBpZiAoX19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYg
MHhmZjAwMDAwMCkgPj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194
KSAmIDB4MDAwMGZmMDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVs
c2UgX19hc21fXyAoImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0p
KTsKICAgICAgc1sxXSA9IChfX2V4dGVuc2lvbl9fICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCBf
X3YsIF9feCA9ICgqcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjb25zdCAqPiAocCkpOyBpZiAo
X19idWlsdGluX2NvbnN0YW50X3AgKF9feCkpIF9fdiA9ICgoKChfX3gpICYgMHhmZjAwMDAwMCkg
Pj4gMjQpIHwgKCgoX194KSAmIDB4MDBmZjAwMDApID4+IDgpIHwgKCgoX194KSAmIDB4MDAwMGZm
MDApIDw8IDgpIHwgKCgoX194KSAmIDB4MDAwMDAwZmYpIDw8IDI0KSk7IGVsc2UgX19hc21fXyAo
ImJzd2FwICUwIiA6ICI9ciIgKF9fdikgOiAiMCIgKF9feCkpOyBfX3Y7IH0pKTsKICAgICAgcCAr
PSA4OwogICAgfQp9CgppbmxpbmUgdm9pZApkZV9saW5lYXJpemVfc3RyaW5nIChvY3RldF90eXBl
IGNvbnN0IComcCwgdW5zaWduZWQgY2hhciAqciwgaW50IGxlbiwgaW50IG49MSkKewogIHdoaWxl
ICgtLW4gPj0gMCkKICAgIHsKICAgICAgbWVtY3B5IChyLCBwLCBsZW4pOwogICAgICBwICs9IGxl
bjsKICAgICAgciArPSBsZW47CiAgICAgICpyKysgPSAnXDAnOwoKICAgIH0KfQp0ZW1wbGF0ZSA8
Y2xhc3MgdWludF90PgpjbGFzcyBDUkMKewogIHVpbnRfdCBjcmM7CiAgc3RhdGljIHVpbnRfdCBj
b25zdCB0YWJbMjU2XTsKCiAgdm9pZCBhZGQgKHVuc2lnbmVkIGNoYXIgYykgewoKICAgIGNyYyA9
IHRhYltzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4gKGNyYykgXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyPiAoYykpXQogICAgICBeIGNyYyA+PiA4OyB9CgpwdWJsaWM6
CiAgQ1JDICh1aW50X3QgYyA9IDApIDogY3JjIChjKSB7fQoKICBDUkMgJm9wZXJhdG9yPSAodWlu
dF90IGMpIHsKICAgIGNyYyA9IGM7IHJldHVybiAqdGhpczsgfQoKICBvcGVyYXRvciB1aW50X3Qg
Y29uc3QgJigpIGNvbnN0IHsKICAgIHJldHVybiBjcmM7IH0KCiAgQ1JDICZvcGVyYXRvcis9ICh1
bnNpZ25lZCBjaGFyIGMpIHsKICAgIGFkZCAoYyk7IHJldHVybiAqdGhpczsgfQoKICBDUkMgJm9w
ZXJhdG9yKz0gKHVuc2lnbmVkIHNob3J0IG4pIHsKICAgIGFkZCAobiA+PiA4KTsgYWRkIChuKTsg
cmV0dXJuICp0aGlzOyB9CgogIENSQyAmb3BlcmF0b3IrPSAodW5zaWduZWQgbikgewogICAgYWRk
IChuID4+IDI0KTsgYWRkIChuID4+IDE2KTsgYWRkIChuID4+IDgpOyBhZGQgKG4pOyByZXR1cm4g
KnRoaXM7IH0KCiAgQ1JDICZvcGVyYXRvcis9IChjaGFyIGNvbnN0ICpzKSB7CiAgICB3aGlsZSAo
KnMpIGFkZCAoKnMrKyk7IHJldHVybiAqdGhpczsgfQoKICBDUkMgJmFkZCAodm9pZCBjb25zdCAq
cCwgdW5zaWduZWQgbGVuKSB7CiAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kp
CiAgICAgIGFkZCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhciBjb25zdCAqPiAocClbaV0pOwog
ICAgcmV0dXJuICp0aGlzOyB9CgogIENSQyAodm9pZCBjb25zdCAqcCwgdW5zaWduZWQgbGVuKQog
ICAgOiBjcmMgKDApIHsgYWRkIChwLCBsZW4pOyB9Cn07CgoKdGVtcGxhdGU8PiB1bnNpZ25lZCBz
aG9ydCBjb25zdCBDUkM8dW5zaWduZWQgc2hvcnQ+Ojp0YWJbMjU2XTsKdGVtcGxhdGU8PiB1bnNp
Z25lZCBjb25zdCBDUkM8dW5zaWduZWQ+Ojp0YWJbMjU2XTsKCgp0eXBlZGVmIENSQzx1bnNpZ25l
ZCBzaG9ydD4gQ1JDMTY7CnR5cGVkZWYgQ1JDPHVuc2lnbmVkPiBDUkMzMjsKCgoKCgp2ZXJiX2Rl
c2NfdHlwZSBjb25zdCB2ZXJiX2Rlc2NbXSA9CnsKCiAgeyB2X2hhbmRsZSwgImhhbmRsZSIgfSwg
eyB2X2xvYWQsICJsb2FkIiB9LCB7IHZfc3RvcmUsICJzdG9yZSIgfSwgeyB2X3JlbW92ZSwgInJl
bW92ZSIgfSwKCn07CgphZHZlcmJfZGVzY190eXBlIGNvbnN0IGFkdmVyYl9kZXNjW10gPQp7Cgog
IHsgYXZfbm9uZSwgIm5vbmUiIH0sIHsgYXZfY29udGQsICJjb250ZCIgfSwgeyBhdl9hbnN3ZXIs
ICJhbnN3ZXIiIH0sIHsgYXZfc3luY2gsICJzeW5jaCIgfSwgeyBhdl9yYW5nZSwgInJhbmdlIiB9
LCB7IGF2X2ZpcnN0LCAiZmlyc3QiIH0sIHsgYXZfbGFzdCwgImxhc3QiIH0sCgp9OwoKZmxhZ19k
ZXNjX3R5cGUgY29uc3QgZmxhZ19kZXNjW10gPQp7CgogIHsgc2Zfbm9fYW5zd2VyLCAiYW5zd2Vy
IiB9LCB7IHNmX25vX3N0YXR1cywgInN0YXR1cyIgfSwgeyBzZl9ub19zdWJzY3JpYmUsICJzdWJz
Y3JpYmUiIH0sIHsgc2Zfbm9fcmFuZ2UsICJyYW5nZSIgfSwKCn07CgoKCgpzdHJ1Y3Qgc2VudGVu
Y2VfaGVhZGVyX3R5cGUgOiBwdWJsaWMgc2VudGVuY2VfaGVhZGVyX2RlZnMKewoKCgogIGVudW0g
eyBoZWFkZXJfYnl0ZXMgPSBzZW50ZW5jZV9oZWFkZXJfZGVmczo6aGVhZGVyX2JpdHMgLyA4IH07
CiAgdW5zaWduZWQgY2hhciB4W2hlYWRlcl9ieXRlc107CgogIHZvaWQgc2V0ICh1bnNpZ25lZCB2
ZXJiLCB1bnNpZ25lZCBhZHZlcmIsIHVuc2lnbmVkIGZsYWdzLAogICAgICAgICAgICB1bnNpZ25l
ZCBub3VuLCB1bnNpZ25lZCBjb3VudCkKICB7CiAgICB2ZXJiICY9IHZlcmJfbWFzazsKICAgIGFk
dmVyYiAmPSBhZHZlcmJfbWFzazsKICAgIGZsYWdzICY9IGZsYWdzX21hc2s7CiAgICBub3VuICY9
IG5vdW5fbWFzazsKICAgIGNvdW50ICY9IGNvdW50X21hc2s7CgogICAgeFswXSA9IHZlcmIgPDwg
NSB8IGFkdmVyYiA8PCAxIHwgZmxhZ3MgPj4gNTsKICAgIHhbMV0gPSBmbGFncyA8PCAzIHwgbm91
biA+PiAxMjsKICAgIHhbMl0gPSBub3VuID4+IDQ7CiAgICB4WzNdID0gbm91biA8PCA0IHwgY291
bnQgPj4gMTY7CiAgICB4WzRdID0gY291bnQgPj4gODsKICAgIHhbNV0gPSBjb3VudDsKICB9CgoK
ICBzZW50ZW5jZV9oZWFkZXJfdHlwZSgpIHt9CgoKICBzZW50ZW5jZV9oZWFkZXJfdHlwZSAodW5z
aWduZWQgdmIsIHVuc2lnbmVkIGF2LCB1bnNpZ25lZCBmbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgbm4sIHVuc2lnbmVkIGN0KSB7CiAgICBzZXQgKHZiLCBhdiwgZmwsIG5uLCBj
dCk7IH0KCgogIHZlcmJfdHlwZSB2ZXJiKCkgY29uc3QgewogICAgcmV0dXJuIHN0YXRpY19jYXN0
PHZlcmJfdHlwZT4gKHhbMF0gPj4gNSAmIHZlcmJfbWFzayk7IH0KICBhZHZlcmJfdHlwZSBhZHZl
cmIoKSBjb25zdCB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8YWR2ZXJiX3R5cGU+ICh4WzBdID4+
IDEgJiBhZHZlcmJfbWFzayk7IH0KICB1bnNpZ25lZCBmbGFncygpIGNvbnN0IHsKICAgIHJldHVy
biAoeFswXSA8PCA1IHwgeFsxXSA+PiAzKSAmIGZsYWdzX21hc2s7IH0KICB1bnNpZ25lZCBub3Vu
KCkgY29uc3QgewogICAgcmV0dXJuICh4WzFdIDw8IDEyIHwgeFsyXSA8PCA0IHwgeFszXSA+PiA0
KSAmIG5vdW5fbWFzazsgfQogIHVuc2lnbmVkIGNvdW50KCkgY29uc3QgewogICAgcmV0dXJuICh4
WzNdIDw8IDE2IHwgeFs0XSA8PCA4IHwgeFs1XSkgJiBjb3VudF9tYXNrOyB9Cn07CgoKU2VudGVu
Y2U6OlNlbnRlbmNlIChTZW50ZW5jZSAmcykKICA6IHNlbnRlbmNlX3R5cGUgKHMpCiAgLCBfc2l6
ZSAocy5fc2l6ZSkKICAsIF9kYXRhIChzLl9kYXRhKQp7CiAgbmV3IChzdGF0aWNfY2FzdDxzZW50
ZW5jZV90eXBlICo+ICgmcykpIHNlbnRlbmNlX3R5cGU7CiAgcy5fc2l6ZSA9IDA7CiAgcy5fZGF0
YSA9IDA7Cn0KClNlbnRlbmNlICYKU2VudGVuY2U6Om9wZXJhdG9yPSAoU2VudGVuY2UgJnMpCnsK
ICBzZW50ZW5jZV90eXBlOjpvcGVyYXRvcj0gKHMpOwogIF9zaXplID0gcy5fc2l6ZTsKICBfZGF0
YSA9IHMuX2RhdGE7CiAgbmV3IChzdGF0aWNfY2FzdDxzZW50ZW5jZV90eXBlICo+ICgmcykpIHNl
bnRlbmNlX3R5cGU7CiAgcy5fc2l6ZSA9IDA7CiAgcy5fZGF0YSA9IDA7CiAgcmV0dXJuICp0aGlz
Owp9CgoKdm9pZApTZW50ZW5jZTo6bGluZWFyaXplIChvY3RldF90eXBlIComcCkgY29uc3QKewoK
ICBzZW50ZW5jZV9oZWFkZXJfdHlwZSBoIChfdmVyYiwgX2FkdmVyYiwgX2ZsYWdzLCBfbm91biwg
X2NvdW50KTsKCgogIG9jdGV0X3R5cGUgKnEgPSBwOwogIG1lbWNweSAocSwgaC54LCBzaXplb2Yg
aC54KTsKICBxICs9IHNpemVvZiBoLng7CgogIENSQzE2IGNyYzsKICBpZiAoIWlzX2luZGV4KCkp
CiAgICB7CiAgICAgIHJlY29yZF90eXBlIGNvbnN0ICZkZXNjID0gTGluZ286OnJlY29yZCAoX25v
dW4pOwogICAgICBjcmMgPSBMaW5nbzo6aW5mbyAoZGVzYykuY3JjOwogICAgICBpZiAoJmRlc2Mg
PT0gJnJkX3NvbDNfbm9fcmVjb3JkKQogICAgICAgIGlmIChfc2l6ZSA8IGxpbmVhcl9zaXplKQog
ICAgICAgICAgYmFkX2NvbmRpdGlvbl9mdW5jICgibWVzc2FnZXMuY2MiLCAxMzApOwogICAgICAg
IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IF9zaXplIC0gbGlu
ZWFyX3NpemU7CiAgICAgICAgICAgIG1lbWNweSAocSwgX2RhdGEsIHNpemUpOwogICAgICAgICAg
ICBxICs9IHNpemU7CiAgICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBzd2l0Y2ggKF9jb3Vu
dCkKICAgICAgICAgIHsKICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICBjYXNlIDE6CiAgICAgICAgICAgIDo6bGluZWFyaXplIChkZXNjLCBfZGF0YSwgcSk7CiAg
ICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgc2hvcnQgaSA9IDA7IGkgPCBfY291bnQ7ICsraSkKICAgICAgICAgICAgICA6OmxpbmVhcml6
ZSAoZGVzYywgc3RhdGljX2Nhc3Q8dm9pZCAqKj4gKF9kYXRhKVtpXSwgcSk7CiAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgfQogICAgfQogIGVsc2UKICAgIHsKICAgICAgaW5kZXhfdHlwZSBj
b25zdCAmaW5kZXggPSBMaW5nbzo6aW5kZXggKF9ub3VuKTsKICAgICAgY3JjID0gTGluZ286Omlu
Zm8gKGluZGV4KS5jcmM7CiAgICAgIHN3aXRjaCAoX2NvdW50KQogICAgICAgIHsKICAgICAgICBj
YXNlIDA6CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICA6OmxpbmVh
cml6ZSAoaW5kZXgsIHN0YXRpY19jYXN0PGluZGV4X2Jhc2VfdHlwZSAqPiAoX2RhdGEpLCBxKTsK
ICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZm9yICh1bnNpZ25lZCBz
aG9ydCBpID0gMDsgaSA8IF9jb3VudDsgKytpKQogICAgICAgICAgICA6OmxpbmVhcml6ZSAoaW5k
ZXgsIHN0YXRpY19jYXN0PGluZGV4X2Jhc2VfdHlwZSAqKj4gKF9kYXRhKVtpXSwgcSk7CiAgICAg
ICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgY3JjLmFkZCAocCwgcSAtIHApOwogIGxpbmVh
cml6ZV8yICgmc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgY29uc3QgJj4gKGNyYyksIHEpOwog
IHAgPSBxOwp9CgoKYm9vbApTZW50ZW5jZTo6ZGVfbGluZWFyaXplIChvY3RldF90eXBlIGNvbnN0
IComcCwgdW5zaWduZWQgJm4sCiAgICAgICAgICAgICAgICAgICAgICAgIExvZzo6cHJpb3JpdHkg
ZXJyb3JfcHJpb3JpdHkpCnsKICBzdGF0aWMgY2hhciBjb25zdCBoZXJlW10gPSAiU2VudGVuY2U6
OmRlX2xpbmVhcml6ZSI7CgoKICBmcmVlX2RhdGEoKTsKCgogIGlmIChuIDwgbGluZWFyX3NpemUp
CiAgICB7CiAgICAgIG1haW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3NhZ2UgdG9vIHNo
b3J0LiIsIGhlcmUpOwogICAgICBwICs9IG47CiAgICAgIG4gPSAwOwogICAgICByZXR1cm4gZmFs
c2U7OwogICAgfQoKCiAgb2N0ZXRfdHlwZSBjb25zdCAqcSA9IHA7CiAgc2VudGVuY2VfaGVhZGVy
X3R5cGUgaDsKICBtZW1jcHkgKGgueCwgcSwgc2l6ZW9mIGgueCk7CiAgcSArPSBzaXplb2YgaC54
OwoKCiAgX3ZlcmIgPSBoLnZlcmIoKTsKICBfYWR2ZXJiID0gaC5hZHZlcmIoKTsKICBfZmxhZ3Mg
PSBoLmZsYWdzKCk7CiAgX25vdW4gPSBoLm5vdW4oKTsKICBfY291bnQgPSBoLmNvdW50KCk7CgoK
ICBDUkMxNiBjcmM7CgoKICBpZiAoIShfdmVyYiA8IGVudW1fdmVyYl90eXBlX21heCkpCiAgICB7
CiAgICAgIG1haW5sb2cgKExvZzo6ZXJyLCAiJXM6IGJhZCB2ZXJiICVkLiIsIGhlcmUsIF92ZXJi
KTsKICAgICAgZ290byBiYWQ7CiAgICB9CiAgaWYgKCEoX2FkdmVyYiA8IGVudW1fYWR2ZXJiX3R5
cGVfbWF4KSkKICAgIHsKICAgICAgbWFpbmxvZyAoTG9nOjplcnIsICIlczogYmFkIGFkdmVyYiAl
ZC4iLCBoZXJlLCBfYWR2ZXJiKTsKICAgICAgZ290byBiYWQ7CiAgICB9CgogIGlmICghaXNfaW5k
ZXgoKSkKICAgIHsKICAgICAgcmVjb3JkX3R5cGUgY29uc3QgKmRlc2MgPSBMaW5nbzo6Z2V0X3Jl
Y29yZCAoX25vdW4pOwogICAgICBpZiAoZGVzYyA9PSAwKQogICAgICAgIHsKICAgICAgICAgIG1h
aW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3NhZ2UgJWQgbm90IGtub3duLiIsCiAgICAg
ICAgICAgICAgICAgICBoZXJlLCBfbm91bik7CiAgICAgICAgICBnb3RvIGJhZDsKICAgICAgICB9
CiAgICAgIHJlY29yZF9pbmZvX3QgY29uc3QgJmluZm8gPSBMaW5nbzo6aW5mbyAoKmRlc2MpOwog
ICAgICB1bnNpZ25lZCBzaXplID0gX2NvdW50ICogaW5mby5saW5lYXJfc2l6ZTsKICAgICAgaWYg
KHEgKyBzaXplID4gcCArIG4pCiAgICAgICAgewogICAgICAgICAgY2hhciBidWZbODBdOwogICAg
ICAgICAgbWFpbmxvZyAoZXJyb3JfcHJpb3JpdHksICIlczogTWVzc2FnZSAlcyB0b28gc2hvcnQu
IiwKICAgICAgICAgICAgICAgICAgIGhlcmUsIHRvX3N0cmluZyAoYnVmLCBzaXplb2YgYnVmKSk7
CiAgICAgICAgICBnb3RvIGJhZDsKICAgICAgICB9CiAgICAgIGNyYyA9IGluZm8uY3JjOwogICAg
ICBpZiAoZGVzYyA9PSAmcmRfc29sM19ub19yZWNvcmQpCgoKCiAgICAgICAgaWYgKG4gPCBsaW5l
YXJfc2l6ZSkKICAgICAgICAgIGJhZF9jb25kaXRpb25fZnVuYyAoIm1lc3NhZ2VzLmNjIiwgMjQ0
KTsKICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBu
IC0gbGluZWFyX3NpemU7CiAgICAgICAgICAgIF9kYXRhID0gbWFsbG9jIChzaXplKTsKICAgICAg
ICAgICAgbWVtY3B5IChfZGF0YSwgcSwgc2l6ZSk7CiAgICAgICAgICAgIHEgKz0gc2l6ZTsKICAg
ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHN3aXRjaCAoX2NvdW50KQogICAgICAgICAgewog
ICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICBfZGF0YSA9IDA7CiAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBfZGF0YSA9IG1hbGxvYyAoZGVzYy0+c2l6
ZSk7CiAgICAgICAgICAgIDo6ZGVfbGluZWFyaXplICgqZGVzYywgcSwgX2RhdGEpOwogICAgICAg
ICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIF9kYXRhID0gKHN0YXRp
Y19jYXN0PHZvaWQgKiAqPiAobWFsbG9jICgoX2NvdW50KSAqIHNpemVvZiAodm9pZCAqKSkpKTsK
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBzaG9ydCBpID0gMDsgaSA8IF9jb3VudDsgaSsrKQog
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZvaWQgKml0ZW0gPSBtYWxsb2MgKGRlc2Mt
PnNpemUpOwogICAgICAgICAgICAgICAgOjpkZV9saW5lYXJpemUgKCpkZXNjLCBxLCBpdGVtKTsK
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQgKio+IChfZGF0YSlbaV0gPSBpdGVtOwog
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICB9CiAgZWxz
ZQogICAgewogICAgICBpbmRleF90eXBlIGNvbnN0ICppbmRleCA9IExpbmdvOjpnZXRfaW5kZXgg
KF9ub3VuKTsKICAgICAgaWYgKGluZGV4ID09IDApCiAgICAgICAgewogICAgICAgICAgbWFpbmxv
ZyAoZXJyb3JfcHJpb3JpdHksICIlczogTWVzc2FnZSAlZCBub3Qga25vd24uIiwKICAgICAgICAg
ICAgICAgICAgIGhlcmUsIF9ub3VuKTsKICAgICAgICAgIGdvdG8gYmFkOwogICAgICAgIH0KICAg
ICAgaW5kZXhfaW5mb190IGNvbnN0ICZpbmZvID0gTGluZ286OmluZm8gKCppbmRleCk7CiAgICAg
IHVuc2lnbmVkIHNpemUgPSBfY291bnQgKiBpbmZvLmxpbmVhcl9zaXplOwogICAgICBpZiAocSAr
IHNpemUgPiBwICsgbikKICAgICAgICB7CiAgICAgICAgICBjaGFyIGJ1Zls4MF07CiAgICAgICAg
ICBtYWlubG9nIChlcnJvcl9wcmlvcml0eSwgIiVzOiBNZXNzYWdlICVzIHRvbyBzaG9ydC4iLAog
ICAgICAgICAgICAgICAgICAgaGVyZSwgdG9fc3RyaW5nIChidWYsIHNpemVvZiBidWYpKTsKICAg
ICAgICAgIGdvdG8gYmFkOwogICAgICAgIH0KICAgICAgY3JjID0gaW5mby5jcmM7CiAgICAgIHN3
aXRjaCAoX2NvdW50KQogICAgICAgIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICBfZGF0YSA9
IDA7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfZGF0YSA9IG1h
bGxvYyAoaW5kZXgtPnNpemUpOwogICAgICAgICAgOjpkZV9saW5lYXJpemUgKCppbmRleCwgcSwg
c3RhdGljX2Nhc3Q8aW5kZXhfYmFzZV90eXBlICo+IChfZGF0YSkpOwogICAgICAgICAgYnJlYWs7
CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIF9kYXRhID0gKHN0YXRpY19jYXN0PHZvaWQgKiAq
PiAobWFsbG9jICgoX2NvdW50KSAqIHNpemVvZiAodm9pZCAqKSkpKTsKICAgICAgICAgIGZvciAo
dW5zaWduZWQgc2hvcnQgaSA9IDA7IGkgPCBfY291bnQ7IGkrKykKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHZvaWQgKml0ZW0gPSBtYWxsb2MgKGluZGV4LT5zaXplKTsKICAgICAgICAgICAg
ICA6OmRlX2xpbmVhcml6ZSAoKmluZGV4LCBxLCBzdGF0aWNfY2FzdDxpbmRleF9iYXNlX3R5cGUg
Kj4gKGl0ZW0pKTsKICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkICoqPiAoX2RhdGEpW2ld
ID0gaXRlbTsKICAgICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQog
IGNyYy5hZGQgKHAsIHEgLSBwKTsKICB1bnNpZ25lZCBzaG9ydCBzZW50X2NyYzsKICBkZV9saW5l
YXJpemVfMiAocSwgJnNlbnRfY3JjKTsKICBpZiAoY3JjICE9IHNlbnRfY3JjKQogICAgewogICAg
ICBjaGFyIGJ1Zls4MF07CiAgICAgIG1haW5sb2cgKGVycm9yX3ByaW9yaXR5LCAiJXM6IE1lc3Nh
Z2UgJXMgaW5jb21wYXRpYmxlLiIsCiAgICAgICAgICAgICAgIGhlcmUsIHRvX3N0cmluZyAoYnVm
LCBzaXplb2YgYnVmKSk7CiAgICAgIGdvdG8gYmFkOwogICAgfQogIF9zaXplID0gcSAtIHA7CiAg
biAtPSBfc2l6ZTsKICBwID0gcTsKICByZXR1cm4gdHJ1ZTsKCiBiYWQ6CiAgbiAtPSBxIC0gcDsK
ICBwID0gcTsKICByZXR1cm4gZmFsc2U7Cn0KCgpjaGFyICoKU2VudGVuY2U6OnRvX3N0cmluZyAo
Y2hhciAqcywgdW5zaWduZWQgbikgY29uc3QKewogIGNoYXIgKnogPSBzICsgbiwgKnAgPSBzOwog
IGlmIChfdmVyYiAhPSB2X2hhbmRsZSB8fCBfYWR2ZXJiICE9IGF2X25vbmUgfHwgX2ZsYWdzICE9
IDApCiAgICB7CiAgICAgIHAgKz0gc25wcmludGYgKHAsIHogLSBwLCAiJXMiLCB2ZXJiX2Rlc2Nb
X3ZlcmJdLnRleHQpOwogICAgICBpZiAoX2FkdmVyYiAhPSBhdl9ub25lIHx8IF9mbGFncyAhPSAw
KQogICAgICAgIHsKICAgICAgICAgIGNoYXIgZGVsID0gJygnOwogICAgICAgICAgaWYgKF9hZHZl
cmIgIT0gYXZfbm9uZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHAgKz0gc25wcmludGYg
KHAsIHogLSBwLCAiJWMlcyIsIGRlbCwgYWR2ZXJiX2Rlc2NbX2FkdmVyYl0udGV4dCk7CiAgICAg
ICAgICAgICAgZGVsID0gJywnOwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGYgPSAwOyBmIDwgZW51bV9zZW50ZW5jZV9mbGFnX21heDsgKytmKQogICAgICAgICAgICBpZiAo
X2ZsYWdzICYgMSA8PCBmKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHAgKz0gc25w
cmludGYgKHAsIHogLSBwLCAiJWMlcyIsIGRlbCwgZmxhZ19kZXNjW2ZdLnRleHQpOwogICAgICAg
ICAgICAgICAgZGVsID0gJywnOwogICAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChwIDwgeikK
ICAgICAgICAgICAgKnArKyA9ICcpJzsKICAgICAgICB9CiAgICAgIGlmIChwIDwgeikKICAgICAg
ICAqcCsrID0gJyAnOwogICAgfQogIHNucHJpbnRmIChwLCB6IC0gcCwgIiVzIiwgaXNfaW5kZXgo
KQogICAgICAgICAgICA/IExpbmdvOjppbmRleCAoX25vdW4pLm5hbWUKICAgICAgICAgICAgOiBM
aW5nbzo6cmVjb3JkIChfbm91bikubmFtZSk7CiAgcmV0dXJuIHM7Cn0KCgp1bnNpZ25lZApTZW50
ZW5jZTo6c3RlYWxfZGF0YSAodm9pZCAqKnApCnsKICB1bnNpZ25lZCBuID0gX2NvdW50OwogIGlm
IChwKQogICAgbWVtY3B5IChwLCBhbGxfZGF0YSgpLCBuICogc2l6ZW9mICh2b2lkICopKTsKICBz
d2l0Y2ggKG4pCiAgICB7CiAgICBjYXNlIDA6CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAg
ICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgIGZyZWUgKF9kYXRhKTsKICAgIH0KCgogIG5ldyAo
c3RhdGljX2Nhc3Q8c2VudGVuY2VfdHlwZSAqPiAodGhpcykpIHNlbnRlbmNlX3R5cGU7CiAgX2Rh
dGEgPSAwOwogIF9zaXplID0gbGluZWFyX3NpemU7CiAgcmV0dXJuIG47Cn0KCnZvaWQKU2VudGVu
Y2U6OmRlZXBlbigpCnsKICB1bnNpZ25lZCBzaXplID0gaXNfaW5kZXgoKQogICAgPyBMaW5nbzo6
aW5kZXggKF9ub3VuKS5zaXplCiAgICA6IExpbmdvOjpyZWNvcmQgKF9ub3VuKS5zaXplOwogIHZv
aWQgKipwID0gYWxsX2RhdGEoKTsKICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgX2NvdW50OyAr
K2kpCiAgICB7CiAgICAgIHZvaWQgKnEgPSBtYWxsb2MgKHNpemUpOwogICAgICBtZW1jcHkgKHEs
IHBbaV0sIHNpemUpOwogICAgICBwW2ldID0gcTsKICAgIH0KfQoKdm9pZApTZW50ZW5jZTo6cHJl
dHR5X3ByaW50IChMb2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwKICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciBjb25zdCAqd2hlcmUsIGludCBpbmRlbnQpCnsKICBpZiAoIWxvZyAo
cHJpb3JpdHkpKQogICAgcmV0dXJuOwogIGNoYXIgYnVmWzgwXTsKICBsb2cgKHByaW9yaXR5LCAi
JXMsICVzOiIsIHdoZXJlLCB0b19zdHJpbmcgKGJ1Ziwgc2l6ZW9mIGJ1ZikpOwogIGlmIChpc19p
bmRleCgpKQogICAgOjpwcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIHdoZXJlLCBpbmRlbnQs
CiAgICAgICAgICAgICAgICAgICAgTGluZ286OmluZGV4IChfbm91biksIGFsbF9kYXRhKCksIF9j
b3VudCk7CiAgZWxzZQogICAgOjpwcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIHdoZXJlLCBp
bmRlbnQsCiAgICAgICAgICAgICAgICAgICAgTGluZ286OnJlY29yZCAoX25vdW4pLCBhbGxfZGF0
YSgpLCBfY291bnQpOwp9Cgp2b2lkCk1lc3NhZ2U6OmxpbmVhcml6ZSAob2N0ZXRfdHlwZSAqJnAp
IGNvbnN0CnsKICBsaW5lYXJpemVfMiAoJl9teV9yZWYsIHApOwogIGxpbmVhcml6ZV8yICgmX3ly
X3JlZiwgcCk7CiAgZm9yIChRdWV1ZTxTZW50ZW5jZT46Okl0IHFpICgqdGhpcyk7IHFpKCk7ICsr
cWkpCiAgICBxaS0+bGluZWFyaXplIChwKTsKfQoKYm9vbApNZXNzYWdlOjpkZV9saW5lYXJpemUg
KHBhcnRuZXJfaWRfdHlwZSBwaWQsCiAgICAgICAgICAgICAgICAgICAgICAgb2N0ZXRfdHlwZSBj
b25zdCAqJnAsIHVuc2lnbmVkIG4sCiAgICAgICAgICAgICAgICAgICAgICAgTG9nOjpwcmlvcml0
eSBlcnJvcl9wcmlvcml0eSkKewogIF9zaXplID0gbGluZWFyX3NpemU7CiAgX3NlbmRlciA9IHBp
ZDsKICBkZV9saW5lYXJpemVfMiAocCwgJl9teV9yZWYpOyBuIC09IDI7CiAgZGVfbGluZWFyaXpl
XzIgKHAsICZfeXJfcmVmKTsgbiAtPSAyOwoKCiAgd2hpbGUgKGludCAobikgPiAwKQogICAgewog
ICAgICBTZW50ZW5jZSAqcyA9IG5ldyBTZW50ZW5jZTsKICAgICAgaWYgKCFzLT5kZV9saW5lYXJp
emUgKHAsIG4sIGVycm9yX3ByaW9yaXR5KSkKICAgICAgICB7CiAgICAgICAgICBkZWxldGUgczsK
ICAgICAgICAgIGZyZWVfZGF0YSgpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0K
ICAgICAgYWRkICgqcyk7CiAgICB9CiAgcmV0dXJuIHRydWU7Cn0KCnZvaWQKTWVzc2FnZTo6ZnJl
ZV9kYXRhKCkKewogIGZvciAoU2VudGVuY2UgKnM7IChzID0gcmVtb3ZlKCkpICE9IDA7IGRlbGV0
ZSBzKQogICAgcy0+ZnJlZV9kYXRhKCk7Cn0KCnZvaWQKTWVzc2FnZTo6cHJldHR5X3ByaW50IChM
b2cgJmxvZywgTG9nOjpwcmlvcml0eSBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICBj
aGFyIGNvbnN0ICp3aGVyZSwgaW50IGluZGVudCkKewogIGlmICghbG9nIChwcmlvcml0eSkpCiAg
ICByZXR1cm47CiAgbG9nIChwcmlvcml0eSwgIiVzLCB5cj0lZCwgbXI9JWQ6Iiwgd2hlcmUsIF95
cl9yZWYsIF9teV9yZWYpOwogIHVuc2lnbmVkIGkgPSAwOwogIGZvciAoUXVldWU8U2VudGVuY2U+
OjpJdCBxaSAoKnRoaXMpOyBxaSgpOyArK3FpKQogICAgewogICAgICBjaGFyIGJ1ZlszMl07CiAg
ICAgIHNucHJpbnRmIChidWYsIHNpemVvZiBidWYsICJTZW50ZW5jZSAlZCIsIGkrKyk7CiAgICAg
IHFpLT5wcmV0dHlfcHJpbnQgKGxvZywgcHJpb3JpdHksIGJ1ZiwgMik7CiAgICB9Cn0KCgoKTWVz
c2FnZTo6SGFuZGxlcjo6fkhhbmRsZXIoKSB7fQo=


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